diff options
Diffstat (limited to 'StoneIsland')
723 files changed, 8452 insertions, 105121 deletions
diff --git a/StoneIsland/config.xml b/StoneIsland/config.xml index 12acb6ad..1a0f6d90 100755 --- a/StoneIsland/config.xml +++ b/StoneIsland/config.xml @@ -1,11 +1,11 @@ <?xml version='1.0' encoding='utf-8'?> -<widget android-versionCode="6091" id="us.okfoc.stoneisland" version="0.9.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> +<widget android-versionCode="6092" id="us.okfoc.stoneisland" version="0.9.2" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <name>Stone Island</name> <description> Stone Island </description> <author email="julescarbon@gmail.com" href="http://asdf.us/"> - Jules Laplace + Jules LaPlace </author> <content src="index.html" /> <access origin="*" /> @@ -28,7 +28,7 @@ <preference name="StatusBarStyle" value="default" /> <preference name="SplashMaintainAspectRatio" value="true" /> <preference name="ShowSplashScreenSpinner" value="false" /> - <preference name="AutoHideSplashScreen" value="false" /> + <preference name="AutoHideSplashScreen" value="true" /> <preference name="AllowInlineMediaPlayback" value="true" /> <platform name="android"> <allow-intent href="market:*" /> @@ -40,13 +40,27 @@ <allow-intent href="itms-apps:*" /> <preference name="BackupWebStorage" value="local" /> <preference name="KeyboardDisplayRequiresUserAction" value="false" /> + <splash src="res/screen/ios/Default@2x~universal~anyany.png" /> + <splash height="480" src="res/screen/ios/Default~iphone.png" width="320" /> + <splash height="960" src="res/screen/ios/Default@2x~iphone.png" width="640" /> + <splash height="1024" src="res/screen/ios/Default-Portrait~ipad.png" width="768" /> + <splash height="2048" src="res/screen/ios/Default-Portrait@2x~ipad.png" width="1536" /> + <splash height="768" src="res/screen/ios/Default-Landscape~ipad.png" width="1024" /> + <splash height="1536" src="res/screen/ios/Default-Landscape@2x~ipad.png" width="2048" /> + <splash height="1136" src="res/screen/ios/Default-568h@2x~iphone.png" width="640" /> + <splash height="1334" src="res/screen/ios/Default-667h.png" width="750" /> + <splash height="2208" src="res/screen/ios/Default-736h.png" width="1242" /> </platform> + <feature name="StatusBar"> + <param name="ios-package" onload="true" value="CDVStatusBar" /> + </feature> <engine name="android" spec="^6.2.3" /> - <engine name="ios" spec="^4.4.0" /> + <engine name="ios" spec="^4.5.2" /> + <plugin name="cordova-plugin-whitelist" spec="1" /> + <plugin name="cordova-plugin-statusbar" spec="^2.2.3" /> <plugin name="cordova-plugin-app-name" spec="^1.0.4"> <variable name="APP_NAME" value="Stone Island" /> </plugin> - <plugin name="cordova-plugin-console" spec="~1.0.4" /> <plugin name="cordova-plugin-customurlscheme" spec="~4.2.0"> <variable name="URL_SCHEME" value="stoneisland" /> </plugin> @@ -56,9 +70,9 @@ <plugin name="cordova-plugin-inappbrowser" spec="~1.5.0" /> <plugin name="cordova-plugin-network-information" spec="~1.3.0" /> <plugin name="cordova-plugin-splashscreen" spec="~4.0.0" /> - <plugin name="cordova-plugin-statusbar" spec="^2.2.3" /> - <plugin name="cordova-plugin-whitelist" spec="1" /> <plugin name="cordova-plugin-x-socialsharing" spec="~5.1.3" /> <plugin name="ionic-plugin-keyboard" spec="~2.2.1" /> - <plugin name="phonegap-plugin-push" spec="^2.0.0" /> + <plugin name="phonegap-plugin-push" spec="^1.9.2"> + <variable name="SENDER_ID" value="85075801930" /> + </plugin> </widget> diff --git a/StoneIsland/package-lock.json b/StoneIsland/package-lock.json index 617a395b..3ddc93a0 100644 --- a/StoneIsland/package-lock.json +++ b/StoneIsland/package-lock.json @@ -137,11 +137,6 @@ "version": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" }, - "babel-plugin-add-header-comment": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/babel-plugin-add-header-comment/-/babel-plugin-add-header-comment-1.0.3.tgz", - "integrity": "sha1-URxJAQYmQNWkgLSsPt1pRBlYUOw=" - }, "balanced-match": { "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" @@ -896,22 +891,22 @@ } }, "cordova-ios": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-4.4.0.tgz", - "integrity": "sha1-XNbvciRQXbVYRG5GN62X0IeMdO8=", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-4.5.2.tgz", + "integrity": "sha512-c5yXY5b/ONRSe+IoBOz9MqcPNmTa/AdnwSOPelm/izRV0uqNg9mW4Fe9W8mRCMBzfCFQFL4qJcCC4Bi0VLg4mQ==", "requires": { - "cordova-common": "2.0.2", - "ios-sim": "5.0.12", + "cordova-common": "2.1.0", + "ios-sim": "6.1.2", "nopt": "3.0.6", "plist": "1.2.0", - "q": "1.4.1", + "q": "1.5.0", "shelljs": "0.5.3", "xcode": "0.9.3", "xml-escape": "1.1.0" }, "dependencies": { "abbrev": { - "version": "1.0.9", + "version": "1.1.1", "bundled": true }, "ansi": { @@ -919,7 +914,7 @@ "bundled": true }, "balanced-match": { - "version": "0.4.2", + "version": "1.0.0", "bundled": true }, "base64-js": { @@ -927,28 +922,28 @@ "bundled": true }, "big-integer": { - "version": "1.6.17", + "version": "1.6.25", "bundled": true }, "bplist-creator": { - "version": "0.0.4", + "version": "0.0.7", "bundled": true, "requires": { - "stream-buffers": "0.2.6" + "stream-buffers": "2.2.0" } }, "bplist-parser": { "version": "0.1.1", "bundled": true, "requires": { - "big-integer": "1.6.17" + "big-integer": "1.6.25" } }, "brace-expansion": { - "version": "1.1.6", + "version": "1.1.8", "bundled": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -957,7 +952,7 @@ "bundled": true }, "cordova-common": { - "version": "2.0.2", + "version": "2.1.0", "bundled": true, "requires": { "ansi": "0.3.1", @@ -965,11 +960,11 @@ "cordova-registry-mapper": "1.1.15", "elementtree": "0.1.6", "glob": "5.0.15", - "minimatch": "3.0.3", - "osenv": "0.1.3", + "minimatch": "3.0.4", + "osenv": "0.1.4", "plist": "1.2.0", - "q": "1.4.1", - "semver": "5.3.0", + "q": "1.5.0", + "semver": "5.4.1", "shelljs": "0.5.3", "underscore": "1.8.3", "unorm": "1.4.1" @@ -992,7 +987,7 @@ "requires": { "inflight": "1.0.6", "inherits": "2.0.3", - "minimatch": "3.0.3", + "minimatch": "3.0.4", "once": "1.4.0", "path-is-absolute": "1.0.1" } @@ -1010,13 +1005,13 @@ "bundled": true }, "ios-sim": { - "version": "5.0.12", + "version": "6.1.2", "bundled": true, "requires": { "bplist-parser": "0.0.6", "nopt": "1.0.9", "plist": "1.2.0", - "simctl": "0.1.0" + "simctl": "1.1.1" }, "dependencies": { "bplist-parser": { @@ -1027,7 +1022,7 @@ "version": "1.0.9", "bundled": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1.1.1" } } } @@ -1037,21 +1032,17 @@ "bundled": true }, "minimatch": { - "version": "3.0.3", + "version": "3.0.4", "bundled": true, "requires": { - "brace-expansion": "1.1.6" + "brace-expansion": "1.1.8" } }, - "node-uuid": { - "version": "1.4.7", - "bundled": true - }, "nopt": { "version": "3.0.6", "bundled": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1.1.1" } }, "once": { @@ -1070,7 +1061,7 @@ "bundled": true }, "osenv": { - "version": "0.1.3", + "version": "0.1.4", "bundled": true, "requires": { "os-homedir": "1.0.2", @@ -1082,7 +1073,7 @@ "bundled": true }, "pegjs": { - "version": "0.9.0", + "version": "0.10.0", "bundled": true }, "plist": { @@ -1096,7 +1087,7 @@ } }, "q": { - "version": "1.4.1", + "version": "1.5.0", "bundled": true }, "sax": { @@ -1104,7 +1095,7 @@ "bundled": true }, "semver": { - "version": "5.3.0", + "version": "5.4.1", "bundled": true }, "shelljs": { @@ -1112,7 +1103,7 @@ "bundled": true }, "simctl": { - "version": "0.1.0", + "version": "1.1.1", "bundled": true, "requires": { "shelljs": "0.2.6", @@ -1126,22 +1117,35 @@ } }, "simple-plist": { - "version": "0.1.4", + "version": "0.2.1", "bundled": true, "requires": { - "bplist-creator": "0.0.4", - "bplist-parser": "0.0.6", - "plist": "1.2.0" + "bplist-creator": "0.0.7", + "bplist-parser": "0.1.1", + "plist": "2.0.1" }, "dependencies": { - "bplist-parser": { - "version": "0.0.6", + "base64-js": { + "version": "1.1.2", + "bundled": true + }, + "plist": { + "version": "2.0.1", + "bundled": true, + "requires": { + "base64-js": "1.1.2", + "xmlbuilder": "8.2.2", + "xmldom": "0.1.27" + } + }, + "xmlbuilder": { + "version": "8.2.2", "bundled": true } } }, "stream-buffers": { - "version": "0.2.6", + "version": "2.2.0", "bundled": true }, "tail": { @@ -1160,73 +1164,21 @@ "version": "1.0.2", "bundled": true }, + "uuid": { + "version": "3.0.1", + "bundled": true + }, "wrappy": { "version": "1.0.2", "bundled": true }, "xcode": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-0.9.3.tgz", - "integrity": "sha1-kQqJwWrubMC0LKgFptC0z4chHPM=", + "bundled": true, "requires": { "pegjs": "0.10.0", "simple-plist": "0.2.1", "uuid": "3.0.1" - }, - "dependencies": { - "base64-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz", - "integrity": "sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg=" - }, - "bplist-creator": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", - "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=", - "requires": { - "stream-buffers": "2.2.0" - } - }, - "pegjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", - "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" - }, - "plist": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz", - "integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=", - "requires": { - "base64-js": "1.1.2", - "xmlbuilder": "8.2.2", - "xmldom": "0.1.27" - } - }, - "simple-plist": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz", - "integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=", - "requires": { - "bplist-creator": "0.0.7", - "bplist-parser": "0.1.1", - "plist": "2.0.1" - } - }, - "stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" - }, - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=" - }, - "xmlbuilder": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=" - } } }, "xml-escape": { @@ -1324,11 +1276,6 @@ "xml2js": "0.4.19" } }, - "cordova-plugin-console": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cordova-plugin-console/-/cordova-plugin-console-1.0.7.tgz", - "integrity": "sha1-ibepLtHDNYiN/ADZAtxBcgHPOws=" - }, "cordova-plugin-customurlscheme": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/cordova-plugin-customurlscheme/-/cordova-plugin-customurlscheme-4.2.0.tgz", @@ -2191,11 +2138,6 @@ } } }, - "install": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/install/-/install-0.8.9.tgz", - "integrity": "sha1-n0tcDRhR74cunfheT3Fi1OXc2+0=" - }, "interpret": { "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", "integrity": "sha1-1Xn7f2k7hYAElHrzn6DbSfeVYCw=" @@ -4234,13 +4176,9 @@ "integrity": "sha1-9q76LjzlYWkgjlIXnf5B+JFBo2k=" }, "phonegap-plugin-push": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/phonegap-plugin-push/-/phonegap-plugin-push-2.0.0.tgz", - "integrity": "sha1-FhKJtP3r0LUqTVoQUg0VYIPuz3M=", - "requires": { - "babel-plugin-add-header-comment": "1.0.3", - "install": "0.8.9" - } + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/phonegap-plugin-push/-/phonegap-plugin-push-1.9.2.tgz", + "integrity": "sha1-3PktbNuZLcs3iUCyIbfwjoKcn8E=" }, "pinkie": { "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", diff --git a/StoneIsland/package.json b/StoneIsland/package.json index ae147cb7..e5bd4d5b 100644 --- a/StoneIsland/package.json +++ b/StoneIsland/package.json @@ -1,59 +1,59 @@ { - "name": "stone-island", - "version": "1.0.0", - "description": "", - "main": "index.js", - "dependencies": { - "cordova": "^6.4.0", - "cordova-android": "^6.2.3", - "cordova-ios": "^4.4.0", - "cordova-plugin-app-name": "^1.0.4", - "cordova-plugin-console": "~1.0.4", - "cordova-plugin-customurlscheme": "~4.2.0", - "cordova-plugin-device": "~1.1.3", - "cordova-plugin-dialogs": "~1.3.0", - "cordova-plugin-geolocation": "~2.4.0", - "cordova-plugin-inappbrowser": "~1.5.0", - "cordova-plugin-network-information": "~1.3.0", - "cordova-plugin-splashscreen": "~4.0.0", - "cordova-plugin-statusbar": "^2.2.3", - "cordova-plugin-whitelist": "1", - "cordova-plugin-x-socialsharing": "~5.1.3", - "ionic-plugin-keyboard": "~2.2.1", - "ios-deploy": "^1.9.0", - "phonegap-plugin-push": "^2.0.0" + "name": "stone-island", + "version": "1.0.0", + "description": "", + "main": "index.js", + "dependencies": { + "cordova": "^6.4.0", + "cordova-android": "^6.2.3", + "cordova-ios": "^4.5.2", + "cordova-plugin-app-name": "^1.0.4", + "cordova-plugin-customurlscheme": "~4.2.0", + "cordova-plugin-device": "~1.1.3", + "cordova-plugin-dialogs": "~1.3.0", + "cordova-plugin-geolocation": "~2.4.0", + "cordova-plugin-inappbrowser": "~1.5.0", + "cordova-plugin-network-information": "~1.3.0", + "cordova-plugin-splashscreen": "~4.0.0", + "cordova-plugin-statusbar": "^2.2.3", + "cordova-plugin-whitelist": "1", + "cordova-plugin-x-socialsharing": "~5.1.3", + "ionic-plugin-keyboard": "~2.2.1", + "ios-deploy": "^1.9.0", + "phonegap-plugin-push": "^1.9.2" + }, + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "cordova emulate ios --target=\"iPhone-7, 10.2\"" + }, + "author": "", + "license": "UNLICENSED", + "cordova": { + "plugins": { + "cordova-plugin-whitelist": {}, + "cordova-plugin-statusbar": {}, + "cordova-plugin-app-name": { + "APP_NAME": "Stone Island" + }, + "cordova-plugin-customurlscheme": { + "URL_SCHEME": "stoneisland" + }, + "cordova-plugin-device": {}, + "cordova-plugin-dialogs": {}, + "cordova-plugin-geolocation": {}, + "cordova-plugin-inappbrowser": {}, + "cordova-plugin-network-information": {}, + "cordova-plugin-splashscreen": {}, + "cordova-plugin-x-socialsharing": {}, + "ionic-plugin-keyboard": {}, + "phonegap-plugin-push": { + "SENDER_ID": "85075801930" + } }, - "devDependencies": {}, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "start": "cordova emulate ios --target=\"iPhone-7, 10.2\"" - }, - "author": "", - "license": "UNLICENSED", - "cordova": { - "plugins": { - "cordova-plugin-whitelist": {}, - "cordova-plugin-statusbar": {}, - "cordova-plugin-app-name": { - "APP_NAME": "Stone Island" - }, - "cordova-plugin-console": {}, - "cordova-plugin-customurlscheme": { - "URL_SCHEME": "stoneisland" - }, - "cordova-plugin-device": {}, - "cordova-plugin-dialogs": {}, - "cordova-plugin-geolocation": {}, - "cordova-plugin-inappbrowser": {}, - "cordova-plugin-network-information": {}, - "cordova-plugin-splashscreen": {}, - "cordova-plugin-x-socialsharing": {}, - "ionic-plugin-keyboard": {}, - "phonegap-plugin-push": {} - }, - "platforms": [ - "android", - "ios" - ] - } + "platforms": [ + "android", + "ios" + ] + } }
\ No newline at end of file diff --git a/StoneIsland/platforms/android/AndroidManifest.xml b/StoneIsland/platforms/android/AndroidManifest.xml index bb6ffaef..75322df7 100755 --- a/StoneIsland/platforms/android/AndroidManifest.xml +++ b/StoneIsland/platforms/android/AndroidManifest.xml @@ -23,23 +23,36 @@ </activity> <activity android:exported="true" android:name="com.adobe.phonegap.push.PushHandlerActivity" android:permission="${applicationId}.permission.PushHandlerActivity" /> <receiver android:name="com.adobe.phonegap.push.BackgroundActionButtonHandler" /> - <receiver android:name="com.adobe.phonegap.push.PushDismissedHandler" /> - <service android:name="com.adobe.phonegap.push.FCMService"> + <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.firebase.MESSAGING_EVENT" /> + <action android:name="com.google.android.c2dm.intent.RECEIVE" /> + <category android:name="${applicationId}" /> + </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:name="com.adobe.phonegap.push.PushInstanceIDListenerService"> + <service android:exported="false" android:name="com.adobe.phonegap.push.PushInstanceIDListenerService"> <intent-filter> - <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> + <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.WRITE_EXTERNAL_STORAGE" /> <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" /> + <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" /> + <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> + <uses-permission android:name="${applicationId}.permission.PushHandlerActivity" /> + <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> + <permission android:name="${applicationId}.permission.PushHandlerActivity" android:protectionLevel="signature" /> </manifest> diff --git a/StoneIsland/platforms/android/android.json b/StoneIsland/platforms/android/android.json index 1a860dfb..3e69085c 100755 --- a/StoneIsland/platforms/android/android.json +++ b/StoneIsland/platforms/android/android.json @@ -37,10 +37,6 @@ "count": 1 }, { - "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=\"Geolocation\"><param name=\"android-package\" value=\"org.apache.cordova.geolocation.Geolocation\" /></feature>", "count": 1 }, @@ -53,6 +49,10 @@ "count": 1 }, { + "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=\"PushNotification\"><param name=\"android-package\" value=\"com.adobe.phonegap.push.PushPlugin\" /></feature>", "count": 1 } @@ -71,15 +71,19 @@ "count": 1 }, { - "xml": "<receiver android:name=\"com.adobe.phonegap.push.PushDismissedHandler\" />", + "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=\"${applicationId}\" /></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:name=\"com.adobe.phonegap.push.FCMService\"><intent-filter><action android:name=\"com.google.firebase.MESSAGING_EVENT\" /></intent-filter></service>", + "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:name=\"com.adobe.phonegap.push.PushInstanceIDListenerService\"><intent-filter><action android:name=\"com.google.firebase.INSTANCE_ID_EVENT\" /></intent-filter></service>", + "xml": "<service android:exported=\"false\" android:name=\"com.adobe.phonegap.push.RegistrationIntentService\" />", "count": 1 } ], @@ -99,6 +103,26 @@ { "xml": "<uses-permission android:name=\"android.permission.VIBRATE\" />", "count": 1 + }, + { + "xml": "<uses-permission android:name=\"com.google.android.c2dm.permission.RECEIVE\" />", + "count": 1 + }, + { + "xml": "<uses-permission android:name=\"${applicationId}.permission.C2D_MESSAGE\" />", + "count": 1 + }, + { + "xml": "<uses-permission android:name=\"${applicationId}.permission.PushHandlerActivity\" />", + "count": 1 + }, + { + "xml": "<permission android:name=\"${applicationId}.permission.C2D_MESSAGE\" android:protectionLevel=\"signature\" />", + "count": 1 + }, + { + "xml": "<permission android:name=\"${applicationId}.permission.PushHandlerActivity\" android:protectionLevel=\"signature\" />", + "count": 1 } ], "/*/application/activity": [], @@ -143,7 +167,12 @@ }, "res/values/strings.xml": { "parents": { - "/resources": [] + "/resources": [ + { + "xml": "<string name=\"google_app_id\">85075801930</string>", + "count": 1 + } + ] } }, "config.xml": { @@ -175,9 +204,6 @@ "cordova-plugin-whitelist": { "PACKAGE_NAME": "us.okfoc.stoneisland" }, - "cordova-plugin-console": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, "cordova-plugin-device": { "PACKAGE_NAME": "us.okfoc.stoneisland" }, @@ -187,9 +213,6 @@ "cordova-plugin-dialogs": { "PACKAGE_NAME": "us.okfoc.stoneisland" }, - "cordova-plugin-splashscreen": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, "cordova-plugin-compat": { "PACKAGE_NAME": "us.okfoc.stoneisland" }, @@ -206,10 +229,11 @@ "APP_NAME": "Stone Island", "PACKAGE_NAME": "us.okfoc.stoneisland" }, - "phonegap-plugin-push": { + "cordova-plugin-splashscreen": { "PACKAGE_NAME": "us.okfoc.stoneisland" }, - "cordova-plugin-wkwebview-engine": { + "phonegap-plugin-push": { + "SENDER_ID": "85075801930", "PACKAGE_NAME": "us.okfoc.stoneisland" } }, @@ -282,14 +306,6 @@ ] }, { - "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js", - "id": "cordova-plugin-splashscreen.SplashScreen", - "pluginId": "cordova-plugin-splashscreen", - "clobbers": [ - "navigator.splashscreen" - ] - }, - { "file": "plugins/cordova-plugin-geolocation/www/android/geolocation.js", "id": "cordova-plugin-geolocation.geolocation", "pluginId": "cordova-plugin-geolocation", @@ -321,6 +337,14 @@ ] }, { + "id": "cordova-plugin-splashscreen.SplashScreen", + "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js", + "pluginId": "cordova-plugin-splashscreen", + "clobbers": [ + "navigator.splashscreen" + ] + }, + { "id": "phonegap-plugin-push.PushNotification", "file": "plugins/phonegap-plugin-push/www/push.js", "pluginId": "phonegap-plugin-push", @@ -334,17 +358,15 @@ "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", "cordova-plugin-statusbar": "2.2.3", "cordova-plugin-app-name": "1.0.4", - "phonegap-plugin-push": "2.0.0", - "cordova-plugin-wkwebview-engine": "1.1.3" + "cordova-plugin-splashscreen": "4.0.3", + "phonegap-plugin-push": "1.9.2" } }
\ 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 1b6d56ac..8f70abd6 100755 --- a/StoneIsland/platforms/android/assets/www/cordova_plugins.js +++ b/StoneIsland/platforms/android/assets/www/cordova_plugins.js @@ -67,14 +67,6 @@ module.exports = [ ] }, { - "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js", - "id": "cordova-plugin-splashscreen.SplashScreen", - "pluginId": "cordova-plugin-splashscreen", - "clobbers": [ - "navigator.splashscreen" - ] - }, - { "file": "plugins/cordova-plugin-geolocation/www/android/geolocation.js", "id": "cordova-plugin-geolocation.geolocation", "pluginId": "cordova-plugin-geolocation", @@ -106,6 +98,14 @@ module.exports = [ ] }, { + "id": "cordova-plugin-splashscreen.SplashScreen", + "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js", + "pluginId": "cordova-plugin-splashscreen", + "clobbers": [ + "navigator.splashscreen" + ] + }, + { "id": "phonegap-plugin-push.PushNotification", "file": "plugins/phonegap-plugin-push/www/push.js", "pluginId": "phonegap-plugin-push", @@ -121,18 +121,16 @@ module.exports.metadata = "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", "cordova-plugin-statusbar": "2.2.3", "cordova-plugin-app-name": "1.0.4", - "phonegap-plugin-push": "2.0.0", - "cordova-plugin-wkwebview-engine": "1.1.3" + "cordova-plugin-splashscreen": "4.0.3", + "phonegap-plugin-push": "1.9.2" }; // BOTTOM OF METADATA });
\ No newline at end of file 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..5beaa5fd 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 @@ -1,4 +1,5 @@ -cordova.define("cordova-plugin-splashscreen.SplashScreen", function(require, exports, module) { /* +cordova.define("cordova-plugin-splashscreen.SplashScreen", function(require, exports, module) { +/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file 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 index 7234d474..a5315486 100644 --- 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 @@ -1,16 +1,4 @@ cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) { -/** -* This file has been generated by Babel. -* -* DO NOT EDIT IT DIRECTLY -* -* Edit the JS source file src/js/push.js -**/'use strict'; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - /* global cordova:false */ /* globals window */ @@ -20,358 +8,322 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var exec = cordova.require('cordova/exec'); -var PushNotification = function () { - /** - * PushNotification constructor. - * - * @param {Object} options to initiate Push Notifications. - * @return {PushNotification} instance that can be monitored and cancelled. - */ - function PushNotification(options) { - var _this = this; - - _classCallCheck(this, PushNotification); +/** + * PushNotification constructor. + * + * @param {Object} options to initiate Push Notifications. + * @return {PushNotification} instance that can be monitored and cancelled. + */ - this.handlers = { - registration: [], - notification: [], - error: [] +var PushNotification = function(options) { + this._handlers = { + 'registration': [], + 'notification': [], + 'error': [] }; // require options parameter if (typeof options === 'undefined') { - throw new Error('The options argument is required.'); + throw new Error('The options argument is required.'); } // store the options to this object instance this.options = options; // triggered on registration and notification - var success = function success(result) { - if (result && typeof result.registrationId !== 'undefined') { - _this.emit('registration', result); - } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { - var executeFuctionOrEmitEventByName = function executeFuctionOrEmitEventByName(functionName, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } + var that = this; + var success = function(result) { + if (result && typeof result.registrationId !== 'undefined') { + that.emit('registration', result); + } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { + var executeFuctionOrEmitEventByName = function(callbackName, context, arg) { + var namespaces = callbackName.split('.'); + var func = namespaces.pop(); + for (var i = 0; i < namespaces.length; i++) { + context = context[namespaces[i]]; + } - var namespaces = functionName.split('.'); - var func = namespaces.pop(); - for (var i = 0; i < namespaces.length; i++) { - context = context[namespaces[i]]; - } + if (typeof context[func] === 'function') { + context[func].call(context, arg); + } else { + that.emit(callbackName, arg); + } + }; - if (typeof context[func] === 'function') { - context[func].call(context, args); - } else { - _this.emit(functionName, args); - } - }; - - executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); - } else if (result) { - _this.emit('notification', result); - } + executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); + } else if (result) { + that.emit('notification', result); + } }; // triggered on error - var fail = function fail(msg) { - var e = typeof msg === 'string' ? new Error(msg) : msg; - _this.emit('error', e); + 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]); + setTimeout(function() { + exec(success, fail, 'PushNotification', 'init', [options]); }, 10); - } - - /** - * Unregister from push notifications - */ - +}; - _createClass(PushNotification, [{ - key: 'unregister', - value: function unregister(successCallback) { - var _this2 = this; +/** + * Unregister from push notifications + */ - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var options = arguments[2]; +PushNotification.prototype.unregister = function(successCallback, errorCallback, options) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof 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'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.unregister failure: success callback parameter must be a function'); return; - } + } - var cleanHandlersAndPassThrough = function cleanHandlersAndPassThrough() { + var that = this; + var cleanHandlersAndPassThrough = function() { if (!options) { - _this2.handlers = { - registration: [], - notification: [], - error: [] - }; + that._handlers = { + 'registration': [], + 'notification': [], + 'error': [] + }; } successCallback(); - }; - - exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); - } + }; - /** - * subscribe to a topic - * @param {String} topic topic to subscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ + exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); +}; - }, { - key: 'subscribe', - value: function subscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; +/** + * subscribe to a topic + * @param {String} topic topic to subscribe + * @param {Function} successCallback success callback + * @param {Function} errorCallback error callback + * @return {void} + */ +PushNotification.prototype.subscribe = function(topic, successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'failure parameter not a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.subscribe failure: failure parameter not a function'); return; - } + } - if (typeof successCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'success callback parameter must be a function'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.subscribe failure: success callback parameter must be a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); } - /** - * unsubscribe to a topic - * @param {String} topic topic to unsubscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ + exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); +}; - }, { - key: 'unsubscribe', - value: function unsubscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; +/** + * unsubscribe to a topic + * @param {String} topic topic to unsubscribe + * @param {Function} successCallback success callback + * @param {Function} errorCallback error callback + * @return {void} + */ +PushNotification.prototype.unsubscribe = function(topic, successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { + if (typeof errorCallback !== 'function') { console.log('PushNotification.unsubscribe failure: failure parameter not a function'); return; - } + } - if (typeof successCallback !== 'function') { - console.log('PushNotification.unsubscribe failure: ' + 'success callback parameter must be a function'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.unsubscribe failure: success callback parameter must be a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); } - /** - * Call this to set the application icon badge - */ + exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); +}; - }, { - key: 'setApplicationIconBadgeNumber', - value: function setApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var badge = arguments[2]; +/** + * Call this to set the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: failure ' + 'parameter not a function'); - return; - } +PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: success ' + 'callback parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{ badge: badge }]); + if (typeof successCallback !== 'function') { + console.log('PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function'); + return; } - /** - * Get the application icon badge - */ + exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{badge: badge}]); +}; - }, { - key: 'getApplicationIconBadgeNumber', - value: function getApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; +/** + * Get the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: failure ' + 'parameter not a function'); - return; - } +PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: success ' + 'callback parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); + if (typeof successCallback !== 'function') { + console.log('PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function'); + return; } - /** - * Clear all notifications - */ + exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); +}; - }, { - key: 'clearAllNotifications', - value: function clearAllNotifications() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; +/** + * Get the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: failure parameter ' + 'not a function'); - return; - } +PushNotification.prototype.clearAllNotifications = function(successCallback, errorCallback) { + if (!successCallback) { successCallback = function() {}; } + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: success callback ' + 'parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.clearAllNotifications failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); + if (typeof successCallback !== 'function') { + console.log('PushNotification.clearAllNotifications failure: success callback parameter must be a function'); + return; } - /** - * 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. - */ - }, { - key: 'on', - value: function on(eventName, callback) { - if (!this.handlers.hasOwnProperty(eventName)) { - this.handlers[eventName] = []; - } - this.handlers[eventName].push(callback); + exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); +}; + +/** + * Listen for an event. + * + * Any event is supported, but the following are built-in: + * + * - 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] = []; } + this._handlers[eventName].push(callback); +}; - /** - * Remove event listener. - * - * @param {String} eventName to match subscription. - * @param {Function} handle function associated with event. - */ +/** + * Remove event listener. + * + * @param {String} eventName to match subscription. + * @param {Function} handle function associated with event. + */ - }, { - key: 'off', - value: function off(eventName, handle) { - if (this.handlers.hasOwnProperty(eventName)) { - var handleIndex = this.handlers[eventName].indexOf(handle); +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); + 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. - */ - - }, { - key: 'emit', - value: function emit() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } +/** + * 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. + */ - var eventName = args.shift(); +PushNotification.prototype.emit = function() { + var args = Array.prototype.slice.call(arguments); + var eventName = args.shift(); - if (!this.handlers.hasOwnProperty(eventName)) { + if (!this._handlers.hasOwnProperty(eventName)) { return false; - } + } - for (var i = 0, length = this.handlers[eventName].length; i < length; i++) { - var callback = this.handlers[eventName][i]; + for (var i = 0, length = this._handlers[eventName].length; i < length; i++) { + var callback = this._handlers[eventName][i]; if (typeof callback === 'function') { - callback.apply(undefined, args); + callback.apply(undefined,args); } else { - console.log('event handler: ' + eventName + ' must be a function'); + console.log('event handler: ' + eventName + ' must be a function'); } - } - - return true; } - }, { - key: 'finish', - value: function finish() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'handler'; - if (typeof successCallback !== 'function') { + return true; +}; + +PushNotification.prototype.finish = function(successCallback, errorCallback, id) { + if (!successCallback) { successCallback = function() {}; } + if (!errorCallback) { errorCallback = function() {}; } + if (!id) { id = 'handler'; } + + if (typeof successCallback !== 'function') { console.log('finish failure: success callback parameter must be a function'); return; - } + } - if (typeof errorCallback !== 'function') { + if (typeof errorCallback !== 'function') { console.log('finish failure: failure parameter not a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); } - }]); - return PushNotification; -}(); + exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); +}; /*! * 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 - */ + /** + * 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); + }, - init: function init(options) { - return new PushNotification(options); - }, + hasPermission: function(successCallback, errorCallback) { + exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); + }, - hasPermission: function hasPermission(successCallback, errorCallback) { - exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); - }, + /** + * PushNotification Object. + * + * Expose the PushNotification object for direct use + * and testing. Typically, you should use the + * .init helper method. + */ - /** - * PushNotification Object. - * - * Expose the PushNotification object for direct use - * and testing. Typically, you should use the - * .init helper method. - */ - PushNotification: PushNotification + PushNotification: PushNotification }; + }); diff --git a/StoneIsland/platforms/android/build.gradle b/StoneIsland/platforms/android/build.gradle index dde2c8c1..b9163fbd 100644 --- a/StoneIsland/platforms/android/build.gradle +++ b/StoneIsland/platforms/android/build.gradle @@ -250,9 +250,9 @@ dependencies { // SUB-PROJECT DEPENDENCIES START debugCompile(project(path: "CordovaLib", configuration: "debug")) releaseCompile(project(path: "CordovaLib", configuration: "release")) - compile "com.android.support:support-v13:25.1.0" - compile "me.leolin:ShortcutBadger:1.1.17@aar" - compile "com.google.firebase:firebase-messaging:11.0.1" + compile "com.android.support:support-v13:23+" + compile "com.google.android.gms:play-services-gcm:9.8+" + compile "me.leolin:ShortcutBadger:1.1.11@aar" // SUB-PROJECT DEPENDENCIES END } diff --git a/StoneIsland/platforms/android/phonegap-plugin-push/stoneisland-push.gradle b/StoneIsland/platforms/android/phonegap-plugin-push/stoneisland-push.gradle index 1506191b..11e735ae 100644 --- a/StoneIsland/platforms/android/phonegap-plugin-push/stoneisland-push.gradle +++ b/StoneIsland/platforms/android/phonegap-plugin-push/stoneisland-push.gradle @@ -16,24 +16,6 @@ android { } defaultConfig { - multiDexEnabled true applicationId = doExtractStringFromManifest("package") } } - -buildscript { - repositories { - jcenter() - mavenLocal() - } - dependencies { - classpath 'com.android.tools.build:gradle:+' - classpath 'com.google.gms:google-services:3.0.0' - } -} - -// apply plugin: 'com.google.gms.google-services' -// class must be used instead of id(string) to be able to apply plugin from non-root gradle file -ext.postBuildExtras = { - apply plugin: com.google.gms.googleservices.GoogleServicesPlugin -} diff --git a/StoneIsland/platforms/android/platform_www/cordova_plugins.js b/StoneIsland/platforms/android/platform_www/cordova_plugins.js index 1b6d56ac..8f70abd6 100755 --- a/StoneIsland/platforms/android/platform_www/cordova_plugins.js +++ b/StoneIsland/platforms/android/platform_www/cordova_plugins.js @@ -67,14 +67,6 @@ module.exports = [ ] }, { - "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js", - "id": "cordova-plugin-splashscreen.SplashScreen", - "pluginId": "cordova-plugin-splashscreen", - "clobbers": [ - "navigator.splashscreen" - ] - }, - { "file": "plugins/cordova-plugin-geolocation/www/android/geolocation.js", "id": "cordova-plugin-geolocation.geolocation", "pluginId": "cordova-plugin-geolocation", @@ -106,6 +98,14 @@ module.exports = [ ] }, { + "id": "cordova-plugin-splashscreen.SplashScreen", + "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js", + "pluginId": "cordova-plugin-splashscreen", + "clobbers": [ + "navigator.splashscreen" + ] + }, + { "id": "phonegap-plugin-push.PushNotification", "file": "plugins/phonegap-plugin-push/www/push.js", "pluginId": "phonegap-plugin-push", @@ -121,18 +121,16 @@ module.exports.metadata = "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", "cordova-plugin-statusbar": "2.2.3", "cordova-plugin-app-name": "1.0.4", - "phonegap-plugin-push": "2.0.0", - "cordova-plugin-wkwebview-engine": "1.1.3" + "cordova-plugin-splashscreen": "4.0.3", + "phonegap-plugin-push": "1.9.2" }; // BOTTOM OF METADATA });
\ No newline at end of file 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..5beaa5fd 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 @@ -1,4 +1,5 @@ -cordova.define("cordova-plugin-splashscreen.SplashScreen", function(require, exports, module) { /* +cordova.define("cordova-plugin-splashscreen.SplashScreen", function(require, exports, module) { +/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file 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 index 7234d474..a5315486 100644 --- 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 @@ -1,16 +1,4 @@ cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) { -/** -* This file has been generated by Babel. -* -* DO NOT EDIT IT DIRECTLY -* -* Edit the JS source file src/js/push.js -**/'use strict'; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - /* global cordova:false */ /* globals window */ @@ -20,358 +8,322 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var exec = cordova.require('cordova/exec'); -var PushNotification = function () { - /** - * PushNotification constructor. - * - * @param {Object} options to initiate Push Notifications. - * @return {PushNotification} instance that can be monitored and cancelled. - */ - function PushNotification(options) { - var _this = this; - - _classCallCheck(this, PushNotification); +/** + * PushNotification constructor. + * + * @param {Object} options to initiate Push Notifications. + * @return {PushNotification} instance that can be monitored and cancelled. + */ - this.handlers = { - registration: [], - notification: [], - error: [] +var PushNotification = function(options) { + this._handlers = { + 'registration': [], + 'notification': [], + 'error': [] }; // require options parameter if (typeof options === 'undefined') { - throw new Error('The options argument is required.'); + throw new Error('The options argument is required.'); } // store the options to this object instance this.options = options; // triggered on registration and notification - var success = function success(result) { - if (result && typeof result.registrationId !== 'undefined') { - _this.emit('registration', result); - } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { - var executeFuctionOrEmitEventByName = function executeFuctionOrEmitEventByName(functionName, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } + var that = this; + var success = function(result) { + if (result && typeof result.registrationId !== 'undefined') { + that.emit('registration', result); + } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { + var executeFuctionOrEmitEventByName = function(callbackName, context, arg) { + var namespaces = callbackName.split('.'); + var func = namespaces.pop(); + for (var i = 0; i < namespaces.length; i++) { + context = context[namespaces[i]]; + } - var namespaces = functionName.split('.'); - var func = namespaces.pop(); - for (var i = 0; i < namespaces.length; i++) { - context = context[namespaces[i]]; - } + if (typeof context[func] === 'function') { + context[func].call(context, arg); + } else { + that.emit(callbackName, arg); + } + }; - if (typeof context[func] === 'function') { - context[func].call(context, args); - } else { - _this.emit(functionName, args); - } - }; - - executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); - } else if (result) { - _this.emit('notification', result); - } + executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); + } else if (result) { + that.emit('notification', result); + } }; // triggered on error - var fail = function fail(msg) { - var e = typeof msg === 'string' ? new Error(msg) : msg; - _this.emit('error', e); + 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]); + setTimeout(function() { + exec(success, fail, 'PushNotification', 'init', [options]); }, 10); - } - - /** - * Unregister from push notifications - */ - +}; - _createClass(PushNotification, [{ - key: 'unregister', - value: function unregister(successCallback) { - var _this2 = this; +/** + * Unregister from push notifications + */ - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var options = arguments[2]; +PushNotification.prototype.unregister = function(successCallback, errorCallback, options) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof 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'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.unregister failure: success callback parameter must be a function'); return; - } + } - var cleanHandlersAndPassThrough = function cleanHandlersAndPassThrough() { + var that = this; + var cleanHandlersAndPassThrough = function() { if (!options) { - _this2.handlers = { - registration: [], - notification: [], - error: [] - }; + that._handlers = { + 'registration': [], + 'notification': [], + 'error': [] + }; } successCallback(); - }; - - exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); - } + }; - /** - * subscribe to a topic - * @param {String} topic topic to subscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ + exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); +}; - }, { - key: 'subscribe', - value: function subscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; +/** + * subscribe to a topic + * @param {String} topic topic to subscribe + * @param {Function} successCallback success callback + * @param {Function} errorCallback error callback + * @return {void} + */ +PushNotification.prototype.subscribe = function(topic, successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'failure parameter not a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.subscribe failure: failure parameter not a function'); return; - } + } - if (typeof successCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'success callback parameter must be a function'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.subscribe failure: success callback parameter must be a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); } - /** - * unsubscribe to a topic - * @param {String} topic topic to unsubscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ + exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); +}; - }, { - key: 'unsubscribe', - value: function unsubscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; +/** + * unsubscribe to a topic + * @param {String} topic topic to unsubscribe + * @param {Function} successCallback success callback + * @param {Function} errorCallback error callback + * @return {void} + */ +PushNotification.prototype.unsubscribe = function(topic, successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { + if (typeof errorCallback !== 'function') { console.log('PushNotification.unsubscribe failure: failure parameter not a function'); return; - } + } - if (typeof successCallback !== 'function') { - console.log('PushNotification.unsubscribe failure: ' + 'success callback parameter must be a function'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.unsubscribe failure: success callback parameter must be a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); } - /** - * Call this to set the application icon badge - */ + exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); +}; - }, { - key: 'setApplicationIconBadgeNumber', - value: function setApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var badge = arguments[2]; +/** + * Call this to set the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: failure ' + 'parameter not a function'); - return; - } +PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: success ' + 'callback parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{ badge: badge }]); + if (typeof successCallback !== 'function') { + console.log('PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function'); + return; } - /** - * Get the application icon badge - */ + exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{badge: badge}]); +}; - }, { - key: 'getApplicationIconBadgeNumber', - value: function getApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; +/** + * Get the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: failure ' + 'parameter not a function'); - return; - } +PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: success ' + 'callback parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); + if (typeof successCallback !== 'function') { + console.log('PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function'); + return; } - /** - * Clear all notifications - */ + exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); +}; - }, { - key: 'clearAllNotifications', - value: function clearAllNotifications() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; +/** + * Get the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: failure parameter ' + 'not a function'); - return; - } +PushNotification.prototype.clearAllNotifications = function(successCallback, errorCallback) { + if (!successCallback) { successCallback = function() {}; } + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: success callback ' + 'parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.clearAllNotifications failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); + if (typeof successCallback !== 'function') { + console.log('PushNotification.clearAllNotifications failure: success callback parameter must be a function'); + return; } - /** - * 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. - */ - }, { - key: 'on', - value: function on(eventName, callback) { - if (!this.handlers.hasOwnProperty(eventName)) { - this.handlers[eventName] = []; - } - this.handlers[eventName].push(callback); + exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); +}; + +/** + * Listen for an event. + * + * Any event is supported, but the following are built-in: + * + * - 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] = []; } + this._handlers[eventName].push(callback); +}; - /** - * Remove event listener. - * - * @param {String} eventName to match subscription. - * @param {Function} handle function associated with event. - */ +/** + * Remove event listener. + * + * @param {String} eventName to match subscription. + * @param {Function} handle function associated with event. + */ - }, { - key: 'off', - value: function off(eventName, handle) { - if (this.handlers.hasOwnProperty(eventName)) { - var handleIndex = this.handlers[eventName].indexOf(handle); +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); + 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. - */ - - }, { - key: 'emit', - value: function emit() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } +/** + * 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. + */ - var eventName = args.shift(); +PushNotification.prototype.emit = function() { + var args = Array.prototype.slice.call(arguments); + var eventName = args.shift(); - if (!this.handlers.hasOwnProperty(eventName)) { + if (!this._handlers.hasOwnProperty(eventName)) { return false; - } + } - for (var i = 0, length = this.handlers[eventName].length; i < length; i++) { - var callback = this.handlers[eventName][i]; + for (var i = 0, length = this._handlers[eventName].length; i < length; i++) { + var callback = this._handlers[eventName][i]; if (typeof callback === 'function') { - callback.apply(undefined, args); + callback.apply(undefined,args); } else { - console.log('event handler: ' + eventName + ' must be a function'); + console.log('event handler: ' + eventName + ' must be a function'); } - } - - return true; } - }, { - key: 'finish', - value: function finish() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'handler'; - if (typeof successCallback !== 'function') { + return true; +}; + +PushNotification.prototype.finish = function(successCallback, errorCallback, id) { + if (!successCallback) { successCallback = function() {}; } + if (!errorCallback) { errorCallback = function() {}; } + if (!id) { id = 'handler'; } + + if (typeof successCallback !== 'function') { console.log('finish failure: success callback parameter must be a function'); return; - } + } - if (typeof errorCallback !== 'function') { + if (typeof errorCallback !== 'function') { console.log('finish failure: failure parameter not a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); } - }]); - return PushNotification; -}(); + exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); +}; /*! * 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 - */ + /** + * 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); + }, - init: function init(options) { - return new PushNotification(options); - }, + hasPermission: function(successCallback, errorCallback) { + exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); + }, - hasPermission: function hasPermission(successCallback, errorCallback) { - exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); - }, + /** + * PushNotification Object. + * + * Expose the PushNotification object for direct use + * and testing. Typically, you should use the + * .init helper method. + */ - /** - * PushNotification Object. - * - * Expose the PushNotification object for direct use - * and testing. Typically, you should use the - * .init helper method. - */ - PushNotification: PushNotification + PushNotification: PushNotification }; + }); diff --git a/StoneIsland/platforms/android/project.properties b/StoneIsland/platforms/android/project.properties index 0a077db0..6936daa2 100755 --- a/StoneIsland/platforms/android/project.properties +++ b/StoneIsland/platforms/android/project.properties @@ -11,8 +11,8 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. target=android-25 -cordova.gradle.include.1=phonegap-plugin-push/stoneisland-push.gradle -cordova.system.library.1=com.android.support:support-v13:25.1.0 -cordova.system.library.2=me.leolin:ShortcutBadger:1.1.17@aar -cordova.system.library.3=com.google.firebase:firebase-messaging:11.0.1 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:9.8+ +cordova.system.library.3=me.leolin:ShortcutBadger:1.1.11@aar
\ No newline at end of file diff --git a/StoneIsland/platforms/android/res/values/strings.xml b/StoneIsland/platforms/android/res/values/strings.xml index bd922fe9..4a48baa7 100755 --- a/StoneIsland/platforms/android/res/values/strings.xml +++ b/StoneIsland/platforms/android/res/values/strings.xml @@ -3,4 +3,5 @@ <string name="app_name">Stone Island</string> <string name="launcher_name">@string/app_name</string> <string name="activity_name">@string/launcher_name</string> + <string name="google_app_id">85075801930</string> </resources> diff --git a/StoneIsland/platforms/android/res/xml/config.xml b/StoneIsland/platforms/android/res/xml/config.xml index 549366ea..9f4cb684 100644 --- a/StoneIsland/platforms/android/res/xml/config.xml +++ b/StoneIsland/platforms/android/res/xml/config.xml @@ -22,10 +22,6 @@ <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="Geolocation"> <param name="android-package" value="org.apache.cordova.geolocation.Geolocation" /> </feature> @@ -71,6 +67,10 @@ <preference name="AllowInlineMediaPlayback" value="true" /> <preference name="AndroidLaunchMode" value="singleTop" /> <preference name="android-minSdkVersion" value="21" /> + <feature name="SplashScreen"> + <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen" /> + <param name="onload" value="true" /> + </feature> <feature name="PushNotification"> <param name="android-package" value="com.adobe.phonegap.push.PushPlugin" /> </feature> diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/BackgroundActionButtonHandler.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/BackgroundActionButtonHandler.java index 4456f525..3ccea6cb 100644 --- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/BackgroundActionButtonHandler.java +++ b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/BackgroundActionButtonHandler.java @@ -9,7 +9,7 @@ import android.util.Log; import android.support.v4.app.RemoteInput; public class BackgroundActionButtonHandler extends BroadcastReceiver implements PushConstants { - private static String LOG_TAG = "Push_BGActionButton"; + private static String LOG_TAG = "PushPlugin_BackgroundActionButtonHandler"; @Override public void onReceive(Context context, Intent intent) { @@ -19,7 +19,7 @@ public class BackgroundActionButtonHandler extends BroadcastReceiver implements int notId = intent.getIntExtra(NOT_ID, 0); Log.d(LOG_TAG, "not id = " + notId); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancel(FCMService.getAppName(context), notId); + notificationManager.cancel(GCMIntentService.getAppName(context), notId); if (extras != null) { Bundle originalExtras = extras.getBundle(PUSH_BUNDLE); diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/FCMService.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/GCMIntentService.java index af328fb2..e1a2b75c 100644 --- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/FCMService.java +++ b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/GCMIntentService.java @@ -13,23 +13,17 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.Paint; -import android.graphics.Canvas; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.NotificationCompat; +import android.support.v4.app.NotificationManagerCompat; import android.support.v4.app.NotificationCompat.WearableExtender; import android.support.v4.app.RemoteInput; import android.text.Html; import android.text.Spanned; import android.util.Log; -import com.google.firebase.messaging.FirebaseMessagingService; -import com.google.firebase.messaging.RemoteMessage; +import com.google.android.gms.gcm.GcmListenerService; import org.json.JSONArray; import org.json.JSONException; @@ -42,13 +36,12 @@ import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; -import java.util.Map; import java.util.Random; @SuppressLint("NewApi") -public class FCMService extends FirebaseMessagingService implements PushConstants { +public class GCMIntentService extends GcmListenerService implements PushConstants { - private static final String LOG_TAG = "Push_FCMService"; + 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){ @@ -66,31 +59,17 @@ public class FCMService extends FirebaseMessagingService implements PushConstant } @Override - public void onMessageReceived(RemoteMessage message){ - - String from = message.getFrom(); + public void onMessageReceived(String from, Bundle extras) { Log.d(LOG_TAG, "onMessage - from: " + from); - Bundle extras = new Bundle(); - - if (message.getNotification()!=null) { - extras.putString(TITLE,message.getNotification().getTitle()); - extras.putString(MESSAGE,message.getNotification().getBody()); - } - for (Map.Entry<String, String> entry : message.getData().entrySet()) { - extras.putString(entry.getKey(), entry.getValue()); - } - - if (extras != null && isAvailableSender(from)) { + if (extras != null) { Context applicationContext = getApplicationContext(); SharedPreferences prefs = applicationContext.getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); boolean forceShow = prefs.getBoolean(FORCE_SHOW, false); boolean clearBadge = prefs.getBoolean(CLEAR_BADGE, false); - String messageKey = prefs.getString(MESSAGE_KEY, MESSAGE); - String titleKey = prefs.getString(TITLE_KEY, TITLE); - extras = normalizeExtras(applicationContext, extras, messageKey, titleKey); + extras = normalizeExtras(applicationContext, extras); if (clearBadge) { PushPlugin.setApplicationIconBadgeNumber(getApplicationContext(), 0); @@ -188,10 +167,10 @@ public class FCMService extends FirebaseMessagingService implements PushConstant /* * Replace alternate keys with our canonical value */ - private String normalizeKey(String key, String messageKey, String titleKey) { - if (key.equals(BODY) || key.equals(ALERT) || key.equals(MP_MESSAGE) || key.equals(GCM_NOTIFICATION_BODY) || key.equals(TWILIO_BODY) || key.equals(messageKey)) { + private String normalizeKey(String key) { + if (key.equals(BODY) || key.equals(ALERT) || key.equals(GCM_NOTIFICATION_BODY) || key.equals(TWILIO_BODY)) { return MESSAGE; - } else if (key.equals(TWILIO_TITLE) || key.equals(SUBJECT) || key.equals(titleKey)) { + } else if (key.equals(TWILIO_TITLE)) { return TITLE; }else if (key.equals(MSGCNT) || key.equals(BADGE)) { return COUNT; @@ -212,7 +191,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant /* * Parse bundle into normalized keys. */ - private Bundle normalizeExtras(Context context, Bundle extras, String messageKey, String titleKey) { + private Bundle normalizeExtras(Context context, Bundle extras) { Log.d(LOG_TAG, "normalize extras"); Iterator<String> it = extras.keySet().iterator(); Bundle newExtras = new Bundle(); @@ -224,7 +203,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant // 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) || key.equals(messageKey)) { + 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("{") ) { @@ -232,8 +211,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant 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) || - data.has(messageKey) || data.has(titleKey) ) { + 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(); @@ -241,7 +219,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant Log.d(LOG_TAG, "key = data/" + jsonKey); String value = data.getString(jsonKey); - jsonKey = normalizeKey(jsonKey, messageKey, titleKey); + jsonKey = normalizeKey(jsonKey); value = localizeKey(context, jsonKey, value); newExtras.putString(jsonKey, value); @@ -250,10 +228,6 @@ public class FCMService extends FirebaseMessagingService implements PushConstant } catch( JSONException e) { Log.e(LOG_TAG, "normalizeExtras: JSON exception"); } - } else { - String newKey = normalizeKey(key, messageKey, titleKey); - Log.d(LOG_TAG, "replace key " + key + " with " + newKey); - replaceKey(context, key, newKey, extras, newExtras); } } else if (key.equals(("notification"))) { Bundle value = extras.getBundle(key); @@ -262,7 +236,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant String notifkey = iterator.next(); Log.d(LOG_TAG, "notifkey = " + notifkey); - String newKey = normalizeKey(notifkey, messageKey, titleKey); + String newKey = normalizeKey(notifkey); Log.d(LOG_TAG, "replace key " + notifkey + " with " + newKey); String valueData = value.getString(notifkey); @@ -271,17 +245,12 @@ public class FCMService extends FirebaseMessagingService implements PushConstant newExtras.putString(newKey, valueData); } continue; - // In case we weren't working on the payload data node or the notification node, - // normalize the key. - // This allows to have "message" as the payload data key without colliding - // with the other "message" key (holding the body of the payload) - // See issue #1663 - } else { - String newKey = normalizeKey(key, messageKey, titleKey); - Log.d(LOG_TAG, "replace key " + key + " with " + newKey); - replaceKey(context, key, newKey, extras, newExtras); } + String newKey = normalizeKey(key); + Log.d(LOG_TAG, "replace key " + key + " with " + newKey); + replaceKey(context, key, newKey, extras, newExtras); + } // while return newExtras; @@ -332,15 +301,15 @@ public class FCMService extends FirebaseMessagingService implements PushConstant createNotification(context, extras); } - if(!PushPlugin.isActive() && "1".equals(forceStart)){ + if(!PushPlugin.isActive() && "1".equals(forceStart)){ Log.d(LOG_TAG, "app is not running but we should start it and put in background"); - Intent intent = new Intent(this, PushHandlerActivity.class); + Intent intent = new Intent(this, PushHandlerActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(PUSH_BUNDLE, extras); - intent.putExtra(START_IN_BACKGROUND, true); + intent.putExtra(START_IN_BACKGROUND, true); intent.putExtra(FOREGROUND, false); startActivity(intent); - } else if ("1".equals(contentAvailable)) { + } else if ("1".equals(contentAvailable)) { Log.d(LOG_TAG, "app is not running and content available true"); Log.d(LOG_TAG, "send notification event"); PushPlugin.sendExtras(extras); @@ -362,22 +331,12 @@ public class FCMService extends FirebaseMessagingService implements PushConstant int requestCode = new Random().nextInt(); PendingIntent contentIntent = PendingIntent.getActivity(this, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); - Intent dismissedNotificationIntent = new Intent(this, PushDismissedHandler.class); - dismissedNotificationIntent.putExtra(PUSH_BUNDLE, extras); - dismissedNotificationIntent.putExtra(NOT_ID, notId); - dismissedNotificationIntent.putExtra(DISMISSED, true); - dismissedNotificationIntent.setAction(PUSH_DISMISSED); - - requestCode = new Random().nextInt(); - PendingIntent deleteIntent = PendingIntent.getBroadcast(this, requestCode, dismissedNotificationIntent, PendingIntent.FLAG_CANCEL_CURRENT); - NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setWhen(System.currentTimeMillis()) .setContentTitle(fromHtml(extras.getString(TITLE))) .setTicker(fromHtml(extras.getString(TITLE))) .setContentIntent(contentIntent) - .setDeleteIntent(deleteIntent) .setAutoCancel(true); SharedPreferences prefs = context.getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); @@ -731,46 +690,11 @@ public class FCMService extends FirebaseMessagingService implements PushConstant } } - private Bitmap getCircleBitmap(Bitmap bitmap) { - if (bitmap == null) { - return null; - } - - final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); - final Canvas canvas = new Canvas(output); - final int color = Color.RED; - final Paint paint = new Paint(); - final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); - final RectF rectF = new RectF(rect); - - paint.setAntiAlias(true); - canvas.drawARGB(0, 0, 0, 0); - paint.setColor(color); - float cx = bitmap.getWidth()/2; - float cy = bitmap.getHeight()/2; - float radius = cx < cy ? cx : cy; - canvas.drawCircle(cx,cy,radius,paint); - - paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); - canvas.drawBitmap(bitmap, rect, rect, paint); - - bitmap.recycle(); - - return output; - } - private void setNotificationLargeIcon(Bundle extras, String packageName, Resources resources, NotificationCompat.Builder mBuilder) { String gcmLargeIcon = extras.getString(IMAGE); // from gcm - String imageType = extras.getString(IMAGE_TYPE, IMAGE_TYPE_SQUARE); if (gcmLargeIcon != null && !"".equals(gcmLargeIcon)) { if (gcmLargeIcon.startsWith("http://") || gcmLargeIcon.startsWith("https://")) { - Bitmap bitmap = getBitmapFromURL(gcmLargeIcon); - if (IMAGE_TYPE_SQUARE.equalsIgnoreCase(imageType)) { - mBuilder.setLargeIcon(bitmap); - } else { - Bitmap bm = getCircleBitmap(bitmap); - mBuilder.setLargeIcon(bm); - } + mBuilder.setLargeIcon(getBitmapFromURL(gcmLargeIcon)); Log.d(LOG_TAG, "using remote large-icon from gcm"); } else { AssetManager assetManager = getAssets(); @@ -778,12 +702,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant try { istr = assetManager.open(gcmLargeIcon); Bitmap bitmap = BitmapFactory.decodeStream(istr); - if (IMAGE_TYPE_SQUARE.equalsIgnoreCase(imageType)) { - mBuilder.setLargeIcon(bitmap); - } else { - Bitmap bm = getCircleBitmap(bitmap); - mBuilder.setLargeIcon(bm); - } + mBuilder.setLargeIcon(bitmap); Log.d(LOG_TAG, "using assets large-icon from gcm"); } catch (IOException e) { int largeIconId = 0; @@ -843,7 +762,6 @@ public class FCMService extends FirebaseMessagingService implements PushConstant try { URL url = new URL(strURL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setConnectTimeout(15000); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); @@ -881,11 +799,4 @@ public class FCMService extends FirebaseMessagingService implements PushConstant else return null; } - - private boolean isAvailableSender(String from) { - SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); - String savedSenderID = sharedPref.getString(SENDER_ID, ""); - - return from.equals(savedSenderID) || from.startsWith("/topics/"); - } } diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PermissionUtils.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PermissionUtils.java index 41bc6a6f..6aa5c9bf 100644 --- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PermissionUtils.java +++ b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PermissionUtils.java @@ -10,12 +10,8 @@ import java.lang.reflect.Method; public class PermissionUtils { private static final String CHECK_OP_NO_THROW = "checkOpNoThrow"; - private static final int MIN_API_LEVEL = 19; // required by AppOpsManager public static boolean hasPermission(Context appContext, String appOpsServiceId) throws UnknownError { - if (android.os.Build.VERSION.SDK_INT < MIN_API_LEVEL) { - return true; - } ApplicationInfo appInfo = appContext.getApplicationInfo(); diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushConstants.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushConstants.java index e3aa217c..37874e04 100644 --- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushConstants.java +++ b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushConstants.java @@ -3,7 +3,6 @@ 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 REGISTRATION_TYPE = "registrationType"; public static final String FOREGROUND = "foreground"; public static final String TITLE = "title"; public static final String NOT_ID = "notId"; @@ -56,11 +55,10 @@ public interface PushConstants { 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 FCM = "FCM"; + public static final String GCM = "GCM"; public static final String CONTENT_AVAILABLE = "content-available"; public static final String TOPICS = "topics"; public static final String SET_APPLICATION_ICON_BADGE_NUMBER = "setApplicationIconBadgeNumber"; - public static final String GET_APPLICATION_ICON_BADGE_NUMBER = "getApplicationIconBadgeNumber"; public static final String CLEAR_ALL_NOTIFICATIONS = "clearAllNotifications"; public static final String VISIBILITY = "visibility"; public static final String INLINE_REPLY = "inlineReply"; @@ -69,18 +67,6 @@ public interface PushConstants { public static final String TWILIO_BODY = "twi_body"; public static final String TWILIO_TITLE = "twi_title"; public static final String TWILIO_SOUND = "twi_sound"; - public static final String MP_MESSAGE = "mp_message"; public static final String START_IN_BACKGROUND = "cdvStartInBackground"; public static final String FORCE_START = "force-start"; - public static final String MESSAGE_KEY = "messageKey"; - public static final String TITLE_KEY = "titleKey"; - public static final String NO_CACHE = "no-cache"; - public static final String DISMISSED = "dismissed"; - public static final String IMAGE_TYPE = "image-type"; - public static final String IMAGE_TYPE_SQUARE = "square"; - public static final String IMAGE_TYPE_CIRCLE = "circle"; - public static final String SUBJECT = "subject"; - public static final String GOOGLE_APP_ID = "google_app_id"; - public static final String GCM_DEFAULT_SENDER_ID = "gcm_defaultSenderId"; - public static final String PUSH_DISMISSED = "push_dismissed"; } diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushDismissedHandler.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushDismissedHandler.java deleted file mode 100644 index a517bc1e..00000000 --- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushDismissedHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.adobe.phonegap.push; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; - -public class PushDismissedHandler extends BroadcastReceiver implements PushConstants { - private static String LOG_TAG = "Push_DismissedHandler"; - - @Override - public void onReceive(Context context, Intent intent) { - Bundle extras = intent.getExtras(); - FCMService fcm = new FCMService(); - String action = intent.getAction(); - int notID = intent.getIntExtra(NOT_ID, 0); - - if (action.equals(PUSH_DISMISSED)) { - Log.d(LOG_TAG, "PushDismissedHandler = " + extras); - Log.d(LOG_TAG, "not id = " + notID); - - fcm.setNotification(notID, ""); - } - } -} diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java index 0d399a61..23682ac8 100644 --- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java +++ b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java @@ -11,7 +11,7 @@ import android.support.v4.app.RemoteInput; public class PushHandlerActivity extends Activity implements PushConstants { - private static String LOG_TAG = "Push_HandlerActivity"; + private static String LOG_TAG = "PushPlugin_PushHandlerActivity"; /* * this activity will be started if the user touches a notification that we own. @@ -21,7 +21,7 @@ public class PushHandlerActivity extends Activity implements PushConstants { */ @Override public void onCreate(Bundle savedInstanceState) { - FCMService gcm = new FCMService(); + GCMIntentService gcm = new GCMIntentService(); Intent intent = getIntent(); @@ -34,18 +34,16 @@ public class PushHandlerActivity extends Activity implements PushConstants { Log.d(LOG_TAG, "callback = " + callback); boolean foreground = getIntent().getExtras().getBoolean("foreground", true); boolean startOnBackground = getIntent().getExtras().getBoolean(START_IN_BACKGROUND, false); - boolean dismissed = getIntent().getExtras().getBoolean(DISMISSED, false); - Log.d(LOG_TAG, "dismissed = " + dismissed); if(!startOnBackground){ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancel(FCMService.getAppName(this), notId); + notificationManager.cancel(GCMIntentService.getAppName(this), notId); } boolean isPushPluginActive = PushPlugin.isActive(); boolean inline = processPushBundle(isPushPluginActive, intent); - if(inline && android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N && !startOnBackground){ + if(inline && android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N){ foreground = true; } @@ -53,17 +51,15 @@ public class PushHandlerActivity extends Activity implements PushConstants { finish(); - if(!dismissed) { - Log.d(LOG_TAG, "isPushPluginActive = " + isPushPluginActive); - if (!isPushPluginActive && foreground && inline) { - Log.d(LOG_TAG, "forceMainActivityReload"); - forceMainActivityReload(false); - } else if(startOnBackground) { - Log.d(LOG_TAG, "startOnBackgroundTrue"); - forceMainActivityReload(true); - } else { - Log.d(LOG_TAG, "don't want main activity"); - } + Log.d(LOG_TAG, "isPushPluginActive = " + isPushPluginActive); + if (!isPushPluginActive && foreground && inline) { + Log.d(LOG_TAG, "forceMainActivityReload"); + forceMainActivityReload(false); + } else if(startOnBackground) { + Log.d(LOG_TAG, "startOnBackgroundTrue"); + forceMainActivityReload(true); + } else { + Log.d(LOG_TAG, "don't want main activity"); } } @@ -80,9 +76,7 @@ public class PushHandlerActivity extends Activity implements PushConstants { originalExtras.putBoolean(FOREGROUND, false); originalExtras.putBoolean(COLDSTART, !isPushPluginActive); - originalExtras.putBoolean(DISMISSED, extras.getBoolean(DISMISSED)); originalExtras.putString(ACTION_CALLBACK, extras.getString(CALLBACK)); - originalExtras.remove(NO_CACHE); remoteInput = RemoteInput.getResultsFromIntent(intent); if (remoteInput != null) { diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java index 176b7419..eaa39a48 100644 --- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java +++ b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java @@ -5,22 +5,23 @@ import android.content.Context; import android.content.SharedPreferences; import android.util.Log; -import com.google.firebase.iid.FirebaseInstanceId; -import com.google.firebase.iid.FirebaseInstanceIdService; +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 FirebaseInstanceIdService implements PushConstants { - public static final String LOG_TAG = "Push_InsIdService"; +public class PushInstanceIDListenerService extends InstanceIDListenerService implements PushConstants { + public static final String LOG_TAG = "PushPlugin_PushInstanceIDListenerService"; @Override public void onTokenRefresh() { - // Get updated InstanceID token. - String refreshedToken = FirebaseInstanceId.getInstance().getToken(); - Log.d(LOG_TAG, "Refreshed token: " + refreshedToken); - // TODO: Implement this method to send any registration to your app's servers. - //sendRegistrationToServer(refreshedToken); + 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 index 32f72bf3..f6faaa2b 100644 --- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushPlugin.java +++ b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushPlugin.java @@ -1,14 +1,13 @@ package com.adobe.phonegap.push; -import android.app.Activity; import android.app.NotificationManager; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; -import com.google.firebase.iid.FirebaseInstanceId; -import com.google.firebase.messaging.FirebaseMessaging; +import com.google.android.gms.gcm.GcmPubSub; +import com.google.android.gms.iid.InstanceID; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaInterface; @@ -30,7 +29,7 @@ import me.leolin.shortcutbadger.ShortcutBadger; public class PushPlugin extends CordovaPlugin implements PushConstants { - public static final String LOG_TAG = "Push_Plugin"; + public static final String LOG_TAG = "PushPlugin"; private static CallbackContext pushContext; private static CordovaWebView gWebView; @@ -60,7 +59,6 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { 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 { @@ -68,19 +66,15 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { Log.v(LOG_TAG, "execute: jo=" + jo.toString()); - senderID = getStringResourceByName(GCM_DEFAULT_SENDER_ID); + senderID = jo.getString(SENDER_ID); Log.v(LOG_TAG, "execute: senderID=" + senderID); - token = FirebaseInstanceId.getInstance().getToken(); + String savedSenderID = sharedPref.getString(SENDER_ID, ""); + registration_id = InstanceID.getInstance(getApplicationContext()).getToken(senderID, GCM); - if (token == null) { - token = FirebaseInstanceId.getInstance().getToken(senderID,FCM); - } - - if (!"".equals(token)) { - JSONObject json = new JSONObject().put(REGISTRATION_ID, token); - json.put(REGISTRATION_TYPE, FCM); + if (!"".equals(registration_id)) { + JSONObject json = new JSONObject().put(REGISTRATION_ID, registration_id); Log.v(LOG_TAG, "onRegistered: " + json.toString()); @@ -89,14 +83,14 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { PushPlugin.sendEvent( json ); } else { - callbackContext.error("Empty registration ID received from FCM"); + 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 IO Exception " + e.getMessage()); + Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage()); callbackContext.error(e.getMessage()); } @@ -124,8 +118,6 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { 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(MESSAGE_KEY, jo.optString(MESSAGE_KEY)); - editor.putString(TITLE_KEY, jo.optString(TITLE_KEY)); editor.commit(); } @@ -151,7 +143,7 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { if (topics != null && !"".equals(registration_id)) { unsubscribeFromTopics(topics, registration_id); } else { - FirebaseInstanceId.getInstance().deleteInstanceId(); + InstanceID.getInstance(getApplicationContext()).deleteInstanceID(); Log.v(LOG_TAG, "UNREGISTER"); // Remove shared prefs @@ -202,13 +194,6 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { callbackContext.success(); } }); - } else if (GET_APPLICATION_ICON_BADGE_NUMBER.equals(action)) { - cordova.getThreadPool().execute(new Runnable() { - public void run() { - Log.v(LOG_TAG, "getApplicationIconBadgeNumber"); - callbackContext.success(getApplicationIconBadgeNumber(getApplicationContext())); - } - }); } else if (CLEAR_ALL_NOTIFICATIONS.equals(action)) { cordova.getThreadPool().execute(new Runnable() { public void run() { @@ -227,6 +212,8 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { callbackContext.success(); } catch (JSONException e) { callbackContext.error(e.getMessage()); + } catch (IOException e) { + callbackContext.error(e.getMessage()); } } }); @@ -240,6 +227,8 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { callbackContext.success(); } catch (JSONException e) { callbackContext.error(e.getMessage()); + } catch (IOException e) { + callbackContext.error(e.getMessage()); } } }); @@ -270,41 +259,25 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { /* * Sends the pushbundle extras to the client application. - * If the client application isn't currently active and the no-cache flag is not set, it is cached for later processing. + * If the client application isn't currently active, it is cached for later processing. */ public static void sendExtras(Bundle extras) { if (extras != null) { - String noCache = extras.getString(NO_CACHE); if (gWebView != null) { sendEvent(convertBundleToJson(extras)); - } else if(!"1".equals(noCache)){ + } else { Log.v(LOG_TAG, "sendExtras: caching extras to send at a later time."); gCachedExtras.add(extras); } } } - /* - * Retrives badge count from SharedPreferences - */ - public static int getApplicationIconBadgeNumber(Context context){ - SharedPreferences settings = context.getSharedPreferences(BADGE, Context.MODE_PRIVATE); - return settings.getInt(BADGE, 0); - } - - /* - * Sets badge count on application icon and in SharedPreferences - */ public static void setApplicationIconBadgeNumber(Context context, int badgeCount) { if (badgeCount > 0) { ShortcutBadger.applyCount(context, badgeCount); - }else{ + } else { ShortcutBadger.removeCount(context); } - - SharedPreferences.Editor editor = context.getSharedPreferences(BADGE, Context.MODE_PRIVATE).edit(); - editor.putInt(BADGE, Math.max(badgeCount, 0)); - editor.apply(); } @Override @@ -342,7 +315,23 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { notificationManager.cancelAll(); } - private void subscribeToTopics(JSONArray topics, String registrationToken) { + /** + * Transform `topic name` to `topic path` + * Normally, the `topic` inputed from end-user is `topic name` only. + * We should convert them to GCM `topic path` + * Example: + * when topic name = 'my-topic' + * then topic path = '/topics/my-topic' + * + * @param String topic The topic name + * @return The topic path + */ + private String getTopicPath(String topic) + { + return "/topics/" + topic; + } + + private void subscribeToTopics(JSONArray topics, String registrationToken) throws IOException { if (topics != null) { String topic = null; for (int i=0; i<topics.length(); i++) { @@ -352,10 +341,16 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { } } - private void subscribeToTopic(String topic, String registrationToken) { - if (topic != null) { - Log.d(LOG_TAG, "Subscribing to topic: " + topic); - FirebaseMessaging.getInstance().subscribeToTopic(topic); + private void subscribeToTopic(String topic, String registrationToken) throws IOException + { + try { + if (topic != null) { + Log.d(LOG_TAG, "Subscribing to topic: " + topic); + GcmPubSub.getInstance(getApplicationContext()).subscribe(registrationToken, getTopicPath(topic), null); + } + } catch (IOException e) { + Log.e(LOG_TAG, "Failed to subscribe to topic: " + topic, e); + throw e; } } @@ -363,20 +358,29 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { if (topics != null) { String topic = null; for (int i=0; i<topics.length(); i++) { - topic = topics.optString(i, null); - unsubscribeFromTopic(topic, registrationToken); - if (topic != null) { - Log.d(LOG_TAG, "Unsubscribing to topic: " + topic); - FirebaseMessaging.getInstance().unsubscribeFromTopic(topic); + try { + topic = topics.optString(i, null); + if (topic != null) { + Log.d(LOG_TAG, "Unsubscribing to topic: " + topic); + GcmPubSub.getInstance(getApplicationContext()).unsubscribe(registrationToken, getTopicPath(topic)); + } + } catch (IOException e) { + Log.e(LOG_TAG, "Failed to unsubscribe to topic: " + topic, e); } } } } - private void unsubscribeFromTopic(String topic, String registrationToken) { - if (topic != null) { - Log.d(LOG_TAG, "Unsubscribing to topic: " + topic); - FirebaseMessaging.getInstance().unsubscribeFromTopic(topic); + private void unsubscribeFromTopic(String topic, String registrationToken) throws IOException + { + try { + if (topic != null) { + Log.d(LOG_TAG, "Unsubscribing to topic: " + topic); + GcmPubSub.getInstance(getApplicationContext()).unsubscribe(registrationToken, getTopicPath(topic)); + } + } catch (IOException e) { + Log.e(LOG_TAG, "Failed to unsubscribe to topic: " + topic, e); + throw e; } } @@ -409,9 +413,6 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { else if (key.equals(FOREGROUND)) { additionalData.put(key, extras.getBoolean(FOREGROUND)); } - else if (key.equals(DISMISSED)) { - additionalData.put(key, extras.getBoolean(DISMISSED)); - } else if ( value instanceof String ) { String strValue = (String)value; try { @@ -443,13 +444,6 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { return null; } - private String getStringResourceByName(String aString) { - Activity activity = cordova.getActivity(); - String packageName = activity.getPackageName(); - int resId = activity.getResources().getIdentifier(aString, "string", packageName); - return activity.getString(resId); - } - public static boolean isInForeground() { return gForeground; } diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java new file mode 100644 index 00000000..b181e88e --- /dev/null +++ b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java @@ -0,0 +1,38 @@ +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); + PushPlugin.setRegistrationID(token); + Log.i(LOG_TAG, "new GCM Registration Token: " + token); + + } catch (Exception e) { + Log.d(LOG_TAG, "Failed to complete token refresh", e); + } + } +} diff --git a/StoneIsland/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.m b/StoneIsland/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.m index 53856806..054d655d 100644 --- a/StoneIsland/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.m +++ b/StoneIsland/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.m @@ -66,9 +66,9 @@ id object = [NSJSONSerialization JSONObjectWithData:[self dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&error]; - + if (error != nil) { - NSLog(@"NSString JSONObject error: %@", [error localizedDescription]); + NSLog(@"NSString JSONObject error: %@, Malformed Data: %@", [error localizedDescription], self); } return object; diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.h b/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVLogger/CDVLogger.h index 7cfb3063..eeba63ca 100644 --- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.h +++ b/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVLogger/CDVLogger.h @@ -17,7 +17,7 @@ under the License. */ -#import <Cordova/CDVPlugin.h> +#import "CDVPlugin.h" @interface CDVLogger : CDVPlugin diff --git a/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.m b/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVLogger/CDVLogger.m index ccfa3a51..810caa56 100644 --- a/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.m +++ b/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVLogger/CDVLogger.m @@ -18,7 +18,6 @@ */ #import "CDVLogger.h" -#import <Cordova/CDV.h> @implementation CDVLogger diff --git a/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.m b/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.m index 0af97dfb..67691217 100644 --- a/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.m +++ b/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.m @@ -256,11 +256,10 @@ static NSString *stripFragment(NSString* url) NSLog(@"%@", description); _loadCount = 0; _state = STATE_WAITING_FOR_LOAD_START; - if ([_delegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { - NSDictionary* errorDictionary = @{NSLocalizedDescriptionKey : description}; - NSError* error = [[NSError alloc] initWithDomain:@"CDVUIWebViewDelegate" code:1 userInfo:errorDictionary]; - [_delegate webView:webView didFailLoadWithError:error]; - } + + NSDictionary* errorDictionary = @{NSLocalizedDescriptionKey : description}; + NSError* error = [[NSError alloc] initWithDomain:@"CDVUIWebViewDelegate" code:1 userInfo:errorDictionary]; + [self webView:webView didFailLoadWithError:error]; } } } else { diff --git a/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.m b/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.m index 348c2845..bc56fdde 100644 --- a/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.m +++ b/StoneIsland/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.m @@ -80,7 +80,9 @@ if (errorUrl) { errorUrl = [NSURL URLWithString:[NSString stringWithFormat:@"?error=%@", [message stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLPathAllowedCharacterSet]] relativeToURL:errorUrl]; NSLog(@"%@", [errorUrl absoluteString]); - [theWebView loadRequest:[NSURLRequest requestWithURL:errorUrl]]; + if(error.code != NSURLErrorCancelled) { + [theWebView loadRequest:[NSURLRequest requestWithURL:errorUrl]]; + } } } diff --git a/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.m b/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.m index 821b957e..5408903e 100644 --- a/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.m +++ b/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.m @@ -79,8 +79,21 @@ return NO; } + NSMutableDictionary * openURLData = [[NSMutableDictionary alloc] init]; + + [openURLData setValue:url forKey:@"url"]; + + if (sourceApplication) { + [openURLData setValue:sourceApplication forKey:@"sourceApplication"]; + } + + if (annotation) { + [openURLData setValue:annotation forKey:@"annotation"]; + } + // all plugins will get the notification, and their handlers will be called [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]]; + [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLWithAppSourceAndAnnotationNotification object:openURLData]]; return YES; } diff --git a/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVAvailability.h b/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVAvailability.h index 38bdfd73..af63494c 100644 --- a/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVAvailability.h +++ b/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVAvailability.h @@ -67,6 +67,7 @@ #define __CORDOVA_4_3_0 40300 #define __CORDOVA_4_3_1 40301 #define __CORDOVA_4_4_0 40400 +#define __CORDOVA_4_5_0 40500 /* coho:next-version,insert-before */ #define __CORDOVA_NA 99999 /* not available */ @@ -79,7 +80,7 @@ */ #ifndef CORDOVA_VERSION_MIN_REQUIRED /* coho:next-version-min-required,replace-after */ - #define CORDOVA_VERSION_MIN_REQUIRED __CORDOVA_4_4_0 + #define CORDOVA_VERSION_MIN_REQUIRED __CORDOVA_4_5_0 #endif /* diff --git a/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.h b/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.h index d59507ae..9a7d7de4 100644 --- a/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.h +++ b/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.h @@ -32,6 +32,7 @@ extern NSString* const CDVPageDidLoadNotification; extern NSString* const CDVPluginHandleOpenURLNotification; +extern NSString* const CDVPluginHandleOpenURLWithAppSourceAndAnnotationNotification; extern NSString* const CDVPluginResetNotification; extern NSString* const CDVViewWillAppearNotification; extern NSString* const CDVViewDidAppearNotification; @@ -65,6 +66,7 @@ extern NSString* const CDVRemoteNotificationError CDV_DEPRECATED(4.0, "Functiona - (void)pluginInitialize; - (void)handleOpenURL:(NSNotification*)notification; +- (void)handleOpenURLWithApplicationSourceAndAnnotation:(NSNotification*)notification; - (void)onAppTerminate; - (void)onMemoryWarning; - (void)onReset; diff --git a/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.m b/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.m index f16f7fbe..79316561 100644 --- a/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.m +++ b/StoneIsland/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.m @@ -42,6 +42,7 @@ NSString* const CDVPageDidLoadNotification = @"CDVPageDidLoadNotification"; NSString* const CDVPluginHandleOpenURLNotification = @"CDVPluginHandleOpenURLNotification"; +NSString* const CDVPluginHandleOpenURLWithAppSourceAndAnnotationNotification = @"CDVPluginHandleOpenURLWithAppSourceAndAnnotationNotification"; NSString* const CDVPluginResetNotification = @"CDVPluginResetNotification"; NSString* const CDVLocalNotification = @"CDVLocalNotification"; NSString* const CDVRemoteNotification = @"CDVRemoteNotification"; @@ -73,6 +74,7 @@ NSString* const CDVViewWillTransitionToSizeNotification = @"CDVViewWillTransitio [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onAppTerminate) name:UIApplicationWillTerminateNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onMemoryWarning) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenURL:) name:CDVPluginHandleOpenURLNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenURLWithApplicationSourceAndAnnotation:) name:CDVPluginHandleOpenURLWithAppSourceAndAnnotationNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onReset) name:CDVPluginResetNotification object:theWebViewEngine.engineWebView]; self.webViewEngine = theWebViewEngine; @@ -140,6 +142,37 @@ NSString* const CDVViewWillTransitionToSizeNotification = @"CDVViewWillTransitio } } +/* + NOTE: calls into JavaScript must not call or trigger any blocking UI, like alerts + */ +- (void)handleOpenURLWithApplicationSourceAndAnnotation: (NSNotification*)notification +{ + + // override to handle urls sent to your app + // register your url schemes in your App-Info.plist + + // The notification object is an NSDictionary which contains + // - url which is a type of NSURL + // - sourceApplication which is a type of NSString and represents the package + // id of the app that calls our app + // - annotation which a type of Property list which can be several different types + // please see https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/PropertyList.html + + NSDictionary* notificationData = [notification object]; + + if ([notificationData isKindOfClass: NSDictionary.class]){ + + NSURL* url = notificationData[@"url"]; + NSString* sourceApplication = notificationData[@"sourceApplication"]; + id annotation = notificationData[@"annotation"]; + + if ([url isKindOfClass:NSURL.class] && [sourceApplication isKindOfClass:NSString.class] && annotation) { + /* Do your thing! */ + } + } +} + + /* NOTE: calls into JavaScript must not call or trigger any blocking UI, like alerts */ - (void)onAppTerminate { diff --git a/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj b/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj index cee1f0d4..4df32ce5 100644 --- a/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj +++ b/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 28BFF9141F355A4E00DDF01A /* CDVLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 28BFF9121F355A4E00DDF01A /* CDVLogger.h */; }; + 28BFF9151F355A4E00DDF01A /* CDVLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 28BFF9131F355A4E00DDF01A /* CDVLogger.m */; }; 30193A501AE6350A0069A75F /* CDVUIWebViewNavigationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 30193A4E1AE6350A0069A75F /* CDVUIWebViewNavigationDelegate.m */; }; 30193A511AE6350A0069A75F /* CDVUIWebViewNavigationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 30193A4F1AE6350A0069A75F /* CDVUIWebViewNavigationDelegate.h */; }; 3093E2231B16D6A3003F381A /* CDVIntentAndNavigationFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3093E2211B16D6A3003F381A /* CDVIntentAndNavigationFilter.h */; }; @@ -98,6 +100,8 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 28BFF9121F355A4E00DDF01A /* CDVLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDVLogger.h; sourceTree = "<group>"; }; + 28BFF9131F355A4E00DDF01A /* CDVLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVLogger.m; sourceTree = "<group>"; }; 30193A4E1AE6350A0069A75F /* CDVUIWebViewNavigationDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVUIWebViewNavigationDelegate.m; sourceTree = "<group>"; }; 30193A4F1AE6350A0069A75F /* CDVUIWebViewNavigationDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDVUIWebViewNavigationDelegate.h; sourceTree = "<group>"; }; 30325A0B136B343700982B63 /* VERSION */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = VERSION; sourceTree = "<group>"; }; @@ -200,6 +204,15 @@ name = CordovaLib; sourceTree = "<group>"; }; + 28BFF9111F355A1D00DDF01A /* CDVLogger */ = { + isa = PBXGroup; + children = ( + 28BFF9121F355A4E00DDF01A /* CDVLogger.h */, + 28BFF9131F355A4E00DDF01A /* CDVLogger.m */, + ); + path = CDVLogger; + sourceTree = "<group>"; + }; 3093E2201B16D6A3003F381A /* CDVIntentAndNavigationFilter */ = { isa = PBXGroup; children = ( @@ -226,6 +239,7 @@ 7ED95CF61AB9028C008C4574 /* Plugins */ = { isa = PBXGroup; children = ( + 28BFF9111F355A1D00DDF01A /* CDVLogger */, A3B082D11BB15CEA00D8DC35 /* CDVGestureHandler */, 3093E2201B16D6A3003F381A /* CDVIntentAndNavigationFilter */, 7ED95CF71AB9028C008C4574 /* CDVHandleOpenURL */, @@ -395,6 +409,7 @@ 3093E2231B16D6A3003F381A /* CDVIntentAndNavigationFilter.h in Headers */, 7E7F69B81ABA368F007546F4 /* CDVUIWebViewEngine.h in Headers */, 7E7F69B91ABA3692007546F4 /* CDVHandleOpenURL.h in Headers */, + 28BFF9141F355A4E00DDF01A /* CDVLogger.h in Headers */, 30193A511AE6350A0069A75F /* CDVUIWebViewNavigationDelegate.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -515,6 +530,7 @@ 7ED95D481AB9029B008C4574 /* CDVPluginResult.m in Sources */, 7ED95D441AB9029B008C4574 /* CDVPlugin+Resources.m in Sources */, 7ED95D4D1AB9029B008C4574 /* CDVURLProtocol.m in Sources */, + 28BFF9151F355A4E00DDF01A /* CDVLogger.m in Sources */, 7ED95D0D1AB9028C008C4574 /* CDVUIWebViewEngine.m in Sources */, 7ED95D461AB9029B008C4574 /* CDVPlugin.m in Sources */, 7ED95D091AB9028C008C4574 /* CDVLocalStorage.m in Sources */, diff --git a/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist b/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist index 8cb1fc6b..4bc8d36e 100644 --- a/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,12 +7,12 @@ <key>Cordova.xcscheme</key> <dict> <key>orderHint</key> - <integer>7</integer> + <integer>3</integer> </dict> <key>CordovaLib.xcscheme</key> <dict> <key>orderHint</key> - <integer>6</integer> + <integer>2</integer> </dict> </dict> </dict> diff --git a/StoneIsland/platforms/ios/CordovaLib/VERSION b/StoneIsland/platforms/ios/CordovaLib/VERSION index fdc66988..6cedcff6 100644 --- a/StoneIsland/platforms/ios/CordovaLib/VERSION +++ b/StoneIsland/platforms/ios/CordovaLib/VERSION @@ -1 +1 @@ -4.4.0 +4.5.2 diff --git a/StoneIsland/platforms/ios/CordovaLib/cordova.js b/StoneIsland/platforms/ios/CordovaLib/cordova.js index 3540a020..a320f5ee 100644 --- a/StoneIsland/platforms/ios/CordovaLib/cordova.js +++ b/StoneIsland/platforms/ios/CordovaLib/cordova.js @@ -1,5 +1,5 @@ // Platform: ios -// 7c5fcc5a5adfbf3fb8ceaf36fbdd4bd970bd9c20 +// ff66178b108b93be36a1aafe341af17381a727a3 /* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file @@ -19,35 +19,33 @@ under the License. */ ;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '4.4.0'; +var PLATFORM_VERSION_BUILD_LABEL = '4.5.2'; // file: src/scripts/require.js -/*jshint -W079 */ -/*jshint -W020 */ +/* jshint -W079 */ +/* jshint -W020 */ -var require, - define; +var require; +var define; (function () { - var modules = {}, + var modules = {}; // Stack of moduleIds currently being built. - requireStack = [], + var requireStack = []; // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; + var inProgressModules = {}; + var SEPARATOR = '.'; - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; + function build (module) { + var factory = module.factory; + var localRequire = function (id) { + var resultantId = id; + // Its a relative path, so lop off the last portion and add the id (minus "./") + if (id.charAt(0) === '.') { + resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); + } + return require(resultantId); + }; module.exports = {}; delete module.factory; factory(localRequire, module.exports, module); @@ -56,10 +54,10 @@ var require, require = function (id) { if (!modules[id]) { - throw "module " + id + " not found"; + throw 'module ' + id + ' not found'; } else if (id in inProgressModules) { var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; + throw 'Cycle in require graph: ' + cycle; } if (modules[id].factory) { try { @@ -76,7 +74,7 @@ var require, define = function (id, factory) { if (modules[id]) { - throw "module " + id + " already defined"; + throw 'module ' + id + ' already defined'; } modules[id] = { @@ -92,8 +90,8 @@ var require, define.moduleMap = modules; })(); -//Export for use in node -if (typeof module === "object" && typeof require === "function") { +// Export for use in node +if (typeof module === 'object' && typeof require === 'function') { module.exports.require = require; module.exports.define = define; } @@ -103,15 +101,13 @@ define("cordova", function(require, exports, module) { // Workaround for Windows 10 in hosted environment case // http://www.w3.org/html/wg/drafts/html/master/browsers.html#named-access-on-the-window-object -if (window.cordova && !(window.cordova instanceof HTMLElement)) { - throw new Error("cordova already defined"); +if (window.cordova && !(window.cordova instanceof HTMLElement)) { // eslint-disable-line no-undef + throw new Error('cordova already defined'); } - var channel = require('cordova/channel'); var platform = require('cordova/platform'); - /** * Intercept calls to addEventListener + removeEventListener and handle deviceready, * resume, and pause events. @@ -124,48 +120,48 @@ var m_window_removeEventListener = window.removeEventListener; /** * Houses custom event handlers to intercept on document + window event listeners. */ -var documentEventHandlers = {}, - windowEventHandlers = {}; +var documentEventHandlers = {}; +var windowEventHandlers = {}; -document.addEventListener = function(evt, handler, capture) { +document.addEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { + if (typeof documentEventHandlers[e] !== 'undefined') { documentEventHandlers[e].subscribe(handler); } else { m_document_addEventListener.call(document, evt, handler, capture); } }; -window.addEventListener = function(evt, handler, capture) { +window.addEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { + if (typeof windowEventHandlers[e] !== 'undefined') { windowEventHandlers[e].subscribe(handler); } else { m_window_addEventListener.call(window, evt, handler, capture); } }; -document.removeEventListener = function(evt, handler, capture) { +document.removeEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { + if (typeof documentEventHandlers[e] !== 'undefined') { documentEventHandlers[e].unsubscribe(handler); } else { m_document_removeEventListener.call(document, evt, handler, capture); } }; -window.removeEventListener = function(evt, handler, capture) { +window.removeEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { + if (typeof windowEventHandlers[e] !== 'undefined') { windowEventHandlers[e].unsubscribe(handler); } else { m_window_removeEventListener.call(window, evt, handler, capture); } }; -function createEvent(type, data) { +function createEvent (type, data) { var event = document.createEvent('Events'); event.initEvent(type, false, false); if (data) { @@ -178,29 +174,32 @@ function createEvent(type, data) { return event; } - +/* eslint-disable no-undef */ var cordova = { - define:define, - require:require, - version:PLATFORM_VERSION_BUILD_LABEL, - platformVersion:PLATFORM_VERSION_BUILD_LABEL, - platformId:platform.id, + define: define, + require: require, + version: PLATFORM_VERSION_BUILD_LABEL, + platformVersion: PLATFORM_VERSION_BUILD_LABEL, + platformId: platform.id, + + /* eslint-enable no-undef */ + /** * Methods to add/remove your own addEventListener hijacking on document + window. */ - addWindowEventHandler:function(event) { + addWindowEventHandler: function (event) { return (windowEventHandlers[event] = channel.create(event)); }, - addStickyDocumentEventHandler:function(event) { + addStickyDocumentEventHandler: function (event) { return (documentEventHandlers[event] = channel.createSticky(event)); }, - addDocumentEventHandler:function(event) { + addDocumentEventHandler: function (event) { return (documentEventHandlers[event] = channel.create(event)); }, - removeWindowEventHandler:function(event) { + removeWindowEventHandler: function (event) { delete windowEventHandlers[event]; }, - removeDocumentEventHandler:function(event) { + removeDocumentEventHandler: function (event) { delete documentEventHandlers[event]; }, /** @@ -208,24 +207,23 @@ var cordova = { * * @return object */ - getOriginalHandlers: function() { + getOriginalHandlers: function () { return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; + 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; }, /** * Method to fire event from native code * bNoDetach is required for events which cause an exception which needs to be caught in native code */ - fireDocumentEvent: function(type, data, bNoDetach) { + fireDocumentEvent: function (type, data, bNoDetach) { var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { + if (typeof documentEventHandlers[type] !== 'undefined') { + if (bNoDetach) { documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { + } else { + setTimeout(function () { // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { + if (type === 'deviceready') { document.dispatchEvent(evt); } documentEventHandlers[type].fire(evt); @@ -235,10 +233,10 @@ var cordova = { document.dispatchEvent(evt); } }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { + fireWindowEvent: function (type, data) { + var evt = createEvent(type, data); + if (typeof windowEventHandlers[type] !== 'undefined') { + setTimeout(function () { windowEventHandlers[type].fire(evt); }, 0); } else { @@ -252,7 +250,7 @@ var cordova = { // Randomize the starting callbackId to avoid collisions after refreshing or navigating. // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, + callbacks: {}, callbackStatus: { NO_RESULT: 0, OK: 1, @@ -269,14 +267,14 @@ var cordova = { /** * Called by native code when returning successful result from an action. */ - callbackSuccess: function(callbackId, args) { + callbackSuccess: function (callbackId, args) { cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); }, /** * Called by native code when returning error result from an action. */ - callbackError: function(callbackId, args) { + callbackError: function (callbackId, args) { // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. // Derive success from status. cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); @@ -285,11 +283,11 @@ var cordova = { /** * Called by native code when returning the result from an action. */ - callbackFromNative: function(callbackId, isSuccess, status, args, keepCallback) { + callbackFromNative: function (callbackId, isSuccess, status, args, keepCallback) { try { var callback = cordova.callbacks[callbackId]; if (callback) { - if (isSuccess && status == cordova.callbackStatus.OK) { + if (isSuccess && status === cordova.callbackStatus.OK) { callback.success && callback.success.apply(null, args); } else if (!isSuccess) { callback.fail && callback.fail.apply(null, args); @@ -306,26 +304,24 @@ var cordova = { delete cordova.callbacks[callbackId]; } } - } - catch (err) { - var msg = "Error in " + (isSuccess ? "Success" : "Error") + " callbackId: " + callbackId + " : " + err; + } catch (err) { + var msg = 'Error in ' + (isSuccess ? 'Success' : 'Error') + ' callbackId: ' + callbackId + ' : ' + err; console && console.log && console.log(msg); - cordova.fireWindowEvent("cordovacallbackerror", { 'message': msg }); + cordova.fireWindowEvent('cordovacallbackerror', { 'message': msg }); throw err; } }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { + addConstructor: function (func) { + channel.onCordovaReady.subscribe(function () { try { func(); - } catch(e) { - console.log("Failed to run constructor: " + e); + } catch (e) { + console.log('Failed to run constructor: ' + e); } }); } }; - module.exports = cordova; }); @@ -346,29 +342,29 @@ var typeMap = { 'O': 'Object' }; -function extractParamName(callee, argIndex) { +function extractParamName (callee, argIndex) { return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; } -function checkArgs(spec, functionName, args, opt_callee) { +function checkArgs (spec, functionName, args, opt_callee) { if (!moduleExports.enableChecks) { return; } var errMsg = null; var typeName; for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; + var c = spec.charAt(i); + var cUpper = c.toUpperCase(); + var arg = args[i]; // Asterix means allow anything. - if (c == '*') { + if (c === '*') { continue; } typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { + if ((arg === null || arg === undefined) && c === cUpper) { continue; } - if (typeName != typeMap[cUpper]) { + if (typeName !== typeMap[cUpper]) { errMsg = 'Expected ' + typeMap[cUpper]; break; } @@ -377,14 +373,14 @@ function checkArgs(spec, functionName, args, opt_callee) { errMsg += ', but got ' + typeName + '.'; errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { + if (typeof jasmine === 'undefined') { console.error(errMsg); } throw TypeError(errMsg); } } -function getValue(value, defaultValue) { +function getValue (value, defaultValue) { return value === undefined ? defaultValue : value; } @@ -392,7 +388,6 @@ moduleExports.checkArgs = checkArgs; moduleExports.getValue = getValue; moduleExports.enableChecks = true; - }); // file: src/common/base64.js @@ -400,58 +395,58 @@ define("cordova/base64", function(require, exports, module) { var base64 = exports; -base64.fromArrayBuffer = function(arrayBuffer) { +base64.fromArrayBuffer = function (arrayBuffer) { var array = new Uint8Array(arrayBuffer); return uint8ToBase64(array); }; -base64.toArrayBuffer = function(str) { - var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary'); +base64.toArrayBuffer = function (str) { + var decodedStr = typeof atob !== 'undefined' ? atob(str) : Buffer.from(str, 'base64').toString('binary'); // eslint-disable-line no-undef var arrayBuffer = new ArrayBuffer(decodedStr.length); var array = new Uint8Array(arrayBuffer); - for (var i=0, len=decodedStr.length; i < len; i++) { + for (var i = 0, len = decodedStr.length; i < len; i++) { array[i] = decodedStr.charCodeAt(i); } return arrayBuffer; }; -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ /* This code is based on the performance tests at http://jsperf.com/b64tests * This 12-bit-at-a-time algorithm was the best performing version on all * platforms tested. */ -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var b64_6bit = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var b64_12bit; -var b64_12bitTable = function() { +var b64_12bitTable = function () { b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; + for (var i = 0; i < 64; i++) { + for (var j = 0; j < 64; j++) { + b64_12bit[i * 64 + j] = b64_6bit[i] + b64_6bit[j]; } } - b64_12bitTable = function() { return b64_12bit; }; + b64_12bitTable = function () { return b64_12bit; }; return b64_12bit; }; -function uint8ToBase64(rawData) { +function uint8ToBase64 (rawData) { var numBytes = rawData.byteLength; - var output=""; + var output = ''; var segment; var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; + for (var i = 0; i < numBytes - 2; i += 3) { + segment = (rawData[i] << 16) + (rawData[i + 1] << 8) + rawData[i + 2]; output += table[segment >> 12]; output += table[segment & 0xfff]; } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); + if (numBytes - i === 2) { + segment = (rawData[i] << 16) + (rawData[i + 1] << 8); output += table[segment >> 12]; output += b64_6bit[(segment & 0xfff) >> 6]; output += '='; - } else if (numBytes - i == 1) { + } else if (numBytes - i === 1) { segment = (rawData[i] << 16); output += table[segment >> 12]; output += '=='; @@ -466,7 +461,7 @@ define("cordova/builder", function(require, exports, module) { var utils = require('cordova/utils'); -function each(objects, func, context) { +function each (objects, func, context) { for (var prop in objects) { if (objects.hasOwnProperty(prop)) { func.apply(context, [objects[prop], prop]); @@ -474,7 +469,7 @@ function each(objects, func, context) { } } -function clobber(obj, key, value) { +function clobber (obj, key, value) { exports.replaceHookForTesting(obj, key); var needsProperty = false; try { @@ -484,15 +479,15 @@ function clobber(obj, key, value) { } // Getters can only be overridden by getters. if (needsProperty || obj[key] !== value) { - utils.defineGetter(obj, key, function() { + utils.defineGetter(obj, key, function () { return value; }); } } -function assignOrWrapInDeprecateGetter(obj, key, value, message) { +function assignOrWrapInDeprecateGetter (obj, key, value, message) { if (message) { - utils.defineGetter(obj, key, function() { + utils.defineGetter(obj, key, function () { console.log(message); delete obj[key]; clobber(obj, key, value); @@ -503,7 +498,7 @@ function assignOrWrapInDeprecateGetter(obj, key, value, message) { } } -function include(parent, objects, clobber, merge) { +function include (parent, objects, clobber, merge) { each(objects, function (obj, key) { try { var result = obj.path ? require(obj.path) : {}; @@ -523,7 +518,7 @@ function include(parent, objects, clobber, merge) { result = parent[key]; } else { // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { + if (typeof parent[key] === 'undefined') { assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); } else { // Set result to what already exists, so we can build children into it if they exist. @@ -534,7 +529,7 @@ function include(parent, objects, clobber, merge) { if (obj.children) { include(result, obj.children, clobber, merge); } - } catch(e) { + } catch (e) { utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); } }); @@ -547,7 +542,7 @@ function include(parent, objects, clobber, merge) { * @param target Object to merge properties into. * @param src Object to merge properties from. */ -function recursiveMerge(target, src) { +function recursiveMerge (target, src) { for (var prop in src) { if (src.hasOwnProperty(prop)) { if (target.prototype && target.prototype.constructor === target) { @@ -564,26 +559,26 @@ function recursiveMerge(target, src) { } } -exports.buildIntoButDoNotClobber = function(objects, target) { +exports.buildIntoButDoNotClobber = function (objects, target) { include(target, objects, false, false); }; -exports.buildIntoAndClobber = function(objects, target) { +exports.buildIntoAndClobber = function (objects, target) { include(target, objects, true, false); }; -exports.buildIntoAndMerge = function(objects, target) { +exports.buildIntoAndMerge = function (objects, target) { include(target, objects, true, true); }; exports.recursiveMerge = recursiveMerge; exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; +exports.replaceHookForTesting = function () {}; }); // file: src/common/channel.js define("cordova/channel", function(require, exports, module) { -var utils = require('cordova/utils'), - nextGuid = 1; +var utils = require('cordova/utils'); +var nextGuid = 1; /** * Custom pub-sub "channel" that can have functions subscribed to it @@ -623,7 +618,7 @@ var utils = require('cordova/utils'), * @constructor * @param type String the channel name */ -var Channel = function(type, sticky) { +var Channel = function (type, sticky) { this.type = type; // Map of guid -> function. this.handlers = {}; @@ -636,72 +631,73 @@ var Channel = function(type, sticky) { // Function that is called when the first listener is subscribed, or when // the last listener is unsubscribed. this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); +}; +var channel = { + /** + * Calls the provided function only after all of the channels specified + * have been fired. All channels must be sticky channels. + */ + join: function (h, c) { + var len = c.length; + var i = len; + var f = function () { + if (!(--i)) h(); + }; + for (var j = 0; j < len; j++) { + if (c[j].state === 0) { + throw Error('Can only use join with sticky channels.'); } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, + c[j].subscribe(f); + } + if (!len) h(); + }, + /* eslint-disable no-return-assign */ + create: function (type) { + return channel[type] = new Channel(type, false); + }, + createSticky: function (type) { + return channel[type] = new Channel(type, true); + }, + /* eslint-enable no-return-assign */ + /** + * cordova Channels that must fire before "deviceready" is fired. + */ + deviceReadyChannelsArray: [], + deviceReadyChannelsMap: {}, - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, + /** + * Indicate that a feature needs to be initialized before it is ready to be used. + * This holds up Cordova's "deviceready" event until the feature has been initialized + * and Cordova.initComplete(feature) is called. + * + * @param feature {String} The unique feature name + */ + waitForInitialization: function (feature) { + if (feature) { + var c = channel[feature] || this.createSticky(feature); + this.deviceReadyChannelsMap[feature] = c; + this.deviceReadyChannelsArray.push(c); + } + }, - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } + /** + * Indicate that initialization code has completed and the feature is ready to be used. + * + * @param feature {String} The unique feature name + */ + initializationComplete: function (feature) { + var c = this.deviceReadyChannelsMap[feature]; + if (c) { + c.fire(); } - }; + } +}; -function checkSubscriptionArgument(argument) { - if (typeof argument !== "function" && typeof argument.handleEvent !== "function") { +function checkSubscriptionArgument (argument) { + if (typeof argument !== 'function' && typeof argument.handleEvent !== 'function') { throw new Error( - "Must provide a function or an EventListener object " + - "implementing the handleEvent interface." + 'Must provide a function or an EventListener object ' + + 'implementing the handleEvent interface.' ); } } @@ -713,11 +709,11 @@ function checkSubscriptionArgument(argument) { * and a guid that can be used to stop subscribing to the channel. * Returns the guid. */ -Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { +Channel.prototype.subscribe = function (eventListenerOrFunction, eventListener) { checkSubscriptionArgument(eventListenerOrFunction); var handleEvent, guid; - if (eventListenerOrFunction && typeof eventListenerOrFunction === "object") { + if (eventListenerOrFunction && typeof eventListenerOrFunction === 'object') { // Received an EventListener object implementing the handleEvent interface handleEvent = eventListenerOrFunction.handleEvent; eventListener = eventListenerOrFunction; @@ -726,13 +722,13 @@ Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { handleEvent = eventListenerOrFunction; } - if (this.state == 2) { + if (this.state === 2) { handleEvent.apply(eventListener || this, this.fireArgs); return; } guid = eventListenerOrFunction.observer_guid; - if (typeof eventListener === "object") { + if (typeof eventListener === 'object') { handleEvent = utils.close(eventListener, handleEvent); } @@ -747,7 +743,7 @@ Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { if (!this.handlers[guid]) { this.handlers[guid] = handleEvent; this.numHandlers++; - if (this.numHandlers == 1) { + if (this.numHandlers === 1) { this.onHasSubscribersChange && this.onHasSubscribersChange(); } } @@ -756,11 +752,11 @@ Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { /** * Unsubscribes the function with the given guid from the channel. */ -Channel.prototype.unsubscribe = function(eventListenerOrFunction) { +Channel.prototype.unsubscribe = function (eventListenerOrFunction) { checkSubscriptionArgument(eventListenerOrFunction); var handleEvent, guid, handler; - if (eventListenerOrFunction && typeof eventListenerOrFunction === "object") { + if (eventListenerOrFunction && typeof eventListenerOrFunction === 'object') { // Received an EventListener object implementing the handleEvent interface handleEvent = eventListenerOrFunction.handleEvent; } else { @@ -782,11 +778,11 @@ Channel.prototype.unsubscribe = function(eventListenerOrFunction) { /** * Calls all functions subscribed to this channel. */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); +Channel.prototype.fire = function (e) { + var fail = false; // eslint-disable-line no-unused-vars + var fireArgs = Array.prototype.slice.call(arguments); // Apply stickiness. - if (this.state == 1) { + if (this.state === 1) { this.state = 2; this.fireArgs = fireArgs; } @@ -800,7 +796,7 @@ Channel.prototype.fire = function(e) { for (var i = 0; i < toCall.length; ++i) { toCall[i].apply(this, fireArgs); } - if (this.state == 2 && this.numHandlers) { + if (this.state === 2 && this.numHandlers) { this.numHandlers = 0; this.handlers = {}; this.onHasSubscribersChange && this.onHasSubscribersChange(); @@ -808,7 +804,6 @@ Channel.prototype.fire = function(e) { } }; - // defining them here so they are ready super fast! // DOM event that is received when the web page is loaded and parsed. channel.createSticky('onDOMContentLoaded'); @@ -841,7 +836,7 @@ module.exports = channel; }); -// file: /Users/shazron/Documents/git/apache/cordova-ios/cordova-js-src/exec.js +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/exec.js define("cordova/exec", function(require, exports, module) { /*global require, module, atob, document */ @@ -1091,31 +1086,31 @@ module.exports = execProxy; // file: src/common/exec/proxy.js define("cordova/exec/proxy", function(require, exports, module) { - // internal map of proxy function var CommandProxyMap = {}; module.exports = { // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); + add: function (id, proxyObj) { + console.log('adding proxy for ' + id); CommandProxyMap[id] = proxyObj; return proxyObj; }, // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { + remove: function (id) { var proxy = CommandProxyMap[id]; delete CommandProxyMap[id]; CommandProxyMap[id] = null; return proxy; }, - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); + get: function (service, action) { + return (CommandProxyMap[service] ? CommandProxyMap[service][action] : null); } }; + }); // file: src/common/init.js @@ -1130,16 +1125,16 @@ var utils = require('cordova/utils'); var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; -function logUnfiredChannels(arr) { +function logUnfiredChannels (arr) { for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { + if (arr[i].state !== 2) { console.log('Channel not fired: ' + arr[i].type); } } } -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { +window.setTimeout(function () { + if (channel.onDeviceReady.state !== 2) { console.log('deviceready has not fired after 5 seconds.'); logUnfiredChannels(platformInitChannelsArray); logUnfiredChannels(channel.deviceReadyChannelsArray); @@ -1148,20 +1143,19 @@ window.setTimeout(function() { // Replace navigator before any modules are required(), to ensure it happens as soon as possible. // We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; +function replaceNavigator (origNavigator) { + var CordovaNavigator = function () {}; CordovaNavigator.prototype = origNavigator; var newNavigator = new CordovaNavigator(); // This work-around really only applies to new APIs that are newer than Function.bind. // Without it, APIs such as getGamepads() break. if (CordovaNavigator.bind) { for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { + if (typeof origNavigator[key] === 'function') { newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { + } else { + (function (k) { + utils.defineGetterSetter(newNavigator, key, function () { return origNavigator[k]; }); })(key); @@ -1177,12 +1171,12 @@ if (window.navigator) { if (!window.console) { window.console = { - log: function(){} + log: function () {} }; } if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); + window.console.warn = function (msg) { + this.log('warn: ' + msg); }; } @@ -1193,10 +1187,10 @@ channel.onActivated = cordova.addDocumentEventHandler('activated'); channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); // Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { +if (document.readyState === 'complete' || document.readyState === 'interactive') { channel.onDOMContentLoaded.fire(); } else { - document.addEventListener('DOMContentLoaded', function() { + document.addEventListener('DOMContentLoaded', function () { channel.onDOMContentLoaded.fire(); }, false); } @@ -1217,8 +1211,8 @@ platform.bootstrap && platform.bootstrap(); // Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. // The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { +setTimeout(function () { + pluginloader.load(function () { channel.onPluginsReady.fire(); }); }, 0); @@ -1226,7 +1220,7 @@ setTimeout(function() { /** * Create all cordova objects once native side is ready. */ -channel.join(function() { +channel.join(function () { modulemapper.mapModules(window); platform.initialize && platform.initialize(); @@ -1237,13 +1231,12 @@ channel.join(function() { // Fire onDeviceReady event once page has fully loaded, all // constructors have run and cordova info has been received from native // side. - channel.join(function() { + channel.join(function () { require('cordova').fireDocumentEvent('deviceready'); }, channel.deviceReadyChannelsArray); }, platformInitChannelsArray); - }); // file: src/common/init_b.js @@ -1261,16 +1254,16 @@ var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeRea // setting exec cordova.exec = require('cordova/exec'); -function logUnfiredChannels(arr) { +function logUnfiredChannels (arr) { for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { + if (arr[i].state !== 2) { console.log('Channel not fired: ' + arr[i].type); } } } -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { +window.setTimeout(function () { + if (channel.onDeviceReady.state !== 2) { console.log('deviceready has not fired after 5 seconds.'); logUnfiredChannels(platformInitChannelsArray); logUnfiredChannels(channel.deviceReadyChannelsArray); @@ -1279,20 +1272,19 @@ window.setTimeout(function() { // Replace navigator before any modules are required(), to ensure it happens as soon as possible. // We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; +function replaceNavigator (origNavigator) { + var CordovaNavigator = function () {}; CordovaNavigator.prototype = origNavigator; var newNavigator = new CordovaNavigator(); // This work-around really only applies to new APIs that are newer than Function.bind. // Without it, APIs such as getGamepads() break. if (CordovaNavigator.bind) { for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { + if (typeof origNavigator[key] === 'function') { newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { + } else { + (function (k) { + utils.defineGetterSetter(newNavigator, key, function () { return origNavigator[k]; }); })(key); @@ -1307,12 +1299,12 @@ if (window.navigator) { if (!window.console) { window.console = { - log: function(){} + log: function () {} }; } if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); + window.console.warn = function (msg) { + this.log('warn: ' + msg); }; } @@ -1323,10 +1315,10 @@ channel.onActivated = cordova.addDocumentEventHandler('activated'); channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); // Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { +if (document.readyState === 'complete' || document.readyState === 'interactive') { channel.onDOMContentLoaded.fire(); } else { - document.addEventListener('DOMContentLoaded', function() { + document.addEventListener('DOMContentLoaded', function () { channel.onDOMContentLoaded.fire(); }, false); } @@ -1343,8 +1335,8 @@ platform.bootstrap && platform.bootstrap(); // Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. // The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { +setTimeout(function () { + pluginloader.load(function () { channel.onPluginsReady.fire(); }); }, 0); @@ -1352,7 +1344,7 @@ setTimeout(function() { /** * Create all cordova objects once native side is ready. */ -channel.join(function() { +channel.join(function () { modulemapper.mapModules(window); platform.initialize && platform.initialize(); @@ -1363,7 +1355,7 @@ channel.join(function() { // Fire onDeviceReady event once page has fully loaded, all // constructors have run and cordova info has been received from native // side. - channel.join(function() { + channel.join(function () { require('cordova').fireDocumentEvent('deviceready'); }, channel.deviceReadyChannelsArray); @@ -1374,17 +1366,17 @@ channel.join(function() { // file: src/common/modulemapper.js define("cordova/modulemapper", function(require, exports, module) { -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; +var builder = require('cordova/builder'); +var moduleMap = define.moduleMap; // eslint-disable-line no-undef +var symbolList; +var deprecationMap; -exports.reset = function() { +exports.reset = function () { symbolList = []; deprecationMap = {}; }; -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { +function addEntry (strategy, moduleName, symbolPath, opt_deprecationMessage) { if (!(moduleName in moduleMap)) { throw new Error('Module ' + moduleName + ' does not exist.'); } @@ -1395,35 +1387,35 @@ function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { } // Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.clobbers = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('c', moduleName, symbolPath, opt_deprecationMessage); }; -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.merges = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('m', moduleName, symbolPath, opt_deprecationMessage); }; -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.defaults = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('d', moduleName, symbolPath, opt_deprecationMessage); }; -exports.runs = function(moduleName) { +exports.runs = function (moduleName) { addEntry('r', moduleName, null); }; -function prepareNamespace(symbolPath, context) { +function prepareNamespace (symbolPath, context) { if (!symbolPath) { return context; } var parts = symbolPath.split('.'); var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { + for (var i = 0, part; part = parts[i]; ++i) { // eslint-disable-line no-cond-assign cur = cur[part] = cur[part] || {}; } return cur; } -exports.mapModules = function(context) { +exports.mapModules = function (context) { var origSymbols = {}; context.CDV_origSymbols = origSymbols; for (var i = 0, len = symbolList.length; i < len; i += 3) { @@ -1431,7 +1423,7 @@ exports.mapModules = function(context) { var moduleName = symbolList[i + 1]; var module = require(moduleName); // <runs/> - if (strategy == 'r') { + if (strategy === 'r') { continue; } var symbolPath = symbolList[i + 2]; @@ -1443,9 +1435,9 @@ exports.mapModules = function(context) { var parentObj = prepareNamespace(namespace, context); var target = parentObj[lastName]; - if (strategy == 'm' && target) { + if (strategy === 'm' && target) { builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { + } else if ((strategy === 'd' && !target) || (strategy !== 'd')) { if (!(symbolPath in origSymbols)) { origSymbols[symbolPath] = target; } @@ -1454,7 +1446,7 @@ exports.mapModules = function(context) { } }; -exports.getOriginalSymbol = function(context, symbolPath) { +exports.getOriginalSymbol = function (context, symbolPath) { var origSymbols = context.CDV_origSymbols; if (origSymbols && (symbolPath in origSymbols)) { return origSymbols[symbolPath]; @@ -1469,22 +1461,21 @@ exports.getOriginalSymbol = function(context, symbolPath) { exports.reset(); - }); // file: src/common/modulemapper_b.js define("cordova/modulemapper_b", function(require, exports, module) { -var builder = require('cordova/builder'), - symbolList = [], - deprecationMap; +var builder = require('cordova/builder'); +var symbolList = []; +var deprecationMap; -exports.reset = function() { +exports.reset = function () { symbolList = []; deprecationMap = {}; }; -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { +function addEntry (strategy, moduleName, symbolPath, opt_deprecationMessage) { symbolList.push(strategy, moduleName, symbolPath); if (opt_deprecationMessage) { deprecationMap[symbolPath] = opt_deprecationMessage; @@ -1492,35 +1483,35 @@ function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { } // Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.clobbers = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('c', moduleName, symbolPath, opt_deprecationMessage); }; -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.merges = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('m', moduleName, symbolPath, opt_deprecationMessage); }; -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.defaults = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('d', moduleName, symbolPath, opt_deprecationMessage); }; -exports.runs = function(moduleName) { +exports.runs = function (moduleName) { addEntry('r', moduleName, null); }; -function prepareNamespace(symbolPath, context) { +function prepareNamespace (symbolPath, context) { if (!symbolPath) { return context; } var parts = symbolPath.split('.'); var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { + for (var i = 0, part; part = parts[i]; ++i) { // eslint-disable-line no-cond-assign cur = cur[part] = cur[part] || {}; } return cur; } -exports.mapModules = function(context) { +exports.mapModules = function (context) { var origSymbols = {}; context.CDV_origSymbols = origSymbols; for (var i = 0, len = symbolList.length; i < len; i += 3) { @@ -1528,7 +1519,7 @@ exports.mapModules = function(context) { var moduleName = symbolList[i + 1]; var module = require(moduleName); // <runs/> - if (strategy == 'r') { + if (strategy === 'r') { continue; } var symbolPath = symbolList[i + 2]; @@ -1540,9 +1531,9 @@ exports.mapModules = function(context) { var parentObj = prepareNamespace(namespace, context); var target = parentObj[lastName]; - if (strategy == 'm' && target) { + if (strategy === 'm' && target) { builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { + } else if ((strategy === 'd' && !target) || (strategy !== 'd')) { if (!(symbolPath in origSymbols)) { origSymbols[symbolPath] = target; } @@ -1551,7 +1542,7 @@ exports.mapModules = function(context) { } }; -exports.getOriginalSymbol = function(context, symbolPath) { +exports.getOriginalSymbol = function (context, symbolPath) { var origSymbols = context.CDV_origSymbols; if (origSymbols && (symbolPath in origSymbols)) { return origSymbols[symbolPath]; @@ -1566,19 +1557,531 @@ exports.getOriginalSymbol = function(context, symbolPath) { exports.reset(); - }); -// file: /Users/shazron/Documents/git/apache/cordova-ios/cordova-js-src/platform.js +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/platform.js define("cordova/platform", function(require, exports, module) { module.exports = { id: 'ios', - bootstrap: function() { + bootstrap: function () { + // Attach the console polyfill that is iOS-only to window.console + // see the file under plugin/ios/console.js + require('cordova/modulemapper').clobbers('cordova/plugin/ios/console', 'window.console'); + require('cordova/channel').onNativeReady.fire(); } }; +}); + +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/plugin/ios/console.js +define("cordova/plugin/ios/console", function(require, exports, module) { + +//------------------------------------------------------------------------------ + +var logger = require('cordova/plugin/ios/logger'); + +//------------------------------------------------------------------------------ +// 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]); + } +} + +}); + +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/plugin/ios/logger.js +define("cordova/plugin/ios/logger", function(require, exports, module) { + +//------------------------------------------------------------------------------ +// 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 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); }); @@ -1586,12 +2089,11 @@ module.exports = { define("cordova/pluginloader", function(require, exports, module) { var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); // Helper function to inject a <script> tag. // Exported for testing. -exports.injectScript = function(url, onload, onerror) { - var script = document.createElement("script"); +exports.injectScript = function (url, onload, onerror) { + var script = document.createElement('script'); // onload fires even when script fails loads with an error. script.onload = onload; // onerror fires for malformed URLs. @@ -1600,13 +2102,13 @@ exports.injectScript = function(url, onload, onerror) { document.head.appendChild(script); }; -function injectIfNecessary(id, url, onload, onerror) { +function injectIfNecessary (id, url, onload, onerror) { onerror = onerror || onload; - if (id in define.moduleMap) { + if (id in define.moduleMap) { // eslint-disable-line no-undef onload(); } else { - exports.injectScript(url, function() { - if (id in define.moduleMap) { + exports.injectScript(url, function () { + if (id in define.moduleMap) { // eslint-disable-line no-undef onload(); } else { onerror(); @@ -1615,9 +2117,9 @@ function injectIfNecessary(id, url, onload, onerror) { } } -function onScriptLoadingComplete(moduleList, finishPluginLoading) { +function onScriptLoadingComplete (moduleList, finishPluginLoading) { // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { + for (var i = 0, module; module = moduleList[i]; i++) { // eslint-disable-line no-cond-assign if (module.clobbers && module.clobbers.length) { for (var j = 0; j < module.clobbers.length; j++) { modulemapper.clobbers(module.id, module.clobbers[j]); @@ -1643,7 +2145,7 @@ function onScriptLoadingComplete(moduleList, finishPluginLoading) { // See plugman's plugin_loader.js for the details of this object. // This function is only called if the really is a plugins array that isn't empty. // Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { +function handlePluginsObject (path, moduleList, finishPluginLoading) { // Now inject the scripts. var scriptCounter = moduleList.length; @@ -1651,7 +2153,7 @@ function handlePluginsObject(path, moduleList, finishPluginLoading) { finishPluginLoading(); return; } - function scriptLoadedCallback() { + function scriptLoadedCallback () { if (!--scriptCounter) { onScriptLoadingComplete(moduleList, finishPluginLoading); } @@ -1662,13 +2164,13 @@ function handlePluginsObject(path, moduleList, finishPluginLoading) { } } -function findCordovaPath() { +function findCordovaPath () { var path = null; var scripts = document.getElementsByTagName('script'); var term = '/cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { + for (var n = scripts.length - 1; n > -1; n--) { var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007). - if (src.indexOf(term) == (src.length - term.length)) { + if (src.indexOf(term) === (src.length - term.length)) { path = src.substring(0, src.length - term.length) + '/'; break; } @@ -1679,19 +2181,18 @@ function findCordovaPath() { // Tries to load all plugins' js-modules. // This is an async process, but onDeviceReady is blocked on onPluginsReady. // onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { +exports.load = function (callback) { var pathPrefix = findCordovaPath(); if (pathPrefix === null) { console.log('Could not find cordova.js script tag. Plugin loading may fail.'); pathPrefix = ''; } - injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() { - var moduleList = require("cordova/plugin_list"); + injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function () { + var moduleList = require('cordova/plugin_list'); handlePluginsObject(pathPrefix, moduleList, callback); }, callback); }; - }); // file: src/common/pluginloader_b.js @@ -1701,14 +2202,14 @@ var modulemapper = require('cordova/modulemapper'); // Handler for the cordova_plugins.js content. // See plugman's plugin_loader.js for the details of this object. -function handlePluginsObject(moduleList) { +function handlePluginsObject (moduleList) { // if moduleList is not defined or empty, we've nothing to do if (!moduleList || !moduleList.length) { return; } // Loop through all the modules and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { + for (var i = 0, module; module = moduleList[i]; i++) { // eslint-disable-line no-cond-assign if (module.clobbers && module.clobbers.length) { for (var j = 0; j < module.clobbers.length; j++) { modulemapper.clobbers(module.id, module.clobbers[j]); @@ -1732,31 +2233,28 @@ function handlePluginsObject(moduleList) { // but the method accepts callback to be compatible with non-browserify flow. // onDeviceReady is blocked on onPluginsReady. onPluginsReady is fired when there are // no plugins to load, or they are all done. -exports.load = function(callback) { - var moduleList = require("cordova/plugin_list"); +exports.load = function (callback) { + var moduleList = require('cordova/plugin_list'); handlePluginsObject(moduleList); callback(); }; - }); // file: src/common/urlutil.js define("cordova/urlutil", function(require, exports, module) { - /** * For already absolute URLs, returns what is passed in. * For relative URLs, converts them to absolute ones. */ -exports.makeAbsolute = function makeAbsolute(url) { +exports.makeAbsolute = function makeAbsolute (url) { var anchorEl = document.createElement('a'); anchorEl.href = url; return anchorEl.href; }; - }); // file: src/common/utils.js @@ -1767,7 +2265,7 @@ var utils = exports; /** * Defines a property getter / setter for obj[key]. */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { +utils.defineGetterSetter = function (obj, key, getFunc, opt_setFunc) { if (Object.defineProperty) { var desc = { get: getFunc, @@ -1790,13 +2288,13 @@ utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { */ utils.defineGetter = utils.defineGetterSetter; -utils.arrayIndexOf = function(a, item) { +utils.arrayIndexOf = function (a, item) { if (a.indexOf) { return a.indexOf(item); } var len = a.length; for (var i = 0; i < len; ++i) { - if (a[i] == item) { + if (a[i] === item) { return i; } } @@ -1806,15 +2304,15 @@ utils.arrayIndexOf = function(a, item) { /** * Returns whether the item was found in the array. */ -utils.arrayRemove = function(a, item) { +utils.arrayRemove = function (a, item) { var index = utils.arrayIndexOf(a, item); - if (index != -1) { + if (index !== -1) { a.splice(index, 1); } - return index != -1; + return index !== -1; }; -utils.typeName = function(val) { +utils.typeName = function (val) { return Object.prototype.toString.call(val).slice(8, -1); }; @@ -1822,39 +2320,39 @@ utils.typeName = function(val) { * Returns an indication of whether the argument is an array or not */ utils.isArray = Array.isArray || - function(a) {return utils.typeName(a) == 'Array';}; + function (a) { return utils.typeName(a) === 'Array'; }; /** * Returns an indication of whether the argument is a Date or not */ -utils.isDate = function(d) { +utils.isDate = function (d) { return (d instanceof Date); }; /** * Does a deep clone of the object. */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { +utils.clone = function (obj) { + if (!obj || typeof obj === 'function' || utils.isDate(obj) || typeof obj !== 'object') { return obj; } var retVal, i; - if(utils.isArray(obj)){ + if (utils.isArray(obj)) { retVal = []; - for(i = 0; i < obj.length; ++i){ + for (i = 0; i < obj.length; ++i) { retVal.push(utils.clone(obj[i])); } return retVal; } retVal = {}; - for(i in obj){ + for (i in obj) { // https://issues.apache.org/jira/browse/CB-11522 'unknown' type may be returned in // custom protocol activation case on Windows Phone 8.1 causing "No such interface supported" exception // on cloning. - if((!(i in retVal) || retVal[i] != obj[i]) && typeof obj[i] != 'undefined' && typeof obj[i] != 'unknown') { + if ((!(i in retVal) || retVal[i] !== obj[i]) && typeof obj[i] !== 'undefined' && typeof obj[i] !== 'unknown') { // eslint-disable-line valid-typeof retVal[i] = utils.clone(obj[i]); } } @@ -1864,20 +2362,20 @@ utils.clone = function(obj) { /** * Returns a wrapped version of the function */ -utils.close = function(context, func, params) { - return function() { +utils.close = function (context, func, params) { + return function () { var args = params || arguments; return func.apply(context, args); }; }; -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { +// ------------------------------------------------------------------------------ +function UUIDcreatePart (length) { + var uuidpart = ''; + for (var i = 0; i < length; i++) { var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; + if (uuidchar.length === 1) { + uuidchar = '0' + uuidchar; } uuidpart += uuidchar; } @@ -1887,7 +2385,7 @@ function UUIDcreatePart(length) { /** * Create a UUID */ -utils.createUUID = function() { +utils.createUUID = function () { return UUIDcreatePart(4) + '-' + UUIDcreatePart(2) + '-' + UUIDcreatePart(2) + '-' + @@ -1895,16 +2393,15 @@ utils.createUUID = function() { UUIDcreatePart(6); }; - /** * Extends a child object from a parent object using classical inheritance * pattern. */ -utils.extend = (function() { +utils.extend = (function () { // proxy used to establish prototype chain - var F = function() {}; + var F = function () {}; // extend Child from Parent - return function(Child, Parent) { + return function (Child, Parent) { F.prototype = Parent.prototype; Child.prototype = new F(); @@ -1916,7 +2413,7 @@ utils.extend = (function() { /** * Alerts a message in any available way: alert or console.log. */ -utils.alert = function(msg) { +utils.alert = function (msg) { if (window.alert) { window.alert(msg); } else if (console && console.log) { @@ -1924,10 +2421,6 @@ utils.alert = function(msg) { } }; - - - - }); window.cordova = require('cordova'); diff --git a/StoneIsland/platforms/ios/Podfile b/StoneIsland/platforms/ios/Podfile index 28154f9f..65988dd6 100644 --- a/StoneIsland/platforms/ios/Podfile +++ b/StoneIsland/platforms/ios/Podfile @@ -2,5 +2,6 @@ platform :ios, '8.0' target 'Stone Island' do project 'Stone Island.xcodeproj' - pod 'FirebaseMessaging', '~> 2.0.0' + pod 'GoogleCloudMessaging', '~> 1.2.0' + pod 'GGLInstanceID', '~> 1.2.1' end diff --git a/StoneIsland/platforms/ios/Podfile.lock b/StoneIsland/platforms/ios/Podfile.lock index 14e0fb64..0fe15b8a 100644 --- a/StoneIsland/platforms/ios/Podfile.lock +++ b/StoneIsland/platforms/ios/Podfile.lock @@ -1,43 +1,30 @@ PODS: - - FirebaseAnalytics (4.0.2): - - FirebaseCore (~> 4.0) - - FirebaseInstanceID (~> 2.0) - - GoogleToolboxForMac/NSData+zlib (~> 2.1) - - FirebaseCore (4.0.4): - - GoogleToolboxForMac/NSData+zlib (~> 2.1) - - nanopb (~> 0.3) - - FirebaseInstanceID (2.0.0): - - FirebaseCore (~> 4.0) - - FirebaseMessaging (2.0.0): - - FirebaseAnalytics (~> 4.0) - - FirebaseCore (~> 4.0) - - FirebaseInstanceID (~> 2.0) - - GoogleToolboxForMac/Logger (~> 2.1) - - Protobuf (~> 3.1) - - GoogleToolboxForMac/Defines (2.1.1) - - GoogleToolboxForMac/Logger (2.1.1): - - GoogleToolboxForMac/Defines (= 2.1.1) - - GoogleToolboxForMac/NSData+zlib (2.1.1): - - GoogleToolboxForMac/Defines (= 2.1.1) - - nanopb (0.3.8): - - nanopb/decode (= 0.3.8) - - nanopb/encode (= 0.3.8) - - nanopb/decode (0.3.8) - - nanopb/encode (0.3.8) - - Protobuf (3.3.0) + - GGLInstanceID (1.2.1) + - GoogleCloudMessaging (1.2.0): + - GoogleInterchangeUtilities (~> 1.0) + - GoogleIPhoneUtilities (~> 1.0) + - GoogleSymbolUtilities (~> 1.0) + - GoogleInterchangeUtilities (1.2.2): + - GoogleSymbolUtilities (~> 1.1) + - GoogleIPhoneUtilities (1.2.1): + - GoogleSymbolUtilities (~> 1.0) + - GoogleUtilities (~> 1.0) + - GoogleSymbolUtilities (1.1.2) + - GoogleUtilities (1.3.2): + - GoogleSymbolUtilities (~> 1.1) DEPENDENCIES: - - FirebaseMessaging (~> 2.0.0) + - GGLInstanceID (~> 1.2.1) + - GoogleCloudMessaging (~> 1.2.0) SPEC CHECKSUMS: - FirebaseAnalytics: ad41720e3e67fc63fbe3d2948d3e26932a8de311 - FirebaseCore: cfc042628ef9f20debe09c0eb683135fcd404cb4 - FirebaseInstanceID: 9fbf536668f4d3f0880e7438456dabd1376e294b - FirebaseMessaging: 227406c05b0dc9290702d2e9f18ab5528f0c2cf2 - GoogleToolboxForMac: 8e329f1b599f2512c6b10676d45736bcc2cbbeb0 - nanopb: 5601e6bca2dbf1ed831b519092ec110f66982ca3 - Protobuf: d582fecf68201eac3d79ed61369ef45734394b9c + GGLInstanceID: 4a317044f744281b82cd03015f379899f277cad3 + GoogleCloudMessaging: f37ea14dd0f41d4d889c10b5559dd35bbfd9ac26 + GoogleInterchangeUtilities: d5bc4d88d5b661ab72f9d70c58d02ca8c27ad1f7 + GoogleIPhoneUtilities: 63f25e93a3ddcb66884d182aab3a660d98f1479b + GoogleSymbolUtilities: 631ee17048aa5e9ab133470d768ea997a5ef9b96 + GoogleUtilities: 8bbc733218aad26306f9d4a253823986110e3358 -PODFILE CHECKSUM: d30afd90d783c9b82bb259ff1fc6f66e54101279 +PODFILE CHECKSUM: 49a15453d072b09c3f930a9bd96e706663ee516a COCOAPODS: 1.2.0 diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics Binary files differdeleted file mode 100755 index 4a346c5d..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics +++ /dev/null diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h deleted file mode 100755 index d499af66..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +++ /dev/null @@ -1,62 +0,0 @@ -#import <Foundation/Foundation.h> - -#import "FIRAnalytics.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * Provides App Delegate handlers to be used in your App Delegate. - * - * To save time integrating Firebase Analytics in an application, Firebase Analytics does not - * require delegation implementation from the AppDelegate. Instead this is automatically done by - * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App - * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your app's Info.plist and setting - * it to NO, and adding the methods in this category to corresponding delegation handlers. - * - * To handle Universal Links, you must return YES in - * [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. - */ -@interface FIRAnalytics (AppDelegate) - -/** - * Handles events related to a URL session that are waiting to be processed. - * - * For optimal use of Firebase Analytics, call this method from the - * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler] - * method of the app delegate in your app. - * - * @param identifier The identifier of the URL session requiring attention. - * @param completionHandler The completion handler to call when you finish processing the events. - * Calling this completion handler lets the system know that your app's user interface is - * updated and a new snapshot can be taken. - */ -+ (void)handleEventsForBackgroundURLSession:(NSString *)identifier - completionHandler:(nullable void (^)(void))completionHandler; - -/** - * Handles the event when the app is launched by a URL. - * - * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and - * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on - * iOS 8.x and below) in your app. - * - * @param url The URL resource to open. This resource can be a network resource or a file. - */ -+ (void)handleOpenURL:(NSURL *)url; - -/** - * Handles the event when the app receives data associated with user activity that includes a - * Universal Link (on iOS 9.0 and above). - * - * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app - * delegate (on iOS 9.0 and above). - * - * @param userActivity The activity object containing the data associated with the task the user - * was performing. - */ -+ (void)handleUserActivity:(id)userActivity; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h deleted file mode 100755 index b6d22671..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +++ /dev/null @@ -1,114 +0,0 @@ -#import <Foundation/Foundation.h> - -#import "FIRAnalyticsSwiftNameSupport.h" -#import "FIREventNames.h" -#import "FIRParameterNames.h" -#import "FIRUserPropertyNames.h" - -NS_ASSUME_NONNULL_BEGIN - -/// The top level Firebase Analytics singleton that provides methods for logging events and setting -/// user properties. See <a href="http://goo.gl/gz8SLz">the developer guides</a> for general -/// information on using Firebase Analytics in your apps. -FIR_SWIFT_NAME(Analytics) -@interface FIRAnalytics : NSObject - -/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have -/// the same parameters. Up to 500 event names are supported. Using predefined events and/or -/// parameters is recommended for optimal reporting. -/// -/// The following event names are reserved and cannot be used: -/// <ul> -/// <li>ad_activeview</li> -/// <li>ad_click</li> -/// <li>ad_exposure</li> -/// <li>ad_impression</li> -/// <li>ad_query</li> -/// <li>adunit_exposure</li> -/// <li>app_clear_data</li> -/// <li>app_remove</li> -/// <li>app_update</li> -/// <li>error</li> -/// <li>first_open</li> -/// <li>in_app_purchase</li> -/// <li>notification_dismiss</li> -/// <li>notification_foreground</li> -/// <li>notification_open</li> -/// <li>notification_receive</li> -/// <li>os_update</li> -/// <li>screen_view</li> -/// <li>session_start</li> -/// <li>user_engagement</li> -/// </ul> -/// -/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or -/// underscores. The name must start with an alphabetic character. Some event names are -/// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_", -/// "google_", and "ga_" prefixes are reserved and should not be used. Note that event names are -/// case-sensitive and that logging two events whose names differ only in case will result in -/// two distinct events. -/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has -/// no parameters. Parameter names can be up to 40 characters long and must start with an -/// alphabetic character and contain only alphanumeric characters and underscores. Only NSString -/// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are -/// supported. NSString parameter values can be up to 100 characters long. The "firebase_", -/// "google_", and "ga_" prefixes are reserved and should not be used for parameter names. -+ (void)logEventWithName:(NSString *)name - parameters:(nullable NSDictionary<NSString *, id> *)parameters - FIR_SWIFT_NAME(logEvent(_:parameters:)); - -/// Sets a user property to a given value. Up to 25 user property names are supported. Once set, -/// user property values persist throughout the app lifecycle and across sessions. -/// -/// The following user property names are reserved and cannot be used: -/// <ul> -/// <li>first_open_time</li> -/// <li>last_deep_link_referrer</li> -/// <li>user_id</li> -/// </ul> -/// -/// @param value The value of the user property. Values can be up to 36 characters long. Setting the -/// value to nil removes the user property. -/// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters -/// or underscores and must start with an alphabetic character. The "firebase_", "google_", and -/// "ga_" prefixes are reserved and should not be used for user property names. -+ (void)setUserPropertyString:(nullable NSString *)value forName:(NSString *)name - FIR_SWIFT_NAME(setUserProperty(_:forName:)); - -/// Sets the user ID property. This feature must be used in accordance with -/// <a href="https://www.google.com/policies/privacy">Google's Privacy Policy</a> -/// -/// @param userID The user ID to ascribe to the user of this app on this device, which must be -/// non-empty and no more than 36 characters long. Setting userID to nil removes the user ID. -+ (void)setUserID:(nullable NSString *)userID; - -/// Sets the current screen name, which specifies the current visual context in your app. This helps -/// identify the areas in your app where users spend their time and how they interact with your app. -/// -/// Note that screen reporting is enabled automatically and records the class name of the current -/// UIViewController for you without requiring you to call this method. If you implement -/// viewDidAppear in your UIViewController but do not call [super viewDidAppear:], that screen class -/// will not be automatically tracked. The class name can optionally be overridden by calling this -/// method in the viewDidAppear callback of your UIViewController and specifying the -/// screenClassOverride parameter. -/// -/// If your app does not use a distinct UIViewController for each screen, you should call this -/// method and specify a distinct screenName each time a new screen is presented to the user. -/// -/// The screen name and screen class remain in effect until the current UIViewController changes or -/// a new call to setScreenName:screenClass: is made. -/// -/// @param screenName The name of the current screen. Should contain 1 to 100 characters. Set to nil -/// to clear the current screen name. -/// @param screenClassOverride The name of the screen class. Should contain 1 to 100 characters. By -/// default this is the class name of the current UIViewController. Set to nil to revert to the -/// default class name. -+ (void)setScreenName:(nullable NSString *)screenName - screenClass:(nullable NSString *)screenClassOverride; - -/// The unique ID for this instance of the application. -+ (NSString *)appInstanceID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h deleted file mode 100755 index dc227a4c..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -#import <FirebaseCore/FIRAnalyticsConfiguration.h> diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalyticsSwiftNameSupport.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalyticsSwiftNameSupport.h deleted file mode 100755 index 50fbf2e2..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalyticsSwiftNameSupport.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef FIR_SWIFT_NAME - -#import <Foundation/Foundation.h> - -// NS_SWIFT_NAME can only translate factory methods before the iOS 9.3 SDK. -// Wrap it in our own macro if it's a non-compatible SDK. -#ifdef __IPHONE_9_3 -#define FIR_SWIFT_NAME(X) NS_SWIFT_NAME(X) -#else -#define FIR_SWIFT_NAME(X) // Intentionally blank. -#endif // #ifdef __IPHONE_9_3 - -#endif // FIR_SWIFT_NAME diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRApp.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRApp.h deleted file mode 100755 index de24da17..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRApp.h +++ /dev/null @@ -1 +0,0 @@ -#import <FirebaseCore/FIRApp.h> diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRConfiguration.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRConfiguration.h deleted file mode 100755 index be2ff7bf..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -#import <FirebaseCore/FIRConfiguration.h> diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIREventNames.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIREventNames.h deleted file mode 100755 index ac4e0abf..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIREventNames.h +++ /dev/null @@ -1,391 +0,0 @@ -/// @file FIREventNames.h -/// -/// Predefined event names. -/// -/// An Event is an important occurrence in your app that you want to measure. You can report up to -/// 500 different types of Events per app and you can associate up to 25 unique parameters with each -/// Event type. Some common events are suggested below, but you may also choose to specify custom -/// Event types that are associated with your specific app. Each event type is identified by a -/// unique name. Event names can be up to 40 characters long, may only contain alphanumeric -/// characters and underscores ("_"), and must start with an alphabetic character. The "firebase_", -/// "google_", and "ga_" prefixes are reserved and should not be used. - -#import "FIRAnalyticsSwiftNameSupport.h" - -/// Add Payment Info event. This event signifies that a user has submitted their payment information -/// to your app. -static NSString *const kFIREventAddPaymentInfo FIR_SWIFT_NAME(AnalyticsEventAddPaymentInfo) = - @"add_payment_info"; - -/// E-Commerce Add To Cart event. This event signifies that an item was added to a cart for -/// purchase. Add this event to a funnel with kFIREventEcommercePurchase to gauge the effectiveness -/// of your checkout process. Note: If you supply the @c kFIRParameterValue parameter, you must -/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed -/// accurately. Params: -/// -/// <ul> -/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li> -/// <li>@c kFIRParameterItemID (NSString)</li> -/// <li>@c kFIRParameterItemName (NSString)</li> -/// <li>@c kFIRParameterItemCategory (NSString)</li> -/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li> -/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterCurrency (NSString) (optional)</li> -/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterOrigin (NSString) (optional)</li> -/// <li>@c kFIRParameterDestination (NSString) (optional)</li> -/// <li>@c kFIRParameterStartDate (NSString) (optional)</li> -/// <li>@c kFIRParameterEndDate (NSString) (optional)</li> -/// </ul> -static NSString *const kFIREventAddToCart FIR_SWIFT_NAME(AnalyticsEventAddToCart) = @"add_to_cart"; - -/// E-Commerce Add To Wishlist event. This event signifies that an item was added to a wishlist. -/// Use this event to identify popular gift items in your app. Note: If you supply the -/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency -/// parameter so that revenue metrics can be computed accurately. Params: -/// -/// <ul> -/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li> -/// <li>@c kFIRParameterItemID (NSString)</li> -/// <li>@c kFIRParameterItemName (NSString)</li> -/// <li>@c kFIRParameterItemCategory (NSString)</li> -/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li> -/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterCurrency (NSString) (optional)</li> -/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li> -/// </ul> -static NSString *const kFIREventAddToWishlist FIR_SWIFT_NAME(AnalyticsEventAddToWishlist) = - @"add_to_wishlist"; - -/// App Open event. By logging this event when an App is moved to the foreground, developers can -/// understand how often users leave and return during the course of a Session. Although Sessions -/// are automatically reported, this event can provide further clarification around the continuous -/// engagement of app-users. -static NSString *const kFIREventAppOpen FIR_SWIFT_NAME(AnalyticsEventAppOpen) = @"app_open"; - -/// E-Commerce Begin Checkout event. This event signifies that a user has begun the process of -/// checking out. Add this event to a funnel with your kFIREventEcommercePurchase event to gauge the -/// effectiveness of your checkout process. Note: If you supply the @c kFIRParameterValue -/// parameter, you must also supply the @c kFIRParameterCurrency parameter so that revenue -/// metrics can be computed accurately. Params: -/// -/// <ul> -/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterCurrency (NSString) (optional)</li> -/// <li>@c kFIRParameterTransactionID (NSString) (optional)</li> -/// <li>@c kFIRParameterStartDate (NSString) (optional)</li> -/// <li>@c kFIRParameterEndDate (NSString) (optional)</li> -/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for -/// hotel bookings</li> -/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for -/// hotel bookings</li> -/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) -/// for travel bookings</li> -/// <li>@c kFIRParameterOrigin (NSString) (optional)</li> -/// <li>@c kFIRParameterDestination (NSString) (optional)</li> -/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li> -/// </ul> -static NSString *const kFIREventBeginCheckout FIR_SWIFT_NAME(AnalyticsEventBeginCheckout) = - @"begin_checkout"; - -/// Campaign Detail event. Log this event to supply the referral details of a re-engagement -/// campaign. Note: you must supply at least one of the required parameters kFIRParameterSource, -/// kFIRParameterMedium or kFIRParameterCampaign. Params: -/// -/// <ul> -/// <li>@c kFIRParameterSource (NSString)</li> -/// <li>@c kFIRParameterMedium (NSString)</li> -/// <li>@c kFIRParameterCampaign (NSString)</li> -/// <li>@c kFIRParameterTerm (NSString) (optional)</li> -/// <li>@c kFIRParameterContent (NSString) (optional)</li> -/// <li>@c kFIRParameterAdNetworkClickID (NSString) (optional)</li> -/// <li>@c kFIRParameterCP1 (NSString) (optional)</li> -/// </ul> -static NSString *const kFIREventCampaignDetails FIR_SWIFT_NAME(AnalyticsEventCampaignDetails) = - @"campaign_details"; - -/// Checkout progress. Params: -/// -/// <ul> -/// <li>@c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)</li> -/// <li>@c kFIRParameterCheckoutOption (NSString) (optional)</li> -/// </ul> -static NSString *const kFIREventCheckoutProgress FIR_SWIFT_NAME(AnalyticsEventCheckoutProgress) = - @"checkout_progress"; - -/// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log -/// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy. -/// Params: -/// -/// <ul> -/// <li>@c kFIRParameterVirtualCurrencyName (NSString)</li> -/// <li>@c kFIRParameterValue (signed 64-bit integer or double as NSNumber)</li> -/// </ul> -static NSString *const kFIREventEarnVirtualCurrency - FIR_SWIFT_NAME(AnalyticsEventEarnVirtualCurrency) = @"earn_virtual_currency"; - -/// E-Commerce Purchase event. This event signifies that an item was purchased by a user. Note: -/// This is different from the in-app purchase event, which is reported automatically for App -/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also -/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed -/// accurately. Params: -/// -/// <ul> -/// <li>@c kFIRParameterCurrency (NSString) (optional)</li> -/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterTransactionID (NSString) (optional)</li> -/// <li>@c kFIRParameterTax (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterShipping (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterCoupon (NSString) (optional)</li> -/// <li>@c kFIRParameterLocation (NSString) (optional)</li> -/// <li>@c kFIRParameterStartDate (NSString) (optional)</li> -/// <li>@c kFIRParameterEndDate (NSString) (optional)</li> -/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for -/// hotel bookings</li> -/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for -/// hotel bookings</li> -/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) -/// for travel bookings</li> -/// <li>@c kFIRParameterOrigin (NSString) (optional)</li> -/// <li>@c kFIRParameterDestination (NSString) (optional)</li> -/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li> -/// </ul> -static NSString *const kFIREventEcommercePurchase FIR_SWIFT_NAME(AnalyticsEventEcommercePurchase) = - @"ecommerce_purchase"; - -/// Generate Lead event. Log this event when a lead has been generated in the app to understand the -/// efficacy of your install and re-engagement campaigns. Note: If you supply the -/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency -/// parameter so that revenue metrics can be computed accurately. Params: -/// -/// <ul> -/// <li>@c kFIRParameterCurrency (NSString) (optional)</li> -/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li> -/// </ul> -static NSString *const kFIREventGenerateLead FIR_SWIFT_NAME(AnalyticsEventGenerateLead) = - @"generate_lead"; - -/// Join Group event. Log this event when a user joins a group such as a guild, team or family. Use -/// this event to analyze how popular certain groups or social features are in your app. Params: -/// -/// <ul> -/// <li>@c kFIRParameterGroupID (NSString)</li> -/// </ul> -static NSString *const kFIREventJoinGroup FIR_SWIFT_NAME(AnalyticsEventJoinGroup) = @"join_group"; - -/// Level Up event. This event signifies that a player has leveled up in your gaming app. It can -/// help you gauge the level distribution of your userbase and help you identify certain levels that -/// are difficult to pass. Params: -/// -/// <ul> -/// <li>@c kFIRParameterLevel (signed 64-bit integer as NSNumber)</li> -/// <li>@c kFIRParameterCharacter (NSString) (optional)</li> -/// </ul> -static NSString *const kFIREventLevelUp FIR_SWIFT_NAME(AnalyticsEventLevelUp) = @"level_up"; - -/// Login event. Apps with a login feature can report this event to signify that a user has logged -/// in. -static NSString *const kFIREventLogin FIR_SWIFT_NAME(AnalyticsEventLogin) = @"login"; - -/// Post Score event. Log this event when the user posts a score in your gaming app. This event can -/// help you understand how users are actually performing in your game and it can help you correlate -/// high scores with certain audiences or behaviors. Params: -/// -/// <ul> -/// <li>@c kFIRParameterScore (signed 64-bit integer as NSNumber)</li> -/// <li>@c kFIRParameterLevel (signed 64-bit integer as NSNumber) (optional)</li> -/// <li>@c kFIRParameterCharacter (NSString) (optional)</li> -/// </ul> -static NSString *const kFIREventPostScore FIR_SWIFT_NAME(AnalyticsEventPostScore) = @"post_score"; - -/// Present Offer event. This event signifies that the app has presented a purchase offer to a user. -/// Add this event to a funnel with the kFIREventAddToCart and kFIREventEcommercePurchase to gauge -/// your conversion process. Note: If you supply the @c kFIRParameterValue parameter, you must -/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed -/// accurately. Params: -/// -/// <ul> -/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li> -/// <li>@c kFIRParameterItemID (NSString)</li> -/// <li>@c kFIRParameterItemName (NSString)</li> -/// <li>@c kFIRParameterItemCategory (NSString)</li> -/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li> -/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterCurrency (NSString) (optional)</li> -/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li> -/// </ul> -static NSString *const kFIREventPresentOffer FIR_SWIFT_NAME(AnalyticsEventPresentOffer) = - @"present_offer"; - -/// E-Commerce Purchase Refund event. This event signifies that an item purchase was refunded. -/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the -/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. -/// Params: -/// -/// <ul> -/// <li>@c kFIRParameterCurrency (NSString) (optional)</li> -/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterTransactionID (NSString) (optional)</li> -/// </ul> -static NSString *const kFIREventPurchaseRefund FIR_SWIFT_NAME(AnalyticsEventPurchaseRefund) = - @"purchase_refund"; - -/// Remove from cart event. Params: -/// -/// <ul> -/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li> -/// <li>@c kFIRParameterItemID (NSString)</li> -/// <li>@c kFIRParameterItemName (NSString)</li> -/// <li>@c kFIRParameterItemCategory (NSString)</li> -/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li> -/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterCurrency (NSString) (optional)</li> -/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterOrigin (NSString) (optional)</li> -/// <li>@c kFIRParameterDestination (NSString) (optional)</li> -/// <li>@c kFIRParameterStartDate (NSString) (optional)</li> -/// <li>@c kFIRParameterEndDate (NSString) (optional)</li> -/// </ul> -static NSString *const kFIREventRemoveFromCart FIR_SWIFT_NAME(AnalyticsEventRemoveFromCart) = - @"remove_from_cart"; - -/// Search event. Apps that support search features can use this event to contextualize search -/// operations by supplying the appropriate, corresponding parameters. This event can help you -/// identify the most popular content in your app. Params: -/// -/// <ul> -/// <li>@c kFIRParameterSearchTerm (NSString)</li> -/// <li>@c kFIRParameterStartDate (NSString) (optional)</li> -/// <li>@c kFIRParameterEndDate (NSString) (optional)</li> -/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for -/// hotel bookings</li> -/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for -/// hotel bookings</li> -/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) -/// for travel bookings</li> -/// <li>@c kFIRParameterOrigin (NSString) (optional)</li> -/// <li>@c kFIRParameterDestination (NSString) (optional)</li> -/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li> -/// </ul> -static NSString *const kFIREventSearch FIR_SWIFT_NAME(AnalyticsEventSearch) = @"search"; - -/// Select Content event. This general purpose event signifies that a user has selected some content -/// of a certain type in an app. The content can be any object in your app. This event can help you -/// identify popular content and categories of content in your app. Params: -/// -/// <ul> -/// <li>@c kFIRParameterContentType (NSString)</li> -/// <li>@c kFIRParameterItemID (NSString)</li> -/// </ul> -static NSString *const kFIREventSelectContent FIR_SWIFT_NAME(AnalyticsEventSelectContent) = - @"select_content"; - -/// Set checkout option. Params: -/// -/// <ul> -/// <li>@c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)</li> -/// <li>@c kFIRParameterCheckoutOption (NSString)</li> -/// </ul> -static NSString *const kFIREventSetCheckoutOption FIR_SWIFT_NAME(AnalyticsEventSetCheckoutOption) = - @"set_checkout_option"; - -/// Share event. Apps with social features can log the Share event to identify the most viral -/// content. Params: -/// -/// <ul> -/// <li>@c kFIRParameterContentType (NSString)</li> -/// <li>@c kFIRParameterItemID (NSString)</li> -/// </ul> -static NSString *const kFIREventShare FIR_SWIFT_NAME(AnalyticsEventShare) = @"share"; - -/// Sign Up event. This event indicates that a user has signed up for an account in your app. The -/// parameter signifies the method by which the user signed up. Use this event to understand the -/// different behaviors between logged in and logged out users. Params: -/// -/// <ul> -/// <li>@c kFIRParameterSignUpMethod (NSString)</li> -/// </ul> -static NSString *const kFIREventSignUp FIR_SWIFT_NAME(AnalyticsEventSignUp) = @"sign_up"; - -/// Spend Virtual Currency event. This event tracks the sale of virtual goods in your app and can -/// help you identify which virtual goods are the most popular objects of purchase. Params: -/// -/// <ul> -/// <li>@c kFIRParameterItemName (NSString)</li> -/// <li>@c kFIRParameterVirtualCurrencyName (NSString)</li> -/// <li>@c kFIRParameterValue (signed 64-bit integer or double as NSNumber)</li> -/// </ul> -static NSString *const kFIREventSpendVirtualCurrency - FIR_SWIFT_NAME(AnalyticsEventSpendVirtualCurrency) = @"spend_virtual_currency"; - -/// Tutorial Begin event. This event signifies the start of the on-boarding process in your app. Use -/// this in a funnel with kFIREventTutorialComplete to understand how many users complete this -/// process and move on to the full app experience. -static NSString *const kFIREventTutorialBegin FIR_SWIFT_NAME(AnalyticsEventTutorialBegin) = - @"tutorial_begin"; - -/// Tutorial End event. Use this event to signify the user's completion of your app's on-boarding -/// process. Add this to a funnel with kFIREventTutorialBegin to gauge the completion rate of your -/// on-boarding process. -static NSString *const kFIREventTutorialComplete FIR_SWIFT_NAME(AnalyticsEventTutorialComplete) = - @"tutorial_complete"; - -/// Unlock Achievement event. Log this event when the user has unlocked an achievement in your -/// game. Since achievements generally represent the breadth of a gaming experience, this event can -/// help you understand how many users are experiencing all that your game has to offer. Params: -/// -/// <ul> -/// <li>@c kFIRParameterAchievementID (NSString)</li> -/// </ul> -static NSString *const kFIREventUnlockAchievement FIR_SWIFT_NAME(AnalyticsEventUnlockAchievement) = - @"unlock_achievement"; - -/// View Item event. This event signifies that some content was shown to the user. This content may -/// be a product, a webpage or just a simple image or text. Use the appropriate parameters to -/// contextualize the event. Use this event to discover the most popular items viewed in your app. -/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the -/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. -/// Params: -/// -/// <ul> -/// <li>@c kFIRParameterItemID (NSString)</li> -/// <li>@c kFIRParameterItemName (NSString)</li> -/// <li>@c kFIRParameterItemCategory (NSString)</li> -/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li> -/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber) (optional)</li> -/// <li>@c kFIRParameterCurrency (NSString) (optional)</li> -/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li> -/// <li>@c kFIRParameterStartDate (NSString) (optional)</li> -/// <li>@c kFIRParameterEndDate (NSString) (optional)</li> -/// <li>@c kFIRParameterFlightNumber (NSString) (optional) for travel bookings</li> -/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) -/// for travel bookings</li> -/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for -/// travel bookings</li> -/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for -/// travel bookings</li> -/// <li>@c kFIRParameterOrigin (NSString) (optional)</li> -/// <li>@c kFIRParameterDestination (NSString) (optional)</li> -/// <li>@c kFIRParameterSearchTerm (NSString) (optional) for travel bookings</li> -/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li> -/// </ul> -static NSString *const kFIREventViewItem FIR_SWIFT_NAME(AnalyticsEventViewItem) = @"view_item"; - -/// View Item List event. Log this event when the user has been presented with a list of items of a -/// certain category. Params: -/// -/// <ul> -/// <li>@c kFIRParameterItemCategory (NSString)</li> -/// </ul> -static NSString *const kFIREventViewItemList FIR_SWIFT_NAME(AnalyticsEventViewItemList) = - @"view_item_list"; - -/// View Search Results event. Log this event when the user has been presented with the results of a -/// search. Params: -/// -/// <ul> -/// <li>@c kFIRParameterSearchTerm (NSString)</li> -/// </ul> -static NSString *const kFIREventViewSearchResults FIR_SWIFT_NAME(AnalyticsEventViewSearchResults) = - @"view_search_results"; diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIROptions.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIROptions.h deleted file mode 100755 index 126824b0..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIROptions.h +++ /dev/null @@ -1 +0,0 @@ -#import <FirebaseCore/FIROptions.h> diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h deleted file mode 100755 index 44d60b1c..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +++ /dev/null @@ -1,487 +0,0 @@ -/// @file FIRParameterNames.h -/// -/// Predefined event parameter names. -/// -/// Params supply information that contextualize Events. You can associate up to 25 unique Params -/// with each Event type. Some Params are suggested below for certain common Events, but you are -/// not limited to these. You may supply extra Params for suggested Events or custom Params for -/// Custom events. Param names can be up to 40 characters long, may only contain alphanumeric -/// characters and underscores ("_"), and must start with an alphabetic character. Param values can -/// be up to 100 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and -/// should not be used. - -#import "FIRAnalyticsSwiftNameSupport.h" - -/// Game achievement ID (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterAchievementID : @"10_matches_won", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterAchievementID FIR_SWIFT_NAME(AnalyticsParameterAchievementID) = - @"achievement_id"; - -/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format. -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterAdNetworkClickID : @"1234567", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterAdNetworkClickID - FIR_SWIFT_NAME(AnalyticsParameterAdNetworkClickID) = @"aclid"; - -/// The store or affiliation from which this transaction occurred (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterAffiliation : @"Google Store", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterAffiliation FIR_SWIFT_NAME(AnalyticsParameterAffiliation) = - @"affiliation"; - -/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to -/// capture campaign information, otherwise can be populated by developer. Highly Recommended -/// (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterCampaign : @"winter_promotion", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterCampaign FIR_SWIFT_NAME(AnalyticsParameterCampaign) = - @"campaign"; - -/// Character used in game (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterCharacter : @"beat_boss", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterCharacter FIR_SWIFT_NAME(AnalyticsParameterCharacter) = - @"character"; - -/// The checkout step (1..N) (unsigned 64-bit integer as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterCheckoutStep : @"1", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterCheckoutStep FIR_SWIFT_NAME(AnalyticsParameterCheckoutStep) = - @"checkout_step"; - -/// Some option on a step in an ecommerce flow (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterCheckoutOption : @"Visa", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterCheckoutOption - FIR_SWIFT_NAME(AnalyticsParameterCheckoutOption) = @"checkout_option"; - -/// Campaign content (NSString). -static NSString *const kFIRParameterContent FIR_SWIFT_NAME(AnalyticsParameterContent) = @"content"; - -/// Type of content selected (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterContentType : @"news article", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterContentType FIR_SWIFT_NAME(AnalyticsParameterContentType) = - @"content_type"; - -/// Coupon code for a purchasable item (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterCoupon : @"zz123", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterCoupon FIR_SWIFT_NAME(AnalyticsParameterCoupon) = @"coupon"; - -/// Campaign custom parameter (NSString). Used as a method of capturing custom data in a campaign. -/// Use varies by network. -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterCP1 : @"custom_data", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterCP1 FIR_SWIFT_NAME(AnalyticsParameterCP1) = @"cp1"; - -/// The name of a creative used in a promotional spot (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterCreativeName : @"Summer Sale", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterCreativeName FIR_SWIFT_NAME(AnalyticsParameterCreativeName) = - @"creative_name"; - -/// The name of a creative slot (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterCreativeSlot : @"summer_banner2", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterCreativeSlot FIR_SWIFT_NAME(AnalyticsParameterCreativeSlot) = - @"creative_slot"; - -/// Purchase currency in 3-letter <a href="http://en.wikipedia.org/wiki/ISO_4217#Active_codes"> -/// ISO_4217</a> format (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterCurrency : @"USD", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterCurrency FIR_SWIFT_NAME(AnalyticsParameterCurrency) = - @"currency"; - -/// Flight or Travel destination (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterDestination : @"Mountain View, CA", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterDestination FIR_SWIFT_NAME(AnalyticsParameterDestination) = - @"destination"; - -/// The arrival date, check-out date or rental end date for the item. This should be in -/// YYYY-MM-DD format (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterEndDate : @"2015-09-14", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterEndDate FIR_SWIFT_NAME(AnalyticsParameterEndDate) = @"end_date"; - -/// Flight number for travel events (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterFlightNumber : @"ZZ800", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterFlightNumber FIR_SWIFT_NAME(AnalyticsParameterFlightNumber) = - @"flight_number"; - -/// Group/clan/guild ID (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterGroupID : @"g1", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterGroupID FIR_SWIFT_NAME(AnalyticsParameterGroupID) = @"group_id"; - -/// Index of an item in a list (signed 64-bit integer as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterIndex : @(1), -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterIndex FIR_SWIFT_NAME(AnalyticsParameterIndex) = @"index"; - -/// Item brand (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterItemBrand : @"Google", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterItemBrand FIR_SWIFT_NAME(AnalyticsParameterItemBrand) = - @"item_brand"; - -/// Item category (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterItemCategory : @"t-shirts", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterItemCategory FIR_SWIFT_NAME(AnalyticsParameterItemCategory) = - @"item_category"; - -/// Item ID (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterItemID : @"p7654", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterItemID FIR_SWIFT_NAME(AnalyticsParameterItemID) = @"item_id"; - -/// The Google <a href="https://developers.google.com/places/place-id">Place ID</a> (NSString) that -/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID. -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterItemLocationID - FIR_SWIFT_NAME(AnalyticsParameterItemLocationID) = @"item_location_id"; - -/// Item name (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterItemName : @"abc", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterItemName FIR_SWIFT_NAME(AnalyticsParameterItemName) = - @"item_name"; - -/// The list in which the item was presented to the user (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterItemList : @"Search Results", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterItemList FIR_SWIFT_NAME(AnalyticsParameterItemList) = - @"item_list"; - -/// Item variant (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterItemVariant : @"Red", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterItemVariant FIR_SWIFT_NAME(AnalyticsParameterItemVariant) = - @"item_variant"; - -/// Level in game (signed 64-bit integer as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterLevel : @(42), -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterLevel FIR_SWIFT_NAME(AnalyticsParameterLevel) = @"level"; - -/// Location (NSString). The Google <a href="https://developers.google.com/places/place-id">Place ID -/// </a> that corresponds to the associated event. Alternatively, you can supply your own custom -/// Location ID. -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterLocation FIR_SWIFT_NAME(AnalyticsParameterLocation) = - @"location"; - -/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended -/// (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterMedium : @"email", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterMedium FIR_SWIFT_NAME(AnalyticsParameterMedium) = @"medium"; - -/// Number of nights staying at hotel (signed 64-bit integer as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterNumberOfNights : @(3), -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterNumberOfNights - FIR_SWIFT_NAME(AnalyticsParameterNumberOfNights) = @"number_of_nights"; - -/// Number of passengers traveling (signed 64-bit integer as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterNumberOfPassengers : @(11), -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterNumberOfPassengers - FIR_SWIFT_NAME(AnalyticsParameterNumberOfPassengers) = @"number_of_passengers"; - -/// Number of rooms for travel events (signed 64-bit integer as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterNumberOfRooms : @(2), -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterNumberOfRooms FIR_SWIFT_NAME(AnalyticsParameterNumberOfRooms) = - @"number_of_rooms"; - -/// Flight or Travel origin (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterOrigin : @"Mountain View, CA", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterOrigin FIR_SWIFT_NAME(AnalyticsParameterOrigin) = @"origin"; - -/// Purchase price (double as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterPrice : @(1.0), -/// kFIRParameterCurrency : @"USD", // e.g. $1.00 USD -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterPrice FIR_SWIFT_NAME(AnalyticsParameterPrice) = @"price"; - -/// Purchase quantity (signed 64-bit integer as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterQuantity : @(1), -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterQuantity FIR_SWIFT_NAME(AnalyticsParameterQuantity) = - @"quantity"; - -/// Score in game (signed 64-bit integer as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterScore : @(4200), -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterScore FIR_SWIFT_NAME(AnalyticsParameterScore) = @"score"; - -/// The search string/keywords used (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterSearchTerm : @"periodic table", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterSearchTerm FIR_SWIFT_NAME(AnalyticsParameterSearchTerm) = - @"search_term"; - -/// Shipping cost (double as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterShipping : @(9.50), -/// kFIRParameterCurrency : @"USD", // e.g. $9.50 USD -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterShipping FIR_SWIFT_NAME(AnalyticsParameterShipping) = - @"shipping"; - -/// Sign up method (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterSignUpMethod : @"google", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterSignUpMethod FIR_SWIFT_NAME(AnalyticsParameterSignUpMethod) = - @"sign_up_method"; - -/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban -/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your -/// property. Highly recommended (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterSource : @"InMobi", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterSource FIR_SWIFT_NAME(AnalyticsParameterSource) = @"source"; - -/// The departure date, check-in date or rental start date for the item. This should be in -/// YYYY-MM-DD format (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterStartDate : @"2015-09-14", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterStartDate FIR_SWIFT_NAME(AnalyticsParameterStartDate) = - @"start_date"; - -/// Tax amount (double as NSNumber). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterTax : @(1.0), -/// kFIRParameterCurrency : @"USD", // e.g. $1.00 USD -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterTax FIR_SWIFT_NAME(AnalyticsParameterTax) = @"tax"; - -/// If you're manually tagging keyword campaigns, you should use utm_term to specify the keyword -/// (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterTerm : @"game", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterTerm FIR_SWIFT_NAME(AnalyticsParameterTerm) = @"term"; - -/// A single ID for a ecommerce group transaction (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterTransactionID : @"ab7236dd9823", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterTransactionID FIR_SWIFT_NAME(AnalyticsParameterTransactionID) = - @"transaction_id"; - -/// Travel class (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterTravelClass : @"business", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterTravelClass FIR_SWIFT_NAME(AnalyticsParameterTravelClass) = - @"travel_class"; - -/// A context-specific numeric value which is accumulated automatically for each event type. This is -/// a general purpose parameter that is useful for accumulating a key metric that pertains to an -/// event. Examples include revenue, distance, time and points. Value should be specified as signed -/// 64-bit integer or double as NSNumber. Notes: Values for pre-defined currency-related events -/// (such as @c kFIREventAddToCart) should be supplied using double as NSNumber and must be -/// accompanied by a @c kFIRParameterCurrency parameter. The valid range of accumulated values is -/// [-9,223,372,036,854.77, 9,223,372,036,854.77]. Supplying a non-numeric value, omitting the -/// corresponding @c kFIRParameterCurrency parameter, or supplying an invalid -/// <a href="https://goo.gl/qqX3J2">currency code</a> for conversion events will cause that -/// conversion to be omitted from reporting. -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterValue : @(3.99), -/// kFIRParameterCurrency : @"USD", // e.g. $3.99 USD -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterValue FIR_SWIFT_NAME(AnalyticsParameterValue) = @"value"; - -/// Name of virtual currency type (NSString). -/// <pre> -/// NSDictionary *params = @{ -/// kFIRParameterVirtualCurrencyName : @"virtual_currency_name", -/// // ... -/// }; -/// </pre> -static NSString *const kFIRParameterVirtualCurrencyName - FIR_SWIFT_NAME(AnalyticsParameterVirtualCurrencyName) = @"virtual_currency_name"; diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h deleted file mode 100755 index a2286354..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +++ /dev/null @@ -1,17 +0,0 @@ -/// @file FIRUserPropertyNames.h -/// -/// Predefined user property names. -/// -/// A UserProperty is an attribute that describes the app-user. By supplying UserProperties, you can -/// later analyze different behaviors of various segments of your userbase. You may supply up to 25 -/// unique UserProperties per app, and you can use the name and value of your choosing for each one. -/// UserProperty names can be up to 24 characters long, may only contain alphanumeric characters and -/// underscores ("_"), and must start with an alphabetic character. UserProperty values can be up to -/// 36 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and should not -/// be used. - -#import "FIRAnalyticsSwiftNameSupport.h" - -/// The method used to sign in. For example, "google", "facebook" or "twitter". -static NSString *const kFIRUserPropertySignUpMethod - FIR_SWIFT_NAME(AnalyticsUserPropertySignUpMethod) = @"sign_up_method"; diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h deleted file mode 100755 index e1e96f6d..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +++ /dev/null @@ -1,10 +0,0 @@ -#import "FIRAnalyticsConfiguration.h" -#import "FIRApp.h" -#import "FIRConfiguration.h" -#import "FIROptions.h" -#import "FIRAnalytics+AppDelegate.h" -#import "FIRAnalytics.h" -#import "FIRAnalyticsSwiftNameSupport.h" -#import "FIREventNames.h" -#import "FIRParameterNames.h" -#import "FIRUserPropertyNames.h" diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap deleted file mode 100755 index 6394d59e..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap +++ /dev/null @@ -1,8 +0,0 @@ -framework module FirebaseAnalytics { - umbrella header "FirebaseAnalytics.h" - export * - module * { export *} - link "sqlite3" - link "z" - link framework "UIKit" -}
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/FirebaseCore b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/FirebaseCore Binary files differdeleted file mode 100755 index 7561ad5a..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/FirebaseCore +++ /dev/null diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h deleted file mode 100755 index f42eaf54..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2017 Google - * - * 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. - */ - -#import <Foundation/Foundation.h> - -#import "FIRCoreSwiftNameSupport.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * This class provides configuration fields for Firebase Analytics. - */ -FIR_SWIFT_NAME(AnalyticsConfiguration) -@interface FIRAnalyticsConfiguration : NSObject - -/** - * Returns the shared instance of FIRAnalyticsConfiguration. - */ -+ (FIRAnalyticsConfiguration *)sharedInstance FIR_SWIFT_NAME(shared()); - -/** - * Sets the minimum engagement time in seconds required to start a new session. The default value - * is 10 seconds. - */ -- (void)setMinimumSessionInterval:(NSTimeInterval)minimumSessionInterval; - -/** - * Sets the interval of inactivity in seconds that terminates the current session. The default - * value is 1800 seconds (30 minutes). - */ -- (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; - -/** - * Sets whether analytics collection is enabled for this app on this device. This setting is - * persisted across app sessions. By default it is enabled. - */ -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRApp.h b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRApp.h deleted file mode 100755 index 8f52e1aa..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRApp.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google - * - * 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. - */ - -#import <Foundation/Foundation.h> - -#if TARGET_OS_IOS -// TODO: Remove UIKit import on next breaking change release -#import <UIKit/UIKit.h> -#endif - -#import "FIRCoreSwiftNameSupport.h" - -@class FIROptions; - -NS_ASSUME_NONNULL_BEGIN - -/** A block that takes a BOOL and has no return value. */ -typedef void (^FIRAppVoidBoolCallback)(BOOL success) FIR_SWIFT_NAME(FirebaseAppVoidBoolCallback); - -/** - * The entry point of Firebase SDKs. - * - * Initialize and configure FIRApp using +[FIRApp configure] - * or other customized ways as shown below. - * - * The logging system has two modes: default mode and debug mode. In default mode, only logs with - * log level Notice, Warning and Error will be sent to device. In debug mode, all logs will be sent - * to device. The log levels that Firebase uses are consistent with the ASL log levels. - * - * Enable debug mode by passing the -FIRDebugEnabled argument to the application. You can add this - * argument in the application's Xcode scheme. When debug mode is enabled via -FIRDebugEnabled, - * further executions of the application will also be in debug mode. In order to return to default - * mode, you must explicitly disable the debug mode with the application argument -FIRDebugDisabled. - * - * It is also possible to change the default logging level in code by calling setLoggerLevel: on - * the FIRConfiguration interface. - */ -FIR_SWIFT_NAME(FirebaseApp) -@interface FIRApp : NSObject - -/** - * Configures a default Firebase app. Raises an exception if any configuration step fails. The - * default app is named "__FIRAPP_DEFAULT". This method should be called after the app is launched - * and before using Firebase services. This method is thread safe. - */ -+ (void)configure; - -/** - * Configures the default Firebase app with the provided options. The default app is named - * "__FIRAPP_DEFAULT". Raises an exception if any configuration step fails. This method is thread - * safe. - * - * @param options The Firebase application options used to configure the service. - */ -+ (void)configureWithOptions:(FIROptions *)options FIR_SWIFT_NAME(configure(options:)); - -/** - * Configures a Firebase app with the given name and options. Raises an exception if any - * configuration step fails. This method is thread safe. - * - * @param name The application's name given by the developer. The name should should only contain - Letters, Numbers and Underscore. - * @param options The Firebase application options used to configure the services. - */ -+ (void)configureWithName:(NSString *)name options:(FIROptions *)options - FIR_SWIFT_NAME(configure(name:options:)); - -/** - * Returns the default app, or nil if the default app does not exist. - */ -+ (nullable FIRApp *)defaultApp FIR_SWIFT_NAME(app()); - -/** - * Returns a previously created FIRApp instance with the given name, or nil if no such app exists. - * This method is thread safe. - */ -+ (nullable FIRApp *)appNamed:(NSString *)name FIR_SWIFT_NAME(app(name:)); - -#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 -/** - * Returns the set of all extant FIRApp instances, or nil if there are no FIRApp instances. This - * method is thread safe. - */ -@property(class, readonly, nullable) NSDictionary <NSString *, FIRApp *> *allApps; -#else -/** - * Returns the set of all extant FIRApp instances, or nil if there are no FIRApp instances. This - * method is thread safe. - */ -+ (nullable NSDictionary <NSString *, FIRApp *> *)allApps FIR_SWIFT_NAME(allApps()); -#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -/** - * Cleans up the current FIRApp, freeing associated data and returning its name to the pool for - * future use. This method is thread safe. - */ -- (void)deleteApp:(FIRAppVoidBoolCallback)completion; - -/** - * FIRApp instances should not be initialized directly. Call +[FIRApp configure], - * +[FIRApp configureWithOptions:], or +[FIRApp configureWithNames:options:] directly. - */ -- (instancetype)init NS_UNAVAILABLE; - -/** - * Gets the name of this app. - */ -@property(nonatomic, copy, readonly) NSString *name; - -/** - * Gets a copy of the options for this app. These are non-modifiable. - */ -@property(nonatomic, copy, readonly) FIROptions *options; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRConfiguration.h b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRConfiguration.h deleted file mode 100755 index 496b2118..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRConfiguration.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2017 Google - * - * 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. - */ - -#import <Foundation/Foundation.h> - -#import "FIRAnalyticsConfiguration.h" -#import "FIRCoreSwiftNameSupport.h" -#import "FIRLoggerLevel.h" - -/** - * The log levels used by FIRConfiguration. - */ -typedef NS_ENUM(NSInteger, FIRLogLevel) { - /** Error */ - kFIRLogLevelError __deprecated = 0, - /** Warning */ - kFIRLogLevelWarning __deprecated, - /** Info */ - kFIRLogLevelInfo __deprecated, - /** Debug */ - kFIRLogLevelDebug __deprecated, - /** Assert */ - kFIRLogLevelAssert __deprecated, - /** Max */ - kFIRLogLevelMax __deprecated = kFIRLogLevelAssert -} DEPRECATED_MSG_ATTRIBUTE( - "Use -FIRDebugEnabled and -FIRDebugDisabled or setLoggerLevel. See FIRApp.h for more details."); - -NS_ASSUME_NONNULL_BEGIN - -/** - * This interface provides global level properties that the developer can tweak, and the singleton - * of the Firebase Analytics configuration class. - */ -FIR_SWIFT_NAME(FirebaseConfiguration) -@interface FIRConfiguration : NSObject - - -#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 -/** Returns the shared configuration object. */ -@property(class, nonatomic, readonly) FIRConfiguration *sharedInstance FIR_SWIFT_NAME(shared); -#else -/** Returns the shared configuration object. */ -+ (FIRConfiguration *)sharedInstance FIR_SWIFT_NAME(shared()); -#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -/** The configuration class for Firebase Analytics. */ -@property(nonatomic, readwrite) FIRAnalyticsConfiguration *analyticsConfiguration; - -/** Global log level. Defaults to kFIRLogLevelError. */ -@property(nonatomic, readwrite, assign) FIRLogLevel logLevel DEPRECATED_MSG_ATTRIBUTE( - "Use -FIRDebugEnabled and -FIRDebugDisabled or setLoggerLevel. See FIRApp.h for more details."); - -/** - * Sets the logging level for internal Firebase logging. Firebase will only log messages - * that are logged at or below loggerLevel. The messages are logged both to the Xcode - * console and to the device's log. Note that if an app is running from AppStore, it will - * never log above FIRLoggerLevelNotice even if loggerLevel is set to a higher (more verbose) - * setting. - * - * @param loggerLevel The maximum logging level. The default level is set to FIRLoggerLevelNotice. - */ -- (void)setLoggerLevel:(FIRLoggerLevel)loggerLevel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRCoreSwiftNameSupport.h b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRCoreSwiftNameSupport.h deleted file mode 100755 index 55e1bcc8..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRCoreSwiftNameSupport.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2017 Google - * - * 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. - */ - -#ifndef FIR_SWIFT_NAME - -#import <Foundation/Foundation.h> - -// NS_SWIFT_NAME can only translate factory methods before the iOS 9.3 SDK. -// Wrap it in our own macro if it's a non-compatible SDK. -#ifdef __IPHONE_9_3 -#define FIR_SWIFT_NAME(X) NS_SWIFT_NAME(X) -#else -#define FIR_SWIFT_NAME(X) // Intentionally blank. -#endif // #ifdef __IPHONE_9_3 - -#endif // FIR_SWIFT_NAME diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRLoggerLevel.h b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRLoggerLevel.h deleted file mode 100755 index 70e99eea..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRLoggerLevel.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2017 Google - * - * 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. - */ - -#import "FIRCoreSwiftNameSupport.h" - -/** - * The log levels used by internal logging. - */ -typedef NS_ENUM(NSInteger, FIRLoggerLevel) { - /** Error level, matches ASL_LEVEL_ERR. */ - FIRLoggerLevelError = 3, - /** Warning level, matches ASL_LEVEL_WARNING. */ - FIRLoggerLevelWarning = 4, - /** Notice level, matches ASL_LEVEL_NOTICE. */ - FIRLoggerLevelNotice = 5, - /** Info level, matches ASL_LEVEL_NOTICE. */ - FIRLoggerLevelInfo = 6, - /** Debug level, matches ASL_LEVEL_DEBUG. */ - FIRLoggerLevelDebug = 7, - /** Minimum log level. */ - FIRLoggerLevelMin = FIRLoggerLevelError, - /** Maximum log level. */ - FIRLoggerLevelMax = FIRLoggerLevelDebug -} FIR_SWIFT_NAME(FirebaseLoggerLevel); diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIROptions.h b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIROptions.h deleted file mode 100755 index 7bc24066..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIROptions.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2017 Google - * - * 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. - */ - -#import <Foundation/Foundation.h> - -#import "FIRCoreSwiftNameSupport.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * This class provides constant fields of Google APIs. - */ -FIR_SWIFT_NAME(FirebaseOptions) -@interface FIROptions : NSObject<NSCopying> - -/** - * Returns the default options. - */ -+ (nullable FIROptions *)defaultOptions FIR_SWIFT_NAME(defaultOptions()); - -/** - * An iOS API key used for authenticating requests from your app, e.g. - * @"AIzaSyDdVgKwhZl0sTTTLZ7iTmt1r3N2cJLnaDk", used to identify your app to Google servers. - */ -@property(nonatomic, copy, nullable) NSString *APIKey FIR_SWIFT_NAME(apiKey); - -/** - * The bundle ID for the application. Defaults to `[[NSBundle mainBundle] bundleID]` when not set - * manually or in a plist. - */ -@property(nonatomic, copy) NSString *bundleID; - -/** - * The OAuth2 client ID for iOS application used to authenticate Google users, for example - * @"12345.apps.googleusercontent.com", used for signing in with Google. - */ -@property(nonatomic, copy, nullable) NSString *clientID; - -/** - * The tracking ID for Google Analytics, e.g. @"UA-12345678-1", used to configure Google Analytics. - */ -@property(nonatomic, copy, nullable) NSString *trackingID; - -/** - * The Project Number from the Google Developer's console, for example @"012345678901", used to - * configure Google Cloud Messaging. - */ -@property(nonatomic, copy) NSString *GCMSenderID FIR_SWIFT_NAME(gcmSenderID); - -/** - * The Project ID from the Firebase console, for example @"abc-xyz-123". - */ -@property(nonatomic, copy, nullable) NSString *projectID; - -/** - * The Android client ID used in Google AppInvite when an iOS app has its Android version, for - * example @"12345.apps.googleusercontent.com". - */ -@property(nonatomic, copy, nullable) NSString *androidClientID; - -/** - * The Google App ID that is used to uniquely identify an instance of an app. - */ -@property(nonatomic, copy) NSString *googleAppID; - -/** - * The database root URL, e.g. @"http://abc-xyz-123.firebaseio.com". - */ -@property(nonatomic, copy, nullable) NSString *databaseURL; - -/** - * The URL scheme used to set up Durable Deep Link service. - */ -@property(nonatomic, copy, nullable) NSString *deepLinkURLScheme; - -/** - * The Google Cloud Storage bucket name, e.g. @"abc-xyz-123.storage.firebase.com". - */ -@property(nonatomic, copy, nullable) NSString *storageBucket; - -/** - * Initializes a customized instance of FIROptions with keys. googleAppID, bundleID and GCMSenderID - * are required. Other keys may required for configuring specific services. - */ -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID - bundleID:(NSString *)bundleID - GCMSenderID:(NSString *)GCMSenderID - APIKey:(NSString *)APIKey - clientID:(NSString *)clientID - trackingID:(NSString *)trackingID - androidClientID:(NSString *)androidClientID - databaseURL:(NSString *)databaseURL - storageBucket:(NSString *)storageBucket - deepLinkURLScheme:(NSString *)deepLinkURLScheme - DEPRECATED_MSG_ATTRIBUTE("Use `-[[FIROptions alloc] initWithGoogleAppID:GCMSenderID:]` " - "(`FirebaseOptions(googleAppID:gcmSenderID:)` in Swift)` and property " - "setters instead."); - -/** - * Initializes a customized instance of FIROptions from the file at the given plist file path. - * For example, - * NSString *filePath = - * [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; - * FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath]; - * Returns nil if the plist file does not exist or is invalid. - */ -- (nullable instancetype)initWithContentsOfFile:(NSString *)plistPath; - -/** - * Initializes a customized instance of FIROptions with required fields. Use the mutable properties - * to modify fields for configuring specific services. - */ -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID - GCMSenderID:(NSString *)GCMSenderID - FIR_SWIFT_NAME(init(googleAppID:gcmSenderID:)); - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FirebaseCore.h b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FirebaseCore.h deleted file mode 100755 index 20816292..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FirebaseCore.h +++ /dev/null @@ -1,6 +0,0 @@ -#import "FIRAnalyticsConfiguration.h" -#import "FIRApp.h" -#import "FIRConfiguration.h" -#import "FIRCoreSwiftNameSupport.h" -#import "FIRLoggerLevel.h" -#import "FIROptions.h" diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Modules/module.modulemap deleted file mode 100755 index 440f052c..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseCore { - umbrella header "FirebaseCore.h" - export * - module * { export *} - link "z" -}
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCoreDiagnostics.framework/FirebaseCoreDiagnostics b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCoreDiagnostics.framework/FirebaseCoreDiagnostics Binary files differdeleted file mode 100755 index f8b09d47..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCoreDiagnostics.framework/FirebaseCoreDiagnostics +++ /dev/null diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCoreDiagnostics.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCoreDiagnostics.framework/Modules/module.modulemap deleted file mode 100755 index 5855789c..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseCoreDiagnostics.framework/Modules/module.modulemap +++ /dev/null @@ -1,5 +0,0 @@ -framework module FirebaseCoreDiagnostics { - export * - module * { export *} - link "z" -}
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseNanoPB.framework/FirebaseNanoPB b/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseNanoPB.framework/FirebaseNanoPB Binary files differdeleted file mode 100755 index 13965a90..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseCore/Frameworks/FirebaseNanoPB.framework/FirebaseNanoPB +++ /dev/null diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/CHANGELOG.md b/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/CHANGELOG.md deleted file mode 100755 index ae14de96..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/CHANGELOG.md +++ /dev/null @@ -1,52 +0,0 @@ -# 2017-05-08 -- v2.0.0 -- Introduced an improved interface for Swift 3 developers -- Deprecated some methods and properties after moving their logic to the - Firebase Cloud Messaging SDK -- Fixed an intermittent stability issue when a debug build of an app was - replaced with a release build of the same version -- Removed swizzling logic that was sometimes resulting in developers receiving - a validation notice about enabling push notification capabilities, even though - they weren't using push notifications -- Fixed a notification that would sometimes fire twice in quick succession - during the first run of an app - -# 2017-03-31 -- v1.0.10 - -- Improvements to token-fetching logic -- Fixed some warnings in Instance ID -- Improved error messages if Instance ID couldn't be initialized properly -- Improvements to console logging - -# 2017-01-31 -- v1.0.9 - -- Removed an error being mistakenly logged to the console. - -# 2016-07-06 -- v1.0.8 - -- Don't store InstanceID plists in Documents folder. - -# 2016-06-19 -- v1.0.7 - -- Fix remote-notifications warning on app submission. - -# 2016-05-16 -- v1.0.6 - -- Fix CocoaPod linter issues for InstanceID pod. - -# 2016-05-13 -- v1.0.5 - -- Fix Authorization errors for InstanceID tokens. - -# 2016-05-11 -- v1.0.4 - -- Reduce wait for InstanceID token during parallel requests. - -# 2016-04-18 -- v1.0.3 - -- Change flag to disable swizzling to *FirebaseAppDelegateProxyEnabled*. -- Fix incessant Keychain errors while accessing InstanceID. -- Fix max retries for fetching IID token. - -# 2016-04-18 -- v1.0.2 - -- Register for remote notifications on iOS8+ in the SDK itself. diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/FirebaseInstanceID b/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/FirebaseInstanceID Binary files differdeleted file mode 100755 index 8bde6c14..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/FirebaseInstanceID +++ /dev/null diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h b/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h deleted file mode 100755 index 053ec2b1..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h +++ /dev/null @@ -1 +0,0 @@ -#import "FIRInstanceID.h" diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Modules/module.modulemap deleted file mode 100755 index c10be032..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseInstanceID { - umbrella header "FirebaseInstanceID.h" - export * - module * { export *} - link "z" -}
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/FirebaseMessaging b/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/FirebaseMessaging Binary files differdeleted file mode 100755 index 095a9fc4..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/FirebaseMessaging +++ /dev/null diff --git a/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Headers/FIRMessaging.h b/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Headers/FIRMessaging.h deleted file mode 100755 index 84d2526b..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Headers/FIRMessaging.h +++ /dev/null @@ -1,486 +0,0 @@ -/* - * Copyright 2017 Google - * - * 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. - */ - -#import <Foundation/Foundation.h> - - -// NS_SWIFT_NAME can only translate factory methods before the iOS 9.3 SDK. -// Wrap it in our own macro if it's a non-compatible SDK. -#ifndef FIR_SWIFT_NAME -#ifdef __IPHONE_9_3 -#define FIR_SWIFT_NAME(X) NS_SWIFT_NAME(X) -#else -#define FIR_SWIFT_NAME(X) // Intentionally blank. -#endif // #ifdef __IPHONE_9_3 -#endif // #ifndef FIR_SWIFT_NAME - -/** - * @related FIRMessaging - * - * The completion handler invoked when the registration token returns. - * If the call fails we return the appropriate `error code`, described by - * `FIRMessagingError`. - * - * @param FCMToken The valid registration token returned by FCM. - * @param error The error describing why a token request failed. The error code - * will match a value from the FIRMessagingError enumeration. - */ -typedef void(^FIRMessagingFCMTokenFetchCompletion)(NSString * _Nullable FCMToken, - NSError * _Nullable error) - FIR_SWIFT_NAME(MessagingFCMTokenFetchCompletion); - - -/** - * @related FIRMessaging - * - * The completion handler invoked when the registration token deletion request is - * completed. If the call fails we return the appropriate `error code`, described - * by `FIRMessagingError`. - * - * @param error The error describing why a token deletion failed. The error code - * will match a value from the FIRMessagingError enumeration. - */ -typedef void(^FIRMessagingDeleteFCMTokenCompletion)(NSError * _Nullable error) - FIR_SWIFT_NAME(MessagingDeleteFCMTokenCompletion); - -/** - * The completion handler invoked once the data connection with FIRMessaging is - * established. The data connection is used to send a continous stream of - * data and all the FIRMessaging data notifications arrive through this connection. - * Once the connection is established we invoke the callback with `nil` error. - * Correspondingly if we get an error while trying to establish a connection - * we invoke the handler with an appropriate error object and do an - * exponential backoff to try and connect again unless successful. - * - * @param error The error object if any describing why the data connection - * to FIRMessaging failed. - */ -typedef void(^FIRMessagingConnectCompletion)(NSError * __nullable error) - FIR_SWIFT_NAME(MessagingConnectCompletion) - __deprecated_msg("Please listen for the FIRMessagingConnectionStateChangedNotification " - "NSNotification instead."); - -#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 -/** - * Notification sent when the upstream message has been delivered - * successfully to the server. The notification object will be the messageID - * of the successfully delivered message. - */ -FOUNDATION_EXPORT const NSNotificationName __nonnull FIRMessagingSendSuccessNotification - FIR_SWIFT_NAME(MessagingSendSuccess); - -/** - * Notification sent when the upstream message was failed to be sent to the - * server. The notification object will be the messageID of the failed - * message. The userInfo dictionary will contain the relevant error - * information for the failure. - */ -FOUNDATION_EXPORT const NSNotificationName __nonnull FIRMessagingSendErrorNotification - FIR_SWIFT_NAME(MessagingSendError); - -/** - * Notification sent when the Firebase messaging server deletes pending - * messages due to exceeded storage limits. This may occur, for example, when - * the device cannot be reached for an extended period of time. - * - * It is recommended to retrieve any missing messages directly from the - * server. - */ -FOUNDATION_EXPORT const NSNotificationName __nonnull FIRMessagingMessagesDeletedNotification - FIR_SWIFT_NAME(MessagingMessagesDeleted); - -/** - * Notification sent when Firebase Messaging establishes or disconnects from - * an FCM socket connection. You can query the connection state in this - * notification by checking the `isDirectChannelEstablished` property of FIRMessaging. - */ -FOUNDATION_EXPORT const NSNotificationName __nonnull FIRMessagingConnectionStateChangedNotification - FIR_SWIFT_NAME(MessagingConnectionStateChanged); - -/** - * Notification sent when the FCM registration token has been refreshed. You can also - * receive the FCM token via the FIRMessagingDelegate method - * `-messaging:didRefreshRegistrationToken:` - */ -FOUNDATION_EXPORT const NSNotificationName __nonnull - FIRMessagingRegistrationTokenRefreshedNotification - FIR_SWIFT_NAME(MessagingRegistrationTokenRefreshed); -#else -/** - * Notification sent when the upstream message has been delivered - * successfully to the server. The notification object will be the messageID - * of the successfully delivered message. - */ -FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingSendSuccessNotification - FIR_SWIFT_NAME(MessagingSendSuccessNotification); - -/** - * Notification sent when the upstream message was failed to be sent to the - * server. The notification object will be the messageID of the failed - * message. The userInfo dictionary will contain the relevant error - * information for the failure. - */ -FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingSendErrorNotification - FIR_SWIFT_NAME(MessagingSendErrorNotification); - -/** - * Notification sent when the Firebase messaging server deletes pending - * messages due to exceeded storage limits. This may occur, for example, when - * the device cannot be reached for an extended period of time. - * - * It is recommended to retrieve any missing messages directly from the - * server. - */ -FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingMessagesDeletedNotification - FIR_SWIFT_NAME(MessagingMessagesDeletedNotification); - -/** - * Notification sent when Firebase Messaging establishes or disconnects from - * an FCM socket connection. You can query the connection state in this - * notification by checking the `isDirectChannelEstablished` property of FIRMessaging. - */ -FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingConnectionStateChangedNotification - FIR_SWIFT_NAME(MessagingConnectionStateChangedNotification); - -/** - * Notification sent when the FCM registration token has been refreshed. You can also - * receive the FCM token via the FIRMessagingDelegate method - * `-messaging:didRefreshRegistrationToken:` - */ -FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingRegistrationTokenRefreshedNotification - FIR_SWIFT_NAME(MessagingRegistrationTokenRefreshedNotification); -#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -/** - * @enum FIRMessagingError - */ -typedef NS_ENUM(NSUInteger, FIRMessagingError) { - /// Unknown error. - FIRMessagingErrorUnknown = 0, - - /// FIRMessaging couldn't validate request from this client. - FIRMessagingErrorAuthentication = 1, - - /// InstanceID service cannot be accessed. - FIRMessagingErrorNoAccess = 2, - - /// Request to InstanceID backend timed out. - FIRMessagingErrorTimeout = 3, - - /// No network available to reach the servers. - FIRMessagingErrorNetwork = 4, - - /// Another similar operation in progress, bailing this one. - FIRMessagingErrorOperationInProgress = 5, - - /// Some parameters of the request were invalid. - FIRMessagingErrorInvalidRequest = 7, -} FIR_SWIFT_NAME(MessagingError); - -/// Status for the downstream message received by the app. -typedef NS_ENUM(NSInteger, FIRMessagingMessageStatus) { - /// Unknown status. - FIRMessagingMessageStatusUnknown, - /// New downstream message received by the app. - FIRMessagingMessageStatusNew, -} FIR_SWIFT_NAME(MessagingMessageStatus); - -/** - * The APNS token type for the app. If the token type is set to `UNKNOWN` - * Firebase Messaging will implicitly try to figure out what the actual token type - * is from the provisioning profile. - * Unless you really need to specify the type, you should use the `APNSToken` - * property instead. - */ -typedef NS_ENUM(NSInteger, FIRMessagingAPNSTokenType) { - /// Unknown token type. - FIRMessagingAPNSTokenTypeUnknown, - /// Sandbox token type. - FIRMessagingAPNSTokenTypeSandbox, - /// Production token type. - FIRMessagingAPNSTokenTypeProd, -} FIR_SWIFT_NAME(MessagingAPNSTokenType); - -/// Information about a downstream message received by the app. -FIR_SWIFT_NAME(MessagingMessageInfo) -@interface FIRMessagingMessageInfo : NSObject - -/// The status of the downstream message -@property(nonatomic, readonly, assign) FIRMessagingMessageStatus status; - -@end - -/** - * A remote data message received by the app via FCM (not just the APNs interface). - * - * This is only for devices running iOS 10 or above. To support devices running iOS 9 or below, use - * the local and remote notifications handlers defined in UIApplicationDelegate protocol. - */ -FIR_SWIFT_NAME(MessagingRemoteMessage) -@interface FIRMessagingRemoteMessage : NSObject - -/// The downstream message received by the application. -@property(nonatomic, readonly, strong, nonnull) NSDictionary *appData; -@end - -@class FIRMessaging; -/** - * A protocol to handle events from FCM for devices running iOS 10 or above. - * - * To support devices running iOS 9 or below, use the local and remote notifications handlers - * defined in UIApplicationDelegate protocol. - */ -FIR_SWIFT_NAME(MessagingDelegate) -@protocol FIRMessagingDelegate <NSObject> - -/// This method will be called whenever FCM receives a new, default FCM token for your -/// Firebase project's Sender ID. -/// You can send this token to your application server to send notifications to this device. -- (void)messaging:(nonnull FIRMessaging *)messaging - didRefreshRegistrationToken:(nonnull NSString *)fcmToken - FIR_SWIFT_NAME(messaging(_:didRefreshRegistrationToken:)); - -@optional -/// This method is called on iOS 10 devices to handle data messages received via FCM through its -/// direct channel (not via APNS). For iOS 9 and below, the FCM data message is delivered via the -/// UIApplicationDelegate's -application:didReceiveRemoteNotification: method. -- (void)messaging:(nonnull FIRMessaging *)messaging - didReceiveMessage:(nonnull FIRMessagingRemoteMessage *)remoteMessage - FIR_SWIFT_NAME(messaging(_:didReceive:)) - __IOS_AVAILABLE(10.0); - -/// The callback to handle data message received via FCM for devices running iOS 10 or above. -- (void)applicationReceivedRemoteMessage:(nonnull FIRMessagingRemoteMessage *)remoteMessage - FIR_SWIFT_NAME(application(received:)) - __deprecated_msg("Use FIRMessagingDelegate’s -messaging:didReceiveMessage:"); - -@end - -/** - * Firebase Messaging lets you reliably deliver messages at no cost. - * - * To send or receive messages, the app must get a - * registration token from FIRInstanceID. This token authorizes an - * app server to send messages to an app instance. - * - * In order to receive FIRMessaging messages, declare `application:didReceiveRemoteNotification:`. - */ -FIR_SWIFT_NAME(Messaging) -@interface FIRMessaging : NSObject - -/** - * Delegate to handle FCM token refreshes, and remote data messages received via FCM for devices - * running iOS 10 or above. - */ -@property(nonatomic, weak, nullable) id<FIRMessagingDelegate> delegate; - - -/** - * Delegate to handle remote data messages received via FCM for devices running iOS 10 or above. - */ -@property(nonatomic, weak, nullable) id<FIRMessagingDelegate> remoteMessageDelegate - __deprecated_msg("Use 'delegate' property"); - -/** - * When set to YES, Firebase Messaging will automatically establish a socket-based, direct channel - * to the FCM server. You only need to enable this if you are sending upstream messages or - * receiving non-APNS, data-only messages in foregrounded apps. - * Default is NO. - */ -@property(nonatomic) BOOL shouldEstablishDirectChannel; - -/** - * Returns YES if the direct channel to the FCM server is active, NO otherwise. - */ -@property(nonatomic, readonly) BOOL isDirectChannelEstablished; - -/** - * FIRMessaging - * - * @return An instance of FIRMessaging. - */ -+ (nonnull instancetype)messaging FIR_SWIFT_NAME(messaging()); - -/** - * Unavailable. Use +messaging instead. - */ -- (nonnull instancetype)init __attribute__((unavailable("Use +messaging instead."))); - -#pragma mark - APNS - -/** - * This property is used to set the APNS Token received by the application delegate. - * - * FIRMessaging uses method swizzling to ensure the APNS token is set automatically. - * However, if you have disabled swizzling by setting `FirebaseAppDelegateProxyEnabled` - * to `NO` in your app's Info.plist, you should manually set the APNS token in your - * application delegate's -application:didRegisterForRemoteNotificationsWithDeviceToken: - * method. - * - * If you would like to set the type of the APNS token, rather than relying on automatic - * detection, see: -setAPNSToken:type:. - */ -@property(nonatomic, copy, nullable) NSData *APNSToken FIR_SWIFT_NAME(apnsToken); - -/** - * Set APNS token for the application. This APNS token will be used to register - * with Firebase Messaging using `FCMToken` or - * `tokenWithAuthorizedEntity:scope:options:handler`. - * - * @param apnsToken The APNS token for the application. - * @param type The type of APNS token. Debug builds should use - * FIRMessagingAPNSTokenTypeSandbox. Alternatively, you can supply - * FIRMessagingAPNSTokenTypeUnknown to have the type automatically - * detected based on your provisioning profile. - */ -- (void)setAPNSToken:(nonnull NSData *)apnsToken type:(FIRMessagingAPNSTokenType)type; - -#pragma mark - FCM Tokens - -/** - * The FCM token is used to identify this device so that FCM can send notifications to it. - * It is associated with your APNS token when the APNS token is supplied, so that sending - * messages to the FCM token will be delivered over APNS. - * - * The FCM token is sometimes refreshed automatically. You can be notified of these changes - * via the FIRMessagingDelegate method `-message:didRefreshRegistrationToken:`, or by - * listening for the `FIRMessagingRegistrationTokenRefreshedNotification` notification. - * - * Once you have an FCM token, you should send it to your application server, so it can use - * the FCM token to send notifications to your device. - */ -@property(nonatomic, readonly, nullable) NSString *FCMToken FIR_SWIFT_NAME(fcmToken); - - -/** - * Retrieves an FCM registration token for a particular Sender ID. This registration token is - * not cached by FIRMessaging. FIRMessaging should have an APNS token set before calling this - * to ensure that notifications can be delivered via APNS using this FCM token. You may - * re-retrieve the FCM token once you have the APNS token set, to associate it with the FCM - * token. The default FCM token is automatically associated with the APNS token, if the APNS - * token data is available. - * - * @param senderID The Sender ID for a particular Firebase project. - * @param completion The completion handler to handle the token request. - */ -- (void)retrieveFCMTokenForSenderID:(nonnull NSString *)senderID - completion:(nonnull FIRMessagingFCMTokenFetchCompletion)completion - FIR_SWIFT_NAME(retrieveFCMToken(forSenderID:completion:)); - - -/** - * Invalidates an FCM token for a particular Sender ID. That Sender ID cannot no longer send - * notifications to that FCM token. - * - * @param senderID The senderID for a particular Firebase project. - * @param completion The completion handler to handle the token deletion. - */ -- (void)deleteFCMTokenForSenderID:(nonnull NSString *)senderID - completion:(nonnull FIRMessagingDeleteFCMTokenCompletion)completion - FIR_SWIFT_NAME(deleteFCMToken(forSenderID:completion:)); - - -#pragma mark - Connect - -/** - * Create a FIRMessaging data connection which will be used to send the data notifications - * sent by your server. It will also be used to send ACKS and other messages based - * on the FIRMessaging ACKS and other messages based on the FIRMessaging protocol. - * - * - * @param handler The handler to be invoked once the connection is established. - * If the connection fails we invoke the handler with an - * appropriate error code letting you know why it failed. At - * the same time, FIRMessaging performs exponential backoff to retry - * establishing a connection and invoke the handler when successful. - */ -- (void)connectWithCompletion:(nonnull FIRMessagingConnectCompletion)handler - FIR_SWIFT_NAME(connect(handler:)) - __deprecated_msg("Please use the shouldEstablishDirectChannel property instead."); - -/** - * Disconnect the current FIRMessaging data connection. This stops any attempts to - * connect to FIRMessaging. Calling this on an already disconnected client is a no-op. - * - * Call this before `teardown` when your app is going to the background. - * Since the FIRMessaging connection won't be allowed to live when in background it is - * prudent to close the connection. - */ -- (void)disconnect - __deprecated_msg("Please use the shouldEstablishDirectChannel property instead."); - -#pragma mark - Topics - -/** - * Asynchronously subscribes to a topic. - * - * @param topic The name of the topic, for example, @"sports". - */ -- (void)subscribeToTopic:(nonnull NSString *)topic FIR_SWIFT_NAME(subscribe(toTopic:)); - -/** - * Asynchronously unsubscribe from a topic. - * - * @param topic The name of the topic, for example @"sports". - */ -- (void)unsubscribeFromTopic:(nonnull NSString *)topic FIR_SWIFT_NAME(unsubscribe(fromTopic:)); - -#pragma mark - Upstream - -/** - * Sends an upstream ("device to cloud") message. - * - * The message is queued if we don't have an active connection. - * You can only use the upstream feature if your FCM implementation - * uses the XMPP server protocol. - * - * @param message Key/Value pairs to be sent. Values must be String, any - * other type will be ignored. - * @param receiver A string identifying the receiver of the message. For FCM - * project IDs the value is `SENDER_ID@gcm.googleapis.com`. - * @param messageID The ID of the message. This is generated by the application. It - * must be unique for each message generated by this application. - * It allows error callbacks and debugging, to uniquely identify - * each message. - * @param ttl The time to live for the message. In case we aren't able to - * send the message before the TTL expires we will send you a - * callback. If 0, we'll attempt to send immediately and return - * an error if we're not connected. Otherwise, the message will - * be queued. As for server-side messages, we don't return an error - * if the message has been dropped because of TTL; this can happen - * on the server side, and it would require extra communication. - */ -- (void)sendMessage:(nonnull NSDictionary *)message - to:(nonnull NSString *)receiver - withMessageID:(nonnull NSString *)messageID - timeToLive:(int64_t)ttl; - -#pragma mark - Analytics - -/** - * Use this to track message delivery and analytics for messages, typically - * when you receive a notification in `application:didReceiveRemoteNotification:`. - * However, you only need to call this if you set the `FirebaseAppDelegateProxyEnabled` - * flag to NO in your Info.plist. If `FirebaseAppDelegateProxyEnabled` is either missing - * or set to YES in your Info.plist, the library will call this automatically. - * - * @param message The downstream message received by the application. - * - * @return Information about the downstream message. - */ -- (nonnull FIRMessagingMessageInfo *)appDidReceiveMessage:(nonnull NSDictionary *)message; - -@end diff --git a/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Headers/FirebaseMessaging.h b/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Headers/FirebaseMessaging.h deleted file mode 100755 index ef49e7ff..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Headers/FirebaseMessaging.h +++ /dev/null @@ -1 +0,0 @@ -#import "FIRMessaging.h" diff --git a/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Modules/module.modulemap deleted file mode 100755 index 45dc7bc0..00000000 --- a/StoneIsland/platforms/ios/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Modules/module.modulemap +++ /dev/null @@ -1,7 +0,0 @@ -framework module FirebaseMessaging { - umbrella header "FirebaseMessaging.h" - export * - module * { export *} - link "sqlite3" - link "z" -}
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/GGLInstanceID/CHANGELOG.md b/StoneIsland/platforms/ios/Pods/GGLInstanceID/CHANGELOG.md new file mode 100644 index 00000000..755828e3 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GGLInstanceID/CHANGELOG.md @@ -0,0 +1,28 @@ +# 2016-02-25 -- v1.2.1 +- Fix incorrect caching during library updates. + +# 2016-02-17 -- v1.2.0 +- Add Bitcode markers. + +# 2016-01-25 -- v1.1.7 +- Fix bug in InstanceID generation + +# 2016-01-25 -- v1.1.6 +- Greatly reduce IID library size. +- Bug fixes. + +# 2015-12-08 -- v1.1.4 +- Bug fixes. +- Fix dSYM warnings. + +# 2015-11-09 -- v1.1.3 +- Bug fixes. + +# 2015-10-28 -- v1.1.2 +- Bug fixes. + +# 2015-10-8 -- v1.1.1 + +- Resets InstanceID tokens on app delete and reinstall. +- Adds better error reporting. +- Bug fixes. diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FIRInstanceID.h b/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceID.h index 4b3c546c..e3fd3c64 100755..100644 --- a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FIRInstanceID.h +++ b/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceID.h @@ -1,49 +1,36 @@ #import <Foundation/Foundation.h> -// NS_SWIFT_NAME can only translate factory methods before the iOS 9.3 SDK. -// Wrap it in our own macro if it's a non-compatible SDK. -#ifndef FIR_SWIFT_NAME -#ifdef __IPHONE_9_3 -#define FIR_SWIFT_NAME(X) NS_SWIFT_NAME(X) -#else -#define FIR_SWIFT_NAME(X) // Intentionally blank. -#endif // #ifdef __IPHONE_9_3 -#endif // #ifndef FIR_SWIFT_NAME +@class GGLInstanceIDConfig; /** - * @memberof FIRInstanceID + * @memberof GGLInstanceID * - * The scope to be used when fetching/deleting a token for Firebase Messaging. + * The key for APNS token to be included in the options dictionary when + * registering for GCM (Google Cloud Messaging). The value should be a + * NSData object that represents the APNS token for the app. This + * key is required to get a GCM token. */ -FOUNDATION_EXPORT NSString * __nonnull const kFIRInstanceIDScopeFirebaseMessaging - FIR_SWIFT_NAME(InstanceIDScopeFirebaseMessaging); +FOUNDATION_EXPORT NSString *const kGGLInstanceIDRegisterAPNSOption; -#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 /** - * Called when the system determines that tokens need to be refreshed. - * This method is also called if Instance ID has been reset in which - * case, tokens and FCM topic subscriptions also need to be refreshed. + * @memberof GGLInstanceID * - * Instance ID service will throttle the refresh event across all devices - * to control the rate of token updates on application servers. + * The key to specify if the APNS token type is sandbox or production. Set + * to YES if the app was built with Sandbox certificate else NO for production. + * At any point of time InstanceID library will support only one type of token. */ -FOUNDATION_EXPORT const NSNotificationName __nonnull kFIRInstanceIDTokenRefreshNotification - FIR_SWIFT_NAME(InstanceIDTokenRefresh); -#else +FOUNDATION_EXPORT NSString *const kGGLInstanceIDAPNSServerTypeSandboxOption; + /** - * Called when the system determines that tokens need to be refreshed. - * This method is also called if Instance ID has been reset in which - * case, tokens and FCM topic subscriptions also need to be refreshed. + * @memberof GGLInstanceID * - * Instance ID service will throttle the refresh event across all devices - * to control the rate of token updates on application servers. + * The scope to be used when fetching/deleting a token for + * GCM (Google Cloud Messaging). */ -FOUNDATION_EXPORT NSString * __nonnull const kFIRInstanceIDTokenRefreshNotification - FIR_SWIFT_NAME(InstanceIDTokenRefreshNotification); -#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 +FOUNDATION_EXPORT NSString *const kGGLInstanceIDScopeGCM; /** - * @related FIRInstanceID + * @related GGLInstanceID * * The completion handler invoked when the InstanceID token returns. If * the call fails we return the appropriate `error code` as described below. @@ -54,12 +41,11 @@ FOUNDATION_EXPORT NSString * __nonnull const kFIRInstanceIDTokenRefreshNotificat * failed. See the error codes below for a more detailed * description. */ -typedef void(^FIRInstanceIDTokenHandler)( NSString * __nullable token, NSError * __nullable error) - FIR_SWIFT_NAME(InstanceIDTokenHandler); +typedef void(^GGLInstanceIDTokenHandler)(NSString *token, NSError *error); /** - * @related FIRInstanceID + * @related GGLInstanceID * * The completion handler invoked when the InstanceID `deleteToken` returns. If * the call fails we return the appropriate `error code` as described below @@ -67,11 +53,10 @@ typedef void(^FIRInstanceIDTokenHandler)( NSString * __nullable token, NSError * * @param error The error describing why deleting the token failed. * See the error codes below for a more detailed description. */ -typedef void(^FIRInstanceIDDeleteTokenHandler)(NSError * __nullable error) - FIR_SWIFT_NAME(InstanceIDDeleteTokenHandler); +typedef void(^GGLInstanceIDDeleteTokenHandler)(NSError *error); /** - * @related FIRInstanceID + * @related GGLInstanceID * * The completion handler invoked when the app identity is created. If the * identity wasn't created for some reason we return the appropriate error code. @@ -80,11 +65,10 @@ typedef void(^FIRInstanceIDDeleteTokenHandler)(NSError * __nullable error) * while creating an identity. * @param error The error if fetching the identity fails else nil. */ -typedef void(^FIRInstanceIDHandler)(NSString * __nullable identity, NSError * __nullable error) - FIR_SWIFT_NAME(InstanceIDHandler); +typedef void(^GGLInstanceIDHandler)(NSString *identity, NSError *error); /** - * @related FIRInstanceID + * @related GGLInstanceID * * The completion handler invoked when the app identity and all the tokens associated * with it are deleted. Returns a valid error object in case of failure else nil. @@ -92,108 +76,120 @@ typedef void(^FIRInstanceIDHandler)(NSString * __nullable identity, NSError * __ * @param error The error if deleting the identity and all the tokens associated with * it fails else nil. */ -typedef void(^FIRInstanceIDDeleteHandler)(NSError * __nullable error) - FIR_SWIFT_NAME(InstanceIDDeleteHandler); +typedef void(^GGLInstanceIDDeleteHandler)(NSError *error); /** - * @enum FIRInstanceIDError + * @enum GGLInstanceIDOperationErrorCode + * Description of error codes */ -typedef NS_ENUM(NSUInteger, FIRInstanceIDError) { +typedef NS_ENUM(NSUInteger, GGLInstanceIDOperationErrorCode) { // Http related errors. - /// Unknown error. - FIRInstanceIDErrorUnknown = 0, + /// InvalidRequest -- Some parameters of the request were invalid. + kGGLInstanceIDOperationErrorCodeInvalidRequest = 0, /// Auth Error -- GCM couldn't validate request from this client. - FIRInstanceIDErrorAuthentication = 1, + kGGLInstanceIDOperationErrorCodeAuthentication = 1, /// NoAccess -- InstanceID service cannot be accessed. - FIRInstanceIDErrorNoAccess = 2, + kGGLInstanceIDOperationErrorCodeNoAccess = 2, /// Timeout -- Request to InstanceID backend timed out. - FIRInstanceIDErrorTimeout = 3, + kGGLInstanceIDOperationErrorCodeTimeout = 3, + /// Network -- No network available to reach the servers. - FIRInstanceIDErrorNetwork = 4, + kGGLInstanceIDOperationErrorCodeNetwork = 4, /// OperationInProgress -- Another similar operation in progress, /// bailing this one. - FIRInstanceIDErrorOperationInProgress = 5, + kGGLInstanceIDOperationErrorCodeOperationInProgress = 5, - /// InvalidRequest -- Some parameters of the request were invalid. - FIRInstanceIDErrorInvalidRequest = 7, -} FIR_SWIFT_NAME(InstanceIDError); + /// Unknown error. + kGGLInstanceIDOperationErrorCodeUnknown = 7, -/** - * The APNS token type for the app. If the token type is set to `UNKNOWN` - * InstanceID will implicitly try to figure out what the actual token type - * is from the provisioning profile. - */ -typedef NS_ENUM(NSInteger, FIRInstanceIDAPNSTokenType) { - /// Unknown token type. - FIRInstanceIDAPNSTokenTypeUnknown, - /// Sandbox token type. - FIRInstanceIDAPNSTokenTypeSandbox, - /// Production token type. - FIRInstanceIDAPNSTokenTypeProd, -} FIR_SWIFT_NAME(InstanceIDAPNSTokenType) - __deprecated_enum_msg("Use FIRMessaging's APNSToken property instead."); + // InstanceID specific errors + + /* + * Generic errors. + */ + + // Device seems to be missing a valid deviceID. Cannot + // authenticate device requests. + kGGLInstanceIDOperationErrorCodeMissingDeviceID = 501, + + /** + * Token specific errors. + */ + + /// GCM token request is missing APNS token. + kGGLInstanceIDOperationErrorCodeMissingAPNSToken = 1001, + + /// GCM token request is missing server type. + kGGLInstanceIDOperationErrorCodeMissingAPNSServerType = 1002, + + /// Token request has invalid authorizedEntity. + kGGLInstanceIDOperationErrorCodeInvalidAuthorizedEntity = 1003, + + /// Token request has invalid scope. + kGGLInstanceIDOperationErrorCodeInvalidScope = 1004, + + /// Should call `startWithConfig:` before requesting token. + kGGLInstanceIDOperationErrorCodeInvalidStart = 1005, + + /// KeyPair access error. + kGGLInstanceIDOperationErrorCodeInvalidKeyPair = 1006, + + /** + * Identity specific errors. + */ + + /// Missing KeyPair. + kGGLInstanceIDOperationErrorCodeMissingKeyPair = 2001, +}; /** * Instance ID provides a unique identifier for each app instance and a mechanism - * to authenticate and authorize actions (for example, sending an FCM message). + * to authenticate and authorize actions (for example, sending a GCM message). * * Instance ID is long lived but, may be reset if the device is not used for * a long time or the Instance ID service detects a problem. - * If Instance ID is reset, the app will be notified via - * `kFIRInstanceIDTokenRefreshNotification`. + * If Instance ID is reset, the app will be notified with a callback to + * [GGLInstanceIDDelegate onTokenRefresh] * * If the Instance ID has become invalid, the app can request a new one and * send it to the app server. * To prove ownership of Instance ID and to allow servers to access data or * services associated with the app, call - * `[FIRInstanceID tokenWithAuthorizedEntity:scope:options:handler]`. + * `[GGLInstanceID tokenWithAuthorizedEntity:scope:options:handler]`. */ -FIR_SWIFT_NAME(InstanceID) -@interface FIRInstanceID : NSObject +@interface GGLInstanceID : NSObject /** - * FIRInstanceID. + * GGLInstanceID. * - * @return A shared instance of FIRInstanceID. + * @return A shared instance of GGLInstanceID. */ -+ (nonnull instancetype)instanceID FIR_SWIFT_NAME(instanceID()); ++ (instancetype)sharedInstance; /** - * Unavailable. Use +instanceID instead. + * Start `GGLInstanceID` with the specified config. + * + * @see GGLInstanceIDConfig + * + * @param config The `GGLInstanceIDConfig` used to build the service. */ -- (nonnull instancetype)init __attribute__((unavailable("Use +instanceID instead."))); +- (void)startWithConfig:(GGLInstanceIDConfig *)config; /** - * Set APNS token for the application. This APNS token will be used to register - * with Firebase Messaging using `token` or - * `tokenWithAuthorizedEntity:scope:options:handler`. If the token type is set to - * `FIRInstanceIDAPNSTokenTypeUnknown` InstanceID will read the provisioning profile - * to find out the token type. - * - * @param token The APNS token for the application. - * @param type The APNS token type for the above token. + * Stop any network requests started by the client and release any handlers + * associated with it. */ -- (void)setAPNSToken:(nonnull NSData *)token - type:(FIRInstanceIDAPNSTokenType)type - __deprecated_msg("Use FIRMessaging's APNSToken property instead."); +- (void)stopAllRequests; #pragma mark - Tokens /** - * Returns a Firebase Messaging scoped token for the firebase app. - * - * @return Null Returns null if the device has not yet been registerd with - * Firebase Message else returns a valid token. - */ -- (nullable NSString *)token; - -/** * Returns a token that authorizes an Entity (example: cloud service) to perform * an action on behalf of the application identified by Instance ID. * @@ -209,7 +205,7 @@ FIR_SWIFT_NAME(InstanceID) * same authorizedEntity and scope before the last one finishes will result in an * error with code `OperationInProgress`. * - * @see FIRInstanceID deleteTokenWithAuthorizedEntity:scope:handler: + * @see GGLInstanceID deleteTokenWithAuthorizedEntity:scope:handler: * * @param authorizedEntity Entity authorized by the token. * @param scope Action authorized for authorizedEntity. @@ -226,14 +222,14 @@ FIR_SWIFT_NAME(InstanceID) * is nil and a valid `error` is returned. The valid error * codes have been documented above. */ -- (void)tokenWithAuthorizedEntity:(nonnull NSString *)authorizedEntity - scope:(nonnull NSString *)scope - options:(nullable NSDictionary *)options - handler:(nonnull FIRInstanceIDTokenHandler)handler; +- (void)tokenWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + options:(NSDictionary *)options + handler:(GGLInstanceIDTokenHandler)handler; /** * Revokes access to a scope (action) for an entity previously - * authorized by `[FIRInstanceID tokenWithAuthorizedEntity:scope:options:handler]`. + * authorized by `[GGLInstanceID tokenWithAuthorizedEntity:scope:options:handler]`. * * This is an asynchronous call. Call this on the main thread since InstanceID lib * is not thread safe. In case token deletion fails for some reason we invoke the @@ -250,9 +246,9 @@ FIR_SWIFT_NAME(InstanceID) * In case of error an appropriate error object is returned * else error is nil. */ -- (void)deleteTokenWithAuthorizedEntity:(nonnull NSString *)authorizedEntity - scope:(nonnull NSString *)scope - handler:(nonnull FIRInstanceIDDeleteTokenHandler)handler; +- (void)deleteTokenWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + handler:(GGLInstanceIDDeleteTokenHandler)handler; #pragma mark - Identity @@ -267,13 +263,11 @@ FIR_SWIFT_NAME(InstanceID) * a valid identifier is returned and a valid identifier for the * application instance. */ -- (void)getIDWithHandler:(nonnull FIRInstanceIDHandler)handler - FIR_SWIFT_NAME(getID(handler:)); +- (void)getIDWithHandler:(GGLInstanceIDHandler)handler; /** * Resets Instance ID and revokes all tokens. */ -- (void)deleteIDWithHandler:(nonnull FIRInstanceIDDeleteHandler)handler - FIR_SWIFT_NAME(deleteID(handler:)); +- (void)deleteIDWithHandler:(GGLInstanceIDDeleteHandler)handler; @end diff --git a/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceIDConfig.h b/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceIDConfig.h new file mode 100644 index 00000000..da885569 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceIDConfig.h @@ -0,0 +1,32 @@ +@protocol GGLInstanceIDDelegate; + +typedef NS_ENUM(int8_t, GGLInstanceIDLogLevel) { + kGGLInstanceIDLogLevelDebug, + kGGLInstanceIDLogLevelInfo, + kGGLInstanceIDLogLevelError, + kGGLInstanceIDLogLevelAssert, +}; + +/** + * The config used to configure different options in GGLInstanceID library. + */ +@interface GGLInstanceIDConfig : NSObject <NSCopying, NSMutableCopying> + +/** + * Set the GGLInstanceIDDelegate to receive callbacks. + * + * @see GGLInstanceIDDelegate + */ +@property(nonatomic, readwrite, weak) id<GGLInstanceIDDelegate> delegate; + +// the log level for the GGLInstanceID library. +@property(nonatomic, readwrite, assign) GGLInstanceIDLogLevel logLevel; + +/** + * Initialize a default config with logLevel set to `kGGLInstanceIDLogLevelError`. + * + * @return A default config for GGLInstanceID. + */ ++ (instancetype)defaultConfig; + +@end diff --git a/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceIDDelegate.h b/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceIDDelegate.h new file mode 100644 index 00000000..dc706a2d --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceIDDelegate.h @@ -0,0 +1,13 @@ +@protocol GGLInstanceIDDelegate <NSObject> + +/** + * Called when the system determines that tokens need to be refreshed. + * This method is also called if Instance ID has been reset in which + * case, tokens and `GcmPubSub` subscriptions also need to be refreshed. + * + * Instance ID service will throttle the refresh event across all devices + * to control the rate of token updates on application servers. + */ +- (void)onTokenRefresh; + +@end diff --git a/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceIDHeaders.h b/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceIDHeaders.h new file mode 100644 index 00000000..2aa4eddd --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GGLInstanceID/Headers/Public/GGLInstanceIDHeaders.h @@ -0,0 +1,4 @@ +#import "GGLInstanceID.h" +#import "GGLInstanceIDConfig.h" +#import "GGLInstanceIDDelegate.h" + diff --git a/StoneIsland/platforms/ios/Pods/GGLInstanceID/Libraries/libGGLInstanceIDLib.a b/StoneIsland/platforms/ios/Pods/GGLInstanceID/Libraries/libGGLInstanceIDLib.a Binary files differnew file mode 100755 index 00000000..d5e6b3a4 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GGLInstanceID/Libraries/libGGLInstanceIDLib.a diff --git a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/README.md b/StoneIsland/platforms/ios/Pods/GGLInstanceID/README.md index 25fe2196..e6fb90db 100755..100644 --- a/StoneIsland/platforms/ios/Pods/FirebaseInstanceID/README.md +++ b/StoneIsland/platforms/ios/Pods/GGLInstanceID/README.md @@ -2,7 +2,7 @@ Instance ID provides a unique ID per instance of your apps and also provides a mechanism to authenticate and authorize actions, like sending messages via -Firebase Cloud Messaging (FCM). +Google Cloud Messaging (GCM). Please visit [our developer diff --git a/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/CHANGELOG.md b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/CHANGELOG.md new file mode 100644 index 00000000..9f24a7a5 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/CHANGELOG.md @@ -0,0 +1,32 @@ +# 2016-01-25 -- v1.2.0 + +Add Bitcode markers. + +# 2016-01-25 -- v1.1.3 + +- Bug fixes. + +# 2015-12-08 -- v1.1.2 + +- Bug fixes. +- Fix dSYM warnings. + +# 2015-10-21 -- v1.1.1 + +- Adds analytics support. +- Bug fixes. + +# 2015-10-8 -- v1.1.0 + +- `[GCMService appDidReceiveMessage:]` now returns `BOOL` to signify if the + message has already been received before. +- Fixes deleting old GCM registrations and topic subscriptions on app deletion + and reinstall. +- Removes usage of clang modules for ObjC++ support. +- `GCMReceiverDelegate` protocol methods are now **optional**. +- Add `useNewRemoteNotificationCallback` property in `GCMConfig` to use new + iOS8+ notification callback i.e. + `application:didReceiveRemoteNotification:fetchCompletionHandler:`. +- Add better error reporting. +- Fix some compiler warnings. +- Bug fixes. diff --git a/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMConfig.h b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMConfig.h new file mode 100644 index 00000000..4e65fb87 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMConfig.h @@ -0,0 +1,49 @@ +@protocol GCMReceiverDelegate; + +typedef NS_ENUM(int8_t, GCMLogLevel) { + kGCMLogLevelDebug, + kGCMLogLevelInfo, + kGCMLogLevelError, + kGCMLogLevelAssert, +}; + +/** + * Config used to set different options in Google Cloud Messaging. + */ +@interface GCMConfig : NSObject + +/** + * Set the `GCMReceiverDelegate` to receive callbacks on upstream messages. + * + * @see GCMReceiverDelegate + */ +@property(nonatomic, readwrite, weak) id<GCMReceiverDelegate> receiverDelegate; + +/** + * The log level for the GCM library. Valid values are `kGCMLogLevelDebug`, + * `kGCMLogLevelInfo`, `kGCMLogLevelError`, and `kGCMLogLevelAssert`. + */ +@property(nonatomic, readwrite, assign) GCMLogLevel logLevel; + +/** + * Specify which remote notification callback to invoke when a GCM message is + * received. + * + * If set to "YES" GCM uses the new remote notification callback i.e. + * application:didReceiveRemoteNotification:fetchCompletionHandler:. + * If set to "NO" GCM invokes application:didReceiveRemoteNotification: callback. + * + * Defaults to "NO". + */ +@property(nonatomic, readwrite, assign) BOOL useNewRemoteNotificationCallback; + +/** + * Get default configuration for GCM. The default config has logLevel set to + * `kGCMLogLevelError` and `receiverDelegate` is set to nil. + * + * @return GCMConfig sharedInstance. + */ ++ (instancetype)defaultConfig; + +@end + diff --git a/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMPubSub.h b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMPubSub.h new file mode 100644 index 00000000..37e0a6b3 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMPubSub.h @@ -0,0 +1,82 @@ +/** + * @related GCMPubSub + * + * The completion handler invoked when the GCM subscribe/unsubscribe returns. + * If the call fails we return the approprirate `error code` as documented in + * `GCMService`. + * + * @param error The error describing subscribe failure else nil. + */ +typedef void(^GCMPubSubCompletion)(NSError *error); + +/** + * GcmPubSub provides a publish-subscribe model for sending GCM topic messages. + * + * An app can subscribe to different topics defined by the + * developer. The app server can then send messages to the subscribed devices + * without having to maintain topic-subscribers mapping. Topics do not + * need to be explicitly created before subscribing or publishing—they + * are automatically created when publishing or subscribing. + * + * Messages published to the topic will be received as regular GCM messages + * with `"from"` set to `"/topics/myTopic"`. + * + * Only topic names that match the pattern `"/topics/[a-zA-Z0-9-_.~%]{1,900}"` + * are allowed for subscribing and publishing. + */ +@interface GCMPubSub : NSObject + +/** + * Returns an instance of GCMPubSub. Note you need to call + * `GCMService startWithConfig` to start using GCM. + * + * @return A shared instance of GCMPubSub. + */ ++ (instancetype)sharedInstance; + +/** + * Subscribes an app instance to a topic, enabling it to receive messages + * sent to that topic. + * + * This is an asynchronous call. If subscription fails, GCM + * invokes the completion callback with the appropriate error. + * + * Call this function from the main thread. GCM is not thread safe. + * + * @see GCMPubSub unsubscribeWithToken:topic:handler: + * + * @param token The registration token as received from the InstanceID + * library for a given `authorizedEntity` and "gcm" scope. + * @param topic The topic to subscribe to. Should be of the form + * `"/topics/<topic-name>"`. + * @param handler The callback handler invoked when the subscribe call + * ends. In case of success, a nil error is returned. Otherwise, + * an appropriate error object is returned. + */ +- (void)subscribeWithToken:(NSString *)token + topic:(NSString *)topic + options:(NSDictionary *)options + handler:(GCMPubSubCompletion)handler; + + +/** + * Unsubscribes an app instance from a topic, stopping it from receiving + * any further messages sent to that topic. + * + * This is an asynchronous call. If the attempt to unsubscribe fails, + * we invoke the `completion` callback passed in with an appropriate error. + * + * Call this function from the main thread. + * + * @param token The token used to subscribe to this topic. + * @param topic The topic to unsubscribe from. + * @param handler The handler that is invoked once the unsubscribe call ends. + * In case of success, nil error is returned. Otherwise, an + * appropriate error object is returned. + */ +- (void)unsubscribeWithToken:(NSString *)token + topic:(NSString *)topic + options:(NSDictionary *)options + handler:(GCMPubSubCompletion)handler; + +@end diff --git a/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMReceiverDelegate.h b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMReceiverDelegate.h new file mode 100644 index 00000000..45433aed --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMReceiverDelegate.h @@ -0,0 +1,35 @@ +/** + * Delegate for receiving status of upstream messages sent via Google Cloud Messaging. + */ +@protocol GCMReceiverDelegate <NSObject> + +@optional +/** + * The callback is invoked once GCM processes the message. If processing fails, the + * callback is invoked with a valid error object representing the error. + * Otherwise, the message is ready to be sent. + * + * @param messageID The messageID for the message that failed to be sent upstream. + * @param error The error describing why the send operation failed. + */ +- (void)willSendDataMessageWithID:(NSString *)messageID error:(NSError *)error; + +/** + * This callback is invoked if GCM successfully sent the message upstream + * and the message was successfully received. + * + * @param messageID The messageID for the message sent. + */ +- (void)didSendDataMessageWithID:(NSString *)messageID; + +/** + * Called when the GCM server deletes pending messages due to exceeded + * storage limits. This may occur, for example, when the device cannot be + * reached for an extended period of time. + * + * It is recommended to retrieve any missing messages directly from the + * app server. + */ +- (void)didDeleteMessagesOnServer; + +@end diff --git a/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMService.h b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMService.h new file mode 100644 index 00000000..d903e5a3 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GCMService.h @@ -0,0 +1,243 @@ +@class GCMConfig; + +/** + * The completion handler invoked once the data connection with GCM is + * established. The data connection is used to send a continous stream of + * data and all the GCM data notifications arrive through this connection. + * Once the connection is established we invoke the callback with `nil` error. + * Correspondingly if we get an error while trying to establish a connection + * we invoke the handler with an appropriate error object and do an + * exponential backoff to try and connect again unless successful. + + * + * @param error The error object if any describing why the data connection + * to GCM failed. + */ +typedef void(^GCMServiceConnectCompletion)(NSError *error); + + +/** + * @enum GCMServiceErrorCode + * Description of error codes + */ +typedef NS_ENUM(NSUInteger, GCMServiceErrorCode) { + /** + * HTTP errors. + */ + + // InvalidRequest -- Some parameters of the request were invalid. + kGCMServiceErrorCodeInvalidRequest = 0, + + // Auth Error -- GCM couldn't validate request from this client. + kGCMServiceErrorCodeAuthentication = 1, + + // NoAccess -- InstanceID service cannot be accessed. + kGCMServiceErrorCodeNoAccess = 2, + + // Timeout -- Request to InstanceID backend timed out. + kGCMServiceErrorCodeTimeout = 3, + + // Network -- No network available to reach the servers. + kGCMServiceErrorCodeNetwork = 4, + + // OperationInProgress -- Another similar operation in progress, + // bailing this one. + kGCMServiceErrorCodeOperationInProgress = 5, + + // Unknown error. + kGCMServiceErrorCodeUnknown = 7, + + /** + * Generic errors. + */ + + // Device seems to be missing a valid deviceID. Cannot authenticate + // device requests. + kGCMServiceErrorMissingDeviceID = 501, + + /** + * Upstream Send errors + */ + + // Upstream send not available (e.g. network issues) + kGCMServiceErrorCodeUpstreamServiceNotAvailable = 1001, + + // Invalid send parameters. + kGCMServiceErrorCodeInvalidParameters = 1002, + + // Invalid missing to. + kGCMServiceErrorCodeMissingTo = 1003, + + // GCM could not cache the message for sending. + kGCMServiceErrorSave = 1004, + + // Message size exceeded (size > 4KB). + kGCMServiceErrorSizeExceeded = 1005, + + /** + * GCM Connect errors. + */ + + // GCM already connected with the client. + kGCMServiceErrorCodeAlreadyConnected = 2001, + + /** + * PubSub errors. + */ + + // Topic already subscribed to. + kGCMServiceErrorCodePubSubAlreadySubscribed = 3001, + + // Topic already unsubscribed from. + kGCMServiceErrorCodePubSubAlreadyUnsubscribed = 3002, + + // Invalid topic name, does not match the topic regex "/topics/[a-zA-Z0-9-_.~%]+" + kGCMServiceErrorCodePubSubInvalidTopic = 3003, +}; + +/** + * GoogleCloudMessaging (GCM) enables apps to communicate with their app servers + * using simple messages. + * + * To send or receive messages, the app must get a + * registration token from GGLInstanceID, which authorizes an + * app server to send messages to an app instance. Pass your sender ID and + * `kGGLInstanceIDScopeGCM` as parameters to the method. + * + * A sender ID is a project number created when you configure your API project. + * It is labeled "Project Number" in the Google Developers Console. + * + * In order to receive GCM messages, declare application:didReceiveRemoteNotification: + * + * Client apps can send upstream messages back to the app server using the XMPP-based + * <a href="http://developers.google.com/cloud-messaging/ccs.html">Cloud Connection Server</a>, + * + */ +@interface GCMService : NSObject + +/** + * GCMService + * + * @return A shared instance of GCMService. + */ ++ (instancetype)sharedInstance; + +/** + * Start the `GCMService` with config. This starts the `GCMService` and + * allocates the required resources. + * + * @see GCMConfig + * + * @param config The `GCMConfig` used to build the service. + */ +- (void)startWithConfig:(GCMConfig *)config; + +/** + * Teardown the GCM connection and free all the resources owned by GCM. + * + * Call this when you don't need the GCM connection or to cancel all + * subscribe/unsubscribe requests. If GCM connection is alive before + * calling this, it would implicitly disconnect the connection. + * + * Calling `disconect` before invoking this method is useful but not required. + * Once you call this you won't be able to use `GCMService` for this session + * of your app. Therefore call this only when the app is going to exit. + * In case of background you should rather use `disconnect` and then + * if the app comes to the foreground again you can call `connect` again to + * establish a new connection. + */ +- (void)teardown; + +#pragma mark - Messages + +/** + * Call this to let GCM know that the app received a downstream message. Used + * to detect duplicate messages and to track message delivery for messages + * with different routes. + * + * @param message The downstream message received by the app. + * + * @return For APNs messages this always returns FALSE. For other messages, + * this returns FALSE for new, non-duplicated messages. + */ +- (BOOL)appDidReceiveMessage:(NSDictionary *)message; + + #pragma mark - Connect + +/** + * Create a GCM data connection which will be used to send the data notifications + * send by your server. It will also be used to send ACKS and other messages based + * on the GCM ACKS and other messages based on the GCM protocol. + * + * Use the `disconnect` method to disconnect the connection. + * + * @see GCMService disconnect + * + * @param handler The handler to be invoked once the connection is established. + * If the connection fails we invoke the handler with an + * appropriate error code letting you know why it failed. At + * the same time, GCM performs exponential backoff to retry + * establishing a connection and invoke the handler when successful. + */ +- (void)connectWithHandler:(GCMServiceConnectCompletion)handler; + +/** + * Disconnect the current GCM data connection. This stops any attempts to + * connect to GCM. Calling this on an already disconnected client is a no-op. + * + * Call this before `teardown` when your app is going to the background. + * Since the GCM connection won't be allowed to live when in background it is + * prudent to close the connection. + * + * @see GCMService teardown + */ +- (void)disconnect; + +#pragma mark - Send + +/** + * Send an upstream ("device to cloud") message. + * + * The message will be queued if we don't have an active connection for the max + * interval. + * + * @param message Key/Value pairs to be sent. Values must be String, any other + * type will be ignored. + * @param to String identifying the receiver of the message. For GCM + * project IDs the value is `SENDER_ID@gcm.googleapis.com`. + * @param msgId A unique ID of the message. This is generated by the + * application. It must be unique for each message. This allows + * error callbacks and debugging. + */ +- (void)sendMessage:(NSDictionary *)message + to:(NSString *)to + withId:(NSString *)msgId; + +/** + * Send an upstream ("device to cloud") message. + * + * The message will be queued if we don't have an active connection for the max + * interval. You can only use the upstream feature if your GCM implementation + * uses the XMPP-based Cloud Connection Server. + * + * @param message Key/Value pairs to be sent. Values must be String, any + * other type will be ignored. + * @param to A string identifying the receiver of the message. For GCM + * project IDs the value is `SENDER_ID@gcm.googleapis.com`. + * @param ttl The Time to live for the message. In case we aren't able to + * send the message before the ttl expires we will send you a + * callback. If 0, we'll attempt to send immediately and return + * an error if we're not connected. Otherwise, the message will + * be queued.As for server-side messages, we don't return an error + * if the message has been dropped because of TTL; this can happen + * on the server side, and it would require extra communication. + * @param msgId The ID of the message. This is generated by the application. It + * must be unique for each message. It allows error callbacks and + * debugging, to uniquely identify each message. + */ +- (void)sendMessage:(NSDictionary *)message + to:(NSString *)to + timeToLive:(int64_t)ttl + withId:(NSString *)msgId; + +@end diff --git a/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GoogleCloudMessaging.h b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GoogleCloudMessaging.h new file mode 100644 index 00000000..aab64fbe --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Headers/Public/GoogleCloudMessaging.h @@ -0,0 +1,5 @@ +#import "GCMConfig.h" +#import "GCMPubSub.h" +#import "GCMReceiverDelegate.h" +#import "GCMService.h" + diff --git a/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Libraries/libGcmLib.a b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Libraries/libGcmLib.a Binary files differnew file mode 100755 index 00000000..a9356d23 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/Libraries/libGcmLib.a diff --git a/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/README.md b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/README.md new file mode 100644 index 00000000..2c900de2 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleCloudMessaging/README.md @@ -0,0 +1,10 @@ +# Google Cloud Messaging SDK for iOS + +Google Cloud Messaging (GCM) is a free service that enables developers to send +messages between servers and client apps. This includes downstream messages +from servers to client apps, and upstream messages from client apps to servers. + + +Please visit [our developer +site](https://developers.google.com/cloud-messaging/ios/start) for integration +instructions, documentation, support information, and terms of service. diff --git a/StoneIsland/platforms/ios/Pods/GoogleIPhoneUtilities/Frameworks/GoogleIPhoneUtilities.framework/GoogleIPhoneUtilities b/StoneIsland/platforms/ios/Pods/GoogleIPhoneUtilities/Frameworks/GoogleIPhoneUtilities.framework/GoogleIPhoneUtilities Binary files differnew file mode 100644 index 00000000..7ab2cf26 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleIPhoneUtilities/Frameworks/GoogleIPhoneUtilities.framework/GoogleIPhoneUtilities diff --git a/StoneIsland/platforms/ios/Pods/GoogleInterchangeUtilities/Frameworks/frameworks/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities b/StoneIsland/platforms/ios/Pods/GoogleInterchangeUtilities/Frameworks/frameworks/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities Binary files differnew file mode 100755 index 00000000..de404247 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleInterchangeUtilities/Frameworks/frameworks/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities diff --git a/StoneIsland/platforms/ios/Pods/GoogleSymbolUtilities/Frameworks/frameworks/GoogleSymbolUtilities.framework/GoogleSymbolUtilities b/StoneIsland/platforms/ios/Pods/GoogleSymbolUtilities/Frameworks/frameworks/GoogleSymbolUtilities.framework/GoogleSymbolUtilities Binary files differnew file mode 100755 index 00000000..408a0026 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleSymbolUtilities/Frameworks/frameworks/GoogleSymbolUtilities.framework/GoogleSymbolUtilities diff --git a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMLogger.h b/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMLogger.h deleted file mode 100644 index 16f0eafb..00000000 --- a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMLogger.h +++ /dev/null @@ -1,508 +0,0 @@ -// -// GTMLogger.h -// -// Copyright 2007-2008 Google Inc. -// -// 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. -// - -// Key Abstractions -// ---------------- -// -// This file declares multiple classes and protocols that are used by the -// GTMLogger logging system. The 4 main abstractions used in this file are the -// following: -// -// * logger (GTMLogger) - The main logging class that users interact with. It -// has methods for logging at different levels and uses a log writer, a log -// formatter, and a log filter to get the job done. -// -// * log writer (GTMLogWriter) - Writes a given string to some log file, where -// a "log file" can be a physical file on disk, a POST over HTTP to some URL, -// or even some in-memory structure (e.g., a ring buffer). -// -// * log formatter (GTMLogFormatter) - Given a format string and arguments as -// a va_list, returns a single formatted NSString. A "formatted string" could -// be a string with the date prepended, a string with values in a CSV format, -// or even a string of XML. -// -// * log filter (GTMLogFilter) - Given a formatted log message as an NSString -// and the level at which the message is to be logged, this class will decide -// whether the given message should be logged or not. This is a flexible way -// to filter out messages logged at a certain level, messages that contain -// certain text, or filter nothing out at all. This gives the caller the -// flexibility to dynamically enable debug logging in Release builds. -// -// This file also declares some classes to handle the common log writer, log -// formatter, and log filter cases. Callers can also create their own writers, -// formatters, and filters and they can even build them on top of the ones -// declared here. Keep in mind that your custom writer/formatter/filter may be -// called from multiple threads, so it must be thread-safe. - -#import <Foundation/Foundation.h> -#import "GTMDefines.h" - -// Predeclaration of used protocols that are declared later in this file. -@protocol GTMLogWriter, GTMLogFormatter, GTMLogFilter; - -// GTMLogger -// -// GTMLogger is the primary user-facing class for an object-oriented logging -// system. It is built on the concept of log formatters (GTMLogFormatter), log -// writers (GTMLogWriter), and log filters (GTMLogFilter). When a message is -// sent to a GTMLogger to log a message, the message is formatted using the log -// formatter, then the log filter is consulted to see if the message should be -// logged, and if so, the message is sent to the log writer to be written out. -// -// GTMLogger is intended to be a flexible and thread-safe logging solution. Its -// flexibility comes from the fact that GTMLogger instances can be customized -// with user defined formatters, filters, and writers. And these writers, -// filters, and formatters can be combined, stacked, and customized in arbitrary -// ways to suit the needs at hand. For example, multiple writers can be used at -// the same time, and a GTMLogger instance can even be used as another -// GTMLogger's writer. This allows for arbitrarily deep logging trees. -// -// A standard GTMLogger uses a writer that sends messages to standard out, a -// formatter that smacks a timestamp and a few other bits of interesting -// information on the message, and a filter that filters out debug messages from -// release builds. Using the standard log settings, a log message will look like -// the following: -// -// 2007-12-30 10:29:24.177 myapp[4588/0xa07d0f60] [lvl=1] foo=<Foo: 0x123> -// -// The output contains the date and time of the log message, the name of the -// process followed by its process ID/thread ID, the log level at which the -// message was logged (in the previous example the level was 1: -// kGTMLoggerLevelDebug), and finally, the user-specified log message itself (in -// this case, the log message was @"foo=%@", foo). -// -// Multiple instances of GTMLogger can be created, each configured their own -// way. Though GTMLogger is not a singleton (in the GoF sense), it does provide -// access to a shared (i.e., globally accessible) GTMLogger instance. This makes -// it convenient for all code in a process to use the same GTMLogger instance. -// The shared GTMLogger instance can also be configured in an arbitrary, and -// these configuration changes will affect all code that logs through the shared -// instance. - -// -// Log Levels -// ---------- -// GTMLogger has 3 different log levels: Debug, Info, and Error. GTMLogger -// doesn't take any special action based on the log level; it simply forwards -// this information on to formatters, filters, and writers, each of which may -// optionally take action based on the level. Since log level filtering is -// performed at runtime, log messages are typically not filtered out at compile -// time. The exception to this rule is that calls to the GTMLoggerDebug() macro -// *ARE* filtered out of non-DEBUG builds. This is to be backwards compatible -// with behavior that many developers are currently used to. Note that this -// means that GTMLoggerDebug(@"hi") will be compiled out of Release builds, but -// [[GTMLogger sharedLogger] logDebug:@"hi"] will NOT be compiled out. -// -// Standard loggers are created with the GTMLogLevelFilter log filter, which -// filters out certain log messages based on log level, and some other settings. -// -// In addition to the -logDebug:, -logInfo:, and -logError: methods defined on -// GTMLogger itself, there are also C macros that make usage of the shared -// GTMLogger instance very convenient. These macros are: -// -// GTMLoggerDebug(...) -// GTMLoggerInfo(...) -// GTMLoggerError(...) -// -// Again, a notable feature of these macros is that GTMLogDebug() calls *will be -// compiled out of non-DEBUG builds*. -// -// Standard Loggers -// ---------------- -// GTMLogger has the concept of "standard loggers". A standard logger is simply -// a logger that is pre-configured with some standard/common writer, formatter, -// and filter combination. Standard loggers are created using the creation -// methods beginning with "standard". The alternative to a standard logger is a -// regular logger, which will send messages to stdout, with no special -// formatting, and no filtering. -// -// How do I use GTMLogger? -// ---------------------- -// The typical way you will want to use GTMLogger is to simply use the -// GTMLogger*() macros for logging from code. That way we can easily make -// changes to the GTMLogger class and simply update the macros accordingly. Only -// your application startup code (perhaps, somewhere in main()) should use the -// GTMLogger class directly in order to configure the shared logger, which all -// of the code using the macros will be using. Again, this is just the typical -// situation. -// -// To be complete, there are cases where you may want to use GTMLogger directly, -// or even create separate GTMLogger instances for some reason. That's fine, -// too. -// -// Examples -// -------- -// The following show some common GTMLogger use cases. -// -// 1. You want to log something as simply as possible. Also, this call will only -// appear in debug builds. In non-DEBUG builds it will be completely removed. -// -// GTMLoggerDebug(@"foo = %@", foo); -// -// 2. The previous example is similar to the following. The major difference is -// that the previous call (example 1) will be compiled out of Release builds -// but this statement will not be compiled out. -// -// [[GTMLogger sharedLogger] logDebug:@"foo = %@", foo]; -// -// 3. Send all logging output from the shared logger to a file. We do this by -// creating an NSFileHandle for writing associated with a file, and setting -// that file handle as the logger's writer. -// -// NSFileHandle *f = [NSFileHandle fileHandleForWritingAtPath:@"/tmp/f.log" -// create:YES]; -// [[GTMLogger sharedLogger] setWriter:f]; -// GTMLoggerError(@"hi"); // This will be sent to /tmp/f.log -// -// 4. Create a new GTMLogger that will log to a file. This example differs from -// the previous one because here we create a new GTMLogger that is different -// from the shared logger. -// -// GTMLogger *logger = [GTMLogger standardLoggerWithPath:@"/tmp/temp.log"]; -// [logger logInfo:@"hi temp log file"]; -// -// 5. Create a logger that writes to stdout and does NOT do any formatting to -// the log message. This might be useful, for example, when writing a help -// screen for a command-line tool to standard output. -// -// GTMLogger *logger = [GTMLogger logger]; -// [logger logInfo:@"%@ version 0.1 usage", progName]; -// -// 6. Send log output to stdout AND to a log file. The trick here is that -// NSArrays function as composite log writers, which means when an array is -// set as the log writer, it forwards all logging messages to all of its -// contained GTMLogWriters. -// -// // Create array of GTMLogWriters -// NSArray *writers = [NSArray arrayWithObjects: -// [NSFileHandle fileHandleForWritingAtPath:@"/tmp/f.log" create:YES], -// [NSFileHandle fileHandleWithStandardOutput], nil]; -// -// GTMLogger *logger = [GTMLogger standardLogger]; -// [logger setWriter:writers]; -// [logger logInfo:@"hi"]; // Output goes to stdout and /tmp/f.log -// -// For futher details on log writers, formatters, and filters, see the -// documentation below. -// -// NOTE: GTMLogger is application level logging. By default it does nothing -// with _GTMDevLog/_GTMDevAssert (see GTMDefines.h). An application can choose -// to bridge _GTMDevLog/_GTMDevAssert to GTMLogger by providing macro -// definitions in its prefix header (see GTMDefines.h for how one would do -// that). -// -@interface GTMLogger : NSObject { - @private - id<GTMLogWriter> writer_; - id<GTMLogFormatter> formatter_; - id<GTMLogFilter> filter_; -} - -// -// Accessors for the shared logger instance -// - -// Returns a shared/global standard GTMLogger instance. Callers should typically -// use this method to get a GTMLogger instance, unless they explicitly want -// their own instance to configure for their own needs. This is the only method -// that returns a shared instance; all the rest return new GTMLogger instances. -+ (id)sharedLogger; - -// Sets the shared logger instance to |logger|. Future calls to +sharedLogger -// will return |logger| instead. -+ (void)setSharedLogger:(GTMLogger *)logger; - -// -// Creation methods -// - -// Returns a new autoreleased GTMLogger instance that will log to stdout, using -// the GTMLogStandardFormatter, and the GTMLogLevelFilter filter. -+ (id)standardLogger; - -// Same as +standardLogger, but logs to stderr. -+ (id)standardLoggerWithStderr; - -// Same as +standardLogger but levels >= kGTMLoggerLevelError are routed to -// stderr, everything else goes to stdout. -+ (id)standardLoggerWithStdoutAndStderr; - -// Returns a new standard GTMLogger instance with a log writer that will -// write to the file at |path|, and will use the GTMLogStandardFormatter and -// GTMLogLevelFilter classes. If |path| does not exist, it will be created. -+ (id)standardLoggerWithPath:(NSString *)path; - -// Returns an autoreleased GTMLogger instance that will use the specified -// |writer|, |formatter|, and |filter|. -+ (id)loggerWithWriter:(id<GTMLogWriter>)writer - formatter:(id<GTMLogFormatter>)formatter - filter:(id<GTMLogFilter>)filter; - -// Returns an autoreleased GTMLogger instance that logs to stdout, with the -// basic formatter, and no filter. The returned logger differs from the logger -// returned by +standardLogger because this one does not do any filtering and -// does not do any special log formatting; this is the difference between a -// "regular" logger and a "standard" logger. -+ (id)logger; - -// Designated initializer. This method returns a GTMLogger initialized with the -// specified |writer|, |formatter|, and |filter|. See the setter methods below -// for what values will be used if nil is passed for a parameter. -- (id)initWithWriter:(id<GTMLogWriter>)writer - formatter:(id<GTMLogFormatter>)formatter - filter:(id<GTMLogFilter>)filter; - -// -// Logging methods -// - -// Logs a message at the debug level (kGTMLoggerLevelDebug). -- (void)logDebug:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); -// Logs a message at the info level (kGTMLoggerLevelInfo). -- (void)logInfo:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); -// Logs a message at the error level (kGTMLoggerLevelError). -- (void)logError:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); -// Logs a message at the assert level (kGTMLoggerLevelAssert). -- (void)logAssert:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); - - -// -// Accessors -// - -// Accessor methods for the log writer. If the log writer is set to nil, -// [NSFileHandle fileHandleWithStandardOutput] is used. -- (id<GTMLogWriter>)writer; -- (void)setWriter:(id<GTMLogWriter>)writer; - -// Accessor methods for the log formatter. If the log formatter is set to nil, -// GTMLogBasicFormatter is used. This formatter will format log messages in a -// plain printf style. -- (id<GTMLogFormatter>)formatter; -- (void)setFormatter:(id<GTMLogFormatter>)formatter; - -// Accessor methods for the log filter. If the log filter is set to nil, -// GTMLogNoFilter is used, which allows all log messages through. -- (id<GTMLogFilter>)filter; -- (void)setFilter:(id<GTMLogFilter>)filter; - -@end // GTMLogger - - -// Helper functions that are used by the convenience GTMLogger*() macros that -// enable the logging of function names. -@interface GTMLogger (GTMLoggerMacroHelpers) -- (void)logFuncDebug:(const char *)func msg:(NSString *)fmt, ... - NS_FORMAT_FUNCTION(2, 3); -- (void)logFuncInfo:(const char *)func msg:(NSString *)fmt, ... - NS_FORMAT_FUNCTION(2, 3); -- (void)logFuncError:(const char *)func msg:(NSString *)fmt, ... - NS_FORMAT_FUNCTION(2, 3); -- (void)logFuncAssert:(const char *)func msg:(NSString *)fmt, ... - NS_FORMAT_FUNCTION(2, 3); -@end // GTMLoggerMacroHelpers - - -// The convenience macros are only defined if they haven't already been defined. -#ifndef GTMLoggerInfo - -// Convenience macros that log to the shared GTMLogger instance. These macros -// are how users should typically log to GTMLogger. Notice that GTMLoggerDebug() -// calls will be compiled out of non-Debug builds. -#define GTMLoggerDebug(...) \ - [[GTMLogger sharedLogger] logFuncDebug:__func__ msg:__VA_ARGS__] -#define GTMLoggerInfo(...) \ - [[GTMLogger sharedLogger] logFuncInfo:__func__ msg:__VA_ARGS__] -#define GTMLoggerError(...) \ - [[GTMLogger sharedLogger] logFuncError:__func__ msg:__VA_ARGS__] -#define GTMLoggerAssert(...) \ - [[GTMLogger sharedLogger] logFuncAssert:__func__ msg:__VA_ARGS__] - -// If we're not in a debug build, remove the GTMLoggerDebug statements. This -// makes calls to GTMLoggerDebug "compile out" of Release builds -#ifndef DEBUG -#undef GTMLoggerDebug -#define GTMLoggerDebug(...) do {} while(0) -#endif - -#endif // !defined(GTMLoggerInfo) - -// Log levels. -typedef enum { - kGTMLoggerLevelUnknown, - kGTMLoggerLevelDebug, - kGTMLoggerLevelInfo, - kGTMLoggerLevelError, - kGTMLoggerLevelAssert, -} GTMLoggerLevel; - - -// -// Log Writers -// - -// Protocol to be implemented by a GTMLogWriter instance. -@protocol GTMLogWriter <NSObject> -// Writes the given log message to where the log writer is configured to write. -- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level; -@end // GTMLogWriter - - -// Simple category on NSFileHandle that makes NSFileHandles valid log writers. -// This is convenient because something like, say, +fileHandleWithStandardError -// now becomes a valid log writer. Log messages are written to the file handle -// with a newline appended. -@interface NSFileHandle (GTMFileHandleLogWriter) <GTMLogWriter> -// Opens the file at |path| in append mode, and creates the file with |mode| -// if it didn't previously exist. -+ (id)fileHandleForLoggingAtPath:(NSString *)path mode:(mode_t)mode; -@end // NSFileHandle - - -// This category makes NSArray a GTMLogWriter that can be composed of other -// GTMLogWriters. This is the classic Composite GoF design pattern. When the -// GTMLogWriter -logMessage:level: message is sent to the array, the array -// forwards the message to all of its elements that implement the GTMLogWriter -// protocol. -// -// This is useful in situations where you would like to send log output to -// multiple log writers at the same time. Simply create an NSArray of the log -// writers you wish to use, then set the array as the "writer" for your -// GTMLogger instance. -@interface NSArray (GTMArrayCompositeLogWriter) <GTMLogWriter> -@end // GTMArrayCompositeLogWriter - - -// This category adapts the GTMLogger interface so that it can be used as a log -// writer; it's an "adapter" in the GoF Adapter pattern sense. -// -// This is useful when you want to configure a logger to log to a specific -// writer with a specific formatter and/or filter. But you want to also compose -// that with a different log writer that may have its own formatter and/or -// filter. -@interface GTMLogger (GTMLoggerLogWriter) <GTMLogWriter> -@end // GTMLoggerLogWriter - - -// -// Log Formatters -// - -// Protocol to be implemented by a GTMLogFormatter instance. -@protocol GTMLogFormatter <NSObject> -// Returns a formatted string using the format specified in |fmt| and the va -// args specified in |args|. -- (NSString *)stringForFunc:(NSString *)func - withFormat:(NSString *)fmt - valist:(va_list)args - level:(GTMLoggerLevel)level NS_FORMAT_FUNCTION(2, 0); -@end // GTMLogFormatter - - -// A basic log formatter that formats a string the same way that NSLog (or -// printf) would. It does not do anything fancy, nor does it add any data of its -// own. -@interface GTMLogBasicFormatter : NSObject <GTMLogFormatter> - -// Helper method for prettying C99 __func__ and GCC __PRETTY_FUNCTION__ -- (NSString *)prettyNameForFunc:(NSString *)func; - -@end // GTMLogBasicFormatter - - -// A log formatter that formats the log string like the basic formatter, but -// also prepends a timestamp and some basic process info to the message, as -// shown in the following sample output. -// 2007-12-30 10:29:24.177 myapp[4588/0xa07d0f60] [lvl=1] log mesage here -@interface GTMLogStandardFormatter : GTMLogBasicFormatter { - @private - NSDateFormatter *dateFormatter_; // yyyy-MM-dd HH:mm:ss.SSS - NSString *pname_; - pid_t pid_; -} -@end // GTMLogStandardFormatter - - -// -// Log Filters -// - -// Protocol to be implemented by a GTMLogFilter instance. -@protocol GTMLogFilter <NSObject> -// Returns YES if |msg| at |level| should be logged; NO otherwise. -- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level; -@end // GTMLogFilter - - -// A log filter that filters messages at the kGTMLoggerLevelDebug level out of -// non-debug builds. Messages at the kGTMLoggerLevelInfo level are also filtered -// out of non-debug builds unless GTMVerboseLogging is set in the environment or -// the processes's defaults. Messages at the kGTMLoggerLevelError level are -// never filtered. -@interface GTMLogLevelFilter : NSObject <GTMLogFilter> { - @private - BOOL verboseLoggingEnabled_; - NSUserDefaults *userDefaults_; -} -@end // GTMLogLevelFilter - -// A simple log filter that does NOT filter anything out; -// -filterAllowsMessage:level will always return YES. This can be a convenient -// way to enable debug-level logging in release builds (if you so desire). -@interface GTMLogNoFilter : NSObject <GTMLogFilter> -@end // GTMLogNoFilter - - -// Base class for custom level filters. Not for direct use, use the minimum -// or maximum level subclasses below. -@interface GTMLogAllowedLevelFilter : NSObject <GTMLogFilter> { - @private - NSIndexSet *allowedLevels_; -} -@end - -// A log filter that allows you to set a minimum log level. Messages below this -// level will be filtered. -@interface GTMLogMininumLevelFilter : GTMLogAllowedLevelFilter - -// Designated initializer, logs at levels < |level| will be filtered. -- (id)initWithMinimumLevel:(GTMLoggerLevel)level; - -@end - -// A log filter that allows you to set a maximum log level. Messages whose level -// exceeds this level will be filtered. This is really only useful if you have -// a composite GTMLogger that is sending the other messages elsewhere. -@interface GTMLogMaximumLevelFilter : GTMLogAllowedLevelFilter - -// Designated initializer, logs at levels > |level| will be filtered. -- (id)initWithMaximumLevel:(GTMLoggerLevel)level; - -@end - - -// For subclasses only -@interface GTMLogger (PrivateMethods) - -- (void)logInternalFunc:(const char *)func - format:(NSString *)fmt - valist:(va_list)args - level:(GTMLoggerLevel)level NS_FORMAT_FUNCTION(2, 0); - -@end - diff --git a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMLogger.m b/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMLogger.m deleted file mode 100644 index e6b2ba12..00000000 --- a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMLogger.m +++ /dev/null @@ -1,648 +0,0 @@ -// -// GTMLogger.m -// -// Copyright 2007-2008 Google Inc. -// -// 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. -// - -#import "GTMLogger.h" -#import <fcntl.h> -#import <unistd.h> -#import <stdlib.h> -#import <pthread.h> - - -#if !defined(__clang__) && (__GNUC__*10+__GNUC_MINOR__ >= 42) -// Some versions of GCC (4.2 and below AFAIK) aren't great about supporting -// -Wmissing-format-attribute -// when the function is anything more complex than foo(NSString *fmt, ...). -// You see the error inside the function when you turn ... into va_args and -// attempt to call another function (like vsprintf for example). -// So we just shut off the warning for this file. We reenable it at the end. -#pragma GCC diagnostic ignored "-Wmissing-format-attribute" -#endif // !__clang__ - -// Reference to the shared GTMLogger instance. This is not a singleton, it's -// just an easy reference to one shared instance. -static GTMLogger *gSharedLogger = nil; - - -@implementation GTMLogger - -// Returns a pointer to the shared logger instance. If none exists, a standard -// logger is created and returned. -+ (id)sharedLogger { - @synchronized(self) { - if (gSharedLogger == nil) { - gSharedLogger = [[self standardLogger] retain]; - } - } - return [[gSharedLogger retain] autorelease]; -} - -+ (void)setSharedLogger:(GTMLogger *)logger { - @synchronized(self) { - [gSharedLogger autorelease]; - gSharedLogger = [logger retain]; - } -} - -+ (id)standardLogger { - // Don't trust NSFileHandle not to throw - @try { - id<GTMLogWriter> writer = [NSFileHandle fileHandleWithStandardOutput]; - id<GTMLogFormatter> fr = [[[GTMLogStandardFormatter alloc] init] - autorelease]; - id<GTMLogFilter> filter = [[[GTMLogLevelFilter alloc] init] autorelease]; - return [[[self alloc] initWithWriter:writer - formatter:fr - filter:filter] autorelease]; - } - @catch (id e) { - // Ignored - } - return nil; -} - -+ (id)standardLoggerWithStderr { - // Don't trust NSFileHandle not to throw - @try { - id me = [self standardLogger]; - [me setWriter:[NSFileHandle fileHandleWithStandardError]]; - return me; - } - @catch (id e) { - // Ignored - } - return nil; -} - -+ (id)standardLoggerWithStdoutAndStderr { - // We're going to take advantage of the GTMLogger to GTMLogWriter adaptor - // and create a composite logger that an outer "standard" logger can use - // as a writer. Our inner loggers should apply no formatting since the main - // logger does that and we want the caller to be able to change formatters - // or add writers without knowing the inner structure of our composite. - - // Don't trust NSFileHandle not to throw - @try { - GTMLogBasicFormatter *formatter = [[[GTMLogBasicFormatter alloc] init] - autorelease]; - GTMLogger *stdoutLogger = - [self loggerWithWriter:[NSFileHandle fileHandleWithStandardOutput] - formatter:formatter - filter:[[[GTMLogMaximumLevelFilter alloc] - initWithMaximumLevel:kGTMLoggerLevelInfo] - autorelease]]; - GTMLogger *stderrLogger = - [self loggerWithWriter:[NSFileHandle fileHandleWithStandardError] - formatter:formatter - filter:[[[GTMLogMininumLevelFilter alloc] - initWithMinimumLevel:kGTMLoggerLevelError] - autorelease]]; - GTMLogger *compositeWriter = - [self loggerWithWriter:[NSArray arrayWithObjects: - stdoutLogger, stderrLogger, nil] - formatter:formatter - filter:[[[GTMLogNoFilter alloc] init] autorelease]]; - GTMLogger *outerLogger = [self standardLogger]; - [outerLogger setWriter:compositeWriter]; - return outerLogger; - } - @catch (id e) { - // Ignored - } - return nil; -} - -+ (id)standardLoggerWithPath:(NSString *)path { - @try { - NSFileHandle *fh = [NSFileHandle fileHandleForLoggingAtPath:path mode:0644]; - if (fh == nil) return nil; - id me = [self standardLogger]; - [me setWriter:fh]; - return me; - } - @catch (id e) { - // Ignored - } - return nil; -} - -+ (id)loggerWithWriter:(id<GTMLogWriter>)writer - formatter:(id<GTMLogFormatter>)formatter - filter:(id<GTMLogFilter>)filter { - return [[[self alloc] initWithWriter:writer - formatter:formatter - filter:filter] autorelease]; -} - -+ (id)logger { - return [[[self alloc] init] autorelease]; -} - -- (id)init { - return [self initWithWriter:nil formatter:nil filter:nil]; -} - -- (id)initWithWriter:(id<GTMLogWriter>)writer - formatter:(id<GTMLogFormatter>)formatter - filter:(id<GTMLogFilter>)filter { - if ((self = [super init])) { - [self setWriter:writer]; - [self setFormatter:formatter]; - [self setFilter:filter]; - } - return self; -} - -- (void)dealloc { - // Unlikely, but |writer_| may be an NSFileHandle, which can throw - @try { - [formatter_ release]; - [filter_ release]; - [writer_ release]; - } - @catch (id e) { - // Ignored - } - [super dealloc]; -} - -- (id<GTMLogWriter>)writer { - return [[writer_ retain] autorelease]; -} - -- (void)setWriter:(id<GTMLogWriter>)writer { - @synchronized(self) { - [writer_ autorelease]; - writer_ = nil; - if (writer == nil) { - // Try to use stdout, but don't trust NSFileHandle - @try { - writer_ = [[NSFileHandle fileHandleWithStandardOutput] retain]; - } - @catch (id e) { - // Leave |writer_| nil - } - } else { - writer_ = [writer retain]; - } - } -} - -- (id<GTMLogFormatter>)formatter { - return [[formatter_ retain] autorelease]; -} - -- (void)setFormatter:(id<GTMLogFormatter>)formatter { - @synchronized(self) { - [formatter_ autorelease]; - formatter_ = nil; - if (formatter == nil) { - @try { - formatter_ = [[GTMLogBasicFormatter alloc] init]; - } - @catch (id e) { - // Leave |formatter_| nil - } - } else { - formatter_ = [formatter retain]; - } - } -} - -- (id<GTMLogFilter>)filter { - return [[filter_ retain] autorelease]; -} - -- (void)setFilter:(id<GTMLogFilter>)filter { - @synchronized(self) { - [filter_ autorelease]; - filter_ = nil; - if (filter == nil) { - @try { - filter_ = [[GTMLogNoFilter alloc] init]; - } - @catch (id e) { - // Leave |filter_| nil - } - } else { - filter_ = [filter retain]; - } - } -} - -- (void)logDebug:(NSString *)fmt, ... { - va_list args; - va_start(args, fmt); - [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelDebug]; - va_end(args); -} - -- (void)logInfo:(NSString *)fmt, ... { - va_list args; - va_start(args, fmt); - [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelInfo]; - va_end(args); -} - -- (void)logError:(NSString *)fmt, ... { - va_list args; - va_start(args, fmt); - [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelError]; - va_end(args); -} - -- (void)logAssert:(NSString *)fmt, ... { - va_list args; - va_start(args, fmt); - [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelAssert]; - va_end(args); -} - -@end // GTMLogger - -@implementation GTMLogger (GTMLoggerMacroHelpers) - -- (void)logFuncDebug:(const char *)func msg:(NSString *)fmt, ... { - va_list args; - va_start(args, fmt); - [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelDebug]; - va_end(args); -} - -- (void)logFuncInfo:(const char *)func msg:(NSString *)fmt, ... { - va_list args; - va_start(args, fmt); - [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelInfo]; - va_end(args); -} - -- (void)logFuncError:(const char *)func msg:(NSString *)fmt, ... { - va_list args; - va_start(args, fmt); - [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelError]; - va_end(args); -} - -- (void)logFuncAssert:(const char *)func msg:(NSString *)fmt, ... { - va_list args; - va_start(args, fmt); - [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelAssert]; - va_end(args); -} - -@end // GTMLoggerMacroHelpers - -@implementation GTMLogger (PrivateMethods) - -- (void)logInternalFunc:(const char *)func - format:(NSString *)fmt - valist:(va_list)args - level:(GTMLoggerLevel)level { - // Primary point where logging happens, logging should never throw, catch - // everything. - @try { - NSString *fname = func ? [NSString stringWithUTF8String:func] : nil; - NSString *msg = [formatter_ stringForFunc:fname - withFormat:fmt - valist:args - level:level]; - if (msg && [filter_ filterAllowsMessage:msg level:level]) - [writer_ logMessage:msg level:level]; - } - @catch (id e) { - // Ignored - } -} - -@end // PrivateMethods - - -@implementation NSFileHandle (GTMFileHandleLogWriter) - -+ (id)fileHandleForLoggingAtPath:(NSString *)path mode:(mode_t)mode { - int fd = -1; - if (path) { - int flags = O_WRONLY | O_APPEND | O_CREAT; - fd = open([path fileSystemRepresentation], flags, mode); - } - if (fd == -1) return nil; - return [[[self alloc] initWithFileDescriptor:fd - closeOnDealloc:YES] autorelease]; -} - -- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { - @synchronized(self) { - // Closed pipes should not generate exceptions in our caller. Catch here - // as well [GTMLogger logInternalFunc:...] so that an exception in this - // writer does not prevent other writers from having a chance. - @try { - NSString *line = [NSString stringWithFormat:@"%@\n", msg]; - [self writeData:[line dataUsingEncoding:NSUTF8StringEncoding]]; - } - @catch (id e) { - // Ignored - } - } -} - -@end // GTMFileHandleLogWriter - - -@implementation NSArray (GTMArrayCompositeLogWriter) - -- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { - @synchronized(self) { - id<GTMLogWriter> child = nil; - for (child in self) { - if ([child conformsToProtocol:@protocol(GTMLogWriter)]) - [child logMessage:msg level:level]; - } - } -} - -@end // GTMArrayCompositeLogWriter - - -@implementation GTMLogger (GTMLoggerLogWriter) - -- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { - switch (level) { - case kGTMLoggerLevelDebug: - [self logDebug:@"%@", msg]; - break; - case kGTMLoggerLevelInfo: - [self logInfo:@"%@", msg]; - break; - case kGTMLoggerLevelError: - [self logError:@"%@", msg]; - break; - case kGTMLoggerLevelAssert: - [self logAssert:@"%@", msg]; - break; - default: - // Ignore the message. - break; - } -} - -@end // GTMLoggerLogWriter - - -@implementation GTMLogBasicFormatter - -- (NSString *)prettyNameForFunc:(NSString *)func { - NSString *name = [func stringByTrimmingCharactersInSet: - [NSCharacterSet whitespaceAndNewlineCharacterSet]]; - NSString *function = @"(unknown)"; - if ([name length]) { - if (// Objective C __func__ and __PRETTY_FUNCTION__ - [name hasPrefix:@"-["] || [name hasPrefix:@"+["] || - // C++ __PRETTY_FUNCTION__ and other preadorned formats - [name hasSuffix:@")"]) { - function = name; - } else { - // Assume C99 __func__ - function = [NSString stringWithFormat:@"%@()", name]; - } - } - return function; -} - -- (NSString *)stringForFunc:(NSString *)func - withFormat:(NSString *)fmt - valist:(va_list)args - level:(GTMLoggerLevel)level { - // Performance note: We may want to do a quick check here to see if |fmt| - // contains a '%', and if not, simply return 'fmt'. - if (!(fmt && args)) return nil; - return [[[NSString alloc] initWithFormat:fmt arguments:args] autorelease]; -} - -@end // GTMLogBasicFormatter - - -@implementation GTMLogStandardFormatter - -- (id)init { - if ((self = [super init])) { - dateFormatter_ = [[NSDateFormatter alloc] init]; - [dateFormatter_ setFormatterBehavior:NSDateFormatterBehavior10_4]; - [dateFormatter_ setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"]; - pname_ = [[[NSProcessInfo processInfo] processName] copy]; - pid_ = [[NSProcessInfo processInfo] processIdentifier]; - if (!(dateFormatter_ && pname_)) { - [self release]; - return nil; - } - } - return self; -} - -- (void)dealloc { - [dateFormatter_ release]; - [pname_ release]; - [super dealloc]; -} - -- (NSString *)stringForFunc:(NSString *)func - withFormat:(NSString *)fmt - valist:(va_list)args - level:(GTMLoggerLevel)level { - NSString *tstamp = nil; - @synchronized (dateFormatter_) { - tstamp = [dateFormatter_ stringFromDate:[NSDate date]]; - } - return [NSString stringWithFormat:@"%@ %@[%d/%p] [lvl=%d] %@ %@", - tstamp, pname_, pid_, pthread_self(), - level, [self prettyNameForFunc:func], - // |super| has guard for nil |fmt| and |args| - [super stringForFunc:func withFormat:fmt valist:args level:level]]; -} - -@end // GTMLogStandardFormatter - -static NSString *const kVerboseLoggingKey = @"GTMVerboseLogging"; - -// Check the environment and the user preferences for the GTMVerboseLogging key -// to see if verbose logging has been enabled. The environment variable will -// override the defaults setting, so check the environment first. -// COV_NF_START -static BOOL IsVerboseLoggingEnabled(NSUserDefaults *userDefaults) { - NSString *value = [[[NSProcessInfo processInfo] environment] - objectForKey:kVerboseLoggingKey]; - if (value) { - // Emulate [NSString boolValue] for pre-10.5 - value = [value stringByTrimmingCharactersInSet: - [NSCharacterSet whitespaceAndNewlineCharacterSet]]; - if ([[value uppercaseString] hasPrefix:@"Y"] || - [[value uppercaseString] hasPrefix:@"T"] || - [value intValue]) { - return YES; - } else { - return NO; - } - } - return [userDefaults boolForKey:kVerboseLoggingKey]; -} -// COV_NF_END - -@implementation GTMLogLevelFilter - -- (id)init { - self = [super init]; - if (self) { - // Keep a reference to standardUserDefaults, avoiding a crash if client code calls - // "NSUserDefaults resetStandardUserDefaults" which releases it from memory. We are still - // notified of changes through our instance. Note: resetStandardUserDefaults does not actually - // clear settings: - // https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html#//apple_ref/occ/clm/NSUserDefaults/resetStandardUserDefaults - // and so should only be called in test code if necessary. - userDefaults_ = [[NSUserDefaults standardUserDefaults] retain]; - [userDefaults_ addObserver:self - forKeyPath:kVerboseLoggingKey - options:NSKeyValueObservingOptionNew - context:nil]; - - verboseLoggingEnabled_ = IsVerboseLoggingEnabled(userDefaults_); - } - - return self; -} - -- (void)dealloc { - [userDefaults_ removeObserver:self forKeyPath:kVerboseLoggingKey]; - [userDefaults_ release]; - - [super dealloc]; -} - -// In DEBUG builds, log everything. If we're not in a debug build we'll assume -// that we're in a Release build. -- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level { -#if defined(DEBUG) && DEBUG - return YES; -#endif - - BOOL allow = YES; - - switch (level) { - case kGTMLoggerLevelDebug: - allow = NO; - break; - case kGTMLoggerLevelInfo: - allow = verboseLoggingEnabled_; - break; - case kGTMLoggerLevelError: - allow = YES; - break; - case kGTMLoggerLevelAssert: - allow = YES; - break; - default: - allow = YES; - break; - } - - return allow; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath - ofObject:(id)object - change:(NSDictionary *)change - context:(void *)context -{ - if([keyPath isEqual:kVerboseLoggingKey]) { - verboseLoggingEnabled_ = IsVerboseLoggingEnabled(userDefaults_); - } -} - -@end // GTMLogLevelFilter - - -@implementation GTMLogNoFilter - -- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level { - return YES; // Allow everything through -} - -@end // GTMLogNoFilter - - -@implementation GTMLogAllowedLevelFilter - -// Private designated initializer -- (id)initWithAllowedLevels:(NSIndexSet *)levels { - self = [super init]; - if (self != nil) { - allowedLevels_ = [levels retain]; - // Cap min/max level - if (!allowedLevels_ || - // NSIndexSet is unsigned so only check the high bound, but need to - // check both first and last index because NSIndexSet appears to allow - // wraparound. - ([allowedLevels_ firstIndex] > kGTMLoggerLevelAssert) || - ([allowedLevels_ lastIndex] > kGTMLoggerLevelAssert)) { - [self release]; - return nil; - } - } - return self; -} - -- (id)init { - // Allow all levels in default init - return [self initWithAllowedLevels:[NSIndexSet indexSetWithIndexesInRange: - NSMakeRange(kGTMLoggerLevelUnknown, - (kGTMLoggerLevelAssert - kGTMLoggerLevelUnknown + 1))]]; -} - -- (void)dealloc { - [allowedLevels_ release]; - [super dealloc]; -} - -- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level { - return [allowedLevels_ containsIndex:level]; -} - -@end // GTMLogAllowedLevelFilter - - -@implementation GTMLogMininumLevelFilter - -- (id)initWithMinimumLevel:(GTMLoggerLevel)level { - return [super initWithAllowedLevels:[NSIndexSet indexSetWithIndexesInRange: - NSMakeRange(level, - (kGTMLoggerLevelAssert - level + 1))]]; -} - -@end // GTMLogMininumLevelFilter - - -@implementation GTMLogMaximumLevelFilter - -- (id)initWithMaximumLevel:(GTMLoggerLevel)level { - return [super initWithAllowedLevels:[NSIndexSet indexSetWithIndexesInRange: - NSMakeRange(kGTMLoggerLevelUnknown, level + 1)]]; -} - -@end // GTMLogMaximumLevelFilter - -#if !defined(__clang__) && (__GNUC__*10+__GNUC_MINOR__ >= 42) -// See comment at top of file. -#pragma GCC diagnostic error "-Wmissing-format-attribute" -#endif // !__clang__ diff --git a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMNSData+zlib.h b/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMNSData+zlib.h deleted file mode 100644 index dceadc44..00000000 --- a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMNSData+zlib.h +++ /dev/null @@ -1,199 +0,0 @@ -// -// GTMNSData+zlib.h -// -// Copyright 2007-2008 Google Inc. -// -// 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. -// - -#import <Foundation/Foundation.h> -#import "GTMDefines.h" - -/// Helpers for dealing w/ zlib inflate/deflate calls. -@interface NSData (GTMZLibAdditions) - -// NOTE: For 64bit, none of these apis handle input sizes >32bits, they will -// return nil when given such data. To handle data of that size you really -// should be streaming it rather then doing it all in memory. - -#pragma mark Gzip Compression - -/// Return an autoreleased NSData w/ the result of gzipping the bytes. -// -// Uses the default compression level. -+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes - length:(NSUInteger)length; -+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes - length:(NSUInteger)length - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of gzipping the payload of |data|. -// -// Uses the default compression level. -+ (NSData *)gtm_dataByGzippingData:(NSData *)data __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByGzippingData:(NSData *)data - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of gzipping the bytes using |level| compression level. -// -// |level| can be 1-9, any other values will be clipped to that range. -+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of gzipping the payload of |data| using |level| compression level. -+ (NSData *)gtm_dataByGzippingData:(NSData *)data - compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByGzippingData:(NSData *)data - compressionLevel:(int)level - error:(NSError **)error; - -#pragma mark Zlib "Stream" Compression - -// NOTE: deflate is *NOT* gzip. deflate is a "zlib" stream. pick which one -// you really want to create. (the inflate api will handle either) - -/// Return an autoreleased NSData w/ the result of deflating the bytes. -// -// Uses the default compression level. -+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes - length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of deflating the payload of |data|. -// -// Uses the default compression level. -+ (NSData *)gtm_dataByDeflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByDeflatingData:(NSData *)data - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of deflating the bytes using |level| compression level. -// -// |level| can be 1-9, any other values will be clipped to that range. -+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of deflating the payload of |data| using |level| compression level. -+ (NSData *)gtm_dataByDeflatingData:(NSData *)data - compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByDeflatingData:(NSData *)data - compressionLevel:(int)level - error:(NSError **)error; - -#pragma mark Uncompress of Gzip or Zlib - -/// Return an autoreleased NSData w/ the result of decompressing the bytes. -// -// The bytes to decompress can be zlib or gzip payloads. -+ (NSData *)gtm_dataByInflatingBytes:(const void *)bytes - length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByInflatingBytes:(const void *)bytes - length:(NSUInteger)length - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of decompressing the payload of |data|. -// -// The data to decompress can be zlib or gzip payloads. -+ (NSData *)gtm_dataByInflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByInflatingData:(NSData *)data - error:(NSError **)error; - -#pragma mark "Raw" Compression Support - -// NOTE: raw deflate is *NOT* gzip or deflate. it does not include a header -// of any form and should only be used within streams here an external crc/etc. -// is done to validate the data. The RawInflate apis can be used on data -// processed like this. - -/// Return an autoreleased NSData w/ the result of *raw* deflating the bytes. -// -// Uses the default compression level. -// *No* header is added to the resulting data. -+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes - length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of *raw* deflating the payload of |data|. -// -// Uses the default compression level. -// *No* header is added to the resulting data. -+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of *raw* deflating the bytes using |level| compression level. -// -// |level| can be 1-9, any other values will be clipped to that range. -// *No* header is added to the resulting data. -+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of *raw* deflating the payload of |data| using |level| compression level. -// *No* header is added to the resulting data. -+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data - compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data - compressionLevel:(int)level - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of *raw* decompressing the bytes. -// -// The data to decompress, it should *not* have any header (zlib nor gzip). -+ (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes - length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes - length:(NSUInteger)length - error:(NSError **)error; - -/// Return an autoreleased NSData w/ the result of *raw* decompressing the payload of |data|. -// -// The data to decompress, it should *not* have any header (zlib nor gzip). -+ (NSData *)gtm_dataByRawInflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); -+ (NSData *)gtm_dataByRawInflatingData:(NSData *)data - error:(NSError **)error; - -@end - -FOUNDATION_EXPORT NSString *const GTMNSDataZlibErrorDomain; -FOUNDATION_EXPORT NSString *const GTMNSDataZlibErrorKey; // NSNumber -FOUNDATION_EXPORT NSString *const GTMNSDataZlibRemainingBytesKey; // NSNumber - -typedef NS_ENUM(NSInteger, GTMNSDataZlibError) { - GTMNSDataZlibErrorGreaterThan32BitsToCompress = 1024, - // An internal zlib error. - // GTMNSDataZlibErrorKey will contain the error value. - // NSLocalizedDescriptionKey may contain an error string from zlib. - // Look in zlib.h for list of errors. - GTMNSDataZlibErrorInternal, - // There was left over data in the buffer that was not used. - // GTMNSDataZlibRemainingBytesKey will contain number of remaining bytes. - GTMNSDataZlibErrorDataRemaining -}; diff --git a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMNSData+zlib.m b/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMNSData+zlib.m deleted file mode 100644 index bf74b2d2..00000000 --- a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/Foundation/GTMNSData+zlib.m +++ /dev/null @@ -1,531 +0,0 @@ -// -// GTMNSData+zlib.m -// -// Copyright 2007-2008 Google Inc. -// -// 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. -// - -#import "GTMNSData+zlib.h" -#import <zlib.h> -#import "GTMDefines.h" - -#define kChunkSize 1024 - -NSString *const GTMNSDataZlibErrorDomain = @"com.google.GTMNSDataZlibErrorDomain"; -NSString *const GTMNSDataZlibErrorKey = @"GTMNSDataZlibErrorKey"; -NSString *const GTMNSDataZlibRemainingBytesKey = @"GTMNSDataZlibRemainingBytesKey"; - -typedef enum { - CompressionModeZlib, - CompressionModeGzip, - CompressionModeRaw, -} CompressionMode; - -@interface NSData (GTMZlibAdditionsPrivate) -+ (NSData *)gtm_dataByCompressingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level - mode:(CompressionMode)mode - error:(NSError **)error; -+ (NSData *)gtm_dataByInflatingBytes:(const void *)bytes - length:(NSUInteger)length - isRawData:(BOOL)isRawData - error:(NSError **)error; -@end - -@implementation NSData (GTMZlibAdditionsPrivate) - -+ (NSData *)gtm_dataByCompressingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level - mode:(CompressionMode)mode - error:(NSError **)error { - if (!bytes || !length) { - return nil; - } - -#if defined(__LP64__) && __LP64__ - // Don't support > 32bit length for 64 bit, see note in header. - if (length > UINT_MAX) { - if (error) { - *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain - code:GTMNSDataZlibErrorGreaterThan32BitsToCompress - userInfo:nil]; - } - return nil; - } -#endif - - if (level == Z_DEFAULT_COMPRESSION) { - // the default value is actually outside the range, so we have to let it - // through specifically. - } else if (level < Z_BEST_SPEED) { - level = Z_BEST_SPEED; - } else if (level > Z_BEST_COMPRESSION) { - level = Z_BEST_COMPRESSION; - } - - z_stream strm; - bzero(&strm, sizeof(z_stream)); - - int memLevel = 8; // the default - int windowBits = 15; // the default - switch (mode) { - case CompressionModeZlib: - // nothing to do - break; - - case CompressionModeGzip: - windowBits += 16; // enable gzip header instead of zlib header - break; - - case CompressionModeRaw: - windowBits *= -1; // Negative to mean no header. - break; - } - int retCode; - if ((retCode = deflateInit2(&strm, level, Z_DEFLATED, windowBits, - memLevel, Z_DEFAULT_STRATEGY)) != Z_OK) { - // COV_NF_START - no real way to force this in a unittest (we guard all args) - if (error) { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] - forKey:GTMNSDataZlibErrorKey]; - *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain - code:GTMNSDataZlibErrorInternal - userInfo:userInfo]; - } - return nil; - // COV_NF_END - } - - // hint the size at 1/4 the input size - NSMutableData *result = [NSMutableData dataWithCapacity:(length/4)]; - unsigned char output[kChunkSize]; - - // setup the input - strm.avail_in = (unsigned int)length; - strm.next_in = (unsigned char*)bytes; - - // loop to collect the data - do { - // update what we're passing in - strm.avail_out = kChunkSize; - strm.next_out = output; - retCode = deflate(&strm, Z_FINISH); - if ((retCode != Z_OK) && (retCode != Z_STREAM_END)) { - // COV_NF_START - no real way to force this in a unittest - // (in inflate, we can feed bogus/truncated data to test, but an error - // here would be some internal issue w/in zlib, and there isn't any real - // way to test it) - if (error) { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] - forKey:GTMNSDataZlibErrorKey]; - *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain - code:GTMNSDataZlibErrorInternal - userInfo:userInfo]; - } - deflateEnd(&strm); - return nil; - // COV_NF_END - } - // collect what we got - unsigned gotBack = kChunkSize - strm.avail_out; - if (gotBack > 0) { - [result appendBytes:output length:gotBack]; - } - - } while (retCode == Z_OK); - - // if the loop exits, we used all input and the stream ended - _GTMDevAssert(strm.avail_in == 0, - @"thought we finished deflate w/o using all input, %u bytes left", - strm.avail_in); - _GTMDevAssert(retCode == Z_STREAM_END, - @"thought we finished deflate w/o getting a result of stream end, code %d", - retCode); - - // clean up - deflateEnd(&strm); - - return result; -} // gtm_dataByCompressingBytes:length:compressionLevel:useGzip: - -+ (NSData *)gtm_dataByInflatingBytes:(const void *)bytes - length:(NSUInteger)length - isRawData:(BOOL)isRawData - error:(NSError **)error { - if (!bytes || !length) { - return nil; - } - -#if defined(__LP64__) && __LP64__ - // Don't support > 32bit length for 64 bit, see note in header. - if (length > UINT_MAX) { - return nil; - } -#endif - - z_stream strm; - bzero(&strm, sizeof(z_stream)); - - // setup the input - strm.avail_in = (unsigned int)length; - strm.next_in = (unsigned char*)bytes; - - int windowBits = 15; // 15 to enable any window size - if (isRawData) { - windowBits *= -1; // make it negative to signal no header. - } else { - windowBits += 32; // and +32 to enable zlib or gzip header detection. - } - - int retCode; - if ((retCode = inflateInit2(&strm, windowBits)) != Z_OK) { - // COV_NF_START - no real way to force this in a unittest (we guard all args) - if (error) { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] - forKey:GTMNSDataZlibErrorKey]; - *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain - code:GTMNSDataZlibErrorInternal - userInfo:userInfo]; - } - return nil; - // COV_NF_END - } - - // hint the size at 4x the input size - NSMutableData *result = [NSMutableData dataWithCapacity:(length*4)]; - unsigned char output[kChunkSize]; - - // loop to collect the data - do { - // update what we're passing in - strm.avail_out = kChunkSize; - strm.next_out = output; - retCode = inflate(&strm, Z_NO_FLUSH); - if ((retCode != Z_OK) && (retCode != Z_STREAM_END)) { - if (error) { - NSMutableDictionary *userInfo = - [NSMutableDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] - forKey:GTMNSDataZlibErrorKey]; - if (strm.msg) { - NSString *message = [NSString stringWithUTF8String:strm.msg]; - if (message) { - [userInfo setObject:message forKey:NSLocalizedDescriptionKey]; - } - } - *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain - code:GTMNSDataZlibErrorInternal - userInfo:userInfo]; - } - inflateEnd(&strm); - return nil; - } - // collect what we got - unsigned gotBack = kChunkSize - strm.avail_out; - if (gotBack > 0) { - [result appendBytes:output length:gotBack]; - } - - } while (retCode == Z_OK); - - // make sure there wasn't more data tacked onto the end of a valid compressed - // stream. - if (strm.avail_in != 0) { - if (error) { - NSDictionary *userInfo = - [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInt:strm.avail_in] - forKey:GTMNSDataZlibRemainingBytesKey]; - *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain - code:GTMNSDataZlibErrorDataRemaining - userInfo:userInfo]; - } - result = nil; - } - // the only way out of the loop was by hitting the end of the stream - _GTMDevAssert(retCode == Z_STREAM_END, - @"thought we finished inflate w/o getting a result of stream end, code %d", - retCode); - - // clean up - inflateEnd(&strm); - - return result; -} // gtm_dataByInflatingBytes:length:windowBits: - -@end - - -@implementation NSData (GTMZLibAdditions) - -+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes - length:(NSUInteger)length { - return [self gtm_dataByGzippingBytes:bytes length:length error:NULL]; -} // gtm_dataByGzippingBytes:length: - -+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes - length:(NSUInteger)length - error:(NSError **)error { - return [self gtm_dataByCompressingBytes:bytes - length:length - compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeGzip - error:error]; -} // gtm_dataByGzippingBytes:length:error: - -+ (NSData *)gtm_dataByGzippingData:(NSData *)data { - return [self gtm_dataByGzippingData:data error:NULL]; -} // gtm_dataByGzippingData: - -+ (NSData *)gtm_dataByGzippingData:(NSData *)data error:(NSError **)error { - return [self gtm_dataByCompressingBytes:[data bytes] - length:[data length] - compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeGzip - error:error]; -} // gtm_dataByGzippingData:error: - -+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level { - return [self gtm_dataByGzippingBytes:bytes - length:length - compressionLevel:level - error:NULL]; -} // gtm_dataByGzippingBytes:length:level: - -+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level - error:(NSError **)error{ - return [self gtm_dataByCompressingBytes:bytes - length:length - compressionLevel:level - mode:CompressionModeGzip - error:error]; -} // gtm_dataByGzippingBytes:length:level:error - -+ (NSData *)gtm_dataByGzippingData:(NSData *)data - compressionLevel:(int)level { - return [self gtm_dataByGzippingData:data - compressionLevel:level - error:NULL]; -} // gtm_dataByGzippingData:level: - -+ (NSData *)gtm_dataByGzippingData:(NSData *)data - compressionLevel:(int)level - error:(NSError **)error{ - return [self gtm_dataByCompressingBytes:[data bytes] - length:[data length] - compressionLevel:level - mode:CompressionModeGzip - error:error]; -} // gtm_dataByGzippingData:level:error - -#pragma mark - - -+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes - length:(NSUInteger)length { - return [self gtm_dataByDeflatingBytes:bytes - length:length - error:NULL]; -} // gtm_dataByDeflatingBytes:length: - -+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - error:(NSError **)error{ - return [self gtm_dataByCompressingBytes:bytes - length:length - compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeZlib - error:error]; -} // gtm_dataByDeflatingBytes:length:error - -+ (NSData *)gtm_dataByDeflatingData:(NSData *)data { - return [self gtm_dataByDeflatingData:data error:NULL]; -} // gtm_dataByDeflatingData: - -+ (NSData *)gtm_dataByDeflatingData:(NSData *)data error:(NSError **)error { - return [self gtm_dataByCompressingBytes:[data bytes] - length:[data length] - compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeZlib - error:error]; -} // gtm_dataByDeflatingData: - -+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level { - return [self gtm_dataByDeflatingBytes:bytes - length:length - compressionLevel:level - error:NULL]; -} // gtm_dataByDeflatingBytes:length:level: - -+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level - error:(NSError **)error { - return [self gtm_dataByCompressingBytes:bytes - length:length - compressionLevel:level - mode:CompressionModeZlib - error:error]; -} // gtm_dataByDeflatingBytes:length:level:error: - -+ (NSData *)gtm_dataByDeflatingData:(NSData *)data - compressionLevel:(int)level { - return [self gtm_dataByDeflatingData:data - compressionLevel:level - error:NULL]; -} // gtm_dataByDeflatingData:level: - -+ (NSData *)gtm_dataByDeflatingData:(NSData *)data - compressionLevel:(int)level - error:(NSError **)error { - return [self gtm_dataByCompressingBytes:[data bytes] - length:[data length] - compressionLevel:level - mode:CompressionModeZlib - error:error]; -} // gtm_dataByDeflatingData:level:error: - -#pragma mark - - -+ (NSData *)gtm_dataByInflatingBytes:(const void *)bytes - length:(NSUInteger)length { - return [self gtm_dataByInflatingBytes:bytes - length:length - error:NULL]; -} // gtm_dataByInflatingBytes:length: - -+ (NSData *)gtm_dataByInflatingBytes:(const void *)bytes - length:(NSUInteger)length - error:(NSError **)error { - return [self gtm_dataByInflatingBytes:bytes - length:length - isRawData:NO - error:error]; -} // gtm_dataByInflatingBytes:length:error: - -+ (NSData *)gtm_dataByInflatingData:(NSData *)data { - return [self gtm_dataByInflatingData:data error:NULL]; -} // gtm_dataByInflatingData: - -+ (NSData *)gtm_dataByInflatingData:(NSData *)data - error:(NSError **)error { - return [self gtm_dataByInflatingBytes:[data bytes] - length:[data length] - isRawData:NO - error:error]; -} // gtm_dataByInflatingData: - -#pragma mark - - -+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes - length:(NSUInteger)length { - return [self gtm_dataByRawDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - error:NULL]; -} // gtm_dataByRawDeflatingBytes:length: - -+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - error:(NSError **)error { - return [self gtm_dataByCompressingBytes:bytes - length:length - compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeRaw - error:error]; -} // gtm_dataByRawDeflatingBytes:length:error: - -+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data { - return [self gtm_dataByRawDeflatingData:data error:NULL]; -} // gtm_dataByRawDeflatingData: - -+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data error:(NSError **)error { - return [self gtm_dataByCompressingBytes:[data bytes] - length:[data length] - compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeRaw - error:error]; -} // gtm_dataByRawDeflatingData:error: - -+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level { - return [self gtm_dataByRawDeflatingBytes:bytes - length:length - compressionLevel:level - error:NULL]; -} // gtm_dataByRawDeflatingBytes:length:compressionLevel: - -+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes - length:(NSUInteger)length - compressionLevel:(int)level - error:(NSError **)error{ - return [self gtm_dataByCompressingBytes:bytes - length:length - compressionLevel:level - mode:CompressionModeRaw - error:error]; -} // gtm_dataByRawDeflatingBytes:length:compressionLevel:error: - -+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data - compressionLevel:(int)level { - return [self gtm_dataByRawDeflatingData:data - compressionLevel:level - error:NULL]; -} // gtm_dataByRawDeflatingData:compressionLevel: - -+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data - compressionLevel:(int)level - error:(NSError **)error { - return [self gtm_dataByCompressingBytes:[data bytes] - length:[data length] - compressionLevel:level - mode:CompressionModeRaw - error:error]; -} // gtm_dataByRawDeflatingData:compressionLevel:error: - -+ (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes - length:(NSUInteger)length { - return [self gtm_dataByInflatingBytes:bytes - length:length - error:NULL]; -} // gtm_dataByRawInflatingBytes:length: - -+ (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes - length:(NSUInteger)length - error:(NSError **)error{ - return [self gtm_dataByInflatingBytes:bytes - length:length - isRawData:YES - error:error]; -} // gtm_dataByRawInflatingBytes:length:error: - -+ (NSData *)gtm_dataByRawInflatingData:(NSData *)data { - return [self gtm_dataByRawInflatingData:data - error:NULL]; -} // gtm_dataByRawInflatingData: - -+ (NSData *)gtm_dataByRawInflatingData:(NSData *)data - error:(NSError **)error { - return [self gtm_dataByInflatingBytes:[data bytes] - length:[data length] - isRawData:YES - error:error]; -} // gtm_dataByRawInflatingData:error: - -@end diff --git a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/GTMDefines.h b/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/GTMDefines.h deleted file mode 100644 index 8ec88cc0..00000000 --- a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/GTMDefines.h +++ /dev/null @@ -1,392 +0,0 @@ -// -// GTMDefines.h -// -// Copyright 2008 Google Inc. -// -// 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. -// - -// ============================================================================ - -#include <AvailabilityMacros.h> -#include <TargetConditionals.h> - -#ifdef __OBJC__ -#include <Foundation/NSObjCRuntime.h> -#endif // __OBJC__ - -#if TARGET_OS_IPHONE -#include <Availability.h> -#endif // TARGET_OS_IPHONE - -// ---------------------------------------------------------------------------- -// CPP symbols that can be overridden in a prefix to control how the toolbox -// is compiled. -// ---------------------------------------------------------------------------- - - -// By setting the GTM_CONTAINERS_VALIDATION_FAILED_LOG and -// GTM_CONTAINERS_VALIDATION_FAILED_ASSERT macros you can control what happens -// when a validation fails. If you implement your own validators, you may want -// to control their internals using the same macros for consistency. -#ifndef GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - #define GTM_CONTAINERS_VALIDATION_FAILED_ASSERT 0 -#endif - -// Ensure __has_feature and __has_extension are safe to use. -// See http://clang-analyzer.llvm.org/annotations.html -#ifndef __has_feature // Optional. - #define __has_feature(x) 0 // Compatibility with non-clang compilers. -#endif - -#ifndef __has_extension - #define __has_extension __has_feature // Compatibility with pre-3.0 compilers. -#endif - -// Give ourselves a consistent way to do inlines. Apple's macros even use -// a few different actual definitions, so we're based off of the foundation -// one. -#if !defined(GTM_INLINE) - #if (defined (__GNUC__) && (__GNUC__ == 4)) || defined (__clang__) - #define GTM_INLINE static __inline__ __attribute__((always_inline)) - #else - #define GTM_INLINE static __inline__ - #endif -#endif - -// Give ourselves a consistent way of doing externs that links up nicely -// when mixing objc and objc++ -#if !defined (GTM_EXTERN) - #if defined __cplusplus - #define GTM_EXTERN extern "C" - #define GTM_EXTERN_C_BEGIN extern "C" { - #define GTM_EXTERN_C_END } - #else - #define GTM_EXTERN extern - #define GTM_EXTERN_C_BEGIN - #define GTM_EXTERN_C_END - #endif -#endif - -// Give ourselves a consistent way of exporting things if we have visibility -// set to hidden. -#if !defined (GTM_EXPORT) - #define GTM_EXPORT __attribute__((visibility("default"))) -#endif - -// Give ourselves a consistent way of declaring something as unused. This -// doesn't use __unused because that is only supported in gcc 4.2 and greater. -#if !defined (GTM_UNUSED) -#define GTM_UNUSED(x) ((void)(x)) -#endif - -// _GTMDevLog & _GTMDevAssert -// -// _GTMDevLog & _GTMDevAssert are meant to be a very lightweight shell for -// developer level errors. This implementation simply macros to NSLog/NSAssert. -// It is not intended to be a general logging/reporting system. -// -// Please see http://code.google.com/p/google-toolbox-for-mac/wiki/DevLogNAssert -// for a little more background on the usage of these macros. -// -// _GTMDevLog log some error/problem in debug builds -// _GTMDevAssert assert if condition isn't met w/in a method/function -// in all builds. -// -// To replace this system, just provide different macro definitions in your -// prefix header. Remember, any implementation you provide *must* be thread -// safe since this could be called by anything in what ever situtation it has -// been placed in. -// - -// We only define the simple macros if nothing else has defined this. -#ifndef _GTMDevLog - -#ifdef DEBUG - #define _GTMDevLog(...) NSLog(__VA_ARGS__) -#else - #define _GTMDevLog(...) do { } while (0) -#endif - -#endif // _GTMDevLog - -#ifndef _GTMDevAssert -// we directly invoke the NSAssert handler so we can pass on the varargs -// (NSAssert doesn't have a macro we can use that takes varargs) -#if !defined(NS_BLOCK_ASSERTIONS) - #define _GTMDevAssert(condition, ...) \ - do { \ - if (!(condition)) { \ - [[NSAssertionHandler currentHandler] \ - handleFailureInFunction:(NSString *) \ - [NSString stringWithUTF8String:__PRETTY_FUNCTION__] \ - file:(NSString *)[NSString stringWithUTF8String:__FILE__] \ - lineNumber:__LINE__ \ - description:__VA_ARGS__]; \ - } \ - } while(0) -#else // !defined(NS_BLOCK_ASSERTIONS) - #define _GTMDevAssert(condition, ...) do { } while (0) -#endif // !defined(NS_BLOCK_ASSERTIONS) - -#endif // _GTMDevAssert - -// _GTMCompileAssert -// -// Note: Software for current compilers should just use _Static_assert directly -// instead of this macro. -// -// _GTMCompileAssert is an assert that is meant to fire at compile time if you -// want to check things at compile instead of runtime. For example if you -// want to check that a wchar is 4 bytes instead of 2 you would use -// _GTMCompileAssert(sizeof(wchar_t) == 4, wchar_t_is_4_bytes_on_OS_X) -// Note that the second "arg" is not in quotes, and must be a valid processor -// symbol in it's own right (no spaces, punctuation etc). - -// Wrapping this in an #ifndef allows external groups to define their own -// compile time assert scheme. -#ifndef _GTMCompileAssert - #if __has_feature(c_static_assert) || __has_extension(c_static_assert) - #define _GTMCompileAssert(test, msg) _Static_assert((test), #msg) - #else - // Pre-Xcode 7 support. - // - // We got this technique from here: - // http://unixjunkie.blogspot.com/2007/10/better-compile-time-asserts_29.html - #define _GTMCompileAssertSymbolInner(line, msg) _GTMCOMPILEASSERT ## line ## __ ## msg - #define _GTMCompileAssertSymbol(line, msg) _GTMCompileAssertSymbolInner(line, msg) - #define _GTMCompileAssert(test, msg) \ - typedef char _GTMCompileAssertSymbol(__LINE__, msg) [ ((test) ? 1 : -1) ] - #endif // __has_feature(c_static_assert) || __has_extension(c_static_assert) -#endif // _GTMCompileAssert - -// ---------------------------------------------------------------------------- -// CPP symbols defined based on the project settings so the GTM code has -// simple things to test against w/o scattering the knowledge of project -// setting through all the code. -// ---------------------------------------------------------------------------- - -// Provide a single constant CPP symbol that all of GTM uses for ifdefing -// iPhone code. -#if TARGET_OS_IPHONE // iPhone SDK - // For iPhone specific stuff - #define GTM_IPHONE_SDK 1 - #if TARGET_IPHONE_SIMULATOR - #define GTM_IPHONE_DEVICE 0 - #define GTM_IPHONE_SIMULATOR 1 - #else - #define GTM_IPHONE_DEVICE 1 - #define GTM_IPHONE_SIMULATOR 0 - #endif // TARGET_IPHONE_SIMULATOR - // By default, GTM has provided it's own unittesting support, define this - // to use the support provided by Xcode, especially for the Xcode4 support - // for unittesting. - #ifndef GTM_USING_XCTEST - #define GTM_USING_XCTEST 0 - #endif - #define GTM_MACOS_SDK 0 -#else - // For MacOS specific stuff - #define GTM_MACOS_SDK 1 - #define GTM_IPHONE_SDK 0 - #define GTM_IPHONE_SIMULATOR 0 - #define GTM_IPHONE_DEVICE 0 - #ifndef GTM_USING_XCTEST - #define GTM_USING_XCTEST 0 - #endif -#endif - -// Some of our own availability macros -#if GTM_MACOS_SDK -#define GTM_AVAILABLE_ONLY_ON_IPHONE UNAVAILABLE_ATTRIBUTE -#define GTM_AVAILABLE_ONLY_ON_MACOS -#else -#define GTM_AVAILABLE_ONLY_ON_IPHONE -#define GTM_AVAILABLE_ONLY_ON_MACOS UNAVAILABLE_ATTRIBUTE -#endif - -// GC was dropped by Apple, define the old constant incase anyone still keys -// off of it. -#ifndef GTM_SUPPORT_GC - #define GTM_SUPPORT_GC 0 -#endif - -// Some support for advanced clang static analysis functionality -#ifndef NS_RETURNS_RETAINED - #if __has_feature(attribute_ns_returns_retained) - #define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) - #else - #define NS_RETURNS_RETAINED - #endif -#endif - -#ifndef NS_RETURNS_NOT_RETAINED - #if __has_feature(attribute_ns_returns_not_retained) - #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) - #else - #define NS_RETURNS_NOT_RETAINED - #endif -#endif - -#ifndef CF_RETURNS_RETAINED - #if __has_feature(attribute_cf_returns_retained) - #define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) - #else - #define CF_RETURNS_RETAINED - #endif -#endif - -#ifndef CF_RETURNS_NOT_RETAINED - #if __has_feature(attribute_cf_returns_not_retained) - #define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained)) - #else - #define CF_RETURNS_NOT_RETAINED - #endif -#endif - -#ifndef NS_CONSUMED - #if __has_feature(attribute_ns_consumed) - #define NS_CONSUMED __attribute__((ns_consumed)) - #else - #define NS_CONSUMED - #endif -#endif - -#ifndef CF_CONSUMED - #if __has_feature(attribute_cf_consumed) - #define CF_CONSUMED __attribute__((cf_consumed)) - #else - #define CF_CONSUMED - #endif -#endif - -#ifndef NS_CONSUMES_SELF - #if __has_feature(attribute_ns_consumes_self) - #define NS_CONSUMES_SELF __attribute__((ns_consumes_self)) - #else - #define NS_CONSUMES_SELF - #endif -#endif - -#ifndef GTM_NONNULL - #if defined(__has_attribute) - #if __has_attribute(nonnull) - #define GTM_NONNULL(x) __attribute__((nonnull x)) - #else - #define GTM_NONNULL(x) - #endif - #else - #define GTM_NONNULL(x) - #endif -#endif - -// Invalidates the initializer from which it's called. -#ifndef GTMInvalidateInitializer - #if __has_feature(objc_arc) - #define GTMInvalidateInitializer() \ - do { \ - [self class]; /* Avoid warning of dead store to |self|. */ \ - _GTMDevAssert(NO, @"Invalid initializer."); \ - return nil; \ - } while (0) - #else - #define GTMInvalidateInitializer() \ - do { \ - [self release]; \ - _GTMDevAssert(NO, @"Invalid initializer."); \ - return nil; \ - } while (0) - #endif -#endif - -#ifndef GTMCFAutorelease - // GTMCFAutorelease returns an id. In contrast, Apple's CFAutorelease returns - // a CFTypeRef. - #if __has_feature(objc_arc) - #define GTMCFAutorelease(x) CFBridgingRelease(x) - #else - #define GTMCFAutorelease(x) ([(id)x autorelease]) - #endif -#endif - -#ifdef __OBJC__ - - -// Macro to allow you to create NSStrings out of other macros. -// #define FOO foo -// NSString *fooString = GTM_NSSTRINGIFY(FOO); -#if !defined (GTM_NSSTRINGIFY) - #define GTM_NSSTRINGIFY_INNER(x) @#x - #define GTM_NSSTRINGIFY(x) GTM_NSSTRINGIFY_INNER(x) -#endif - -// Macro to allow fast enumeration when building for 10.5 or later, and -// reliance on NSEnumerator for 10.4. Remember, NSDictionary w/ FastEnumeration -// does keys, so pick the right thing, nothing is done on the FastEnumeration -// side to be sure you're getting what you wanted. -#ifndef GTM_FOREACH_OBJECT - #if TARGET_OS_IPHONE || !(MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - #define GTM_FOREACH_ENUMEREE(element, enumeration) \ - for (element in enumeration) - #define GTM_FOREACH_OBJECT(element, collection) \ - for (element in collection) - #define GTM_FOREACH_KEY(element, collection) \ - for (element in collection) - #else - #define GTM_FOREACH_ENUMEREE(element, enumeration) \ - for (NSEnumerator *_ ## element ## _enum = enumeration; \ - (element = [_ ## element ## _enum nextObject]) != nil; ) - #define GTM_FOREACH_OBJECT(element, collection) \ - GTM_FOREACH_ENUMEREE(element, [collection objectEnumerator]) - #define GTM_FOREACH_KEY(element, collection) \ - GTM_FOREACH_ENUMEREE(element, [collection keyEnumerator]) - #endif -#endif - -// ============================================================================ - -// GTM_SEL_STRING is for specifying selector (usually property) names to KVC -// or KVO methods. -// In debug it will generate warnings for undeclared selectors if -// -Wunknown-selector is turned on. -// In release it will have no runtime overhead. -#ifndef GTM_SEL_STRING - #ifdef DEBUG - #define GTM_SEL_STRING(selName) NSStringFromSelector(@selector(selName)) - #else - #define GTM_SEL_STRING(selName) @#selName - #endif // DEBUG -#endif // GTM_SEL_STRING - -#ifndef GTM_WEAK -#if __has_feature(objc_arc_weak) - // With ARC enabled, __weak means a reference that isn't implicitly - // retained. __weak objects are accessed through runtime functions, so - // they are zeroed out, but this requires OS X 10.7+. - // At clang r251041+, ARC-style zeroing weak references even work in - // non-ARC mode. - #define GTM_WEAK __weak - #elif __has_feature(objc_arc) - // ARC, but targeting 10.6 or older, where zeroing weak references don't - // exist. - #define GTM_WEAK __unsafe_unretained - #else - // With manual reference counting, __weak used to be silently ignored. - // clang r251041 gives it the ARC semantics instead. This means they - // now require a deployment target of 10.7, while some clients of GTM - // still target 10.6. In these cases, expand to __unsafe_unretained instead - #define GTM_WEAK - #endif -#endif - -#endif // __OBJC__ diff --git a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/LICENSE b/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/LICENSE deleted file mode 100644 index d6456956..00000000 --- a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/README.md b/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/README.md deleted file mode 100644 index 710560a3..00000000 --- a/StoneIsland/platforms/ios/Pods/GoogleToolboxForMac/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# GTM: Google Toolbox for Mac # - -**Project site** <https://github.com/google/google-toolbox-for-mac><br> -**Discussion group** <http://groups.google.com/group/google-toolbox-for-mac> - -# Google Toolbox for Mac # - -A collection of source from different Google projects that may be of use to -developers working other iOS or OS X projects. - -If you find a problem/bug or want a new feature to be included in the Google -Toolbox for Mac, please join the -[discussion group](http://groups.google.com/group/google-toolbox-for-mac) -or submit an -[issue](https://github.com/google/google-toolbox-for-mac/issues). diff --git a/StoneIsland/platforms/ios/Pods/GoogleUtilities/Frameworks/frameworks/GoogleUtilities.framework/GoogleUtilities b/StoneIsland/platforms/ios/Pods/GoogleUtilities/Frameworks/frameworks/GoogleUtilities.framework/GoogleUtilities Binary files differnew file mode 100755 index 00000000..0fd17b65 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/GoogleUtilities/Frameworks/frameworks/GoogleUtilities.framework/GoogleUtilities diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceID.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceID.h new file mode 120000 index 00000000..6a5ede6e --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceID.h @@ -0,0 +1 @@ +../../../GGLInstanceID/Headers/Public/GGLInstanceID.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceIDConfig.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceIDConfig.h new file mode 120000 index 00000000..95605988 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceIDConfig.h @@ -0,0 +1 @@ +../../../GGLInstanceID/Headers/Public/GGLInstanceIDConfig.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceIDDelegate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceIDDelegate.h new file mode 120000 index 00000000..e7d44b8c --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceIDDelegate.h @@ -0,0 +1 @@ +../../../GGLInstanceID/Headers/Public/GGLInstanceIDDelegate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceIDHeaders.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceIDHeaders.h new file mode 120000 index 00000000..b1d72b29 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Private/GGLInstanceID/GGLInstanceIDHeaders.h @@ -0,0 +1 @@ +../../../GGLInstanceID/Headers/Public/GGLInstanceIDHeaders.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMConfig.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMConfig.h new file mode 120000 index 00000000..b5187f24 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMConfig.h @@ -0,0 +1 @@ +../../../GoogleCloudMessaging/Headers/Public/GCMConfig.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMPubSub.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMPubSub.h new file mode 120000 index 00000000..0072792c --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMPubSub.h @@ -0,0 +1 @@ +../../../GoogleCloudMessaging/Headers/Public/GCMPubSub.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMReceiverDelegate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMReceiverDelegate.h new file mode 120000 index 00000000..e6e1be97 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMReceiverDelegate.h @@ -0,0 +1 @@ +../../../GoogleCloudMessaging/Headers/Public/GCMReceiverDelegate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMService.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMService.h new file mode 120000 index 00000000..256f388d --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GCMService.h @@ -0,0 +1 @@ +../../../GoogleCloudMessaging/Headers/Public/GCMService.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GoogleCloudMessaging.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GoogleCloudMessaging.h new file mode 120000 index 00000000..18678070 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleCloudMessaging/GoogleCloudMessaging.h @@ -0,0 +1 @@ +../../../GoogleCloudMessaging/Headers/Public/GoogleCloudMessaging.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleToolboxForMac/GTMDefines.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleToolboxForMac/GTMDefines.h deleted file mode 120000 index 55031108..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleToolboxForMac/GTMDefines.h +++ /dev/null @@ -1 +0,0 @@ -../../../GoogleToolboxForMac/GTMDefines.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleToolboxForMac/GTMLogger.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleToolboxForMac/GTMLogger.h deleted file mode 120000 index f45a0d7d..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleToolboxForMac/GTMLogger.h +++ /dev/null @@ -1 +0,0 @@ -../../../GoogleToolboxForMac/Foundation/GTMLogger.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleToolboxForMac/GTMNSData+zlib.h b/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleToolboxForMac/GTMNSData+zlib.h deleted file mode 120000 index 9e724193..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/GoogleToolboxForMac/GTMNSData+zlib.h +++ /dev/null @@ -1 +0,0 @@ -../../../GoogleToolboxForMac/Foundation/GTMNSData+zlib.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Any.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Any.pbobjc.h deleted file mode 120000 index a3b2cd7c..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Any.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Any.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Api.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Api.pbobjc.h deleted file mode 120000 index aaf80d3f..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Api.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Api.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Duration.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Duration.pbobjc.h deleted file mode 120000 index 819be985..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Duration.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Duration.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Empty.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Empty.pbobjc.h deleted file mode 120000 index 848a3a8f..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Empty.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Empty.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/FieldMask.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/FieldMask.pbobjc.h deleted file mode 120000 index 094aa0a9..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/FieldMask.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/FieldMask.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBArray.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBArray.h deleted file mode 120000 index f8e77a6c..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBArray.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBArray.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBArray_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBArray_PackagePrivate.h deleted file mode 120000 index 7114784a..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBArray_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBArray_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBBootstrap.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBBootstrap.h deleted file mode 120000 index 587e43e9..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBBootstrap.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBBootstrap.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedInputStream.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedInputStream.h deleted file mode 120000 index 130ef510..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedInputStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBCodedInputStream.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedInputStream_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedInputStream_PackagePrivate.h deleted file mode 120000 index f50b154c..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedInputStream_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBCodedInputStream_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedOutputStream.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedOutputStream.h deleted file mode 120000 index 56983131..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedOutputStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBCodedOutputStream.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedOutputStream_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedOutputStream_PackagePrivate.h deleted file mode 120000 index a0496568..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBCodedOutputStream_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBCodedOutputStream_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDescriptor.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDescriptor.h deleted file mode 120000 index 63331674..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDescriptor.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBDescriptor.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDescriptor_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDescriptor_PackagePrivate.h deleted file mode 120000 index 78cf94a7..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDescriptor_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBDescriptor_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDictionary.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDictionary.h deleted file mode 120000 index e121884f..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDictionary.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBDictionary.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDictionary_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDictionary_PackagePrivate.h deleted file mode 120000 index f4e36365..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBDictionary_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBDictionary_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBExtensionInternals.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBExtensionInternals.h deleted file mode 120000 index 524ff703..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBExtensionInternals.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBExtensionInternals.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBExtensionRegistry.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBExtensionRegistry.h deleted file mode 120000 index 5235109f..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBExtensionRegistry.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBExtensionRegistry.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBMessage.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBMessage.h deleted file mode 120000 index cc221529..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBMessage.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBMessage.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBMessage_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBMessage_PackagePrivate.h deleted file mode 120000 index 8a25863d..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBMessage_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBMessage_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBProtocolBuffers.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBProtocolBuffers.h deleted file mode 120000 index 9bb666c8..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBProtocolBuffers.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBProtocolBuffers.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBProtocolBuffers_RuntimeSupport.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBProtocolBuffers_RuntimeSupport.h deleted file mode 120000 index 33362308..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBProtocolBuffers_RuntimeSupport.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBProtocolBuffers_RuntimeSupport.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBRootObject.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBRootObject.h deleted file mode 120000 index f793ef7d..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBRootObject.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBRootObject.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBRootObject_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBRootObject_PackagePrivate.h deleted file mode 120000 index 6d7e5150..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBRootObject_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBRootObject_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBRuntimeTypes.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBRuntimeTypes.h deleted file mode 120000 index c4d0370a..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBRuntimeTypes.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBRuntimeTypes.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownField.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownField.h deleted file mode 120000 index e16bb76b..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownField.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUnknownField.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownFieldSet.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownFieldSet.h deleted file mode 120000 index d89c5eb1..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownFieldSet.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUnknownFieldSet.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownFieldSet_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownFieldSet_PackagePrivate.h deleted file mode 120000 index 3493399e..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownFieldSet_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUnknownFieldSet_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownField_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownField_PackagePrivate.h deleted file mode 120000 index 1a74032c..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUnknownField_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUnknownField_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUtilities.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUtilities.h deleted file mode 120000 index 270b85f2..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUtilities.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUtilities_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUtilities_PackagePrivate.h deleted file mode 120000 index 507dfa53..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBUtilities_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUtilities_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBWellKnownTypes.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBWellKnownTypes.h deleted file mode 120000 index 0d3f3872..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBWellKnownTypes.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBWellKnownTypes.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBWireFormat.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBWireFormat.h deleted file mode 120000 index d1ce7e22..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/GPBWireFormat.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBWireFormat.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/SourceContext.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/SourceContext.pbobjc.h deleted file mode 120000 index 2df29f41..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/SourceContext.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/SourceContext.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Struct.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Struct.pbobjc.h deleted file mode 120000 index 6cad8000..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Struct.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Struct.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Timestamp.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Timestamp.pbobjc.h deleted file mode 120000 index 3d78ef1f..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Timestamp.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Timestamp.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Type.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Type.pbobjc.h deleted file mode 120000 index 06829fbe..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Type.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Type.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Wrappers.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Wrappers.pbobjc.h deleted file mode 120000 index df905161..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/Protobuf/Wrappers.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Wrappers.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb.h b/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb.h deleted file mode 120000 index 549ba434..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb.h +++ /dev/null @@ -1 +0,0 @@ -../../../nanopb/pb.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb_common.h b/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb_common.h deleted file mode 120000 index 002c466e..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb_common.h +++ /dev/null @@ -1 +0,0 @@ -../../../nanopb/pb_common.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb_decode.h b/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb_decode.h deleted file mode 120000 index 62ed2f10..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb_decode.h +++ /dev/null @@ -1 +0,0 @@ -../../../nanopb/pb_decode.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb_encode.h b/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb_encode.h deleted file mode 120000 index 057760ea..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Private/nanopb/pb_encode.h +++ /dev/null @@ -1 +0,0 @@ -../../../nanopb/pb_encode.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalytics+AppDelegate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalytics+AppDelegate.h deleted file mode 120000 index 1d9bd7ed..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalytics+AppDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalytics.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalytics.h deleted file mode 120000 index f8fc4fb1..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalytics.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalyticsConfiguration.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalyticsConfiguration.h deleted file mode 120000 index 67732719..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalyticsConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalyticsSwiftNameSupport.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalyticsSwiftNameSupport.h deleted file mode 120000 index d6071113..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRAnalyticsSwiftNameSupport.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalyticsSwiftNameSupport.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRApp.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRApp.h deleted file mode 120000 index 97c9b35a..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRApp.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRApp.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRConfiguration.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRConfiguration.h deleted file mode 120000 index c34ddb85..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRConfiguration.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIREventNames.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIREventNames.h deleted file mode 120000 index 8924cc08..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIREventNames.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIREventNames.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIROptions.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIROptions.h deleted file mode 120000 index a40119b4..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIROptions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIROptions.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRParameterNames.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRParameterNames.h deleted file mode 120000 index 6e37a6e0..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRParameterNames.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRUserPropertyNames.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRUserPropertyNames.h deleted file mode 120000 index 4459d6bc..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FIRUserPropertyNames.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FirebaseAnalytics.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FirebaseAnalytics.h deleted file mode 120000 index 2d48a7db..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseAnalytics/FirebaseAnalytics/FirebaseAnalytics.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRAnalyticsConfiguration.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRAnalyticsConfiguration.h deleted file mode 120000 index 31d68c31..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRAnalyticsConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRApp.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRApp.h deleted file mode 120000 index 90c263ac..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRApp.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRApp.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRConfiguration.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRConfiguration.h deleted file mode 120000 index 6a732c03..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRConfiguration.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRCoreSwiftNameSupport.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRCoreSwiftNameSupport.h deleted file mode 120000 index 8473ede1..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRCoreSwiftNameSupport.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRCoreSwiftNameSupport.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRLoggerLevel.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRLoggerLevel.h deleted file mode 120000 index a2167066..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIRLoggerLevel.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRLoggerLevel.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIROptions.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIROptions.h deleted file mode 120000 index 5bd77eb8..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FIROptions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIROptions.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FirebaseCore.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FirebaseCore.h deleted file mode 120000 index 96e9330e..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseCore/FirebaseCore/FirebaseCore.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FirebaseCore.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseInstanceID/FirebaseInstanceID/FIRInstanceID.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseInstanceID/FirebaseInstanceID/FIRInstanceID.h deleted file mode 120000 index 62c92b0c..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseInstanceID/FirebaseInstanceID/FIRInstanceID.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FIRInstanceID.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseInstanceID/FirebaseInstanceID/FirebaseInstanceID.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseInstanceID/FirebaseInstanceID/FirebaseInstanceID.h deleted file mode 120000 index 8925bdb8..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseInstanceID/FirebaseInstanceID/FirebaseInstanceID.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseMessaging/FirebaseMessaging/FIRMessaging.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseMessaging/FirebaseMessaging/FIRMessaging.h deleted file mode 120000 index daaf6b08..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseMessaging/FirebaseMessaging/FIRMessaging.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Headers/FIRMessaging.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseMessaging/FirebaseMessaging/FirebaseMessaging.h b/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseMessaging/FirebaseMessaging/FirebaseMessaging.h deleted file mode 120000 index 94e089d7..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/FirebaseMessaging/FirebaseMessaging/FirebaseMessaging.h +++ /dev/null @@ -1 +0,0 @@ -../../../../FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Headers/FirebaseMessaging.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceID.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceID.h new file mode 120000 index 00000000..6a5ede6e --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceID.h @@ -0,0 +1 @@ +../../../GGLInstanceID/Headers/Public/GGLInstanceID.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceIDConfig.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceIDConfig.h new file mode 120000 index 00000000..95605988 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceIDConfig.h @@ -0,0 +1 @@ +../../../GGLInstanceID/Headers/Public/GGLInstanceIDConfig.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceIDDelegate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceIDDelegate.h new file mode 120000 index 00000000..e7d44b8c --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceIDDelegate.h @@ -0,0 +1 @@ +../../../GGLInstanceID/Headers/Public/GGLInstanceIDDelegate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceIDHeaders.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceIDHeaders.h new file mode 120000 index 00000000..b1d72b29 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Public/GGLInstanceID/GGLInstanceIDHeaders.h @@ -0,0 +1 @@ +../../../GGLInstanceID/Headers/Public/GGLInstanceIDHeaders.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMConfig.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMConfig.h new file mode 120000 index 00000000..b5187f24 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMConfig.h @@ -0,0 +1 @@ +../../../GoogleCloudMessaging/Headers/Public/GCMConfig.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMPubSub.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMPubSub.h new file mode 120000 index 00000000..0072792c --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMPubSub.h @@ -0,0 +1 @@ +../../../GoogleCloudMessaging/Headers/Public/GCMPubSub.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMReceiverDelegate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMReceiverDelegate.h new file mode 120000 index 00000000..e6e1be97 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMReceiverDelegate.h @@ -0,0 +1 @@ +../../../GoogleCloudMessaging/Headers/Public/GCMReceiverDelegate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMService.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMService.h new file mode 120000 index 00000000..256f388d --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GCMService.h @@ -0,0 +1 @@ +../../../GoogleCloudMessaging/Headers/Public/GCMService.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GoogleCloudMessaging.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GoogleCloudMessaging.h new file mode 120000 index 00000000..18678070 --- /dev/null +++ b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleCloudMessaging/GoogleCloudMessaging.h @@ -0,0 +1 @@ +../../../GoogleCloudMessaging/Headers/Public/GoogleCloudMessaging.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleToolboxForMac/GTMDefines.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleToolboxForMac/GTMDefines.h deleted file mode 120000 index 55031108..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleToolboxForMac/GTMDefines.h +++ /dev/null @@ -1 +0,0 @@ -../../../GoogleToolboxForMac/GTMDefines.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleToolboxForMac/GTMLogger.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleToolboxForMac/GTMLogger.h deleted file mode 120000 index f45a0d7d..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleToolboxForMac/GTMLogger.h +++ /dev/null @@ -1 +0,0 @@ -../../../GoogleToolboxForMac/Foundation/GTMLogger.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleToolboxForMac/GTMNSData+zlib.h b/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleToolboxForMac/GTMNSData+zlib.h deleted file mode 120000 index 9e724193..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/GoogleToolboxForMac/GTMNSData+zlib.h +++ /dev/null @@ -1 +0,0 @@ -../../../GoogleToolboxForMac/Foundation/GTMNSData+zlib.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Any.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Any.pbobjc.h deleted file mode 120000 index a3b2cd7c..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Any.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Any.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Api.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Api.pbobjc.h deleted file mode 120000 index aaf80d3f..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Api.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Api.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Duration.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Duration.pbobjc.h deleted file mode 120000 index 819be985..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Duration.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Duration.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Empty.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Empty.pbobjc.h deleted file mode 120000 index 848a3a8f..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Empty.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Empty.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/FieldMask.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/FieldMask.pbobjc.h deleted file mode 120000 index 094aa0a9..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/FieldMask.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/FieldMask.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBArray.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBArray.h deleted file mode 120000 index f8e77a6c..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBArray.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBArray.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBArray_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBArray_PackagePrivate.h deleted file mode 120000 index 7114784a..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBArray_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBArray_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBBootstrap.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBBootstrap.h deleted file mode 120000 index 587e43e9..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBBootstrap.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBBootstrap.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedInputStream.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedInputStream.h deleted file mode 120000 index 130ef510..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedInputStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBCodedInputStream.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedInputStream_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedInputStream_PackagePrivate.h deleted file mode 120000 index f50b154c..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedInputStream_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBCodedInputStream_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedOutputStream.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedOutputStream.h deleted file mode 120000 index 56983131..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedOutputStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBCodedOutputStream.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedOutputStream_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedOutputStream_PackagePrivate.h deleted file mode 120000 index a0496568..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBCodedOutputStream_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBCodedOutputStream_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDescriptor.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDescriptor.h deleted file mode 120000 index 63331674..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDescriptor.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBDescriptor.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDescriptor_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDescriptor_PackagePrivate.h deleted file mode 120000 index 78cf94a7..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDescriptor_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBDescriptor_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDictionary.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDictionary.h deleted file mode 120000 index e121884f..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDictionary.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBDictionary.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDictionary_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDictionary_PackagePrivate.h deleted file mode 120000 index f4e36365..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBDictionary_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBDictionary_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBExtensionInternals.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBExtensionInternals.h deleted file mode 120000 index 524ff703..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBExtensionInternals.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBExtensionInternals.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBExtensionRegistry.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBExtensionRegistry.h deleted file mode 120000 index 5235109f..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBExtensionRegistry.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBExtensionRegistry.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBMessage.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBMessage.h deleted file mode 120000 index cc221529..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBMessage.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBMessage.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBMessage_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBMessage_PackagePrivate.h deleted file mode 120000 index 8a25863d..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBMessage_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBMessage_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBProtocolBuffers.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBProtocolBuffers.h deleted file mode 120000 index 9bb666c8..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBProtocolBuffers.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBProtocolBuffers.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBProtocolBuffers_RuntimeSupport.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBProtocolBuffers_RuntimeSupport.h deleted file mode 120000 index 33362308..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBProtocolBuffers_RuntimeSupport.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBProtocolBuffers_RuntimeSupport.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBRootObject.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBRootObject.h deleted file mode 120000 index f793ef7d..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBRootObject.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBRootObject.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBRootObject_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBRootObject_PackagePrivate.h deleted file mode 120000 index 6d7e5150..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBRootObject_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBRootObject_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBRuntimeTypes.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBRuntimeTypes.h deleted file mode 120000 index c4d0370a..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBRuntimeTypes.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBRuntimeTypes.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownField.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownField.h deleted file mode 120000 index e16bb76b..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownField.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUnknownField.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownFieldSet.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownFieldSet.h deleted file mode 120000 index d89c5eb1..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownFieldSet.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUnknownFieldSet.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownFieldSet_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownFieldSet_PackagePrivate.h deleted file mode 120000 index 3493399e..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownFieldSet_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUnknownFieldSet_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownField_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownField_PackagePrivate.h deleted file mode 120000 index 1a74032c..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUnknownField_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUnknownField_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUtilities.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUtilities.h deleted file mode 120000 index 270b85f2..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUtilities.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUtilities_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUtilities_PackagePrivate.h deleted file mode 120000 index 507dfa53..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBUtilities_PackagePrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBUtilities_PackagePrivate.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBWellKnownTypes.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBWellKnownTypes.h deleted file mode 120000 index 0d3f3872..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBWellKnownTypes.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBWellKnownTypes.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBWireFormat.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBWireFormat.h deleted file mode 120000 index d1ce7e22..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/GPBWireFormat.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/GPBWireFormat.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/SourceContext.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/SourceContext.pbobjc.h deleted file mode 120000 index 2df29f41..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/SourceContext.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/SourceContext.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Struct.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Struct.pbobjc.h deleted file mode 120000 index 6cad8000..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Struct.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Struct.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Timestamp.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Timestamp.pbobjc.h deleted file mode 120000 index 3d78ef1f..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Timestamp.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Timestamp.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Type.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Type.pbobjc.h deleted file mode 120000 index 06829fbe..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Type.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Type.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Wrappers.pbobjc.h b/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Wrappers.pbobjc.h deleted file mode 120000 index df905161..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/Protobuf/Wrappers.pbobjc.h +++ /dev/null @@ -1 +0,0 @@ -../../../Protobuf/objectivec/google/protobuf/Wrappers.pbobjc.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb.h b/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb.h deleted file mode 120000 index 549ba434..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb.h +++ /dev/null @@ -1 +0,0 @@ -../../../nanopb/pb.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb_common.h b/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb_common.h deleted file mode 120000 index 002c466e..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb_common.h +++ /dev/null @@ -1 +0,0 @@ -../../../nanopb/pb_common.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb_decode.h b/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb_decode.h deleted file mode 120000 index 62ed2f10..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb_decode.h +++ /dev/null @@ -1 +0,0 @@ -../../../nanopb/pb_decode.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb_encode.h b/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb_encode.h deleted file mode 120000 index 057760ea..00000000 --- a/StoneIsland/platforms/ios/Pods/Headers/Public/nanopb/pb_encode.h +++ /dev/null @@ -1 +0,0 @@ -../../../nanopb/pb_encode.h
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Pods/Manifest.lock b/StoneIsland/platforms/ios/Pods/Manifest.lock index 14e0fb64..0fe15b8a 100644 --- a/StoneIsland/platforms/ios/Pods/Manifest.lock +++ b/StoneIsland/platforms/ios/Pods/Manifest.lock @@ -1,43 +1,30 @@ PODS: - - FirebaseAnalytics (4.0.2): - - FirebaseCore (~> 4.0) - - FirebaseInstanceID (~> 2.0) - - GoogleToolboxForMac/NSData+zlib (~> 2.1) - - FirebaseCore (4.0.4): - - GoogleToolboxForMac/NSData+zlib (~> 2.1) - - nanopb (~> 0.3) - - FirebaseInstanceID (2.0.0): - - FirebaseCore (~> 4.0) - - FirebaseMessaging (2.0.0): - - FirebaseAnalytics (~> 4.0) - - FirebaseCore (~> 4.0) - - FirebaseInstanceID (~> 2.0) - - GoogleToolboxForMac/Logger (~> 2.1) - - Protobuf (~> 3.1) - - GoogleToolboxForMac/Defines (2.1.1) - - GoogleToolboxForMac/Logger (2.1.1): - - GoogleToolboxForMac/Defines (= 2.1.1) - - GoogleToolboxForMac/NSData+zlib (2.1.1): - - GoogleToolboxForMac/Defines (= 2.1.1) - - nanopb (0.3.8): - - nanopb/decode (= 0.3.8) - - nanopb/encode (= 0.3.8) - - nanopb/decode (0.3.8) - - nanopb/encode (0.3.8) - - Protobuf (3.3.0) + - GGLInstanceID (1.2.1) + - GoogleCloudMessaging (1.2.0): + - GoogleInterchangeUtilities (~> 1.0) + - GoogleIPhoneUtilities (~> 1.0) + - GoogleSymbolUtilities (~> 1.0) + - GoogleInterchangeUtilities (1.2.2): + - GoogleSymbolUtilities (~> 1.1) + - GoogleIPhoneUtilities (1.2.1): + - GoogleSymbolUtilities (~> 1.0) + - GoogleUtilities (~> 1.0) + - GoogleSymbolUtilities (1.1.2) + - GoogleUtilities (1.3.2): + - GoogleSymbolUtilities (~> 1.1) DEPENDENCIES: - - FirebaseMessaging (~> 2.0.0) + - GGLInstanceID (~> 1.2.1) + - GoogleCloudMessaging (~> 1.2.0) SPEC CHECKSUMS: - FirebaseAnalytics: ad41720e3e67fc63fbe3d2948d3e26932a8de311 - FirebaseCore: cfc042628ef9f20debe09c0eb683135fcd404cb4 - FirebaseInstanceID: 9fbf536668f4d3f0880e7438456dabd1376e294b - FirebaseMessaging: 227406c05b0dc9290702d2e9f18ab5528f0c2cf2 - GoogleToolboxForMac: 8e329f1b599f2512c6b10676d45736bcc2cbbeb0 - nanopb: 5601e6bca2dbf1ed831b519092ec110f66982ca3 - Protobuf: d582fecf68201eac3d79ed61369ef45734394b9c + GGLInstanceID: 4a317044f744281b82cd03015f379899f277cad3 + GoogleCloudMessaging: f37ea14dd0f41d4d889c10b5559dd35bbfd9ac26 + GoogleInterchangeUtilities: d5bc4d88d5b661ab72f9d70c58d02ca8c27ad1f7 + GoogleIPhoneUtilities: 63f25e93a3ddcb66884d182aab3a660d98f1479b + GoogleSymbolUtilities: 631ee17048aa5e9ab133470d768ea997a5ef9b96 + GoogleUtilities: 8bbc733218aad26306f9d4a253823986110e3358 -PODFILE CHECKSUM: d30afd90d783c9b82bb259ff1fc6f66e54101279 +PODFILE CHECKSUM: 49a15453d072b09c3f930a9bd96e706663ee516a COCOAPODS: 1.2.0 diff --git a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj b/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj index 6e463276..c9b4f412 100644 --- a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj +++ b/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj @@ -7,380 +7,100 @@ objects = { /* Begin PBXBuildFile section */ - 03B6A752DA89454D582F255E70B04C62 /* Pods-Stone Island-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17C0998C78916667291BC7B0048B0 /* Pods-Stone Island-dummy.m */; }; - 0584FFBCFF5916779F2047A5EF1EAB24 /* Api.pbobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 12A858169F9A81AF89F6583B8E966025 /* Api.pbobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0AED6A8FBEF7F5C59C7082B8E7716BE2 /* pb_decode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F32BA3D0167408D03707E0C4EDBA4A6 /* pb_decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0EC3C5F27472BC4701C86F26C2D12B3A /* Timestamp.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = EB57A28C36332095328E9BCE71ECC618 /* Timestamp.pbobjc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 0FCDA635D239A61F2BF25331980961AA /* Api.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C39A2A98031E5843DD0CC795958C690 /* Api.pbobjc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 10BCC6DA098614A3F7230CFB31F1B84E /* GPBWireFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 524B0176A9FCF760DD5807E536CD4F89 /* GPBWireFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 11A2E6703999D52A9C0B35B0DFA09BC4 /* GPBExtensionRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2C2FC17101A63229827673FE63277 /* GPBExtensionRegistry.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 140D35C2173D500F1EBB729A9A1FE6CE /* Wrappers.pbobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = FE50E6A13848DC8387C0F2467E5BC858 /* Wrappers.pbobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 14A62D5A8CBFE597C99EE33EE9D04442 /* GPBCodedOutputStream_PackagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = CBAC1AE6755D17C79F857D660B23B118 /* GPBCodedOutputStream_PackagePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 154E5AB0C541CED05D795C6198947D27 /* GTMLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A9F42493FCDAB7940BB6EEBACF55FD92 /* GTMLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16B537D2EDFB4829ED6E6F282A14BC45 /* Empty.pbobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 346156D12F225C5435732E3752CE2FE8 /* Empty.pbobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 18F7C87FB79D3D4C76F22B3F26E5F7F6 /* GPBWireFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 870C6D914891D286B54687025379F80A /* GPBWireFormat.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 1E46EC8AB8830A23FAC91E8547748BF5 /* pb_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CCDD9C7666644E2535222D173D76CC1 /* pb_common.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 20B06CE03E8EF2A681F68D2814B1F5C5 /* GPBDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CC9FDA24E3A6607E12BFFEE4275B45 /* GPBDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 244087B863272C303C26961C6FADCF8E /* GPBCodedInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D25B6E40FCFF039CD02F31F19588B8 /* GPBCodedInputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 289F36556DAF50888B448ED430E94DCB /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 35A06A6FAC89255798D0D4BD7AE185C5 /* Wrappers.pbobjc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 28B7761E1D77D96D267539A7B67188EA /* nanopb-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 103D9CA08917A78B44AC60345EE69379 /* nanopb-dummy.m */; }; - 2C115525DD3B1AE2248DB3343275EB57 /* GPBUnknownFieldSet_PackagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F6DA253821905085377C5B375CF7B4C3 /* GPBUnknownFieldSet_PackagePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D3370592B46135A72AE93EA362734F0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; - 2DB8B5969876803C5485FD9681C3C70D /* GPBExtensionRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 094F1883B9081EA6E8925E8BB383CAE2 /* GPBExtensionRegistry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2ED4641D7F49A1AC2F41EB6F818B8B0D /* GPBCodedOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 58A83A189DC1BFBFAC7F399BB9751F14 /* GPBCodedOutputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33A0F7D3ED05ACED0A1CA656D24F8ED6 /* Struct.pbobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A504923A8D53592A63719F6FF69A7C /* Struct.pbobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 372B121548A8AAC9019B34D499ECAEAA /* GPBUnknownField.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E9DF1F8DEF9920EC67FFDBBACE310D6 /* GPBUnknownField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 377B6859DA9B7A6E0B4307A5CB055359 /* GPBRuntimeTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 545A0FB5DF2C8FFCCF42EB58D5A81ED0 /* GPBRuntimeTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37CCDC46A3514834D113ECA797AB741C /* GPBUnknownFieldSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 99E63D80EC2BCAC4383FAB765DA50EC0 /* GPBUnknownFieldSet.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 3AFB8BB811B8E80909FAB57769F472CD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; - 413FF88B6D643A075644A4E4B728DDD1 /* GPBUtilities_PackagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 68E8F056DD0B8CDDCDF684A3A375FCC2 /* GPBUtilities_PackagePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4854DD8506654D68FCA7C685CDD711E2 /* GPBArray_PackagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AE7E7D7FC01B98294A0293EF649BD95 /* GPBArray_PackagePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4C8C03EFB7437DB1155064DDA3D0A1BE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; - 50047A0A3C3C1251088478639ABA6D08 /* GPBArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 6500BB56ED633DA52D3173D059F8378D /* GPBArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52CB9B7B9367A311AA9D43E257D931D0 /* GPBWellKnownTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CD04E4A14DCEB9584A09B6CCAF0CCD4 /* GPBWellKnownTypes.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 54FCE05202C4E9317D168C4AC22A4C9E /* GPBDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = D708F677F238A988C8234E48AC22776D /* GPBDictionary.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 57FE72AC5AB55F80302D3501AB388285 /* SourceContext.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 10F4575D8B6A691A550472225DDF3F0F /* SourceContext.pbobjc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 5B8F036F7FAAF35FE98CE3FBFF25D72F /* GoogleToolboxForMac-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F905482AB614EB3193EC09019806C5D /* GoogleToolboxForMac-dummy.m */; }; - 5F5E7A69933E6F421C0A81AE2604BA41 /* Protobuf-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F4217831202D96492E9AA5A8C1317D16 /* Protobuf-dummy.m */; }; - 686F67C01593C8E0FB610386AF5F287F /* FieldMask.pbobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 828B35BEFD155F90F6A506A514E9373D /* FieldMask.pbobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6A5451E67CBAAED4E81995B58427A175 /* GTMNSData+zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 83147647FF520FEBC086F33609ECA938 /* GTMNSData+zlib.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 72575C2EA8AD3A029CE735EE8D8AB047 /* Any.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B1DD76026CC0D86BA2FD2A023EBF3B1 /* Any.pbobjc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 746EF9D0CF4064E64AC4F7930038847B /* GPBUnknownField_PackagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F1A5E09DC081BEC3AF27803E648E1367 /* GPBUnknownField_PackagePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75FEFB9B46377E86FE65BA73BF73B24F /* GPBUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F444CCFE63D2832F35B8837ED408165 /* GPBUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 808E97D147D8800078607BE7BB1E2C36 /* GPBRootObject_PackagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 85161CE483D0D52918F3658155149F93 /* GPBRootObject_PackagePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B96B260B4F3219DABFCA63F4BB80804 /* GPBProtocolBuffers_RuntimeSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = BB19157342ADAC984C6ED234681CE8F7 /* GPBProtocolBuffers_RuntimeSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D795F39665BBEC7B3DEE9369F95BD74 /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = B77AE850AC471E6D53586C630AE90ACF /* Struct.pbobjc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 8EEDB7063191F5682723BF26BA959583 /* GPBUnknownField.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB5760CCB2AC6808AD433F462BA5B40 /* GPBUnknownField.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 90906AC58824566DFC6875E1ED25E855 /* GTMDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 8485EE3EE516E1C76E274ED63FD32675 /* GTMDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91C9C419C2E304B3A68293C22053034E /* pb_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = FBA0788F3CA6A1FC7E1E87517F07ADD1 /* pb_encode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; - 91CDFE6BDFEBE1BF7C5A9856C9307C62 /* GPBArray.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C72AF407EBF46522014F5E384F2DF2B /* GPBArray.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 96516A19D37AACA7FF1AFDC8D5649280 /* GPBCodedInputStream_PackagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 493A2403E3A377D0C8D3B18E72BD9948 /* GPBCodedInputStream_PackagePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9CBD14C17446EC9384CFAADBADF12387 /* pb_common.c in Sources */ = {isa = PBXBuildFile; fileRef = FB7C030E89839D647194E5CA2D2DF745 /* pb_common.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc -fno-objc-arc"; }; }; - 9E66200018B0A847A39C7527CEFBF5DD /* GPBBootstrap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A608890EC1AF8EC42A14397D3A5894B /* GPBBootstrap.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A39A7F90321353E49D6165BAD53505B2 /* pb.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F5070398EA6EBF049CB8770A127136 /* pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A60CBF107DBE787C7774E7BD867185F7 /* GPBDictionary_PackagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C8C2723080839DDB0C24FEDD0D73096 /* GPBDictionary_PackagePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A618EDE73A86F425B1FEE0D01804AB0C /* GPBExtensionInternals.h in Headers */ = {isa = PBXBuildFile; fileRef = 15595CD747174AB281B75E0EC911F6E2 /* GPBExtensionInternals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE55AE2010B2139E1FAAF5C5128FD45F /* GPBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 14DB8CD0793D1700939269B1162FC634 /* GPBUtilities.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - AFB2E0E2919C60F1589C86A455CDDAB3 /* GPBMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9251C49A032CCBDAE109D0A0CD2DD92E /* GPBMessage.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - B1A450E8C279AA9360E77D4C632B1EA6 /* GPBRootObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 4950A34F093D61FB39CE30CCADE17BBE /* GPBRootObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - B1FCD6CEDAE7DEBC44B3EAA860C16EE0 /* GPBRootObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E1DD1E636FBF87375DD28325F85E9F9B /* GPBRootObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3755C71DCBFEBE07682F17CCE804B67 /* GPBWellKnownTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = A5428F00BC2E563C54345DD10FBC64B9 /* GPBWellKnownTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B9704C2C3AF30ACA0C84033AD94B94B0 /* Type.pbobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A49C9D5CD03434E366BE7C82C206817 /* Type.pbobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC7DBE6C979297C50EC3BF1C96D4BCE4 /* GPBExtensionInternals.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E49413C1602C72986E35FE55B15AA9D /* GPBExtensionInternals.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - C136220535719959455CDC0434D195CE /* GPBDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BF4A1DADA8860F20B2307BA21E0DDA7 /* GPBDescriptor.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - C373172ABCAFBA7A771B3A4C4574C243 /* Any.pbobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = E84A0F52367C4369A4CD78E715FD3316 /* Any.pbobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9DE4DA0ED245C1A662AE79B579C933A /* GPBDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = ABDBCAF813D5B069AD91028508742BC2 /* GPBDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA8F5217BB2A36ABC7B23E25679A5CA3 /* Duration.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F2E775643AFE2BFF0D572961BBC381E /* Duration.pbobjc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CE793643063B71F80F32F0851FDABFA5 /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E6187654126ABEF16075E772E203E1D /* GTMLogger.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - D02A9BE496DF996BBC92776E586BCAF8 /* pb_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = A5E70F2734E0CCB2FEA59727473D14D4 /* pb_encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0B466935B33E0E2D65E9691B56F4B8E /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 265B5F2D8D23C8DAE5A2EC4C45482BB2 /* Type.pbobjc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - D1ABB2FA52FC2506830E729D60E9CA16 /* GPBDescriptor_PackagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4240053415DBD5B52DBD9497BD0984FD /* GPBDescriptor_PackagePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D91B805B5CF397B10F04B5E66924320B /* GPBMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 9315DD9048DB523B31C2B0B63880F185 /* GPBMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED78AFA3F46A54217E68746892698704 /* GPBMessage_PackagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D7846CA9DBB7357D0A5145648AA01620 /* GPBMessage_PackagePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE2C33AB2D11A3E9CCDF7661AE9E147A /* FieldMask.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E7C6CABB305C6F18E115008557D510A /* FieldMask.pbobjc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F1B1695A6AB8AFEC306AB371F2DCA21F /* GTMNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD49F4DAD4E018B49D62F07A50020C3 /* GTMNSData+zlib.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F2A7C7D18755231B289C10D16DD6F730 /* pb_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = C1669FD3E74618D9183A1227FBBF4050 /* pb_decode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; - F6A5A6C8DCC5BB2790E4915146084C0B /* Empty.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 72A904D3D8B863EED50A4A1E3FFADC0D /* Empty.pbobjc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F7EB206E2986650BF0D3D39866C08903 /* GPBCodedOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 3504481E0B537B019882F670155CDDA2 /* GPBCodedOutputStream.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F889E78E4F5DA9B2031418FFB4798AFC /* GPBCodedInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D645CF003B6E3608A32FF8B3EC5D589 /* GPBCodedInputStream.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F8C907FF0573A7F7EF41888CBBCCD5B4 /* GPBUnknownFieldSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D11E9C49AAF09E786C50401B18C3DC4 /* GPBUnknownFieldSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F903364920B941263AEA9F7079387F62 /* SourceContext.pbobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = A4F87C21CB7A6B68E245AB8373CE92F3 /* SourceContext.pbobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FBE5C6517E1C7FE5912B884A5C716FBC /* GPBProtocolBuffers.h in Headers */ = {isa = PBXBuildFile; fileRef = 22BA7C1126445EE94A49FE02FE9FFD6B /* GPBProtocolBuffers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FD6A629D6E2614065D82CC8BD9C584C3 /* Timestamp.pbobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7180FC87E2294112BACEA059A5831595 /* Timestamp.pbobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FDD22EFD14E29D4143AF26A6E1A3A872 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; - FEE69989A5738A7A23C1FEBC9E22B0A5 /* Duration.pbobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 115E69164EF7A408741D07C2086D2C25 /* Duration.pbobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B931F94A15CEC623D339DA3C38BE3A3 /* Pods-Stone Island-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17C0998C78916667291BC7B0048B0 /* Pods-Stone Island-dummy.m */; }; + A236CF7DD81B48ADA6EC58CCD7C8704E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - A8DBFC6FA5890F08515B21D17DB251F6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 83E4B77BD7F292F23A4617388E39F15E; - remoteInfo = Protobuf; - }; - BFB2041DEF820E18BEFA8BB9AED65421 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = FA9D13261AF395CF5D54BB3203DF2A6E; - remoteInfo = GoogleToolboxForMac; - }; - F8B4BDF44EA49346EA28F8B9F75D8935 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = CF4B35B9FC819386EB09219BC91827D7; - remoteInfo = nanopb; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ - 094F1883B9081EA6E8925E8BB383CAE2 /* GPBExtensionRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBExtensionRegistry.h; path = objectivec/GPBExtensionRegistry.h; sourceTree = "<group>"; }; 0C86D2D78080EDCEE85A13AA1692ACD6 /* Pods-Stone Island.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Stone Island.release.xcconfig"; sourceTree = "<group>"; }; - 0F444CCFE63D2832F35B8837ED408165 /* GPBUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBUtilities.h; path = objectivec/GPBUtilities.h; sourceTree = "<group>"; }; - 103D9CA08917A78B44AC60345EE69379 /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = "<group>"; }; 10B3D03939EC1F098DF4D390572E7A70 /* Pods-Stone Island-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Stone Island-acknowledgements.markdown"; sourceTree = "<group>"; }; - 10F4575D8B6A691A550472225DDF3F0F /* SourceContext.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SourceContext.pbobjc.m; path = objectivec/google/protobuf/SourceContext.pbobjc.m; sourceTree = "<group>"; }; - 115E69164EF7A408741D07C2086D2C25 /* Duration.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Duration.pbobjc.h; path = objectivec/google/protobuf/Duration.pbobjc.h; sourceTree = "<group>"; }; - 12A858169F9A81AF89F6583B8E966025 /* Api.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Api.pbobjc.h; path = objectivec/google/protobuf/Api.pbobjc.h; sourceTree = "<group>"; }; - 14DB8CD0793D1700939269B1162FC634 /* GPBUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBUtilities.m; path = objectivec/GPBUtilities.m; sourceTree = "<group>"; }; - 15595CD747174AB281B75E0EC911F6E2 /* GPBExtensionInternals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBExtensionInternals.h; path = objectivec/GPBExtensionInternals.h; sourceTree = "<group>"; }; - 192AB16212B37CEBDD9BD2D13A435C4A /* FirebaseNanoPB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseNanoPB.framework; path = Frameworks/FirebaseNanoPB.framework; sourceTree = "<group>"; }; - 1F905482AB614EB3193EC09019806C5D /* GoogleToolboxForMac-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleToolboxForMac-dummy.m"; sourceTree = "<group>"; }; - 22BA7C1126445EE94A49FE02FE9FFD6B /* GPBProtocolBuffers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBProtocolBuffers.h; path = objectivec/GPBProtocolBuffers.h; sourceTree = "<group>"; }; + 173B36DA9A5ED406088A50C1589B0B4E /* GGLInstanceID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GGLInstanceID.h; path = Headers/Public/GGLInstanceID.h; sourceTree = "<group>"; }; 2313F1DCFFF1A82931A5DF3F158D5DA3 /* Pods-Stone Island.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Stone Island.debug.xcconfig"; sourceTree = "<group>"; }; - 265B5F2D8D23C8DAE5A2EC4C45482BB2 /* Type.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Type.pbobjc.m; path = objectivec/google/protobuf/Type.pbobjc.m; sourceTree = "<group>"; }; - 2C72AF407EBF46522014F5E384F2DF2B /* GPBArray.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBArray.m; path = objectivec/GPBArray.m; sourceTree = "<group>"; }; - 2F32BA3D0167408D03707E0C4EDBA4A6 /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = "<group>"; }; - 346156D12F225C5435732E3752CE2FE8 /* Empty.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Empty.pbobjc.h; path = objectivec/google/protobuf/Empty.pbobjc.h; sourceTree = "<group>"; }; - 3504481E0B537B019882F670155CDDA2 /* GPBCodedOutputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBCodedOutputStream.m; path = objectivec/GPBCodedOutputStream.m; sourceTree = "<group>"; }; - 35A06A6FAC89255798D0D4BD7AE185C5 /* Wrappers.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Wrappers.pbobjc.m; path = objectivec/google/protobuf/Wrappers.pbobjc.m; sourceTree = "<group>"; }; - 3BF4A1DADA8860F20B2307BA21E0DDA7 /* GPBDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBDescriptor.m; path = objectivec/GPBDescriptor.m; sourceTree = "<group>"; }; - 3E49413C1602C72986E35FE55B15AA9D /* GPBExtensionInternals.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBExtensionInternals.m; path = objectivec/GPBExtensionInternals.m; sourceTree = "<group>"; }; - 40D25B6E40FCFF039CD02F31F19588B8 /* GPBCodedInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBCodedInputStream.h; path = objectivec/GPBCodedInputStream.h; sourceTree = "<group>"; }; - 4240053415DBD5B52DBD9497BD0984FD /* GPBDescriptor_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBDescriptor_PackagePrivate.h; path = objectivec/GPBDescriptor_PackagePrivate.h; sourceTree = "<group>"; }; - 43351FEC3BCA8AB1743C40C96030E1C6 /* FirebaseMessaging.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseMessaging.framework; path = Frameworks/FirebaseMessaging.framework; sourceTree = "<group>"; }; - 45DE04F35C065C20F9213E57D5F936D5 /* GoogleToolboxForMac.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleToolboxForMac.xcconfig; sourceTree = "<group>"; }; - 493A2403E3A377D0C8D3B18E72BD9948 /* GPBCodedInputStream_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBCodedInputStream_PackagePrivate.h; path = objectivec/GPBCodedInputStream_PackagePrivate.h; sourceTree = "<group>"; }; - 4950A34F093D61FB39CE30CCADE17BBE /* GPBRootObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBRootObject.m; path = objectivec/GPBRootObject.m; sourceTree = "<group>"; }; - 4A49C9D5CD03434E366BE7C82C206817 /* Type.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Type.pbobjc.h; path = objectivec/google/protobuf/Type.pbobjc.h; sourceTree = "<group>"; }; - 4AE7E7D7FC01B98294A0293EF649BD95 /* GPBArray_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBArray_PackagePrivate.h; path = objectivec/GPBArray_PackagePrivate.h; sourceTree = "<group>"; }; - 4C8C2723080839DDB0C24FEDD0D73096 /* GPBDictionary_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBDictionary_PackagePrivate.h; path = objectivec/GPBDictionary_PackagePrivate.h; sourceTree = "<group>"; }; - 4E6187654126ABEF16075E772E203E1D /* GTMLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMLogger.m; path = Foundation/GTMLogger.m; sourceTree = "<group>"; }; - 4EC1DF8B3DD81B34C5AB861B8C76C717 /* libProtobuf.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libProtobuf.a; path = libProtobuf.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 50B4982BCC4F07991409560B718F590C /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseCoreDiagnostics.framework; path = Frameworks/FirebaseCoreDiagnostics.framework; sourceTree = "<group>"; }; - 524B0176A9FCF760DD5807E536CD4F89 /* GPBWireFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBWireFormat.h; path = objectivec/GPBWireFormat.h; sourceTree = "<group>"; }; - 545A0FB5DF2C8FFCCF42EB58D5A81ED0 /* GPBRuntimeTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBRuntimeTypes.h; path = objectivec/GPBRuntimeTypes.h; sourceTree = "<group>"; }; + 36F75FFC47B4DBEB5982F58544A7B2FC /* GoogleInterchangeUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleInterchangeUtilities.framework; path = Frameworks/frameworks/GoogleInterchangeUtilities.framework; sourceTree = "<group>"; }; + 474CBC9EAF59DE318EE6611AAE5D0291 /* GoogleIPhoneUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleIPhoneUtilities.framework; path = Frameworks/GoogleIPhoneUtilities.framework; sourceTree = "<group>"; }; + 4A59C4528E6B71DFA7011DF095E0C8B8 /* GCMReceiverDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCMReceiverDelegate.h; path = Headers/Public/GCMReceiverDelegate.h; sourceTree = "<group>"; }; 5890B2B91852CF430B0772AD7C3B4C2B /* Pods-Stone Island-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Stone Island-frameworks.sh"; sourceTree = "<group>"; }; - 58A83A189DC1BFBFAC7F399BB9751F14 /* GPBCodedOutputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBCodedOutputStream.h; path = objectivec/GPBCodedOutputStream.h; sourceTree = "<group>"; }; - 5B9EF4385DB7EA2E2DEE11B2B6DFE1A0 /* GoogleToolboxForMac-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleToolboxForMac-prefix.pch"; sourceTree = "<group>"; }; - 5D11E9C49AAF09E786C50401B18C3DC4 /* GPBUnknownFieldSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBUnknownFieldSet.h; path = objectivec/GPBUnknownFieldSet.h; sourceTree = "<group>"; }; - 6500BB56ED633DA52D3173D059F8378D /* GPBArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBArray.h; path = objectivec/GPBArray.h; sourceTree = "<group>"; }; - 686BB4055630DC19822F9F3B407B37C3 /* libnanopb.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libnanopb.a; path = libnanopb.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 68E8F056DD0B8CDDCDF684A3A375FCC2 /* GPBUtilities_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBUtilities_PackagePrivate.h; path = objectivec/GPBUtilities_PackagePrivate.h; sourceTree = "<group>"; }; - 6B1DD76026CC0D86BA2FD2A023EBF3B1 /* Any.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Any.pbobjc.m; path = objectivec/google/protobuf/Any.pbobjc.m; sourceTree = "<group>"; }; - 6CCDD9C7666644E2535222D173D76CC1 /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = "<group>"; }; - 6F2E775643AFE2BFF0D572961BBC381E /* Duration.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Duration.pbobjc.m; path = objectivec/google/protobuf/Duration.pbobjc.m; sourceTree = "<group>"; }; - 6FE2C2FC17101A63229827673FE63277 /* GPBExtensionRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBExtensionRegistry.m; path = objectivec/GPBExtensionRegistry.m; sourceTree = "<group>"; }; - 7180FC87E2294112BACEA059A5831595 /* Timestamp.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Timestamp.pbobjc.h; path = objectivec/google/protobuf/Timestamp.pbobjc.h; sourceTree = "<group>"; }; - 72A904D3D8B863EED50A4A1E3FFADC0D /* Empty.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Empty.pbobjc.m; path = objectivec/google/protobuf/Empty.pbobjc.m; sourceTree = "<group>"; }; - 7CD04E4A14DCEB9584A09B6CCAF0CCD4 /* GPBWellKnownTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBWellKnownTypes.m; path = objectivec/GPBWellKnownTypes.m; sourceTree = "<group>"; }; - 7D645CF003B6E3608A32FF8B3EC5D589 /* GPBCodedInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBCodedInputStream.m; path = objectivec/GPBCodedInputStream.m; sourceTree = "<group>"; }; - 828B35BEFD155F90F6A506A514E9373D /* FieldMask.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FieldMask.pbobjc.h; path = objectivec/google/protobuf/FieldMask.pbobjc.h; sourceTree = "<group>"; }; - 83147647FF520FEBC086F33609ECA938 /* GTMNSData+zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMNSData+zlib.h"; path = "Foundation/GTMNSData+zlib.h"; sourceTree = "<group>"; }; - 83FF0A5AF2500AE469AE6047A4A795DD /* FirebaseInstanceID.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseInstanceID.framework; path = Frameworks/FirebaseInstanceID.framework; sourceTree = "<group>"; }; - 8485EE3EE516E1C76E274ED63FD32675 /* GTMDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = "<group>"; }; - 85161CE483D0D52918F3658155149F93 /* GPBRootObject_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBRootObject_PackagePrivate.h; path = objectivec/GPBRootObject_PackagePrivate.h; sourceTree = "<group>"; }; - 870C6D914891D286B54687025379F80A /* GPBWireFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBWireFormat.m; path = objectivec/GPBWireFormat.m; sourceTree = "<group>"; }; - 8A608890EC1AF8EC42A14397D3A5894B /* GPBBootstrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBBootstrap.h; path = objectivec/GPBBootstrap.h; sourceTree = "<group>"; }; - 8CD49F4DAD4E018B49D62F07A50020C3 /* GTMNSData+zlib.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GTMNSData+zlib.m"; path = "Foundation/GTMNSData+zlib.m"; sourceTree = "<group>"; }; - 8E9DF1F8DEF9920EC67FFDBBACE310D6 /* GPBUnknownField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBUnknownField.h; path = objectivec/GPBUnknownField.h; sourceTree = "<group>"; }; - 8EB5760CCB2AC6808AD433F462BA5B40 /* GPBUnknownField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBUnknownField.m; path = objectivec/GPBUnknownField.m; sourceTree = "<group>"; }; - 9251C49A032CCBDAE109D0A0CD2DD92E /* GPBMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBMessage.m; path = objectivec/GPBMessage.m; sourceTree = "<group>"; }; - 9315DD9048DB523B31C2B0B63880F185 /* GPBMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBMessage.h; path = objectivec/GPBMessage.h; sourceTree = "<group>"; }; + 6A055A93C3564E5CDA417C640324E176 /* GoogleUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleUtilities.framework; path = Frameworks/frameworks/GoogleUtilities.framework; sourceTree = "<group>"; }; + 6A52371D28A634057B785F5B581084AF /* GoogleSymbolUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleSymbolUtilities.framework; path = Frameworks/frameworks/GoogleSymbolUtilities.framework; sourceTree = "<group>"; }; + 8127A92CEFC4B6BC0D037BBDADA1B051 /* GGLInstanceIDConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GGLInstanceIDConfig.h; path = Headers/Public/GGLInstanceIDConfig.h; sourceTree = "<group>"; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9837A32494666A348405234344442538 /* nanopb.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.xcconfig; sourceTree = "<group>"; }; - 98A18E81D2E0C6AF12C4E040F92CEEE7 /* nanopb-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-prefix.pch"; sourceTree = "<group>"; }; - 99E63D80EC2BCAC4383FAB765DA50EC0 /* GPBUnknownFieldSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBUnknownFieldSet.m; path = objectivec/GPBUnknownFieldSet.m; sourceTree = "<group>"; }; - 9C39A2A98031E5843DD0CC795958C690 /* Api.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Api.pbobjc.m; path = objectivec/google/protobuf/Api.pbobjc.m; sourceTree = "<group>"; }; - 9E7C6CABB305C6F18E115008557D510A /* FieldMask.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FieldMask.pbobjc.m; path = objectivec/google/protobuf/FieldMask.pbobjc.m; sourceTree = "<group>"; }; A110B0A704D9AE1951A8F07D446042C1 /* Pods-Stone Island-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Stone Island-resources.sh"; sourceTree = "<group>"; }; - A4F87C21CB7A6B68E245AB8373CE92F3 /* SourceContext.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SourceContext.pbobjc.h; path = objectivec/google/protobuf/SourceContext.pbobjc.h; sourceTree = "<group>"; }; - A5428F00BC2E563C54345DD10FBC64B9 /* GPBWellKnownTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBWellKnownTypes.h; path = objectivec/GPBWellKnownTypes.h; sourceTree = "<group>"; }; - A5E70F2734E0CCB2FEA59727473D14D4 /* pb_encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_encode.h; sourceTree = "<group>"; }; - A9F42493FCDAB7940BB6EEBACF55FD92 /* GTMLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMLogger.h; path = Foundation/GTMLogger.h; sourceTree = "<group>"; }; - ABDBCAF813D5B069AD91028508742BC2 /* GPBDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBDictionary.h; path = objectivec/GPBDictionary.h; sourceTree = "<group>"; }; - AD8B585B5662EF1E7DFC64FFF59A1A6F /* libPods-Stone Island.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-Stone Island.a"; path = "libPods-Stone Island.a"; sourceTree = BUILT_PRODUCTS_DIR; }; B47CA48C3A76744553D639170A059DED /* Pods-Stone Island-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Stone Island-acknowledgements.plist"; sourceTree = "<group>"; }; - B77AE850AC471E6D53586C630AE90ACF /* Struct.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Struct.pbobjc.m; path = objectivec/google/protobuf/Struct.pbobjc.m; sourceTree = "<group>"; }; - BA922E76DF7B2D530FCDC0089D2C20A5 /* libGoogleToolboxForMac.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGoogleToolboxForMac.a; path = libGoogleToolboxForMac.a; sourceTree = BUILT_PRODUCTS_DIR; }; - BB19157342ADAC984C6ED234681CE8F7 /* GPBProtocolBuffers_RuntimeSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBProtocolBuffers_RuntimeSupport.h; path = objectivec/GPBProtocolBuffers_RuntimeSupport.h; sourceTree = "<group>"; }; - C1669FD3E74618D9183A1227FBBF4050 /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_decode.c; sourceTree = "<group>"; }; - C5F5070398EA6EBF049CB8770A127136 /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = "<group>"; }; - C6CC9FDA24E3A6607E12BFFEE4275B45 /* GPBDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBDescriptor.h; path = objectivec/GPBDescriptor.h; sourceTree = "<group>"; }; - CBAC1AE6755D17C79F857D660B23B118 /* GPBCodedOutputStream_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBCodedOutputStream_PackagePrivate.h; path = objectivec/GPBCodedOutputStream_PackagePrivate.h; sourceTree = "<group>"; }; + BD469413B9D194472712F81C4C19217C /* GGLInstanceIDHeaders.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GGLInstanceIDHeaders.h; path = Headers/Public/GGLInstanceIDHeaders.h; sourceTree = "<group>"; }; + BD5E36BF0B6CBFDEC0927984332B535A /* GCMService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCMService.h; path = Headers/Public/GCMService.h; sourceTree = "<group>"; }; CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - D6A504923A8D53592A63719F6FF69A7C /* Struct.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Struct.pbobjc.h; path = objectivec/google/protobuf/Struct.pbobjc.h; sourceTree = "<group>"; }; - D708F677F238A988C8234E48AC22776D /* GPBDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBDictionary.m; path = objectivec/GPBDictionary.m; sourceTree = "<group>"; }; - D7846CA9DBB7357D0A5145648AA01620 /* GPBMessage_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBMessage_PackagePrivate.h; path = objectivec/GPBMessage_PackagePrivate.h; sourceTree = "<group>"; }; - E1DD1E636FBF87375DD28325F85E9F9B /* GPBRootObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBRootObject.h; path = objectivec/GPBRootObject.h; sourceTree = "<group>"; }; - E4C8A849B8401F02161470ADD18F89E7 /* Protobuf-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Protobuf-prefix.pch"; sourceTree = "<group>"; }; - E84A0F52367C4369A4CD78E715FD3316 /* Any.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Any.pbobjc.h; path = objectivec/google/protobuf/Any.pbobjc.h; sourceTree = "<group>"; }; - EB57A28C36332095328E9BCE71ECC618 /* Timestamp.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Timestamp.pbobjc.m; path = objectivec/google/protobuf/Timestamp.pbobjc.m; sourceTree = "<group>"; }; - F1A5E09DC081BEC3AF27803E648E1367 /* GPBUnknownField_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBUnknownField_PackagePrivate.h; path = objectivec/GPBUnknownField_PackagePrivate.h; sourceTree = "<group>"; }; + D6448B738D0F834A89872ACF4F33A1AA /* libGGLInstanceIDLib.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libGGLInstanceIDLib.a; path = Libraries/libGGLInstanceIDLib.a; sourceTree = "<group>"; }; + E04BE7A3CBD84DBAA76FC51758B7CED6 /* GCMConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCMConfig.h; path = Headers/Public/GCMConfig.h; sourceTree = "<group>"; }; + E7C2BA0DA51EB36ED5DB61FE0CD57F36 /* libPods-Stone Island.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-Stone Island.a"; path = "libPods-Stone Island.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + EA6ECB7498639194EA9C76AA5A5335AA /* GCMPubSub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCMPubSub.h; path = Headers/Public/GCMPubSub.h; sourceTree = "<group>"; }; + EE0A605C9B1A1EA6221D258D4E528AD7 /* GGLInstanceIDDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GGLInstanceIDDelegate.h; path = Headers/Public/GGLInstanceIDDelegate.h; sourceTree = "<group>"; }; + EEFE0B43B6BEB77AB2B72163776B3431 /* libGcmLib.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libGcmLib.a; path = Libraries/libGcmLib.a; sourceTree = "<group>"; }; F1E17C0998C78916667291BC7B0048B0 /* Pods-Stone Island-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Stone Island-dummy.m"; sourceTree = "<group>"; }; - F411F93549CC18B1041B6089FD7D6328 /* FirebaseCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseCore.framework; path = Frameworks/FirebaseCore.framework; sourceTree = "<group>"; }; - F4217831202D96492E9AA5A8C1317D16 /* Protobuf-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Protobuf-dummy.m"; sourceTree = "<group>"; }; - F6DA253821905085377C5B375CF7B4C3 /* GPBUnknownFieldSet_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBUnknownFieldSet_PackagePrivate.h; path = objectivec/GPBUnknownFieldSet_PackagePrivate.h; sourceTree = "<group>"; }; - F89A42940C946E790697D23E21C634DA /* Protobuf.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Protobuf.xcconfig; sourceTree = "<group>"; }; - FB1E980B5EEC2800E922D5076A11EFA7 /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseAnalytics.framework; path = Frameworks/FirebaseAnalytics.framework; sourceTree = "<group>"; }; - FB7C030E89839D647194E5CA2D2DF745 /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_common.c; sourceTree = "<group>"; }; - FBA0788F3CA6A1FC7E1E87517F07ADD1 /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_encode.c; sourceTree = "<group>"; }; - FE50E6A13848DC8387C0F2467E5BC858 /* Wrappers.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Wrappers.pbobjc.h; path = objectivec/google/protobuf/Wrappers.pbobjc.h; sourceTree = "<group>"; }; + F3E864806D6F83145EA52D163BA1A423 /* GoogleCloudMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleCloudMessaging.h; path = Headers/Public/GoogleCloudMessaging.h; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 3CCBF28809F96645DAD3D47200903020 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4C8C03EFB7437DB1155064DDA3D0A1BE /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6AD215334409363FBBC48E48118C5C62 /* Frameworks */ = { + 4393326EAD1C0D0F9AECF9FC78E6DAD8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2D3370592B46135A72AE93EA362734F0 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 94EB8A8937D61E8CED1F3C819230AE4D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3AFB8BB811B8E80909FAB57769F472CD /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CBCB3EDD945FADF8E20997D884FD0CBB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD22EFD14E29D4143AF26A6E1A3A872 /* Foundation.framework in Frameworks */, + A236CF7DD81B48ADA6EC58CCD7C8704E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 004912157DF4BDCD49123543CE0FF6DD /* Defines */ = { - isa = PBXGroup; - children = ( - 8485EE3EE516E1C76E274ED63FD32675 /* GTMDefines.h */, - ); - name = Defines; - sourceTree = "<group>"; - }; - 02DF76F9E94957693ACE8ABD38E93426 /* nanopb */ = { + 121A86CC4AAF79B70266B959308D3CA7 /* Pods */ = { isa = PBXGroup; children = ( - C5F5070398EA6EBF049CB8770A127136 /* pb.h */, - FB7C030E89839D647194E5CA2D2DF745 /* pb_common.c */, - 6CCDD9C7666644E2535222D173D76CC1 /* pb_common.h */, - C1669FD3E74618D9183A1227FBBF4050 /* pb_decode.c */, - 2F32BA3D0167408D03707E0C4EDBA4A6 /* pb_decode.h */, - FBA0788F3CA6A1FC7E1E87517F07ADD1 /* pb_encode.c */, - A5E70F2734E0CCB2FEA59727473D14D4 /* pb_encode.h */, - 58DE47AAAC06564307E7255D1B5E1D62 /* decode */, - 4475247DC75238DBB0E37086D31D3363 /* encode */, - FA0ADBF3B95DD4DD510DA2EF9D9B0B9A /* Support Files */, - ); - name = nanopb; - path = nanopb; - sourceTree = "<group>"; - }; - 11914593C579DC3B903834F9370FDE0C /* Pods */ = { - isa = PBXGroup; - children = ( - 2CCC828646DB6E2832930EA338092B5C /* FirebaseAnalytics */, - D322B836323040BCA8E139D202457EBA /* FirebaseCore */, - 55ACDAF2E6E0245F2ABA46141FF54B0D /* FirebaseInstanceID */, - 5F1C6D3FD3BF644DCE67E28E83281951 /* FirebaseMessaging */, - 543B9265B46C52AA018AC9B5349C1A41 /* GoogleToolboxForMac */, - 02DF76F9E94957693ACE8ABD38E93426 /* nanopb */, - EAC896EC3C2A716D21A44F458CB64190 /* Protobuf */, + 3758E30E87F41188A58D53252E8DC67F /* GGLInstanceID */, + F52CA7A5CDCB3F8FEAEAD0AD400F9313 /* GoogleCloudMessaging */, + 5E3943FF863A867D4D99F3E17093D9D7 /* GoogleInterchangeUtilities */, + 9DCD9E1660319E9727375653D3EBBA13 /* GoogleIPhoneUtilities */, + BBD88AD6F1DF792566DB101E1D7A50AB /* GoogleSymbolUtilities */, + 736A89F858E6E6D5DDEC5BBDA2E1C51B /* GoogleUtilities */, ); name = Pods; sourceTree = "<group>"; }; - 21FD76479585CF6ADCFBF61ED1315196 /* Logger */ = { + 2FD026630DDFF013082B2945DB20B798 /* Frameworks */ = { isa = PBXGroup; children = ( - A9F42493FCDAB7940BB6EEBACF55FD92 /* GTMLogger.h */, - 4E6187654126ABEF16075E772E203E1D /* GTMLogger.m */, - ); - name = Logger; - sourceTree = "<group>"; - }; - 2201A4F92BCC4567C0DB2C680592833A /* Frameworks */ = { - isa = PBXGroup; - children = ( - 43351FEC3BCA8AB1743C40C96030E1C6 /* FirebaseMessaging.framework */, + 474CBC9EAF59DE318EE6611AAE5D0291 /* GoogleIPhoneUtilities.framework */, ); name = Frameworks; sourceTree = "<group>"; }; - 2CCC828646DB6E2832930EA338092B5C /* FirebaseAnalytics */ = { - isa = PBXGroup; - children = ( - AC4F8E9E10982FDB105BC8855C8D52CD /* Frameworks */, - ); - name = FirebaseAnalytics; - path = FirebaseAnalytics; - sourceTree = "<group>"; - }; - 4475247DC75238DBB0E37086D31D3363 /* encode */ = { - isa = PBXGroup; - children = ( - ); - name = encode; - sourceTree = "<group>"; - }; - 4628802902B2FF79E0AD76BAEF165D70 /* NSData+zlib */ = { - isa = PBXGroup; - children = ( - 83147647FF520FEBC086F33609ECA938 /* GTMNSData+zlib.h */, - 8CD49F4DAD4E018B49D62F07A50020C3 /* GTMNSData+zlib.m */, - ); - name = "NSData+zlib"; - sourceTree = "<group>"; - }; - 543B9265B46C52AA018AC9B5349C1A41 /* GoogleToolboxForMac */ = { + 3758E30E87F41188A58D53252E8DC67F /* GGLInstanceID */ = { isa = PBXGroup; children = ( - 004912157DF4BDCD49123543CE0FF6DD /* Defines */, - 21FD76479585CF6ADCFBF61ED1315196 /* Logger */, - 4628802902B2FF79E0AD76BAEF165D70 /* NSData+zlib */, - B4A3391D3ABAF454717C12C6AFD946A0 /* Support Files */, + 173B36DA9A5ED406088A50C1589B0B4E /* GGLInstanceID.h */, + 8127A92CEFC4B6BC0D037BBDADA1B051 /* GGLInstanceIDConfig.h */, + EE0A605C9B1A1EA6221D258D4E528AD7 /* GGLInstanceIDDelegate.h */, + BD469413B9D194472712F81C4C19217C /* GGLInstanceIDHeaders.h */, + FEEE277DB90FD41AA0B77E6258108DFB /* Frameworks */, ); - name = GoogleToolboxForMac; - path = GoogleToolboxForMac; + name = GGLInstanceID; + path = GGLInstanceID; sourceTree = "<group>"; }; - 55ACDAF2E6E0245F2ABA46141FF54B0D /* FirebaseInstanceID */ = { + 5E3943FF863A867D4D99F3E17093D9D7 /* GoogleInterchangeUtilities */ = { isa = PBXGroup; children = ( - 5EBBA78CDFF493B4DA3AC46DE5C89650 /* Frameworks */, + CAFDBEDBC9861619C5BC0B5A525B32E5 /* Frameworks */, ); - name = FirebaseInstanceID; - path = FirebaseInstanceID; + name = GoogleInterchangeUtilities; + path = GoogleInterchangeUtilities; sourceTree = "<group>"; }; - 58DE47AAAC06564307E7255D1B5E1D62 /* decode */ = { + 736A89F858E6E6D5DDEC5BBDA2E1C51B /* GoogleUtilities */ = { isa = PBXGroup; children = ( + E8A2173F40F6AA192DD2A76C1203C416 /* Frameworks */, ); - name = decode; - sourceTree = "<group>"; - }; - 5EBBA78CDFF493B4DA3AC46DE5C89650 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 83FF0A5AF2500AE469AE6047A4A795DD /* FirebaseInstanceID.framework */, - ); - name = Frameworks; - sourceTree = "<group>"; - }; - 5F1C6D3FD3BF644DCE67E28E83281951 /* FirebaseMessaging */ = { - isa = PBXGroup; - children = ( - 2201A4F92BCC4567C0DB2C680592833A /* Frameworks */, - ); - name = FirebaseMessaging; - path = FirebaseMessaging; + name = GoogleUtilities; + path = GoogleUtilities; sourceTree = "<group>"; }; 7531C8F8DE19F1AA3C8A7AC97A91DC29 /* iOS */ = { @@ -396,8 +116,8 @@ children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, - 11914593C579DC3B903834F9370FDE0C /* Pods */, - B35F7395675A25A46729AD5CE270066C /* Products */, + 121A86CC4AAF79B70266B959308D3CA7 /* Pods */, + EA7DD587FC2EAD1ECAA75B2850B62903 /* Products */, 838A3B364ADE24D6443C58DDBACFF0C2 /* Targets Support Files */, ); sourceTree = "<group>"; @@ -410,45 +130,29 @@ name = "Targets Support Files"; sourceTree = "<group>"; }; - 913723635DAAA7A06D7A25B98CE48726 /* Support Files */ = { + 9DCD9E1660319E9727375653D3EBBA13 /* GoogleIPhoneUtilities */ = { isa = PBXGroup; children = ( - F89A42940C946E790697D23E21C634DA /* Protobuf.xcconfig */, - F4217831202D96492E9AA5A8C1317D16 /* Protobuf-dummy.m */, - E4C8A849B8401F02161470ADD18F89E7 /* Protobuf-prefix.pch */, + 2FD026630DDFF013082B2945DB20B798 /* Frameworks */, ); - name = "Support Files"; - path = "../Target Support Files/Protobuf"; + name = GoogleIPhoneUtilities; + path = GoogleIPhoneUtilities; sourceTree = "<group>"; }; - AC4F8E9E10982FDB105BC8855C8D52CD /* Frameworks */ = { + A770D2EDC6FA25DCD787792DF757FA50 /* Frameworks */ = { isa = PBXGroup; children = ( - FB1E980B5EEC2800E922D5076A11EFA7 /* FirebaseAnalytics.framework */, + EEFE0B43B6BEB77AB2B72163776B3431 /* libGcmLib.a */, ); name = Frameworks; sourceTree = "<group>"; }; - B35F7395675A25A46729AD5CE270066C /* Products */ = { - isa = PBXGroup; - children = ( - BA922E76DF7B2D530FCDC0089D2C20A5 /* libGoogleToolboxForMac.a */, - 686BB4055630DC19822F9F3B407B37C3 /* libnanopb.a */, - AD8B585B5662EF1E7DFC64FFF59A1A6F /* libPods-Stone Island.a */, - 4EC1DF8B3DD81B34C5AB861B8C76C717 /* libProtobuf.a */, - ); - name = Products; - sourceTree = "<group>"; - }; - B4A3391D3ABAF454717C12C6AFD946A0 /* Support Files */ = { + B9E958B53590711D484747E648D2BBAF /* Frameworks */ = { isa = PBXGroup; children = ( - 45DE04F35C065C20F9213E57D5F936D5 /* GoogleToolboxForMac.xcconfig */, - 1F905482AB614EB3193EC09019806C5D /* GoogleToolboxForMac-dummy.m */, - 5B9EF4385DB7EA2E2DEE11B2B6DFE1A0 /* GoogleToolboxForMac-prefix.pch */, + 6A52371D28A634057B785F5B581084AF /* GoogleSymbolUtilities.framework */, ); - name = "Support Files"; - path = "../Target Support Files/GoogleToolboxForMac"; + name = Frameworks; sourceTree = "<group>"; }; BA3FA15D22651C0425DF92E8A2A4517F /* Pods-Stone Island */ = { @@ -466,6 +170,15 @@ path = "Target Support Files/Pods-Stone Island"; sourceTree = "<group>"; }; + BBD88AD6F1DF792566DB101E1D7A50AB /* GoogleSymbolUtilities */ = { + isa = PBXGroup; + children = ( + B9E958B53590711D484747E648D2BBAF /* Frameworks */, + ); + name = GoogleSymbolUtilities; + path = GoogleSymbolUtilities; + sourceTree = "<group>"; + }; BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { isa = PBXGroup; children = ( @@ -474,247 +187,69 @@ name = Frameworks; sourceTree = "<group>"; }; - D322B836323040BCA8E139D202457EBA /* FirebaseCore */ = { + CAFDBEDBC9861619C5BC0B5A525B32E5 /* Frameworks */ = { isa = PBXGroup; children = ( - E04C7679B4512CF8CDD79D4392692C6C /* Frameworks */, + 36F75FFC47B4DBEB5982F58544A7B2FC /* GoogleInterchangeUtilities.framework */, ); - name = FirebaseCore; - path = FirebaseCore; + name = Frameworks; sourceTree = "<group>"; }; - E04C7679B4512CF8CDD79D4392692C6C /* Frameworks */ = { + E8A2173F40F6AA192DD2A76C1203C416 /* Frameworks */ = { isa = PBXGroup; children = ( - F411F93549CC18B1041B6089FD7D6328 /* FirebaseCore.framework */, - 50B4982BCC4F07991409560B718F590C /* FirebaseCoreDiagnostics.framework */, - 192AB16212B37CEBDD9BD2D13A435C4A /* FirebaseNanoPB.framework */, + 6A055A93C3564E5CDA417C640324E176 /* GoogleUtilities.framework */, ); name = Frameworks; sourceTree = "<group>"; }; - EAC896EC3C2A716D21A44F458CB64190 /* Protobuf */ = { + EA7DD587FC2EAD1ECAA75B2850B62903 /* Products */ = { isa = PBXGroup; children = ( - E84A0F52367C4369A4CD78E715FD3316 /* Any.pbobjc.h */, - 6B1DD76026CC0D86BA2FD2A023EBF3B1 /* Any.pbobjc.m */, - 12A858169F9A81AF89F6583B8E966025 /* Api.pbobjc.h */, - 9C39A2A98031E5843DD0CC795958C690 /* Api.pbobjc.m */, - 115E69164EF7A408741D07C2086D2C25 /* Duration.pbobjc.h */, - 6F2E775643AFE2BFF0D572961BBC381E /* Duration.pbobjc.m */, - 346156D12F225C5435732E3752CE2FE8 /* Empty.pbobjc.h */, - 72A904D3D8B863EED50A4A1E3FFADC0D /* Empty.pbobjc.m */, - 828B35BEFD155F90F6A506A514E9373D /* FieldMask.pbobjc.h */, - 9E7C6CABB305C6F18E115008557D510A /* FieldMask.pbobjc.m */, - 6500BB56ED633DA52D3173D059F8378D /* GPBArray.h */, - 2C72AF407EBF46522014F5E384F2DF2B /* GPBArray.m */, - 4AE7E7D7FC01B98294A0293EF649BD95 /* GPBArray_PackagePrivate.h */, - 8A608890EC1AF8EC42A14397D3A5894B /* GPBBootstrap.h */, - 40D25B6E40FCFF039CD02F31F19588B8 /* GPBCodedInputStream.h */, - 7D645CF003B6E3608A32FF8B3EC5D589 /* GPBCodedInputStream.m */, - 493A2403E3A377D0C8D3B18E72BD9948 /* GPBCodedInputStream_PackagePrivate.h */, - 58A83A189DC1BFBFAC7F399BB9751F14 /* GPBCodedOutputStream.h */, - 3504481E0B537B019882F670155CDDA2 /* GPBCodedOutputStream.m */, - CBAC1AE6755D17C79F857D660B23B118 /* GPBCodedOutputStream_PackagePrivate.h */, - C6CC9FDA24E3A6607E12BFFEE4275B45 /* GPBDescriptor.h */, - 3BF4A1DADA8860F20B2307BA21E0DDA7 /* GPBDescriptor.m */, - 4240053415DBD5B52DBD9497BD0984FD /* GPBDescriptor_PackagePrivate.h */, - ABDBCAF813D5B069AD91028508742BC2 /* GPBDictionary.h */, - D708F677F238A988C8234E48AC22776D /* GPBDictionary.m */, - 4C8C2723080839DDB0C24FEDD0D73096 /* GPBDictionary_PackagePrivate.h */, - 15595CD747174AB281B75E0EC911F6E2 /* GPBExtensionInternals.h */, - 3E49413C1602C72986E35FE55B15AA9D /* GPBExtensionInternals.m */, - 094F1883B9081EA6E8925E8BB383CAE2 /* GPBExtensionRegistry.h */, - 6FE2C2FC17101A63229827673FE63277 /* GPBExtensionRegistry.m */, - 9315DD9048DB523B31C2B0B63880F185 /* GPBMessage.h */, - 9251C49A032CCBDAE109D0A0CD2DD92E /* GPBMessage.m */, - D7846CA9DBB7357D0A5145648AA01620 /* GPBMessage_PackagePrivate.h */, - 22BA7C1126445EE94A49FE02FE9FFD6B /* GPBProtocolBuffers.h */, - BB19157342ADAC984C6ED234681CE8F7 /* GPBProtocolBuffers_RuntimeSupport.h */, - E1DD1E636FBF87375DD28325F85E9F9B /* GPBRootObject.h */, - 4950A34F093D61FB39CE30CCADE17BBE /* GPBRootObject.m */, - 85161CE483D0D52918F3658155149F93 /* GPBRootObject_PackagePrivate.h */, - 545A0FB5DF2C8FFCCF42EB58D5A81ED0 /* GPBRuntimeTypes.h */, - 8E9DF1F8DEF9920EC67FFDBBACE310D6 /* GPBUnknownField.h */, - 8EB5760CCB2AC6808AD433F462BA5B40 /* GPBUnknownField.m */, - F1A5E09DC081BEC3AF27803E648E1367 /* GPBUnknownField_PackagePrivate.h */, - 5D11E9C49AAF09E786C50401B18C3DC4 /* GPBUnknownFieldSet.h */, - 99E63D80EC2BCAC4383FAB765DA50EC0 /* GPBUnknownFieldSet.m */, - F6DA253821905085377C5B375CF7B4C3 /* GPBUnknownFieldSet_PackagePrivate.h */, - 0F444CCFE63D2832F35B8837ED408165 /* GPBUtilities.h */, - 14DB8CD0793D1700939269B1162FC634 /* GPBUtilities.m */, - 68E8F056DD0B8CDDCDF684A3A375FCC2 /* GPBUtilities_PackagePrivate.h */, - A5428F00BC2E563C54345DD10FBC64B9 /* GPBWellKnownTypes.h */, - 7CD04E4A14DCEB9584A09B6CCAF0CCD4 /* GPBWellKnownTypes.m */, - 524B0176A9FCF760DD5807E536CD4F89 /* GPBWireFormat.h */, - 870C6D914891D286B54687025379F80A /* GPBWireFormat.m */, - A4F87C21CB7A6B68E245AB8373CE92F3 /* SourceContext.pbobjc.h */, - 10F4575D8B6A691A550472225DDF3F0F /* SourceContext.pbobjc.m */, - D6A504923A8D53592A63719F6FF69A7C /* Struct.pbobjc.h */, - B77AE850AC471E6D53586C630AE90ACF /* Struct.pbobjc.m */, - 7180FC87E2294112BACEA059A5831595 /* Timestamp.pbobjc.h */, - EB57A28C36332095328E9BCE71ECC618 /* Timestamp.pbobjc.m */, - 4A49C9D5CD03434E366BE7C82C206817 /* Type.pbobjc.h */, - 265B5F2D8D23C8DAE5A2EC4C45482BB2 /* Type.pbobjc.m */, - FE50E6A13848DC8387C0F2467E5BC858 /* Wrappers.pbobjc.h */, - 35A06A6FAC89255798D0D4BD7AE185C5 /* Wrappers.pbobjc.m */, - 913723635DAAA7A06D7A25B98CE48726 /* Support Files */, + E7C2BA0DA51EB36ED5DB61FE0CD57F36 /* libPods-Stone Island.a */, ); - name = Protobuf; - path = Protobuf; + name = Products; sourceTree = "<group>"; }; - FA0ADBF3B95DD4DD510DA2EF9D9B0B9A /* Support Files */ = { + F52CA7A5CDCB3F8FEAEAD0AD400F9313 /* GoogleCloudMessaging */ = { isa = PBXGroup; children = ( - 9837A32494666A348405234344442538 /* nanopb.xcconfig */, - 103D9CA08917A78B44AC60345EE69379 /* nanopb-dummy.m */, - 98A18E81D2E0C6AF12C4E040F92CEEE7 /* nanopb-prefix.pch */, + E04BE7A3CBD84DBAA76FC51758B7CED6 /* GCMConfig.h */, + EA6ECB7498639194EA9C76AA5A5335AA /* GCMPubSub.h */, + 4A59C4528E6B71DFA7011DF095E0C8B8 /* GCMReceiverDelegate.h */, + BD5E36BF0B6CBFDEC0927984332B535A /* GCMService.h */, + F3E864806D6F83145EA52D163BA1A423 /* GoogleCloudMessaging.h */, + A770D2EDC6FA25DCD787792DF757FA50 /* Frameworks */, ); - name = "Support Files"; - path = "../Target Support Files/nanopb"; + name = GoogleCloudMessaging; + path = GoogleCloudMessaging; sourceTree = "<group>"; }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 49EE04F5125849E644783C89F23AA9F9 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - A39A7F90321353E49D6165BAD53505B2 /* pb.h in Headers */, - 1E46EC8AB8830A23FAC91E8547748BF5 /* pb_common.h in Headers */, - 0AED6A8FBEF7F5C59C7082B8E7716BE2 /* pb_decode.h in Headers */, - D02A9BE496DF996BBC92776E586BCAF8 /* pb_encode.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 53AC353E7DDDB2167D1AB17676628071 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 90906AC58824566DFC6875E1ED25E855 /* GTMDefines.h in Headers */, - 154E5AB0C541CED05D795C6198947D27 /* GTMLogger.h in Headers */, - 6A5451E67CBAAED4E81995B58427A175 /* GTMNSData+zlib.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6F86D9886E3B4324C1D817067F5588B1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - C373172ABCAFBA7A771B3A4C4574C243 /* Any.pbobjc.h in Headers */, - 0584FFBCFF5916779F2047A5EF1EAB24 /* Api.pbobjc.h in Headers */, - FEE69989A5738A7A23C1FEBC9E22B0A5 /* Duration.pbobjc.h in Headers */, - 16B537D2EDFB4829ED6E6F282A14BC45 /* Empty.pbobjc.h in Headers */, - 686F67C01593C8E0FB610386AF5F287F /* FieldMask.pbobjc.h in Headers */, - 50047A0A3C3C1251088478639ABA6D08 /* GPBArray.h in Headers */, - 4854DD8506654D68FCA7C685CDD711E2 /* GPBArray_PackagePrivate.h in Headers */, - 9E66200018B0A847A39C7527CEFBF5DD /* GPBBootstrap.h in Headers */, - 244087B863272C303C26961C6FADCF8E /* GPBCodedInputStream.h in Headers */, - 96516A19D37AACA7FF1AFDC8D5649280 /* GPBCodedInputStream_PackagePrivate.h in Headers */, - 2ED4641D7F49A1AC2F41EB6F818B8B0D /* GPBCodedOutputStream.h in Headers */, - 14A62D5A8CBFE597C99EE33EE9D04442 /* GPBCodedOutputStream_PackagePrivate.h in Headers */, - 20B06CE03E8EF2A681F68D2814B1F5C5 /* GPBDescriptor.h in Headers */, - D1ABB2FA52FC2506830E729D60E9CA16 /* GPBDescriptor_PackagePrivate.h in Headers */, - C9DE4DA0ED245C1A662AE79B579C933A /* GPBDictionary.h in Headers */, - A60CBF107DBE787C7774E7BD867185F7 /* GPBDictionary_PackagePrivate.h in Headers */, - A618EDE73A86F425B1FEE0D01804AB0C /* GPBExtensionInternals.h in Headers */, - 2DB8B5969876803C5485FD9681C3C70D /* GPBExtensionRegistry.h in Headers */, - D91B805B5CF397B10F04B5E66924320B /* GPBMessage.h in Headers */, - ED78AFA3F46A54217E68746892698704 /* GPBMessage_PackagePrivate.h in Headers */, - FBE5C6517E1C7FE5912B884A5C716FBC /* GPBProtocolBuffers.h in Headers */, - 8B96B260B4F3219DABFCA63F4BB80804 /* GPBProtocolBuffers_RuntimeSupport.h in Headers */, - B1FCD6CEDAE7DEBC44B3EAA860C16EE0 /* GPBRootObject.h in Headers */, - 808E97D147D8800078607BE7BB1E2C36 /* GPBRootObject_PackagePrivate.h in Headers */, - 377B6859DA9B7A6E0B4307A5CB055359 /* GPBRuntimeTypes.h in Headers */, - 372B121548A8AAC9019B34D499ECAEAA /* GPBUnknownField.h in Headers */, - 746EF9D0CF4064E64AC4F7930038847B /* GPBUnknownField_PackagePrivate.h in Headers */, - F8C907FF0573A7F7EF41888CBBCCD5B4 /* GPBUnknownFieldSet.h in Headers */, - 2C115525DD3B1AE2248DB3343275EB57 /* GPBUnknownFieldSet_PackagePrivate.h in Headers */, - 75FEFB9B46377E86FE65BA73BF73B24F /* GPBUtilities.h in Headers */, - 413FF88B6D643A075644A4E4B728DDD1 /* GPBUtilities_PackagePrivate.h in Headers */, - B3755C71DCBFEBE07682F17CCE804B67 /* GPBWellKnownTypes.h in Headers */, - 10BCC6DA098614A3F7230CFB31F1B84E /* GPBWireFormat.h in Headers */, - F903364920B941263AEA9F7079387F62 /* SourceContext.pbobjc.h in Headers */, - 33A0F7D3ED05ACED0A1CA656D24F8ED6 /* Struct.pbobjc.h in Headers */, - FD6A629D6E2614065D82CC8BD9C584C3 /* Timestamp.pbobjc.h in Headers */, - B9704C2C3AF30ACA0C84033AD94B94B0 /* Type.pbobjc.h in Headers */, - 140D35C2173D500F1EBB729A9A1FE6CE /* Wrappers.pbobjc.h in Headers */, + FEEE277DB90FD41AA0B77E6258108DFB /* Frameworks */ = { + isa = PBXGroup; + children = ( + D6448B738D0F834A89872ACF4F33A1AA /* libGGLInstanceIDLib.a */, ); - runOnlyForDeploymentPostprocessing = 0; + name = Frameworks; + sourceTree = "<group>"; }; -/* End PBXHeadersBuildPhase section */ +/* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 0165FA23BB1E05B01A7F333AD8A9D0AB /* Pods-Stone Island */ = { + 270B46424A6E550E1583E7A97AAD265A /* Pods-Stone Island */ = { isa = PBXNativeTarget; - buildConfigurationList = D6D6A9ED58F9C63D6F7BDE70DB2E4081 /* Build configuration list for PBXNativeTarget "Pods-Stone Island" */; + buildConfigurationList = BD1D1A57A9121FF061B86F474E27AA5E /* Build configuration list for PBXNativeTarget "Pods-Stone Island" */; buildPhases = ( - 9B73EA95DFBCFFFADB866C70AA0F6019 /* Sources */, - 3CCBF28809F96645DAD3D47200903020 /* Frameworks */, + 04C4D2FB97E65104032C84BA808D29B0 /* Sources */, + 4393326EAD1C0D0F9AECF9FC78E6DAD8 /* Frameworks */, ); buildRules = ( ); dependencies = ( - 645830D9FB0BE7D2B7BC3B119285CBE9 /* PBXTargetDependency */, - 988A2D200CAC310CA70A3AAF1E7A2F85 /* PBXTargetDependency */, - 954DF50A815C564A4F137A5776891E4A /* PBXTargetDependency */, ); name = "Pods-Stone Island"; productName = "Pods-Stone Island"; - productReference = AD8B585B5662EF1E7DFC64FFF59A1A6F /* libPods-Stone Island.a */; - productType = "com.apple.product-type.library.static"; - }; - 83E4B77BD7F292F23A4617388E39F15E /* Protobuf */ = { - isa = PBXNativeTarget; - buildConfigurationList = C1568F37CE939D4F563A4647C56487F8 /* Build configuration list for PBXNativeTarget "Protobuf" */; - buildPhases = ( - 111E8E00DEE922B020E3A12BF85D1F68 /* Sources */, - CBCB3EDD945FADF8E20997D884FD0CBB /* Frameworks */, - 6F86D9886E3B4324C1D817067F5588B1 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Protobuf; - productName = Protobuf; - productReference = 4EC1DF8B3DD81B34C5AB861B8C76C717 /* libProtobuf.a */; - productType = "com.apple.product-type.library.static"; - }; - CF4B35B9FC819386EB09219BC91827D7 /* nanopb */ = { - isa = PBXNativeTarget; - buildConfigurationList = B8307E997A097EB50C00A8C7967B858A /* Build configuration list for PBXNativeTarget "nanopb" */; - buildPhases = ( - 5303D5F0966B6798D7AAA88A9ACCB670 /* Sources */, - 94EB8A8937D61E8CED1F3C819230AE4D /* Frameworks */, - 49EE04F5125849E644783C89F23AA9F9 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = nanopb; - productName = nanopb; - productReference = 686BB4055630DC19822F9F3B407B37C3 /* libnanopb.a */; - productType = "com.apple.product-type.library.static"; - }; - FA9D13261AF395CF5D54BB3203DF2A6E /* GoogleToolboxForMac */ = { - isa = PBXNativeTarget; - buildConfigurationList = 94A6FD8AAC113A69F57982237B2DDA0F /* Build configuration list for PBXNativeTarget "GoogleToolboxForMac" */; - buildPhases = ( - B311E4867662945861847843827DB0EB /* Sources */, - 6AD215334409363FBBC48E48118C5C62 /* Frameworks */, - 53AC353E7DDDB2167D1AB17676628071 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = GoogleToolboxForMac; - productName = GoogleToolboxForMac; - productReference = BA922E76DF7B2D530FCDC0089D2C20A5 /* libGoogleToolboxForMac.a */; + productReference = E7C2BA0DA51EB36ED5DB61FE0CD57F36 /* libPods-Stone Island.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -734,103 +269,26 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = B35F7395675A25A46729AD5CE270066C /* Products */; + productRefGroup = EA7DD587FC2EAD1ECAA75B2850B62903 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - FA9D13261AF395CF5D54BB3203DF2A6E /* GoogleToolboxForMac */, - CF4B35B9FC819386EB09219BC91827D7 /* nanopb */, - 0165FA23BB1E05B01A7F333AD8A9D0AB /* Pods-Stone Island */, - 83E4B77BD7F292F23A4617388E39F15E /* Protobuf */, + 270B46424A6E550E1583E7A97AAD265A /* Pods-Stone Island */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 111E8E00DEE922B020E3A12BF85D1F68 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 72575C2EA8AD3A029CE735EE8D8AB047 /* Any.pbobjc.m in Sources */, - 0FCDA635D239A61F2BF25331980961AA /* Api.pbobjc.m in Sources */, - CA8F5217BB2A36ABC7B23E25679A5CA3 /* Duration.pbobjc.m in Sources */, - F6A5A6C8DCC5BB2790E4915146084C0B /* Empty.pbobjc.m in Sources */, - EE2C33AB2D11A3E9CCDF7661AE9E147A /* FieldMask.pbobjc.m in Sources */, - 91CDFE6BDFEBE1BF7C5A9856C9307C62 /* GPBArray.m in Sources */, - F889E78E4F5DA9B2031418FFB4798AFC /* GPBCodedInputStream.m in Sources */, - F7EB206E2986650BF0D3D39866C08903 /* GPBCodedOutputStream.m in Sources */, - C136220535719959455CDC0434D195CE /* GPBDescriptor.m in Sources */, - 54FCE05202C4E9317D168C4AC22A4C9E /* GPBDictionary.m in Sources */, - BC7DBE6C979297C50EC3BF1C96D4BCE4 /* GPBExtensionInternals.m in Sources */, - 11A2E6703999D52A9C0B35B0DFA09BC4 /* GPBExtensionRegistry.m in Sources */, - AFB2E0E2919C60F1589C86A455CDDAB3 /* GPBMessage.m in Sources */, - B1A450E8C279AA9360E77D4C632B1EA6 /* GPBRootObject.m in Sources */, - 8EEDB7063191F5682723BF26BA959583 /* GPBUnknownField.m in Sources */, - 37CCDC46A3514834D113ECA797AB741C /* GPBUnknownFieldSet.m in Sources */, - AE55AE2010B2139E1FAAF5C5128FD45F /* GPBUtilities.m in Sources */, - 52CB9B7B9367A311AA9D43E257D931D0 /* GPBWellKnownTypes.m in Sources */, - 18F7C87FB79D3D4C76F22B3F26E5F7F6 /* GPBWireFormat.m in Sources */, - 5F5E7A69933E6F421C0A81AE2604BA41 /* Protobuf-dummy.m in Sources */, - 57FE72AC5AB55F80302D3501AB388285 /* SourceContext.pbobjc.m in Sources */, - 8D795F39665BBEC7B3DEE9369F95BD74 /* Struct.pbobjc.m in Sources */, - 0EC3C5F27472BC4701C86F26C2D12B3A /* Timestamp.pbobjc.m in Sources */, - D0B466935B33E0E2D65E9691B56F4B8E /* Type.pbobjc.m in Sources */, - 289F36556DAF50888B448ED430E94DCB /* Wrappers.pbobjc.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5303D5F0966B6798D7AAA88A9ACCB670 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 28B7761E1D77D96D267539A7B67188EA /* nanopb-dummy.m in Sources */, - 9CBD14C17446EC9384CFAADBADF12387 /* pb_common.c in Sources */, - F2A7C7D18755231B289C10D16DD6F730 /* pb_decode.c in Sources */, - 91C9C419C2E304B3A68293C22053034E /* pb_encode.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9B73EA95DFBCFFFADB866C70AA0F6019 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 03B6A752DA89454D582F255E70B04C62 /* Pods-Stone Island-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B311E4867662945861847843827DB0EB /* Sources */ = { + 04C4D2FB97E65104032C84BA808D29B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5B8F036F7FAAF35FE98CE3FBFF25D72F /* GoogleToolboxForMac-dummy.m in Sources */, - CE793643063B71F80F32F0851FDABFA5 /* GTMLogger.m in Sources */, - F1B1695A6AB8AFEC306AB371F2DCA21F /* GTMNSData+zlib.m in Sources */, + 8B931F94A15CEC623D339DA3C38BE3A3 /* Pods-Stone Island-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 645830D9FB0BE7D2B7BC3B119285CBE9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleToolboxForMac; - target = FA9D13261AF395CF5D54BB3203DF2A6E /* GoogleToolboxForMac */; - targetProxy = BFB2041DEF820E18BEFA8BB9AED65421 /* PBXContainerItemProxy */; - }; - 954DF50A815C564A4F137A5776891E4A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = nanopb; - target = CF4B35B9FC819386EB09219BC91827D7 /* nanopb */; - targetProxy = F8B4BDF44EA49346EA28F8B9F75D8935 /* PBXContainerItemProxy */; - }; - 988A2D200CAC310CA70A3AAF1E7A2F85 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Protobuf; - target = 83E4B77BD7F292F23A4617388E39F15E /* Protobuf */; - targetProxy = A8DBFC6FA5890F08515B21D17DB251F6 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin XCBuildConfiguration section */ 015A368F878AC3E2CEAE21DDE8026304 /* Debug */ = { isa = XCBuildConfiguration; @@ -876,52 +334,6 @@ }; name = Debug; }; - 1C0DED43560AC5E69790FF5BED5899C3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9837A32494666A348405234344442538 /* nanopb.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 30A4CDD3CB336F44C87B0DD7AA6963A8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2313F1DCFFF1A82931A5DF3F158D5DA3 /* Pods-Stone Island.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; 44CDBB6D11DE06DB64D6268622BDC47E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -962,101 +374,9 @@ }; name = Release; }; - 60F6D40D9A89565F08389AFC4B2D16F5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F89A42940C946E790697D23E21C634DA /* Protobuf.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Protobuf/Protobuf-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 83219FDA245AB57766CE4E511F147EE8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F89A42940C946E790697D23E21C634DA /* Protobuf.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Protobuf/Protobuf-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 9D5185848EB0524743F60EDF09571F59 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9837A32494666A348405234344442538 /* nanopb.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - BE31CE5A4CEE30B7760F0A29A8109B34 /* Release */ = { + 5B7429374B6EEABBFC1E1EABA7B4556D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 45DE04F35C065C20F9213E57D5F936D5 /* GoogleToolboxForMac.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - C092DBBB18598FF1BD4BE64AFEB7D78F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 45DE04F35C065C20F9213E57D5F936D5 /* GoogleToolboxForMac.xcconfig */; + baseConfigurationReference = 2313F1DCFFF1A82931A5DF3F158D5DA3 /* Pods-Stone Island.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1064,20 +384,20 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MACH_O_TYPE = staticlib; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Debug; }; - DB47C15363B3ECCB911B2C7CD592C18A /* Release */ = { + B2C80873CD55005750F481B734E9380D /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 0C86D2D78080EDCEE85A13AA1692ACD6 /* Pods-Stone Island.release.xcconfig */; buildSettings = { @@ -1112,38 +432,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 94A6FD8AAC113A69F57982237B2DDA0F /* Build configuration list for PBXNativeTarget "GoogleToolboxForMac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C092DBBB18598FF1BD4BE64AFEB7D78F /* Debug */, - BE31CE5A4CEE30B7760F0A29A8109B34 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B8307E997A097EB50C00A8C7967B858A /* Build configuration list for PBXNativeTarget "nanopb" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1C0DED43560AC5E69790FF5BED5899C3 /* Debug */, - 9D5185848EB0524743F60EDF09571F59 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C1568F37CE939D4F563A4647C56487F8 /* Build configuration list for PBXNativeTarget "Protobuf" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 83219FDA245AB57766CE4E511F147EE8 /* Debug */, - 60F6D40D9A89565F08389AFC4B2D16F5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D6D6A9ED58F9C63D6F7BDE70DB2E4081 /* Build configuration list for PBXNativeTarget "Pods-Stone Island" */ = { + BD1D1A57A9121FF061B86F474E27AA5E /* Build configuration list for PBXNativeTarget "Pods-Stone Island" */ = { isa = XCConfigurationList; buildConfigurations = ( - 30A4CDD3CB336F44C87B0DD7AA6963A8 /* Debug */, - DB47C15363B3ECCB911B2C7CD592C18A /* Release */, + 5B7429374B6EEABBFC1E1EABA7B4556D /* Debug */, + B2C80873CD55005750F481B734E9380D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/GoogleToolboxForMac.xcscheme b/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/GoogleToolboxForMac.xcscheme deleted file mode 100644 index 6399589c..00000000 --- a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/GoogleToolboxForMac.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0700" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = 'primary' - BlueprintIdentifier = 'FA9D13261AF395CF5D54BB3203DF2A6E' - BlueprintName = 'GoogleToolboxForMac' - ReferencedContainer = 'container:Pods.xcodeproj' - BuildableName = 'libGoogleToolboxForMac.a'> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/Pods-Stone Island.xcscheme b/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/Pods-Stone Island.xcscheme index 1f3680f4..3079e230 100644 --- a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/Pods-Stone Island.xcscheme +++ b/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/Pods-Stone Island.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> <BuildableReference BuildableIdentifier = 'primary' - BlueprintIdentifier = '0165FA23BB1E05B01A7F333AD8A9D0AB' + BlueprintIdentifier = '270B46424A6E550E1583E7A97AAD265A' BlueprintName = 'Pods-Stone Island' ReferencedContainer = 'container:Pods.xcodeproj' BuildableName = 'libPods-Stone Island.a'> diff --git a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/Protobuf.xcscheme b/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/Protobuf.xcscheme deleted file mode 100644 index 495171c9..00000000 --- a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/Protobuf.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0700" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = 'primary' - BlueprintIdentifier = '83E4B77BD7F292F23A4617388E39F15E' - BlueprintName = 'Protobuf' - ReferencedContainer = 'container:Pods.xcodeproj' - BuildableName = 'libProtobuf.a'> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/nanopb.xcscheme b/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/nanopb.xcscheme deleted file mode 100644 index 774ee13f..00000000 --- a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/nanopb.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0700" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = 'primary' - BlueprintIdentifier = 'CF4B35B9FC819386EB09219BC91827D7' - BlueprintName = 'nanopb' - ReferencedContainer = 'container:Pods.xcodeproj' - BuildableName = 'libnanopb.a'> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist b/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist index 3466b6be..e1a18c63 100644 --- a/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/StoneIsland/platforms/ios/Pods/Pods.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,33 +4,12 @@ <dict> <key>SchemeUserState</key> <dict> - <key>GoogleToolboxForMac.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>0</integer> - </dict> <key>Pods-Stone Island.xcscheme</key> <dict> <key>isShown</key> <false/> <key>orderHint</key> - <integer>2</integer> - </dict> - <key>Protobuf.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>3</integer> - </dict> - <key>nanopb.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>1</integer> + <integer>0</integer> </dict> </dict> <key>SuppressBuildableAutocreation</key> diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/LICENSE b/StoneIsland/platforms/ios/Pods/Protobuf/LICENSE deleted file mode 100644 index f028c823..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/LICENSE +++ /dev/null @@ -1,42 +0,0 @@ -This license applies to all parts of Protocol Buffers except the following: - - - Atomicops support for generic gcc, located in - src/google/protobuf/stubs/atomicops_internals_generic_gcc.h. - This file is copyrighted by Red Hat Inc. - - - Atomicops support for AIX/POWER, located in - src/google/protobuf/stubs/atomicops_internals_power.h. - This file is copyrighted by Bloomberg Finance LP. - -Copyright 2014, Google 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: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"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 THE COPYRIGHT -OWNER 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. - -Code generated by the Protocol Buffer compiler is owned by the owner -of the input file used when generating it. This code is not -standalone and requires a support library to be linked with it. This -support library is itself covered by the above license. diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/README.md b/StoneIsland/platforms/ios/Pods/Protobuf/README.md deleted file mode 100644 index b26e5424..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/README.md +++ /dev/null @@ -1,77 +0,0 @@ -Protocol Buffers - Google's data interchange format -=================================================== - -[](https://travis-ci.org/google/protobuf) [](https://ci.appveyor.com/project/protobuf/protobuf) [](https://grpc-testing.appspot.com/job/protobuf_branch) [](https://grpc-testing.appspot.com/job/protobuf_branch_32) [](http://ci.bazel.io/job/protobuf/) - -Copyright 2008 Google Inc. - -https://developers.google.com/protocol-buffers/ - -Overview --------- - -Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, -platform-neutral, extensible mechanism for serializing structured data. You -can find [protobuf's documentation on the Google Developers site](https://developers.google.com/protocol-buffers/). - -This README file contains protobuf installation instructions. To install -protobuf, you need to install the protocol compiler (used to compile .proto -files) and the protobuf runtime for your chosen programming language. - -Protocol Compiler Installation ------------------------------- - -The protocol compiler is written in C++. If you are using C++, please follow -the [C++ Installation Instructions](src/README.md) to install protoc along -with the C++ runtime. - -For non-C++ users, the simplest way to install the protocol compiler is to -download a pre-built binary from our release page: - - [https://github.com/google/protobuf/releases](https://github.com/google/protobuf/releases) - -In the downloads section of each release, you can find pre-built binaries in -zip packages: protoc-$VERSION-$PLATFORM.zip. It contains the protoc binary -as well as a set of standard .proto files distributed along with protobuf. - -If you are looking for an old version that is not available in the release -page, check out the maven repo here: - - [http://repo1.maven.org/maven2/com/google/protobuf/protoc/](http://repo1.maven.org/maven2/com/google/protobuf/protoc/) - -These pre-built binaries are only provided for released versions. If you want -to use the github master version at HEAD, or you need to modify protobuf code, -or you are using C++, it's recommended to build your own protoc binary from -source. - -If you would like to build protoc binary from source, see the [C++ Installation -Instructions](src/README.md). - -Protobuf Runtime Installation ------------------------------ - -Protobuf supports several different programming languages. For each programming -language, you can find instructions in the corresponding source directory about -how to install protobuf runtime for that specific language: - -| Language | Source | -|--------------------------------------|-------------------------------------------------------| -| C++ (include C++ runtime and protoc) | [src](src) | -| Java | [java](java) | -| Python | [python](python) | -| Objective-C | [objectivec](objectivec) | -| C# | [csharp](csharp) | -| JavaNano | [javanano](javanano) | -| JavaScript | [js](js) | -| Ruby | [ruby](ruby) | -| Go | [golang/protobuf](https://github.com/golang/protobuf) | -| PHP | [php](php) | - - -Usage ------ - -The complete documentation for Protocol Buffers is available via the -web at: - -https://developers.google.com/protocol-buffers/ diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBArray.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBArray.h deleted file mode 100644 index 638b2882..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBArray.h +++ /dev/null @@ -1,1967 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2015 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBRuntimeTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -//%PDDM-EXPAND DECLARE_ARRAYS() -// This block of code is generated, do not edit it directly. - -#pragma mark - Int32 - -/** - * Class used for repeated fields of int32_t values. This performs better than - * boxing into NSNumbers in NSArrays. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt32Array : NSObject <NSCopying> - -/** The number of elements contained in the array. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty GPBInt32Array. - **/ -+ (instancetype)array; - -/** - * Creates and initializes a GPBInt32Array with the single element given. - * - * @param value The value to be placed in the array. - * - * @return A newly instanced GPBInt32Array with value in it. - **/ -+ (instancetype)arrayWithValue:(int32_t)value; - -/** - * Creates and initializes a GPBInt32Array with the contents of the given - * array. - * - * @param array Array with the contents to be put into the new array. - * - * @return A newly instanced GPBInt32Array with the contents of array. - **/ -+ (instancetype)arrayWithValueArray:(GPBInt32Array *)array; - -/** - * Creates and initializes a GPBInt32Array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly instanced GPBInt32Array with a capacity of count. - **/ -+ (instancetype)arrayWithCapacity:(NSUInteger)count; - -/** - * @return A newly initialized and empty GPBInt32Array. - **/ -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -/** - * Initializes the array, copying the given values. - * - * @param values An array with the values to put inside this array. - * @param count The number of elements to copy into the array. - * - * @return A newly initialized GPBInt32Array with a copy of the values. - **/ -- (instancetype)initWithValues:(const int32_t [__nullable])values - count:(NSUInteger)count; - -/** - * Initializes the array, copying the given values. - * - * @param array An array with the values to put inside this array. - * - * @return A newly initialized GPBInt32Array with a copy of the values. - **/ -- (instancetype)initWithValueArray:(GPBInt32Array *)array; - -/** - * Initializes the array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly initialized GPBInt32Array with a capacity of count. - **/ -- (instancetype)initWithCapacity:(NSUInteger)count; - -/** - * Gets the value at the given index. - * - * @param index The index of the value to get. - * - * @return The value at the given index. - **/ -- (int32_t)valueAtIndex:(NSUInteger)index; - -/** - * Enumerates the values on this array with the given block. - * - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block; - -/** - * Enumerates the values on this array with the given block. - * - * @param opts Options to control the enumeration. - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block; - -/** - * Adds a value to this array. - * - * @param value The value to add to this array. - **/ -- (void)addValue:(int32_t)value; - -/** - * Adds values to this array. - * - * @param values The values to add to this array. - * @param count The number of elements to add. - **/ -- (void)addValues:(const int32_t [__nullable])values count:(NSUInteger)count; - -/** - * Adds the values from the given array to this array. - * - * @param array The array containing the elements to add to this array. - **/ -- (void)addValuesFromArray:(GPBInt32Array *)array; - -/** - * Inserts a value into the given position. - * - * @param value The value to add to this array. - * @param index The index into which to insert the value. - **/ -- (void)insertValue:(int32_t)value atIndex:(NSUInteger)index; - -/** - * Replaces the value at the given index with the given value. - * - * @param index The index for which to replace the value. - * @param value The value to replace with. - **/ -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int32_t)value; - -/** - * Removes the value at the given index. - * - * @param index The index of the value to remove. - **/ -- (void)removeValueAtIndex:(NSUInteger)index; - -/** - * Removes all the values from this array. - **/ -- (void)removeAll; - -/** - * Exchanges the values between the given indexes. - * - * @param idx1 The index of the first element to exchange. - * @param idx2 The index of the second element to exchange. - **/ -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2; - -@end - -#pragma mark - UInt32 - -/** - * Class used for repeated fields of uint32_t values. This performs better than - * boxing into NSNumbers in NSArrays. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt32Array : NSObject <NSCopying> - -/** The number of elements contained in the array. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty GPBUInt32Array. - **/ -+ (instancetype)array; - -/** - * Creates and initializes a GPBUInt32Array with the single element given. - * - * @param value The value to be placed in the array. - * - * @return A newly instanced GPBUInt32Array with value in it. - **/ -+ (instancetype)arrayWithValue:(uint32_t)value; - -/** - * Creates and initializes a GPBUInt32Array with the contents of the given - * array. - * - * @param array Array with the contents to be put into the new array. - * - * @return A newly instanced GPBUInt32Array with the contents of array. - **/ -+ (instancetype)arrayWithValueArray:(GPBUInt32Array *)array; - -/** - * Creates and initializes a GPBUInt32Array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly instanced GPBUInt32Array with a capacity of count. - **/ -+ (instancetype)arrayWithCapacity:(NSUInteger)count; - -/** - * @return A newly initialized and empty GPBUInt32Array. - **/ -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -/** - * Initializes the array, copying the given values. - * - * @param values An array with the values to put inside this array. - * @param count The number of elements to copy into the array. - * - * @return A newly initialized GPBUInt32Array with a copy of the values. - **/ -- (instancetype)initWithValues:(const uint32_t [__nullable])values - count:(NSUInteger)count; - -/** - * Initializes the array, copying the given values. - * - * @param array An array with the values to put inside this array. - * - * @return A newly initialized GPBUInt32Array with a copy of the values. - **/ -- (instancetype)initWithValueArray:(GPBUInt32Array *)array; - -/** - * Initializes the array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly initialized GPBUInt32Array with a capacity of count. - **/ -- (instancetype)initWithCapacity:(NSUInteger)count; - -/** - * Gets the value at the given index. - * - * @param index The index of the value to get. - * - * @return The value at the given index. - **/ -- (uint32_t)valueAtIndex:(NSUInteger)index; - -/** - * Enumerates the values on this array with the given block. - * - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithBlock:(void (^)(uint32_t value, NSUInteger idx, BOOL *stop))block; - -/** - * Enumerates the values on this array with the given block. - * - * @param opts Options to control the enumeration. - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(uint32_t value, NSUInteger idx, BOOL *stop))block; - -/** - * Adds a value to this array. - * - * @param value The value to add to this array. - **/ -- (void)addValue:(uint32_t)value; - -/** - * Adds values to this array. - * - * @param values The values to add to this array. - * @param count The number of elements to add. - **/ -- (void)addValues:(const uint32_t [__nullable])values count:(NSUInteger)count; - -/** - * Adds the values from the given array to this array. - * - * @param array The array containing the elements to add to this array. - **/ -- (void)addValuesFromArray:(GPBUInt32Array *)array; - -/** - * Inserts a value into the given position. - * - * @param value The value to add to this array. - * @param index The index into which to insert the value. - **/ -- (void)insertValue:(uint32_t)value atIndex:(NSUInteger)index; - -/** - * Replaces the value at the given index with the given value. - * - * @param index The index for which to replace the value. - * @param value The value to replace with. - **/ -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(uint32_t)value; - -/** - * Removes the value at the given index. - * - * @param index The index of the value to remove. - **/ -- (void)removeValueAtIndex:(NSUInteger)index; - -/** - * Removes all the values from this array. - **/ -- (void)removeAll; - -/** - * Exchanges the values between the given indexes. - * - * @param idx1 The index of the first element to exchange. - * @param idx2 The index of the second element to exchange. - **/ -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2; - -@end - -#pragma mark - Int64 - -/** - * Class used for repeated fields of int64_t values. This performs better than - * boxing into NSNumbers in NSArrays. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt64Array : NSObject <NSCopying> - -/** The number of elements contained in the array. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty GPBInt64Array. - **/ -+ (instancetype)array; - -/** - * Creates and initializes a GPBInt64Array with the single element given. - * - * @param value The value to be placed in the array. - * - * @return A newly instanced GPBInt64Array with value in it. - **/ -+ (instancetype)arrayWithValue:(int64_t)value; - -/** - * Creates and initializes a GPBInt64Array with the contents of the given - * array. - * - * @param array Array with the contents to be put into the new array. - * - * @return A newly instanced GPBInt64Array with the contents of array. - **/ -+ (instancetype)arrayWithValueArray:(GPBInt64Array *)array; - -/** - * Creates and initializes a GPBInt64Array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly instanced GPBInt64Array with a capacity of count. - **/ -+ (instancetype)arrayWithCapacity:(NSUInteger)count; - -/** - * @return A newly initialized and empty GPBInt64Array. - **/ -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -/** - * Initializes the array, copying the given values. - * - * @param values An array with the values to put inside this array. - * @param count The number of elements to copy into the array. - * - * @return A newly initialized GPBInt64Array with a copy of the values. - **/ -- (instancetype)initWithValues:(const int64_t [__nullable])values - count:(NSUInteger)count; - -/** - * Initializes the array, copying the given values. - * - * @param array An array with the values to put inside this array. - * - * @return A newly initialized GPBInt64Array with a copy of the values. - **/ -- (instancetype)initWithValueArray:(GPBInt64Array *)array; - -/** - * Initializes the array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly initialized GPBInt64Array with a capacity of count. - **/ -- (instancetype)initWithCapacity:(NSUInteger)count; - -/** - * Gets the value at the given index. - * - * @param index The index of the value to get. - * - * @return The value at the given index. - **/ -- (int64_t)valueAtIndex:(NSUInteger)index; - -/** - * Enumerates the values on this array with the given block. - * - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithBlock:(void (^)(int64_t value, NSUInteger idx, BOOL *stop))block; - -/** - * Enumerates the values on this array with the given block. - * - * @param opts Options to control the enumeration. - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int64_t value, NSUInteger idx, BOOL *stop))block; - -/** - * Adds a value to this array. - * - * @param value The value to add to this array. - **/ -- (void)addValue:(int64_t)value; - -/** - * Adds values to this array. - * - * @param values The values to add to this array. - * @param count The number of elements to add. - **/ -- (void)addValues:(const int64_t [__nullable])values count:(NSUInteger)count; - -/** - * Adds the values from the given array to this array. - * - * @param array The array containing the elements to add to this array. - **/ -- (void)addValuesFromArray:(GPBInt64Array *)array; - -/** - * Inserts a value into the given position. - * - * @param value The value to add to this array. - * @param index The index into which to insert the value. - **/ -- (void)insertValue:(int64_t)value atIndex:(NSUInteger)index; - -/** - * Replaces the value at the given index with the given value. - * - * @param index The index for which to replace the value. - * @param value The value to replace with. - **/ -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int64_t)value; - -/** - * Removes the value at the given index. - * - * @param index The index of the value to remove. - **/ -- (void)removeValueAtIndex:(NSUInteger)index; - -/** - * Removes all the values from this array. - **/ -- (void)removeAll; - -/** - * Exchanges the values between the given indexes. - * - * @param idx1 The index of the first element to exchange. - * @param idx2 The index of the second element to exchange. - **/ -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2; - -@end - -#pragma mark - UInt64 - -/** - * Class used for repeated fields of uint64_t values. This performs better than - * boxing into NSNumbers in NSArrays. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt64Array : NSObject <NSCopying> - -/** The number of elements contained in the array. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty GPBUInt64Array. - **/ -+ (instancetype)array; - -/** - * Creates and initializes a GPBUInt64Array with the single element given. - * - * @param value The value to be placed in the array. - * - * @return A newly instanced GPBUInt64Array with value in it. - **/ -+ (instancetype)arrayWithValue:(uint64_t)value; - -/** - * Creates and initializes a GPBUInt64Array with the contents of the given - * array. - * - * @param array Array with the contents to be put into the new array. - * - * @return A newly instanced GPBUInt64Array with the contents of array. - **/ -+ (instancetype)arrayWithValueArray:(GPBUInt64Array *)array; - -/** - * Creates and initializes a GPBUInt64Array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly instanced GPBUInt64Array with a capacity of count. - **/ -+ (instancetype)arrayWithCapacity:(NSUInteger)count; - -/** - * @return A newly initialized and empty GPBUInt64Array. - **/ -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -/** - * Initializes the array, copying the given values. - * - * @param values An array with the values to put inside this array. - * @param count The number of elements to copy into the array. - * - * @return A newly initialized GPBUInt64Array with a copy of the values. - **/ -- (instancetype)initWithValues:(const uint64_t [__nullable])values - count:(NSUInteger)count; - -/** - * Initializes the array, copying the given values. - * - * @param array An array with the values to put inside this array. - * - * @return A newly initialized GPBUInt64Array with a copy of the values. - **/ -- (instancetype)initWithValueArray:(GPBUInt64Array *)array; - -/** - * Initializes the array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly initialized GPBUInt64Array with a capacity of count. - **/ -- (instancetype)initWithCapacity:(NSUInteger)count; - -/** - * Gets the value at the given index. - * - * @param index The index of the value to get. - * - * @return The value at the given index. - **/ -- (uint64_t)valueAtIndex:(NSUInteger)index; - -/** - * Enumerates the values on this array with the given block. - * - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithBlock:(void (^)(uint64_t value, NSUInteger idx, BOOL *stop))block; - -/** - * Enumerates the values on this array with the given block. - * - * @param opts Options to control the enumeration. - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(uint64_t value, NSUInteger idx, BOOL *stop))block; - -/** - * Adds a value to this array. - * - * @param value The value to add to this array. - **/ -- (void)addValue:(uint64_t)value; - -/** - * Adds values to this array. - * - * @param values The values to add to this array. - * @param count The number of elements to add. - **/ -- (void)addValues:(const uint64_t [__nullable])values count:(NSUInteger)count; - -/** - * Adds the values from the given array to this array. - * - * @param array The array containing the elements to add to this array. - **/ -- (void)addValuesFromArray:(GPBUInt64Array *)array; - -/** - * Inserts a value into the given position. - * - * @param value The value to add to this array. - * @param index The index into which to insert the value. - **/ -- (void)insertValue:(uint64_t)value atIndex:(NSUInteger)index; - -/** - * Replaces the value at the given index with the given value. - * - * @param index The index for which to replace the value. - * @param value The value to replace with. - **/ -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(uint64_t)value; - -/** - * Removes the value at the given index. - * - * @param index The index of the value to remove. - **/ -- (void)removeValueAtIndex:(NSUInteger)index; - -/** - * Removes all the values from this array. - **/ -- (void)removeAll; - -/** - * Exchanges the values between the given indexes. - * - * @param idx1 The index of the first element to exchange. - * @param idx2 The index of the second element to exchange. - **/ -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2; - -@end - -#pragma mark - Float - -/** - * Class used for repeated fields of float values. This performs better than - * boxing into NSNumbers in NSArrays. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBFloatArray : NSObject <NSCopying> - -/** The number of elements contained in the array. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty GPBFloatArray. - **/ -+ (instancetype)array; - -/** - * Creates and initializes a GPBFloatArray with the single element given. - * - * @param value The value to be placed in the array. - * - * @return A newly instanced GPBFloatArray with value in it. - **/ -+ (instancetype)arrayWithValue:(float)value; - -/** - * Creates and initializes a GPBFloatArray with the contents of the given - * array. - * - * @param array Array with the contents to be put into the new array. - * - * @return A newly instanced GPBFloatArray with the contents of array. - **/ -+ (instancetype)arrayWithValueArray:(GPBFloatArray *)array; - -/** - * Creates and initializes a GPBFloatArray with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly instanced GPBFloatArray with a capacity of count. - **/ -+ (instancetype)arrayWithCapacity:(NSUInteger)count; - -/** - * @return A newly initialized and empty GPBFloatArray. - **/ -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -/** - * Initializes the array, copying the given values. - * - * @param values An array with the values to put inside this array. - * @param count The number of elements to copy into the array. - * - * @return A newly initialized GPBFloatArray with a copy of the values. - **/ -- (instancetype)initWithValues:(const float [__nullable])values - count:(NSUInteger)count; - -/** - * Initializes the array, copying the given values. - * - * @param array An array with the values to put inside this array. - * - * @return A newly initialized GPBFloatArray with a copy of the values. - **/ -- (instancetype)initWithValueArray:(GPBFloatArray *)array; - -/** - * Initializes the array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly initialized GPBFloatArray with a capacity of count. - **/ -- (instancetype)initWithCapacity:(NSUInteger)count; - -/** - * Gets the value at the given index. - * - * @param index The index of the value to get. - * - * @return The value at the given index. - **/ -- (float)valueAtIndex:(NSUInteger)index; - -/** - * Enumerates the values on this array with the given block. - * - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithBlock:(void (^)(float value, NSUInteger idx, BOOL *stop))block; - -/** - * Enumerates the values on this array with the given block. - * - * @param opts Options to control the enumeration. - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(float value, NSUInteger idx, BOOL *stop))block; - -/** - * Adds a value to this array. - * - * @param value The value to add to this array. - **/ -- (void)addValue:(float)value; - -/** - * Adds values to this array. - * - * @param values The values to add to this array. - * @param count The number of elements to add. - **/ -- (void)addValues:(const float [__nullable])values count:(NSUInteger)count; - -/** - * Adds the values from the given array to this array. - * - * @param array The array containing the elements to add to this array. - **/ -- (void)addValuesFromArray:(GPBFloatArray *)array; - -/** - * Inserts a value into the given position. - * - * @param value The value to add to this array. - * @param index The index into which to insert the value. - **/ -- (void)insertValue:(float)value atIndex:(NSUInteger)index; - -/** - * Replaces the value at the given index with the given value. - * - * @param index The index for which to replace the value. - * @param value The value to replace with. - **/ -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(float)value; - -/** - * Removes the value at the given index. - * - * @param index The index of the value to remove. - **/ -- (void)removeValueAtIndex:(NSUInteger)index; - -/** - * Removes all the values from this array. - **/ -- (void)removeAll; - -/** - * Exchanges the values between the given indexes. - * - * @param idx1 The index of the first element to exchange. - * @param idx2 The index of the second element to exchange. - **/ -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2; - -@end - -#pragma mark - Double - -/** - * Class used for repeated fields of double values. This performs better than - * boxing into NSNumbers in NSArrays. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBDoubleArray : NSObject <NSCopying> - -/** The number of elements contained in the array. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty GPBDoubleArray. - **/ -+ (instancetype)array; - -/** - * Creates and initializes a GPBDoubleArray with the single element given. - * - * @param value The value to be placed in the array. - * - * @return A newly instanced GPBDoubleArray with value in it. - **/ -+ (instancetype)arrayWithValue:(double)value; - -/** - * Creates and initializes a GPBDoubleArray with the contents of the given - * array. - * - * @param array Array with the contents to be put into the new array. - * - * @return A newly instanced GPBDoubleArray with the contents of array. - **/ -+ (instancetype)arrayWithValueArray:(GPBDoubleArray *)array; - -/** - * Creates and initializes a GPBDoubleArray with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly instanced GPBDoubleArray with a capacity of count. - **/ -+ (instancetype)arrayWithCapacity:(NSUInteger)count; - -/** - * @return A newly initialized and empty GPBDoubleArray. - **/ -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -/** - * Initializes the array, copying the given values. - * - * @param values An array with the values to put inside this array. - * @param count The number of elements to copy into the array. - * - * @return A newly initialized GPBDoubleArray with a copy of the values. - **/ -- (instancetype)initWithValues:(const double [__nullable])values - count:(NSUInteger)count; - -/** - * Initializes the array, copying the given values. - * - * @param array An array with the values to put inside this array. - * - * @return A newly initialized GPBDoubleArray with a copy of the values. - **/ -- (instancetype)initWithValueArray:(GPBDoubleArray *)array; - -/** - * Initializes the array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly initialized GPBDoubleArray with a capacity of count. - **/ -- (instancetype)initWithCapacity:(NSUInteger)count; - -/** - * Gets the value at the given index. - * - * @param index The index of the value to get. - * - * @return The value at the given index. - **/ -- (double)valueAtIndex:(NSUInteger)index; - -/** - * Enumerates the values on this array with the given block. - * - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithBlock:(void (^)(double value, NSUInteger idx, BOOL *stop))block; - -/** - * Enumerates the values on this array with the given block. - * - * @param opts Options to control the enumeration. - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(double value, NSUInteger idx, BOOL *stop))block; - -/** - * Adds a value to this array. - * - * @param value The value to add to this array. - **/ -- (void)addValue:(double)value; - -/** - * Adds values to this array. - * - * @param values The values to add to this array. - * @param count The number of elements to add. - **/ -- (void)addValues:(const double [__nullable])values count:(NSUInteger)count; - -/** - * Adds the values from the given array to this array. - * - * @param array The array containing the elements to add to this array. - **/ -- (void)addValuesFromArray:(GPBDoubleArray *)array; - -/** - * Inserts a value into the given position. - * - * @param value The value to add to this array. - * @param index The index into which to insert the value. - **/ -- (void)insertValue:(double)value atIndex:(NSUInteger)index; - -/** - * Replaces the value at the given index with the given value. - * - * @param index The index for which to replace the value. - * @param value The value to replace with. - **/ -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(double)value; - -/** - * Removes the value at the given index. - * - * @param index The index of the value to remove. - **/ -- (void)removeValueAtIndex:(NSUInteger)index; - -/** - * Removes all the values from this array. - **/ -- (void)removeAll; - -/** - * Exchanges the values between the given indexes. - * - * @param idx1 The index of the first element to exchange. - * @param idx2 The index of the second element to exchange. - **/ -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2; - -@end - -#pragma mark - Bool - -/** - * Class used for repeated fields of BOOL values. This performs better than - * boxing into NSNumbers in NSArrays. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBBoolArray : NSObject <NSCopying> - -/** The number of elements contained in the array. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty GPBBoolArray. - **/ -+ (instancetype)array; - -/** - * Creates and initializes a GPBBoolArray with the single element given. - * - * @param value The value to be placed in the array. - * - * @return A newly instanced GPBBoolArray with value in it. - **/ -+ (instancetype)arrayWithValue:(BOOL)value; - -/** - * Creates and initializes a GPBBoolArray with the contents of the given - * array. - * - * @param array Array with the contents to be put into the new array. - * - * @return A newly instanced GPBBoolArray with the contents of array. - **/ -+ (instancetype)arrayWithValueArray:(GPBBoolArray *)array; - -/** - * Creates and initializes a GPBBoolArray with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly instanced GPBBoolArray with a capacity of count. - **/ -+ (instancetype)arrayWithCapacity:(NSUInteger)count; - -/** - * @return A newly initialized and empty GPBBoolArray. - **/ -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -/** - * Initializes the array, copying the given values. - * - * @param values An array with the values to put inside this array. - * @param count The number of elements to copy into the array. - * - * @return A newly initialized GPBBoolArray with a copy of the values. - **/ -- (instancetype)initWithValues:(const BOOL [__nullable])values - count:(NSUInteger)count; - -/** - * Initializes the array, copying the given values. - * - * @param array An array with the values to put inside this array. - * - * @return A newly initialized GPBBoolArray with a copy of the values. - **/ -- (instancetype)initWithValueArray:(GPBBoolArray *)array; - -/** - * Initializes the array with the given capacity. - * - * @param count The capacity needed for the array. - * - * @return A newly initialized GPBBoolArray with a capacity of count. - **/ -- (instancetype)initWithCapacity:(NSUInteger)count; - -/** - * Gets the value at the given index. - * - * @param index The index of the value to get. - * - * @return The value at the given index. - **/ -- (BOOL)valueAtIndex:(NSUInteger)index; - -/** - * Enumerates the values on this array with the given block. - * - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithBlock:(void (^)(BOOL value, NSUInteger idx, BOOL *stop))block; - -/** - * Enumerates the values on this array with the given block. - * - * @param opts Options to control the enumeration. - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(BOOL value, NSUInteger idx, BOOL *stop))block; - -/** - * Adds a value to this array. - * - * @param value The value to add to this array. - **/ -- (void)addValue:(BOOL)value; - -/** - * Adds values to this array. - * - * @param values The values to add to this array. - * @param count The number of elements to add. - **/ -- (void)addValues:(const BOOL [__nullable])values count:(NSUInteger)count; - -/** - * Adds the values from the given array to this array. - * - * @param array The array containing the elements to add to this array. - **/ -- (void)addValuesFromArray:(GPBBoolArray *)array; - -/** - * Inserts a value into the given position. - * - * @param value The value to add to this array. - * @param index The index into which to insert the value. - **/ -- (void)insertValue:(BOOL)value atIndex:(NSUInteger)index; - -/** - * Replaces the value at the given index with the given value. - * - * @param index The index for which to replace the value. - * @param value The value to replace with. - **/ -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(BOOL)value; - -/** - * Removes the value at the given index. - * - * @param index The index of the value to remove. - **/ -- (void)removeValueAtIndex:(NSUInteger)index; - -/** - * Removes all the values from this array. - **/ -- (void)removeAll; - -/** - * Exchanges the values between the given indexes. - * - * @param idx1 The index of the first element to exchange. - * @param idx2 The index of the second element to exchange. - **/ -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2; - -@end - -#pragma mark - Enum - -/** - * This class is used for repeated fields of int32_t values. This performs - * better than boxing into NSNumbers in NSArrays. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBEnumArray : NSObject <NSCopying> - -/** The number of elements contained in the array. */ -@property(nonatomic, readonly) NSUInteger count; -/** The validation function to check if the enums are valid. */ -@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc; - -/** - * @return A newly instanced and empty GPBEnumArray. - **/ -+ (instancetype)array; - -/** - * Creates and initializes a GPBEnumArray with the enum validation function - * given. - * - * @param func The enum validation function for the array. - * - * @return A newly instanced GPBEnumArray. - **/ -+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Creates and initializes a GPBEnumArray with the enum validation function - * given and the single raw value given. - * - * @param func The enum validation function for the array. - * @param value The raw value to add to this array. - * - * @return A newly instanced GPBEnumArray. - **/ -+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValue:(int32_t)value; - -/** - * Creates and initializes a GPBEnumArray that adds the elements from the - * given array. - * - * @param array Array containing the values to add to the new array. - * - * @return A newly instanced GPBEnumArray. - **/ -+ (instancetype)arrayWithValueArray:(GPBEnumArray *)array; - -/** - * Creates and initializes a GPBEnumArray with the given enum validation - * function and with the givencapacity. - * - * @param func The enum validation function for the array. - * @param count The capacity needed for the array. - * - * @return A newly instanced GPBEnumArray with a capacity of count. - **/ -+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)count; - -/** - * Initializes the array with the given enum validation function. - * - * @param func The enum validation function for the array. - * - * @return A newly initialized GPBEnumArray with a copy of the values. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - NS_DESIGNATED_INITIALIZER; - -/** - * Initializes the array, copying the given values. - * - * @param func The enum validation function for the array. - * @param values An array with the values to put inside this array. - * @param count The number of elements to copy into the array. - * - * @return A newly initialized GPBEnumArray with a copy of the values. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - count:(NSUInteger)count; - -/** - * Initializes the array, copying the given values. - * - * @param array An array with the values to put inside this array. - * - * @return A newly initialized GPBEnumArray with a copy of the values. - **/ -- (instancetype)initWithValueArray:(GPBEnumArray *)array; - -/** - * Initializes the array with the given capacity. - * - * @param func The enum validation function for the array. - * @param count The capacity needed for the array. - * - * @return A newly initialized GPBEnumArray with a capacity of count. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)count; - -// These will return kGPBUnrecognizedEnumeratorValue if the value at index is not a -// valid enumerator as defined by validationFunc. If the actual value is -// desired, use "raw" version of the method. - -/** - * Gets the value at the given index. - * - * @param index The index of the value to get. - * - * @return The value at the given index. - **/ -- (int32_t)valueAtIndex:(NSUInteger)index; - -/** - * Enumerates the values on this array with the given block. - * - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block; - -/** - * Enumerates the values on this array with the given block. - * - * @param opts Options to control the enumeration. - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block; - -// These methods bypass the validationFunc to provide access to values that were not -// known at the time the binary was compiled. - -/** - * Gets the raw enum value at the given index. - * - * @param index The index of the raw enum value to get. - * - * @return The raw enum value at the given index. - **/ -- (int32_t)rawValueAtIndex:(NSUInteger)index; - -/** - * Enumerates the values on this array with the given block. - * - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateRawValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block; - -/** - * Enumerates the values on this array with the given block. - * - * @param opts Options to control the enumeration. - * @param block The block to enumerate with. - * **value**: The current value being enumerated. - * **idx**: The index of the current value. - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateRawValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block; - -// If value is not a valid enumerator as defined by validationFunc, these -// methods will assert in debug, and will log in release and assign the value -// to the default value. Use the rawValue methods below to assign non enumerator -// values. - -/** - * Adds a value to this array. - * - * @param value The value to add to this array. - **/ -- (void)addValue:(int32_t)value; - -/** - * Adds values to this array. - * - * @param values The values to add to this array. - * @param count The number of elements to add. - **/ -- (void)addValues:(const int32_t [__nullable])values count:(NSUInteger)count; - - -/** - * Inserts a value into the given position. - * - * @param value The value to add to this array. - * @param index The index into which to insert the value. - **/ -- (void)insertValue:(int32_t)value atIndex:(NSUInteger)index; - -/** - * Replaces the value at the given index with the given value. - * - * @param index The index for which to replace the value. - * @param value The value to replace with. - **/ -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int32_t)value; - -// These methods bypass the validationFunc to provide setting of values that were not -// known at the time the binary was compiled. - -/** - * Adds a raw enum value to this array. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param value The raw enum value to add to the array. - **/ -- (void)addRawValue:(int32_t)value; - -/** - * Adds raw enum values to this array. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param array Array containing the raw enum values to add to this array. - **/ -- (void)addRawValuesFromArray:(GPBEnumArray *)array; - -/** - * Adds raw enum values to this array. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param values Array containing the raw enum values to add to this array. - * @param count The number of raw values to add. - **/ -- (void)addRawValues:(const int32_t [__nullable])values count:(NSUInteger)count; - -/** - * Inserts a raw enum value at the given index. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param value Raw enum value to add. - * @param index The index into which to insert the value. - **/ -- (void)insertRawValue:(int32_t)value atIndex:(NSUInteger)index; - -/** - * Replaces the raw enum value at the given index with the given value. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param index The index for which to replace the value. - * @param value The raw enum value to replace with. - **/ -- (void)replaceValueAtIndex:(NSUInteger)index withRawValue:(int32_t)value; - -// No validation applies to these methods. - -/** - * Removes the value at the given index. - * - * @param index The index of the value to remove. - **/ -- (void)removeValueAtIndex:(NSUInteger)index; - -/** - * Removes all the values from this array. - **/ -- (void)removeAll; - -/** - * Exchanges the values between the given indexes. - * - * @param idx1 The index of the first element to exchange. - * @param idx2 The index of the second element to exchange. - **/ -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2; - -@end - -//%PDDM-EXPAND-END DECLARE_ARRAYS() - -NS_ASSUME_NONNULL_END - -//%PDDM-DEFINE DECLARE_ARRAYS() -//%ARRAY_INTERFACE_SIMPLE(Int32, int32_t) -//%ARRAY_INTERFACE_SIMPLE(UInt32, uint32_t) -//%ARRAY_INTERFACE_SIMPLE(Int64, int64_t) -//%ARRAY_INTERFACE_SIMPLE(UInt64, uint64_t) -//%ARRAY_INTERFACE_SIMPLE(Float, float) -//%ARRAY_INTERFACE_SIMPLE(Double, double) -//%ARRAY_INTERFACE_SIMPLE(Bool, BOOL) -//%ARRAY_INTERFACE_ENUM(Enum, int32_t) - -// -// The common case (everything but Enum) -// - -//%PDDM-DEFINE ARRAY_INTERFACE_SIMPLE(NAME, TYPE) -//%#pragma mark - NAME -//% -//%/** -//% * Class used for repeated fields of ##TYPE## values. This performs better than -//% * boxing into NSNumbers in NSArrays. -//% * -//% * @note This class is not meant to be subclassed. -//% **/ -//%@interface GPB##NAME##Array : NSObject <NSCopying> -//% -//%/** The number of elements contained in the array. */ -//%@property(nonatomic, readonly) NSUInteger count; -//% -//%/** -//% * @return A newly instanced and empty GPB##NAME##Array. -//% **/ -//%+ (instancetype)array; -//% -//%/** -//% * Creates and initializes a GPB##NAME##Array with the single element given. -//% * -//% * @param value The value to be placed in the array. -//% * -//% * @return A newly instanced GPB##NAME##Array with value in it. -//% **/ -//%+ (instancetype)arrayWithValue:(TYPE)value; -//% -//%/** -//% * Creates and initializes a GPB##NAME##Array with the contents of the given -//% * array. -//% * -//% * @param array Array with the contents to be put into the new array. -//% * -//% * @return A newly instanced GPB##NAME##Array with the contents of array. -//% **/ -//%+ (instancetype)arrayWithValueArray:(GPB##NAME##Array *)array; -//% -//%/** -//% * Creates and initializes a GPB##NAME##Array with the given capacity. -//% * -//% * @param count The capacity needed for the array. -//% * -//% * @return A newly instanced GPB##NAME##Array with a capacity of count. -//% **/ -//%+ (instancetype)arrayWithCapacity:(NSUInteger)count; -//% -//%/** -//% * @return A newly initialized and empty GPB##NAME##Array. -//% **/ -//%- (instancetype)init NS_DESIGNATED_INITIALIZER; -//% -//%/** -//% * Initializes the array, copying the given values. -//% * -//% * @param values An array with the values to put inside this array. -//% * @param count The number of elements to copy into the array. -//% * -//% * @return A newly initialized GPB##NAME##Array with a copy of the values. -//% **/ -//%- (instancetype)initWithValues:(const TYPE [__nullable])values -//% count:(NSUInteger)count; -//% -//%/** -//% * Initializes the array, copying the given values. -//% * -//% * @param array An array with the values to put inside this array. -//% * -//% * @return A newly initialized GPB##NAME##Array with a copy of the values. -//% **/ -//%- (instancetype)initWithValueArray:(GPB##NAME##Array *)array; -//% -//%/** -//% * Initializes the array with the given capacity. -//% * -//% * @param count The capacity needed for the array. -//% * -//% * @return A newly initialized GPB##NAME##Array with a capacity of count. -//% **/ -//%- (instancetype)initWithCapacity:(NSUInteger)count; -//% -//%ARRAY_IMMUTABLE_INTERFACE(NAME, TYPE, Basic) -//% -//%ARRAY_MUTABLE_INTERFACE(NAME, TYPE, Basic) -//% -//%@end -//% - -// -// Macros specific to Enums (to tweak their interface). -// - -//%PDDM-DEFINE ARRAY_INTERFACE_ENUM(NAME, TYPE) -//%#pragma mark - NAME -//% -//%/** -//% * This class is used for repeated fields of ##TYPE## values. This performs -//% * better than boxing into NSNumbers in NSArrays. -//% * -//% * @note This class is not meant to be subclassed. -//% **/ -//%@interface GPB##NAME##Array : NSObject <NSCopying> -//% -//%/** The number of elements contained in the array. */ -//%@property(nonatomic, readonly) NSUInteger count; -//%/** The validation function to check if the enums are valid. */ -//%@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc; -//% -//%/** -//% * @return A newly instanced and empty GPB##NAME##Array. -//% **/ -//%+ (instancetype)array; -//% -//%/** -//% * Creates and initializes a GPB##NAME##Array with the enum validation function -//% * given. -//% * -//% * @param func The enum validation function for the array. -//% * -//% * @return A newly instanced GPB##NAME##Array. -//% **/ -//%+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func; -//% -//%/** -//% * Creates and initializes a GPB##NAME##Array with the enum validation function -//% * given and the single raw value given. -//% * -//% * @param func The enum validation function for the array. -//% * @param value The raw value to add to this array. -//% * -//% * @return A newly instanced GPB##NAME##Array. -//% **/ -//%+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func -//% rawValue:(TYPE)value; -//% -//%/** -//% * Creates and initializes a GPB##NAME##Array that adds the elements from the -//% * given array. -//% * -//% * @param array Array containing the values to add to the new array. -//% * -//% * @return A newly instanced GPB##NAME##Array. -//% **/ -//%+ (instancetype)arrayWithValueArray:(GPB##NAME##Array *)array; -//% -//%/** -//% * Creates and initializes a GPB##NAME##Array with the given enum validation -//% * function and with the givencapacity. -//% * -//% * @param func The enum validation function for the array. -//% * @param count The capacity needed for the array. -//% * -//% * @return A newly instanced GPB##NAME##Array with a capacity of count. -//% **/ -//%+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func -//% capacity:(NSUInteger)count; -//% -//%/** -//% * Initializes the array with the given enum validation function. -//% * -//% * @param func The enum validation function for the array. -//% * -//% * @return A newly initialized GPB##NAME##Array with a copy of the values. -//% **/ -//%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func -//% NS_DESIGNATED_INITIALIZER; -//% -//%/** -//% * Initializes the array, copying the given values. -//% * -//% * @param func The enum validation function for the array. -//% * @param values An array with the values to put inside this array. -//% * @param count The number of elements to copy into the array. -//% * -//% * @return A newly initialized GPB##NAME##Array with a copy of the values. -//% **/ -//%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func -//% rawValues:(const TYPE [__nullable])values -//% count:(NSUInteger)count; -//% -//%/** -//% * Initializes the array, copying the given values. -//% * -//% * @param array An array with the values to put inside this array. -//% * -//% * @return A newly initialized GPB##NAME##Array with a copy of the values. -//% **/ -//%- (instancetype)initWithValueArray:(GPB##NAME##Array *)array; -//% -//%/** -//% * Initializes the array with the given capacity. -//% * -//% * @param func The enum validation function for the array. -//% * @param count The capacity needed for the array. -//% * -//% * @return A newly initialized GPB##NAME##Array with a capacity of count. -//% **/ -//%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func -//% capacity:(NSUInteger)count; -//% -//%// These will return kGPBUnrecognizedEnumeratorValue if the value at index is not a -//%// valid enumerator as defined by validationFunc. If the actual value is -//%// desired, use "raw" version of the method. -//% -//%ARRAY_IMMUTABLE_INTERFACE(NAME, TYPE, NAME) -//% -//%// These methods bypass the validationFunc to provide access to values that were not -//%// known at the time the binary was compiled. -//% -//%/** -//% * Gets the raw enum value at the given index. -//% * -//% * @param index The index of the raw enum value to get. -//% * -//% * @return The raw enum value at the given index. -//% **/ -//%- (TYPE)rawValueAtIndex:(NSUInteger)index; -//% -//%/** -//% * Enumerates the values on this array with the given block. -//% * -//% * @param block The block to enumerate with. -//% * **value**: The current value being enumerated. -//% * **idx**: The index of the current value. -//% * **stop**: A pointer to a boolean that when set stops the enumeration. -//% **/ -//%- (void)enumerateRawValuesWithBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block; -//% -//%/** -//% * Enumerates the values on this array with the given block. -//% * -//% * @param opts Options to control the enumeration. -//% * @param block The block to enumerate with. -//% * **value**: The current value being enumerated. -//% * **idx**: The index of the current value. -//% * **stop**: A pointer to a boolean that when set stops the enumeration. -//% **/ -//%- (void)enumerateRawValuesWithOptions:(NSEnumerationOptions)opts -//% usingBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block; -//% -//%// If value is not a valid enumerator as defined by validationFunc, these -//%// methods will assert in debug, and will log in release and assign the value -//%// to the default value. Use the rawValue methods below to assign non enumerator -//%// values. -//% -//%ARRAY_MUTABLE_INTERFACE(NAME, TYPE, NAME) -//% -//%@end -//% - -//%PDDM-DEFINE ARRAY_IMMUTABLE_INTERFACE(NAME, TYPE, HELPER_NAME) -//%/** -//% * Gets the value at the given index. -//% * -//% * @param index The index of the value to get. -//% * -//% * @return The value at the given index. -//% **/ -//%- (TYPE)valueAtIndex:(NSUInteger)index; -//% -//%/** -//% * Enumerates the values on this array with the given block. -//% * -//% * @param block The block to enumerate with. -//% * **value**: The current value being enumerated. -//% * **idx**: The index of the current value. -//% * **stop**: A pointer to a boolean that when set stops the enumeration. -//% **/ -//%- (void)enumerateValuesWithBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block; -//% -//%/** -//% * Enumerates the values on this array with the given block. -//% * -//% * @param opts Options to control the enumeration. -//% * @param block The block to enumerate with. -//% * **value**: The current value being enumerated. -//% * **idx**: The index of the current value. -//% * **stop**: A pointer to a boolean that when set stops the enumeration. -//% **/ -//%- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts -//% usingBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block; - -//%PDDM-DEFINE ARRAY_MUTABLE_INTERFACE(NAME, TYPE, HELPER_NAME) -//%/** -//% * Adds a value to this array. -//% * -//% * @param value The value to add to this array. -//% **/ -//%- (void)addValue:(TYPE)value; -//% -//%/** -//% * Adds values to this array. -//% * -//% * @param values The values to add to this array. -//% * @param count The number of elements to add. -//% **/ -//%- (void)addValues:(const TYPE [__nullable])values count:(NSUInteger)count; -//% -//%ARRAY_EXTRA_MUTABLE_METHODS1_##HELPER_NAME(NAME, TYPE) -//%/** -//% * Inserts a value into the given position. -//% * -//% * @param value The value to add to this array. -//% * @param index The index into which to insert the value. -//% **/ -//%- (void)insertValue:(TYPE)value atIndex:(NSUInteger)index; -//% -//%/** -//% * Replaces the value at the given index with the given value. -//% * -//% * @param index The index for which to replace the value. -//% * @param value The value to replace with. -//% **/ -//%- (void)replaceValueAtIndex:(NSUInteger)index withValue:(TYPE)value; -//%ARRAY_EXTRA_MUTABLE_METHODS2_##HELPER_NAME(NAME, TYPE) -//%/** -//% * Removes the value at the given index. -//% * -//% * @param index The index of the value to remove. -//% **/ -//%- (void)removeValueAtIndex:(NSUInteger)index; -//% -//%/** -//% * Removes all the values from this array. -//% **/ -//%- (void)removeAll; -//% -//%/** -//% * Exchanges the values between the given indexes. -//% * -//% * @param idx1 The index of the first element to exchange. -//% * @param idx2 The index of the second element to exchange. -//% **/ -//%- (void)exchangeValueAtIndex:(NSUInteger)idx1 -//% withValueAtIndex:(NSUInteger)idx2; - -// -// These are hooks invoked by the above to do insert as needed. -// - -//%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS1_Basic(NAME, TYPE) -//%/** -//% * Adds the values from the given array to this array. -//% * -//% * @param array The array containing the elements to add to this array. -//% **/ -//%- (void)addValuesFromArray:(GPB##NAME##Array *)array; -//% -//%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS2_Basic(NAME, TYPE) -// Empty -//%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS1_Enum(NAME, TYPE) -// Empty -//%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS2_Enum(NAME, TYPE) -//% -//%// These methods bypass the validationFunc to provide setting of values that were not -//%// known at the time the binary was compiled. -//% -//%/** -//% * Adds a raw enum value to this array. -//% * -//% * @note This method bypass the validationFunc to enable the setting of values that -//% * were not known at the time the binary was compiled. -//% * -//% * @param value The raw enum value to add to the array. -//% **/ -//%- (void)addRawValue:(TYPE)value; -//% -//%/** -//% * Adds raw enum values to this array. -//% * -//% * @note This method bypass the validationFunc to enable the setting of values that -//% * were not known at the time the binary was compiled. -//% * -//% * @param array Array containing the raw enum values to add to this array. -//% **/ -//%- (void)addRawValuesFromArray:(GPB##NAME##Array *)array; -//% -//%/** -//% * Adds raw enum values to this array. -//% * -//% * @note This method bypass the validationFunc to enable the setting of values that -//% * were not known at the time the binary was compiled. -//% * -//% * @param values Array containing the raw enum values to add to this array. -//% * @param count The number of raw values to add. -//% **/ -//%- (void)addRawValues:(const TYPE [__nullable])values count:(NSUInteger)count; -//% -//%/** -//% * Inserts a raw enum value at the given index. -//% * -//% * @note This method bypass the validationFunc to enable the setting of values that -//% * were not known at the time the binary was compiled. -//% * -//% * @param value Raw enum value to add. -//% * @param index The index into which to insert the value. -//% **/ -//%- (void)insertRawValue:(TYPE)value atIndex:(NSUInteger)index; -//% -//%/** -//% * Replaces the raw enum value at the given index with the given value. -//% * -//% * @note This method bypass the validationFunc to enable the setting of values that -//% * were not known at the time the binary was compiled. -//% * -//% * @param index The index for which to replace the value. -//% * @param value The raw enum value to replace with. -//% **/ -//%- (void)replaceValueAtIndex:(NSUInteger)index withRawValue:(TYPE)value; -//% -//%// No validation applies to these methods. -//% diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBArray.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBArray.m deleted file mode 100644 index f401631d..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBArray.m +++ /dev/null @@ -1,2551 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2015 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBArray_PackagePrivate.h" - -#import "GPBMessage_PackagePrivate.h" - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -// Mutable arrays use an internal buffer that can always hold a multiple of this elements. -#define kChunkSize 16 -#define CapacityFromCount(x) (((x / kChunkSize) + 1) * kChunkSize) - -static BOOL ArrayDefault_IsValidValue(int32_t value) { - // Anything but the bad value marker is allowed. - return (value != kGPBUnrecognizedEnumeratorValue); -} - -//%PDDM-DEFINE VALIDATE_RANGE(INDEX, COUNT) -//% if (INDEX >= COUNT) { -//% [NSException raise:NSRangeException -//% format:@"Index (%lu) beyond bounds (%lu)", -//% (unsigned long)INDEX, (unsigned long)COUNT]; -//% } -//%PDDM-DEFINE MAYBE_GROW_TO_SET_COUNT(NEW_COUNT) -//% if (NEW_COUNT > _capacity) { -//% [self internalResizeToCapacity:CapacityFromCount(NEW_COUNT)]; -//% } -//% _count = NEW_COUNT; -//%PDDM-DEFINE SET_COUNT_AND_MAYBE_SHRINK(NEW_COUNT) -//% _count = NEW_COUNT; -//% if ((NEW_COUNT + (2 * kChunkSize)) < _capacity) { -//% [self internalResizeToCapacity:CapacityFromCount(NEW_COUNT)]; -//% } - -// -// Macros for the common basic cases. -// - -//%PDDM-DEFINE ARRAY_INTERFACE_SIMPLE(NAME, TYPE, FORMAT) -//%#pragma mark - NAME -//% -//%@implementation GPB##NAME##Array { -//% @package -//% TYPE *_values; -//% NSUInteger _count; -//% NSUInteger _capacity; -//%} -//% -//%@synthesize count = _count; -//% -//%+ (instancetype)array { -//% return [[[self alloc] init] autorelease]; -//%} -//% -//%+ (instancetype)arrayWithValue:(TYPE)value { -//% // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get -//% // the type correct. -//% return [[(GPB##NAME##Array*)[self alloc] initWithValues:&value count:1] autorelease]; -//%} -//% -//%+ (instancetype)arrayWithValueArray:(GPB##NAME##Array *)array { -//% return [[(GPB##NAME##Array*)[self alloc] initWithValueArray:array] autorelease]; -//%} -//% -//%+ (instancetype)arrayWithCapacity:(NSUInteger)count { -//% return [[[self alloc] initWithCapacity:count] autorelease]; -//%} -//% -//%- (instancetype)init { -//% self = [super init]; -//% // No work needed; -//% return self; -//%} -//% -//%- (instancetype)initWithValueArray:(GPB##NAME##Array *)array { -//% return [self initWithValues:array->_values count:array->_count]; -//%} -//% -//%- (instancetype)initWithValues:(const TYPE [])values count:(NSUInteger)count { -//% self = [self init]; -//% if (self) { -//% if (count && values) { -//% _values = reallocf(_values, count * sizeof(TYPE)); -//% if (_values != NULL) { -//% _capacity = count; -//% memcpy(_values, values, count * sizeof(TYPE)); -//% _count = count; -//% } else { -//% [self release]; -//% [NSException raise:NSMallocException -//% format:@"Failed to allocate %lu bytes", -//% (unsigned long)(count * sizeof(TYPE))]; -//% } -//% } -//% } -//% return self; -//%} -//% -//%- (instancetype)initWithCapacity:(NSUInteger)count { -//% self = [self initWithValues:NULL count:0]; -//% if (self && count) { -//% [self internalResizeToCapacity:count]; -//% } -//% return self; -//%} -//% -//%- (instancetype)copyWithZone:(NSZone *)zone { -//% return [[GPB##NAME##Array allocWithZone:zone] initWithValues:_values count:_count]; -//%} -//% -//%ARRAY_IMMUTABLE_CORE(NAME, TYPE, , FORMAT) -//% -//%- (TYPE)valueAtIndex:(NSUInteger)index { -//%VALIDATE_RANGE(index, _count) -//% return _values[index]; -//%} -//% -//%ARRAY_MUTABLE_CORE(NAME, TYPE, , FORMAT) -//%@end -//% - -// -// Some core macros used for both the simple types and Enums. -// - -//%PDDM-DEFINE ARRAY_IMMUTABLE_CORE(NAME, TYPE, ACCESSOR_NAME, FORMAT) -//%- (void)dealloc { -//% NSAssert(!_autocreator, -//% @"%@: Autocreator must be cleared before release, autocreator: %@", -//% [self class], _autocreator); -//% free(_values); -//% [super dealloc]; -//%} -//% -//%- (BOOL)isEqual:(id)other { -//% if (self == other) { -//% return YES; -//% } -//% if (![other isKindOfClass:[GPB##NAME##Array class]]) { -//% return NO; -//% } -//% GPB##NAME##Array *otherArray = other; -//% return (_count == otherArray->_count -//% && memcmp(_values, otherArray->_values, (_count * sizeof(TYPE))) == 0); -//%} -//% -//%- (NSUInteger)hash { -//% // Follow NSArray's lead, and use the count as the hash. -//% return _count; -//%} -//% -//%- (NSString *)description { -//% NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; -//% for (NSUInteger i = 0, count = _count; i < count; ++i) { -//% if (i == 0) { -//% [result appendFormat:@"##FORMAT##", _values[i]]; -//% } else { -//% [result appendFormat:@", ##FORMAT##", _values[i]]; -//% } -//% } -//% [result appendFormat:@" }"]; -//% return result; -//%} -//% -//%- (void)enumerate##ACCESSOR_NAME##ValuesWithBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block { -//% [self enumerate##ACCESSOR_NAME##ValuesWithOptions:(NSEnumerationOptions)0 usingBlock:block]; -//%} -//% -//%- (void)enumerate##ACCESSOR_NAME##ValuesWithOptions:(NSEnumerationOptions)opts -//% ACCESSOR_NAME$S usingBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block { -//% // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). -//% BOOL stop = NO; -//% if ((opts & NSEnumerationReverse) == 0) { -//% for (NSUInteger i = 0, count = _count; i < count; ++i) { -//% block(_values[i], i, &stop); -//% if (stop) break; -//% } -//% } else if (_count > 0) { -//% for (NSUInteger i = _count; i > 0; --i) { -//% block(_values[i - 1], (i - 1), &stop); -//% if (stop) break; -//% } -//% } -//%} - -//%PDDM-DEFINE MUTATION_HOOK_None() -//%PDDM-DEFINE MUTATION_METHODS(NAME, TYPE, ACCESSOR_NAME, HOOK_1, HOOK_2) -//%- (void)add##ACCESSOR_NAME##Value:(TYPE)value { -//% [self add##ACCESSOR_NAME##Values:&value count:1]; -//%} -//% -//%- (void)add##ACCESSOR_NAME##Values:(const TYPE [])values count:(NSUInteger)count { -//% if (values == NULL || count == 0) return; -//%MUTATION_HOOK_##HOOK_1() NSUInteger initialCount = _count; -//% NSUInteger newCount = initialCount + count; -//%MAYBE_GROW_TO_SET_COUNT(newCount) -//% memcpy(&_values[initialCount], values, count * sizeof(TYPE)); -//% if (_autocreator) { -//% GPBAutocreatedArrayModified(_autocreator, self); -//% } -//%} -//% -//%- (void)insert##ACCESSOR_NAME##Value:(TYPE)value atIndex:(NSUInteger)index { -//%VALIDATE_RANGE(index, _count + 1) -//%MUTATION_HOOK_##HOOK_2() NSUInteger initialCount = _count; -//% NSUInteger newCount = initialCount + 1; -//%MAYBE_GROW_TO_SET_COUNT(newCount) -//% if (index != initialCount) { -//% memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(TYPE)); -//% } -//% _values[index] = value; -//% if (_autocreator) { -//% GPBAutocreatedArrayModified(_autocreator, self); -//% } -//%} -//% -//%- (void)replaceValueAtIndex:(NSUInteger)index with##ACCESSOR_NAME##Value:(TYPE)value { -//%VALIDATE_RANGE(index, _count) -//%MUTATION_HOOK_##HOOK_2() _values[index] = value; -//%} - -//%PDDM-DEFINE ARRAY_MUTABLE_CORE(NAME, TYPE, ACCESSOR_NAME, FORMAT) -//%- (void)internalResizeToCapacity:(NSUInteger)newCapacity { -//% _values = reallocf(_values, newCapacity * sizeof(TYPE)); -//% if (_values == NULL) { -//% _capacity = 0; -//% _count = 0; -//% [NSException raise:NSMallocException -//% format:@"Failed to allocate %lu bytes", -//% (unsigned long)(newCapacity * sizeof(TYPE))]; -//% } -//% _capacity = newCapacity; -//%} -//% -//%MUTATION_METHODS(NAME, TYPE, ACCESSOR_NAME, None, None) -//% -//%- (void)add##ACCESSOR_NAME##ValuesFromArray:(GPB##NAME##Array *)array { -//% [self add##ACCESSOR_NAME##Values:array->_values count:array->_count]; -//%} -//% -//%- (void)removeValueAtIndex:(NSUInteger)index { -//%VALIDATE_RANGE(index, _count) -//% NSUInteger newCount = _count - 1; -//% if (index != newCount) { -//% memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(TYPE)); -//% } -//%SET_COUNT_AND_MAYBE_SHRINK(newCount) -//%} -//% -//%- (void)removeAll { -//%SET_COUNT_AND_MAYBE_SHRINK(0) -//%} -//% -//%- (void)exchangeValueAtIndex:(NSUInteger)idx1 -//% withValueAtIndex:(NSUInteger)idx2 { -//%VALIDATE_RANGE(idx1, _count) -//%VALIDATE_RANGE(idx2, _count) -//% TYPE temp = _values[idx1]; -//% _values[idx1] = _values[idx2]; -//% _values[idx2] = temp; -//%} -//% - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(Int32, int32_t, %d) -// This block of code is generated, do not edit it directly. - -#pragma mark - Int32 - -@implementation GPBInt32Array { - @package - int32_t *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(int32_t)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBInt32Array*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBInt32Array *)array { - return [[(GPBInt32Array*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBInt32Array *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const int32_t [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(int32_t)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(int32_t)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(int32_t))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32Array allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32Array class]]) { - return NO; - } - GPBInt32Array *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(int32_t))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%d", _values[i]]; - } else { - [result appendFormat:@", %d", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:(NSEnumerationOptions)0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (int32_t)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(int32_t)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(int32_t))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(int32_t)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const int32_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(int32_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(int32_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(int32_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int32_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBInt32Array *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(int32_t)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - int32_t temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(UInt32, uint32_t, %u) -// This block of code is generated, do not edit it directly. - -#pragma mark - UInt32 - -@implementation GPBUInt32Array { - @package - uint32_t *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(uint32_t)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBUInt32Array*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBUInt32Array *)array { - return [[(GPBUInt32Array*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBUInt32Array *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const uint32_t [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(uint32_t)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(uint32_t)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(uint32_t))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32Array allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32Array class]]) { - return NO; - } - GPBUInt32Array *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(uint32_t))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%u", _values[i]]; - } else { - [result appendFormat:@", %u", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(uint32_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:(NSEnumerationOptions)0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(uint32_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (uint32_t)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(uint32_t)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(uint32_t))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(uint32_t)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const uint32_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(uint32_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(uint32_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(uint32_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(uint32_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBUInt32Array *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(uint32_t)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - uint32_t temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(Int64, int64_t, %lld) -// This block of code is generated, do not edit it directly. - -#pragma mark - Int64 - -@implementation GPBInt64Array { - @package - int64_t *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(int64_t)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBInt64Array*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBInt64Array *)array { - return [[(GPBInt64Array*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBInt64Array *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const int64_t [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(int64_t)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(int64_t)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(int64_t))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64Array allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64Array class]]) { - return NO; - } - GPBInt64Array *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(int64_t))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%lld", _values[i]]; - } else { - [result appendFormat:@", %lld", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(int64_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:(NSEnumerationOptions)0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int64_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (int64_t)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(int64_t)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(int64_t))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(int64_t)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const int64_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(int64_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(int64_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(int64_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int64_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBInt64Array *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(int64_t)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - int64_t temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(UInt64, uint64_t, %llu) -// This block of code is generated, do not edit it directly. - -#pragma mark - UInt64 - -@implementation GPBUInt64Array { - @package - uint64_t *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(uint64_t)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBUInt64Array*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBUInt64Array *)array { - return [[(GPBUInt64Array*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBUInt64Array *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const uint64_t [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(uint64_t)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(uint64_t)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(uint64_t))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64Array allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64Array class]]) { - return NO; - } - GPBUInt64Array *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(uint64_t))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%llu", _values[i]]; - } else { - [result appendFormat:@", %llu", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(uint64_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:(NSEnumerationOptions)0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(uint64_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (uint64_t)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(uint64_t)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(uint64_t))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(uint64_t)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const uint64_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(uint64_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(uint64_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(uint64_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(uint64_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBUInt64Array *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(uint64_t)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - uint64_t temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(Float, float, %f) -// This block of code is generated, do not edit it directly. - -#pragma mark - Float - -@implementation GPBFloatArray { - @package - float *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(float)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBFloatArray*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBFloatArray *)array { - return [[(GPBFloatArray*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBFloatArray *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const float [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(float)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(float)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(float))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBFloatArray allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBFloatArray class]]) { - return NO; - } - GPBFloatArray *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(float))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%f", _values[i]]; - } else { - [result appendFormat:@", %f", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(float value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:(NSEnumerationOptions)0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(float value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (float)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(float)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(float))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(float)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const float [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(float)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(float)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(float)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(float)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBFloatArray *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(float)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - float temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(Double, double, %lf) -// This block of code is generated, do not edit it directly. - -#pragma mark - Double - -@implementation GPBDoubleArray { - @package - double *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(double)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBDoubleArray*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBDoubleArray *)array { - return [[(GPBDoubleArray*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBDoubleArray *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const double [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(double)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(double)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(double))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBDoubleArray allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBDoubleArray class]]) { - return NO; - } - GPBDoubleArray *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(double))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%lf", _values[i]]; - } else { - [result appendFormat:@", %lf", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(double value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:(NSEnumerationOptions)0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(double value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (double)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(double)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(double))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(double)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const double [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(double)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(double)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(double)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(double)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBDoubleArray *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(double)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - double temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(Bool, BOOL, %d) -// This block of code is generated, do not edit it directly. - -#pragma mark - Bool - -@implementation GPBBoolArray { - @package - BOOL *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(BOOL)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBBoolArray*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBBoolArray *)array { - return [[(GPBBoolArray*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBBoolArray *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const BOOL [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(BOOL)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(BOOL)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(BOOL))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolArray allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolArray class]]) { - return NO; - } - GPBBoolArray *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(BOOL))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%d", _values[i]]; - } else { - [result appendFormat:@", %d", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(BOOL value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:(NSEnumerationOptions)0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(BOOL value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (BOOL)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(BOOL)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(BOOL))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(BOOL)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const BOOL [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(BOOL)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(BOOL)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(BOOL)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(BOOL)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBBoolArray *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(BOOL)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - BOOL temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND-END (7 expansions) - -#pragma mark - Enum - -@implementation GPBEnumArray { - @package - GPBEnumValidationFunc _validationFunc; - int32_t *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; -@synthesize validationFunc = _validationFunc; - -+ (instancetype)array { - return [[[self alloc] initWithValidationFunction:NULL] autorelease]; -} - -+ (instancetype)arrayWithValidationFunction:(GPBEnumValidationFunc)func { - return [[[self alloc] initWithValidationFunction:func] autorelease]; -} - -+ (instancetype)arrayWithValidationFunction:(GPBEnumValidationFunc)func - rawValue:(int32_t)value { - return [[[self alloc] initWithValidationFunction:func - rawValues:&value - count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBEnumArray *)array { - return [[(GPBEnumArray*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)count { - return [[[self alloc] initWithValidationFunction:func capacity:count] autorelease]; -} - -- (instancetype)init { - return [self initWithValidationFunction:NULL]; -} - -- (instancetype)initWithValueArray:(GPBEnumArray *)array { - return [self initWithValidationFunction:array->_validationFunc - rawValues:array->_values - count:array->_count]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func { - self = [super init]; - if (self) { - _validationFunc = (func != NULL ? func : ArrayDefault_IsValidValue); - } - return self; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])values - count:(NSUInteger)count { - self = [self initWithValidationFunction:func]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(int32_t)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(int32_t)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(int32_t))]; - } - } - } - return self; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)count { - self = [self initWithValidationFunction:func]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBEnumArray allocWithZone:zone] - initWithValidationFunction:_validationFunc - rawValues:_values - count:_count]; -} - -//%PDDM-EXPAND ARRAY_IMMUTABLE_CORE(Enum, int32_t, Raw, %d) -// This block of code is generated, do not edit it directly. - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBEnumArray class]]) { - return NO; - } - GPBEnumArray *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(int32_t))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%d", _values[i]]; - } else { - [result appendFormat:@", %d", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateRawValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateRawValuesWithOptions:(NSEnumerationOptions)0 usingBlock:block]; -} - -- (void)enumerateRawValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} -//%PDDM-EXPAND-END ARRAY_IMMUTABLE_CORE(Enum, int32_t, Raw, %d) - -- (int32_t)valueAtIndex:(NSUInteger)index { -//%PDDM-EXPAND VALIDATE_RANGE(index, _count) -// This block of code is generated, do not edit it directly. - - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } -//%PDDM-EXPAND-END VALIDATE_RANGE(index, _count) - int32_t result = _values[index]; - if (!_validationFunc(result)) { - result = kGPBUnrecognizedEnumeratorValue; - } - return result; -} - -- (int32_t)rawValueAtIndex:(NSUInteger)index { -//%PDDM-EXPAND VALIDATE_RANGE(index, _count) -// This block of code is generated, do not edit it directly. - - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } -//%PDDM-EXPAND-END VALIDATE_RANGE(index, _count) - return _values[index]; -} - -- (void)enumerateValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:(NSEnumerationOptions)0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - GPBEnumValidationFunc func = _validationFunc; - if ((opts & NSEnumerationReverse) == 0) { - int32_t *scan = _values; - int32_t *end = scan + _count; - for (NSUInteger i = 0; scan < end; ++i, ++scan) { - int32_t value = *scan; - if (!func(value)) { - value = kGPBUnrecognizedEnumeratorValue; - } - block(value, i, &stop); - if (stop) break; - } - } else if (_count > 0) { - int32_t *end = _values; - int32_t *scan = end + (_count - 1); - for (NSUInteger i = (_count - 1); scan >= end; --i, --scan) { - int32_t value = *scan; - if (!func(value)) { - value = kGPBUnrecognizedEnumeratorValue; - } - block(value, i, &stop); - if (stop) break; - } - } -} - -//%PDDM-EXPAND ARRAY_MUTABLE_CORE(Enum, int32_t, Raw, %d) -// This block of code is generated, do not edit it directly. - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(int32_t)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(int32_t))]; - } - _capacity = newCapacity; -} - -- (void)addRawValue:(int32_t)value { - [self addRawValues:&value count:1]; -} - -- (void)addRawValues:(const int32_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(int32_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertRawValue:(int32_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(int32_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withRawValue:(int32_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addRawValuesFromArray:(GPBEnumArray *)array { - [self addRawValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(int32_t)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - int32_t temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -//%PDDM-EXPAND MUTATION_METHODS(Enum, int32_t, , EnumValidationList, EnumValidationOne) -// This block of code is generated, do not edit it directly. - -- (void)addValue:(int32_t)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const int32_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - GPBEnumValidationFunc func = _validationFunc; - for (NSUInteger i = 0; i < count; ++i) { - if (!func(values[i])) { - [NSException raise:NSInvalidArgumentException - format:@"%@: Attempt to set an unknown enum value (%d)", - [self class], values[i]]; - } - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(int32_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(int32_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - if (!_validationFunc(value)) { - [NSException raise:NSInvalidArgumentException - format:@"%@: Attempt to set an unknown enum value (%d)", - [self class], value]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(int32_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int32_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - if (!_validationFunc(value)) { - [NSException raise:NSInvalidArgumentException - format:@"%@: Attempt to set an unknown enum value (%d)", - [self class], value]; - } - _values[index] = value; -} -//%PDDM-EXPAND-END (2 expansions) - -//%PDDM-DEFINE MUTATION_HOOK_EnumValidationList() -//% GPBEnumValidationFunc func = _validationFunc; -//% for (NSUInteger i = 0; i < count; ++i) { -//% if (!func(values[i])) { -//% [NSException raise:NSInvalidArgumentException -//% format:@"%@: Attempt to set an unknown enum value (%d)", -//% [self class], values[i]]; -//% } -//% } -//% -//%PDDM-DEFINE MUTATION_HOOK_EnumValidationOne() -//% if (!_validationFunc(value)) { -//% [NSException raise:NSInvalidArgumentException -//% format:@"%@: Attempt to set an unknown enum value (%d)", -//% [self class], value]; -//% } -//% - -@end - -#pragma mark - NSArray Subclass - -@implementation GPBAutocreatedArray { - NSMutableArray *_array; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_array release]; - [super dealloc]; -} - -#pragma mark Required NSArray overrides - -- (NSUInteger)count { - return [_array count]; -} - -- (id)objectAtIndex:(NSUInteger)idx { - return [_array objectAtIndex:idx]; -} - -#pragma mark Required NSMutableArray overrides - -// Only need to call GPBAutocreatedArrayModified() when adding things since -// we only autocreate empty arrays. - -- (void)insertObject:(id)anObject atIndex:(NSUInteger)idx { - if (_array == nil) { - _array = [[NSMutableArray alloc] init]; - } - [_array insertObject:anObject atIndex:idx]; - - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)removeObject:(id)anObject { - [_array removeObject:anObject]; -} - -- (void)removeObjectAtIndex:(NSUInteger)idx { - [_array removeObjectAtIndex:idx]; -} - -- (void)addObject:(id)anObject { - if (_array == nil) { - _array = [[NSMutableArray alloc] init]; - } - [_array addObject:anObject]; - - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)removeLastObject { - [_array removeLastObject]; -} - -- (void)replaceObjectAtIndex:(NSUInteger)idx withObject:(id)anObject { - [_array replaceObjectAtIndex:idx withObject:anObject]; -} - -#pragma mark Extra things hooked - -- (id)copyWithZone:(NSZone *)zone { - if (_array == nil) { - return [[NSMutableArray allocWithZone:zone] init]; - } - return [_array copyWithZone:zone]; -} - -- (id)mutableCopyWithZone:(NSZone *)zone { - if (_array == nil) { - return [[NSMutableArray allocWithZone:zone] init]; - } - return [_array mutableCopyWithZone:zone]; -} - -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state - objects:(id __unsafe_unretained [])buffer - count:(NSUInteger)len { - return [_array countByEnumeratingWithState:state objects:buffer count:len]; -} - -- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block { - [_array enumerateObjectsUsingBlock:block]; -} - -- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block { - [_array enumerateObjectsWithOptions:opts usingBlock:block]; -} - -@end - -#pragma clang diagnostic pop diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBArray_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBArray_PackagePrivate.h deleted file mode 100644 index 35a45381..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBArray_PackagePrivate.h +++ /dev/null @@ -1,130 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2015 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBArray.h" - -@class GPBMessage; - -//%PDDM-DEFINE DECLARE_ARRAY_EXTRAS() -//%ARRAY_INTERFACE_EXTRAS(Int32, int32_t) -//%ARRAY_INTERFACE_EXTRAS(UInt32, uint32_t) -//%ARRAY_INTERFACE_EXTRAS(Int64, int64_t) -//%ARRAY_INTERFACE_EXTRAS(UInt64, uint64_t) -//%ARRAY_INTERFACE_EXTRAS(Float, float) -//%ARRAY_INTERFACE_EXTRAS(Double, double) -//%ARRAY_INTERFACE_EXTRAS(Bool, BOOL) -//%ARRAY_INTERFACE_EXTRAS(Enum, int32_t) - -//%PDDM-DEFINE ARRAY_INTERFACE_EXTRAS(NAME, TYPE) -//%#pragma mark - NAME -//% -//%@interface GPB##NAME##Array () { -//% @package -//% GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -//%} -//%@end -//% - -//%PDDM-EXPAND DECLARE_ARRAY_EXTRAS() -// This block of code is generated, do not edit it directly. - -#pragma mark - Int32 - -@interface GPBInt32Array () { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -#pragma mark - UInt32 - -@interface GPBUInt32Array () { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -#pragma mark - Int64 - -@interface GPBInt64Array () { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -#pragma mark - UInt64 - -@interface GPBUInt64Array () { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -#pragma mark - Float - -@interface GPBFloatArray () { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -#pragma mark - Double - -@interface GPBDoubleArray () { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -#pragma mark - Bool - -@interface GPBBoolArray () { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -#pragma mark - Enum - -@interface GPBEnumArray () { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -//%PDDM-EXPAND-END DECLARE_ARRAY_EXTRAS() - -#pragma mark - NSArray Subclass - -@interface GPBAutocreatedArray : NSMutableArray { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBBootstrap.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBBootstrap.h deleted file mode 100644 index ed53ae7c..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBBootstrap.h +++ /dev/null @@ -1,123 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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. - -/** - * The Objective C runtime has complete enough info that most protos don’t end - * up using this, so leaving it on is no cost or very little cost. If you - * happen to see it causing bloat, this is the way to disable it. If you do - * need to disable it, try only disabling it for Release builds as having - * full TextFormat can be useful for debugging. - **/ -#ifndef GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS -#define GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS 0 -#endif - -// Used in the generated code to give sizes to enums. int32_t was chosen based -// on the fact that Protocol Buffers enums are limited to this range. -#if !__has_feature(objc_fixed_enum) - #error All supported Xcode versions should support objc_fixed_enum. -#endif - -// If the headers are imported into Objective-C++, we can run into an issue -// where the defintion of NS_ENUM (really CF_ENUM) changes based on the C++ -// standard that is in effect. If it isn't C++11 or higher, the definition -// doesn't allow us to forward declare. We work around this one case by -// providing a local definition. The default case has to use NS_ENUM for the -// magic that is Swift bridging of enums. -#if (defined(__cplusplus) && __cplusplus && __cplusplus < 201103L) - #define GPB_ENUM(X) enum X : int32_t X; enum X : int32_t -#else - #define GPB_ENUM(X) NS_ENUM(int32_t, X) -#endif - -/** - * GPB_ENUM_FWD_DECLARE is used for forward declaring enums, for example: - * - * ``` - * GPB_ENUM_FWD_DECLARE(Foo_Enum) - * - * @interface BarClass : NSObject - * @property (nonatomic) enum Foo_Enum value; - * - (void)bazMethod:(enum Foo_Enum):value; - * @end - * ``` - **/ -#define GPB_ENUM_FWD_DECLARE(X) enum X : int32_t - -/** - * Based upon CF_INLINE. Forces inlining in non DEBUG builds. - **/ -#if !defined(DEBUG) -#define GPB_INLINE static __inline__ __attribute__((always_inline)) -#else -#define GPB_INLINE static __inline__ -#endif - -/** - * For use in public headers that might need to deal with ARC. - **/ -#ifndef GPB_UNSAFE_UNRETAINED -#if __has_feature(objc_arc) -#define GPB_UNSAFE_UNRETAINED __unsafe_unretained -#else -#define GPB_UNSAFE_UNRETAINED -#endif -#endif - -// If property name starts with init we need to annotate it to get past ARC. -// http://stackoverflow.com/questions/18723226/how-do-i-annotate-an-objective-c-property-with-an-objc-method-family/18723227#18723227 -// -// Meant to be used internally by generated code. -#define GPB_METHOD_FAMILY_NONE __attribute__((objc_method_family(none))) - -// ---------------------------------------------------------------------------- -// These version numbers are all internal to the ObjC Protobuf runtime; they -// are used to ensure compatibility between the generated sources and the -// headers being compiled against and/or the version of sources being run -// against. -// -// They are all #defines so the values are captured into every .o file they -// are used in and to allow comparisons in the preprocessor. - -// Current library runtime version. -// - Gets bumped when the runtime makes changes to the interfaces between the -// generated code and runtime (things added/removed, etc). -#define GOOGLE_PROTOBUF_OBJC_VERSION 30002 - -// Minimum runtime version supported for compiling/running against. -// - Gets changed when support for the older generated code is dropped. -#define GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION 30001 - - -// This is a legacy constant now frozen in time for old generated code. If -// GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION ever gets moved above 30001 then -// this should also change to break code compiled with an old runtime that -// can't be supported any more. -#define GOOGLE_PROTOBUF_OBJC_GEN_VERSION 30001 diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedInputStream.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedInputStream.h deleted file mode 100644 index fbe5009c..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedInputStream.h +++ /dev/null @@ -1,253 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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> - -@class GPBMessage; -@class GPBExtensionRegistry; - -NS_ASSUME_NONNULL_BEGIN - -CF_EXTERN_C_BEGIN - -/** - * @c GPBCodedInputStream exception name. Exceptions raised from - * @c GPBCodedInputStream contain an underlying error in the userInfo dictionary - * under the GPBCodedInputStreamUnderlyingErrorKey key. - **/ -extern NSString *const GPBCodedInputStreamException; - -/** The key under which the underlying NSError from the exception is stored. */ -extern NSString *const GPBCodedInputStreamUnderlyingErrorKey; - -/** NSError domain used for @c GPBCodedInputStream errors. */ -extern NSString *const GPBCodedInputStreamErrorDomain; - -/** - * Error code for NSError with @c GPBCodedInputStreamErrorDomain. - **/ -typedef NS_ENUM(NSInteger, GPBCodedInputStreamErrorCode) { - /** The size does not fit in the remaining bytes to be read. */ - GPBCodedInputStreamErrorInvalidSize = -100, - /** Attempted to read beyond the subsection limit. */ - GPBCodedInputStreamErrorSubsectionLimitReached = -101, - /** The requested subsection limit is invalid. */ - GPBCodedInputStreamErrorInvalidSubsectionLimit = -102, - /** Invalid tag read. */ - GPBCodedInputStreamErrorInvalidTag = -103, - /** Invalid UTF-8 character in a string. */ - GPBCodedInputStreamErrorInvalidUTF8 = -104, - /** Invalid VarInt read. */ - GPBCodedInputStreamErrorInvalidVarInt = -105, - /** The maximum recursion depth of messages was exceeded. */ - GPBCodedInputStreamErrorRecursionDepthExceeded = -106, -}; - -CF_EXTERN_C_END - -/** - * Reads and decodes protocol message fields. - * - * The common uses of protocol buffers shouldn't need to use this class. - * @c GPBMessage's provide a @c +parseFromData:error: and - * @c +parseFromData:extensionRegistry:error: method that will decode a - * message for you. - * - * @note Subclassing of @c GPBCodedInputStream is NOT supported. - **/ -@interface GPBCodedInputStream : NSObject - -/** - * Creates a new stream wrapping some data. - * - * @param data The data to wrap inside the stream. - * - * @return A newly instanced GPBCodedInputStream. - **/ -+ (instancetype)streamWithData:(NSData *)data; - -/** - * Initializes a stream wrapping some data. - * - * @param data The data to wrap inside the stream. - * - * @return A newly initialized GPBCodedInputStream. - **/ -- (instancetype)initWithData:(NSData *)data; - -/** - * Attempts to read a field tag, returning zero if we have reached EOF. - * Protocol message parsers use this to read tags, since a protocol message - * may legally end wherever a tag occurs, and zero is not a valid tag number. - * - * @return The field tag, or zero if EOF was reached. - **/ -- (int32_t)readTag; - -/** - * @return A double read from the stream. - **/ -- (double)readDouble; -/** - * @return A float read from the stream. - **/ -- (float)readFloat; -/** - * @return A uint64 read from the stream. - **/ -- (uint64_t)readUInt64; -/** - * @return A uint32 read from the stream. - **/ -- (uint32_t)readUInt32; -/** - * @return An int64 read from the stream. - **/ -- (int64_t)readInt64; -/** - * @return An int32 read from the stream. - **/ -- (int32_t)readInt32; -/** - * @return A fixed64 read from the stream. - **/ -- (uint64_t)readFixed64; -/** - * @return A fixed32 read from the stream. - **/ -- (uint32_t)readFixed32; -/** - * @return An enum read from the stream. - **/ -- (int32_t)readEnum; -/** - * @return A sfixed32 read from the stream. - **/ -- (int32_t)readSFixed32; -/** - * @return A fixed64 read from the stream. - **/ -- (int64_t)readSFixed64; -/** - * @return A sint32 read from the stream. - **/ -- (int32_t)readSInt32; -/** - * @return A sint64 read from the stream. - **/ -- (int64_t)readSInt64; -/** - * @return A boolean read from the stream. - **/ -- (BOOL)readBool; -/** - * @return A string read from the stream. - **/ -- (NSString *)readString; -/** - * @return Data read from the stream. - **/ -- (NSData *)readBytes; - -/** - * Read an embedded message field value from the stream. - * - * @param message The message to set fields on as they are read. - * @param extensionRegistry An optional extension registry to use to lookup - * extensions for message. - **/ -- (void)readMessage:(GPBMessage *)message - extensionRegistry:(nullable GPBExtensionRegistry *)extensionRegistry; - -/** - * Reads and discards a single field, given its tag value. - * - * @param tag The tag number of the field to skip. - * - * @return NO if the tag is an endgroup tag (in which case nothing is skipped), - * YES in all other cases. - **/ -- (BOOL)skipField:(int32_t)tag; - -/** - * Reads and discards an entire message. This will read either until EOF or - * until an endgroup tag, whichever comes first. - **/ -- (void)skipMessage; - -/** - * Check to see if the logical end of the stream has been reached. - * - * @note This can return NO when there is no more data, but the current parsing - * expected more data. - * - * @return YES if the logical end of the stream has been reached, NO otherwise. - **/ -- (BOOL)isAtEnd; - -/** - * @return The offset into the stream. - **/ -- (size_t)position; - -/** - * Moves the limit to the given byte offset starting at the current location. - * - * @exception GPBCodedInputStreamException If the requested bytes exceeed the - * current limit. - * - * @param byteLimit The number of bytes to move the limit, offset to the current - * location. - * - * @return The limit offset before moving the new limit. - */ -- (size_t)pushLimit:(size_t)byteLimit; - -/** - * Moves the limit back to the offset as it was before calling pushLimit:. - * - * @param oldLimit The number of bytes to move the current limit. Usually this - * is the value returned by the pushLimit: method. - */ -- (void)popLimit:(size_t)oldLimit; - -/** - * Verifies that the last call to -readTag returned the given tag value. This - * is used to verify that a nested group ended with the correct end tag. - * - * @exception NSParseErrorException If the value does not match the last tag. - * - * @param expected The tag that was expected. - **/ -- (void)checkLastTagWas:(int32_t)expected; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedInputStream.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedInputStream.m deleted file mode 100644 index eef05353..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedInputStream.m +++ /dev/null @@ -1,538 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBCodedInputStream_PackagePrivate.h" - -#import "GPBDictionary_PackagePrivate.h" -#import "GPBMessage_PackagePrivate.h" -#import "GPBUnknownFieldSet_PackagePrivate.h" -#import "GPBUtilities_PackagePrivate.h" -#import "GPBWireFormat.h" - -NSString *const GPBCodedInputStreamException = - GPBNSStringifySymbol(GPBCodedInputStreamException); - -NSString *const GPBCodedInputStreamUnderlyingErrorKey = - GPBNSStringifySymbol(GPBCodedInputStreamUnderlyingErrorKey); - -NSString *const GPBCodedInputStreamErrorDomain = - GPBNSStringifySymbol(GPBCodedInputStreamErrorDomain); - -// Matching: -// https://github.com/google/protobuf/blob/master/java/core/src/main/java/com/google/protobuf/CodedInputStream.java#L62 -// private static final int DEFAULT_RECURSION_LIMIT = 100; -// https://github.com/google/protobuf/blob/master/src/google/protobuf/io/coded_stream.cc#L86 -// int CodedInputStream::default_recursion_limit_ = 100; -static const NSUInteger kDefaultRecursionLimit = 100; - -static void RaiseException(NSInteger code, NSString *reason) { - NSDictionary *errorInfo = nil; - if ([reason length]) { - errorInfo = @{ GPBErrorReasonKey: reason }; - } - NSError *error = [NSError errorWithDomain:GPBCodedInputStreamErrorDomain - code:code - userInfo:errorInfo]; - - NSDictionary *exceptionInfo = - @{ GPBCodedInputStreamUnderlyingErrorKey: error }; - [[[NSException alloc] initWithName:GPBCodedInputStreamException - reason:reason - userInfo:exceptionInfo] raise]; -} - -static void CheckSize(GPBCodedInputStreamState *state, size_t size) { - size_t newSize = state->bufferPos + size; - if (newSize > state->bufferSize) { - RaiseException(GPBCodedInputStreamErrorInvalidSize, nil); - } - if (newSize > state->currentLimit) { - // Fast forward to end of currentLimit; - state->bufferPos = state->currentLimit; - RaiseException(GPBCodedInputStreamErrorSubsectionLimitReached, nil); - } -} - -static int8_t ReadRawByte(GPBCodedInputStreamState *state) { - CheckSize(state, sizeof(int8_t)); - return ((int8_t *)state->bytes)[state->bufferPos++]; -} - -static int32_t ReadRawLittleEndian32(GPBCodedInputStreamState *state) { - CheckSize(state, sizeof(int32_t)); - int32_t value = OSReadLittleInt32(state->bytes, state->bufferPos); - state->bufferPos += sizeof(int32_t); - return value; -} - -static int64_t ReadRawLittleEndian64(GPBCodedInputStreamState *state) { - CheckSize(state, sizeof(int64_t)); - int64_t value = OSReadLittleInt64(state->bytes, state->bufferPos); - state->bufferPos += sizeof(int64_t); - return value; -} - -static int32_t ReadRawVarint32(GPBCodedInputStreamState *state) { - int8_t tmp = ReadRawByte(state); - if (tmp >= 0) { - return tmp; - } - int32_t result = tmp & 0x7f; - if ((tmp = ReadRawByte(state)) >= 0) { - result |= tmp << 7; - } else { - result |= (tmp & 0x7f) << 7; - if ((tmp = ReadRawByte(state)) >= 0) { - result |= tmp << 14; - } else { - result |= (tmp & 0x7f) << 14; - if ((tmp = ReadRawByte(state)) >= 0) { - result |= tmp << 21; - } else { - result |= (tmp & 0x7f) << 21; - result |= (tmp = ReadRawByte(state)) << 28; - if (tmp < 0) { - // Discard upper 32 bits. - for (int i = 0; i < 5; i++) { - if (ReadRawByte(state) >= 0) { - return result; - } - } - RaiseException(GPBCodedInputStreamErrorInvalidVarInt, - @"Invalid VarInt32"); - } - } - } - } - return result; -} - -static int64_t ReadRawVarint64(GPBCodedInputStreamState *state) { - int32_t shift = 0; - int64_t result = 0; - while (shift < 64) { - int8_t b = ReadRawByte(state); - result |= (int64_t)(b & 0x7F) << shift; - if ((b & 0x80) == 0) { - return result; - } - shift += 7; - } - RaiseException(GPBCodedInputStreamErrorInvalidVarInt, @"Invalid VarInt64"); - return 0; -} - -static void SkipRawData(GPBCodedInputStreamState *state, size_t size) { - CheckSize(state, size); - state->bufferPos += size; -} - -double GPBCodedInputStreamReadDouble(GPBCodedInputStreamState *state) { - int64_t value = ReadRawLittleEndian64(state); - return GPBConvertInt64ToDouble(value); -} - -float GPBCodedInputStreamReadFloat(GPBCodedInputStreamState *state) { - int32_t value = ReadRawLittleEndian32(state); - return GPBConvertInt32ToFloat(value); -} - -uint64_t GPBCodedInputStreamReadUInt64(GPBCodedInputStreamState *state) { - uint64_t value = ReadRawVarint64(state); - return value; -} - -uint32_t GPBCodedInputStreamReadUInt32(GPBCodedInputStreamState *state) { - uint32_t value = ReadRawVarint32(state); - return value; -} - -int64_t GPBCodedInputStreamReadInt64(GPBCodedInputStreamState *state) { - int64_t value = ReadRawVarint64(state); - return value; -} - -int32_t GPBCodedInputStreamReadInt32(GPBCodedInputStreamState *state) { - int32_t value = ReadRawVarint32(state); - return value; -} - -uint64_t GPBCodedInputStreamReadFixed64(GPBCodedInputStreamState *state) { - uint64_t value = ReadRawLittleEndian64(state); - return value; -} - -uint32_t GPBCodedInputStreamReadFixed32(GPBCodedInputStreamState *state) { - uint32_t value = ReadRawLittleEndian32(state); - return value; -} - -int32_t GPBCodedInputStreamReadEnum(GPBCodedInputStreamState *state) { - int32_t value = ReadRawVarint32(state); - return value; -} - -int32_t GPBCodedInputStreamReadSFixed32(GPBCodedInputStreamState *state) { - int32_t value = ReadRawLittleEndian32(state); - return value; -} - -int64_t GPBCodedInputStreamReadSFixed64(GPBCodedInputStreamState *state) { - int64_t value = ReadRawLittleEndian64(state); - return value; -} - -int32_t GPBCodedInputStreamReadSInt32(GPBCodedInputStreamState *state) { - int32_t value = GPBDecodeZigZag32(ReadRawVarint32(state)); - return value; -} - -int64_t GPBCodedInputStreamReadSInt64(GPBCodedInputStreamState *state) { - int64_t value = GPBDecodeZigZag64(ReadRawVarint64(state)); - return value; -} - -BOOL GPBCodedInputStreamReadBool(GPBCodedInputStreamState *state) { - return ReadRawVarint32(state) != 0; -} - -int32_t GPBCodedInputStreamReadTag(GPBCodedInputStreamState *state) { - if (GPBCodedInputStreamIsAtEnd(state)) { - state->lastTag = 0; - return 0; - } - - state->lastTag = ReadRawVarint32(state); - if (state->lastTag == 0) { - // If we actually read zero, that's not a valid tag. - RaiseException(GPBCodedInputStreamErrorInvalidTag, - @"A zero tag on the wire is invalid."); - } - // Tags have to include a valid wireformat, check that also. - if (!GPBWireFormatIsValidTag(state->lastTag)) { - RaiseException(GPBCodedInputStreamErrorInvalidTag, - @"Invalid wireformat in tag."); - } - return state->lastTag; -} - -NSString *GPBCodedInputStreamReadRetainedString( - GPBCodedInputStreamState *state) { - int32_t size = ReadRawVarint32(state); - NSString *result; - if (size == 0) { - result = @""; - } else { - CheckSize(state, size); - result = [[NSString alloc] initWithBytes:&state->bytes[state->bufferPos] - length:size - encoding:NSUTF8StringEncoding]; - state->bufferPos += size; - if (!result) { -#ifdef DEBUG - // https://developers.google.com/protocol-buffers/docs/proto#scalar - NSLog(@"UTF-8 failure, is some field type 'string' when it should be " - @"'bytes'?"); -#endif - RaiseException(GPBCodedInputStreamErrorInvalidUTF8, nil); - } - } - return result; -} - -NSData *GPBCodedInputStreamReadRetainedBytes(GPBCodedInputStreamState *state) { - int32_t size = ReadRawVarint32(state); - if (size < 0) return nil; - CheckSize(state, size); - NSData *result = [[NSData alloc] initWithBytes:state->bytes + state->bufferPos - length:size]; - state->bufferPos += size; - return result; -} - -NSData *GPBCodedInputStreamReadRetainedBytesNoCopy( - GPBCodedInputStreamState *state) { - int32_t size = ReadRawVarint32(state); - if (size < 0) return nil; - CheckSize(state, size); - // Cast is safe because freeWhenDone is NO. - NSData *result = [[NSData alloc] - initWithBytesNoCopy:(void *)(state->bytes + state->bufferPos) - length:size - freeWhenDone:NO]; - state->bufferPos += size; - return result; -} - -size_t GPBCodedInputStreamPushLimit(GPBCodedInputStreamState *state, - size_t byteLimit) { - byteLimit += state->bufferPos; - size_t oldLimit = state->currentLimit; - if (byteLimit > oldLimit) { - RaiseException(GPBCodedInputStreamErrorInvalidSubsectionLimit, nil); - } - state->currentLimit = byteLimit; - return oldLimit; -} - -void GPBCodedInputStreamPopLimit(GPBCodedInputStreamState *state, - size_t oldLimit) { - state->currentLimit = oldLimit; -} - -size_t GPBCodedInputStreamBytesUntilLimit(GPBCodedInputStreamState *state) { - return state->currentLimit - state->bufferPos; -} - -BOOL GPBCodedInputStreamIsAtEnd(GPBCodedInputStreamState *state) { - return (state->bufferPos == state->bufferSize) || - (state->bufferPos == state->currentLimit); -} - -void GPBCodedInputStreamCheckLastTagWas(GPBCodedInputStreamState *state, - int32_t value) { - if (state->lastTag != value) { - RaiseException(GPBCodedInputStreamErrorInvalidTag, @"Unexpected tag read"); - } -} - -@implementation GPBCodedInputStream - -+ (instancetype)streamWithData:(NSData *)data { - return [[[self alloc] initWithData:data] autorelease]; -} - -- (instancetype)initWithData:(NSData *)data { - if ((self = [super init])) { -#ifdef DEBUG - NSCAssert([self class] == [GPBCodedInputStream class], - @"Subclassing of GPBCodedInputStream is not allowed."); -#endif - buffer_ = [data retain]; - state_.bytes = (const uint8_t *)[data bytes]; - state_.bufferSize = [data length]; - state_.currentLimit = state_.bufferSize; - } - return self; -} - -- (void)dealloc { - [buffer_ release]; - [super dealloc]; -} - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -- (int32_t)readTag { - return GPBCodedInputStreamReadTag(&state_); -} - -- (void)checkLastTagWas:(int32_t)value { - GPBCodedInputStreamCheckLastTagWas(&state_, value); -} - -- (BOOL)skipField:(int32_t)tag { - NSAssert(GPBWireFormatIsValidTag(tag), @"Invalid tag"); - switch (GPBWireFormatGetTagWireType(tag)) { - case GPBWireFormatVarint: - GPBCodedInputStreamReadInt32(&state_); - return YES; - case GPBWireFormatFixed64: - SkipRawData(&state_, sizeof(int64_t)); - return YES; - case GPBWireFormatLengthDelimited: - SkipRawData(&state_, ReadRawVarint32(&state_)); - return YES; - case GPBWireFormatStartGroup: - [self skipMessage]; - GPBCodedInputStreamCheckLastTagWas( - &state_, GPBWireFormatMakeTag(GPBWireFormatGetTagFieldNumber(tag), - GPBWireFormatEndGroup)); - return YES; - case GPBWireFormatEndGroup: - return NO; - case GPBWireFormatFixed32: - SkipRawData(&state_, sizeof(int32_t)); - return YES; - } -} - -- (void)skipMessage { - while (YES) { - int32_t tag = GPBCodedInputStreamReadTag(&state_); - if (tag == 0 || ![self skipField:tag]) { - return; - } - } -} - -- (BOOL)isAtEnd { - return GPBCodedInputStreamIsAtEnd(&state_); -} - -- (size_t)position { - return state_.bufferPos; -} - -- (size_t)pushLimit:(size_t)byteLimit { - return GPBCodedInputStreamPushLimit(&state_, byteLimit); -} - -- (void)popLimit:(size_t)oldLimit { - GPBCodedInputStreamPopLimit(&state_, oldLimit); -} - -- (double)readDouble { - return GPBCodedInputStreamReadDouble(&state_); -} - -- (float)readFloat { - return GPBCodedInputStreamReadFloat(&state_); -} - -- (uint64_t)readUInt64 { - return GPBCodedInputStreamReadUInt64(&state_); -} - -- (int64_t)readInt64 { - return GPBCodedInputStreamReadInt64(&state_); -} - -- (int32_t)readInt32 { - return GPBCodedInputStreamReadInt32(&state_); -} - -- (uint64_t)readFixed64 { - return GPBCodedInputStreamReadFixed64(&state_); -} - -- (uint32_t)readFixed32 { - return GPBCodedInputStreamReadFixed32(&state_); -} - -- (BOOL)readBool { - return GPBCodedInputStreamReadBool(&state_); -} - -- (NSString *)readString { - return [GPBCodedInputStreamReadRetainedString(&state_) autorelease]; -} - -- (void)readGroup:(int32_t)fieldNumber - message:(GPBMessage *)message - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry { - if (state_.recursionDepth >= kDefaultRecursionLimit) { - RaiseException(GPBCodedInputStreamErrorRecursionDepthExceeded, nil); - } - ++state_.recursionDepth; - [message mergeFromCodedInputStream:self extensionRegistry:extensionRegistry]; - GPBCodedInputStreamCheckLastTagWas( - &state_, GPBWireFormatMakeTag(fieldNumber, GPBWireFormatEndGroup)); - --state_.recursionDepth; -} - -- (void)readUnknownGroup:(int32_t)fieldNumber - message:(GPBUnknownFieldSet *)message { - if (state_.recursionDepth >= kDefaultRecursionLimit) { - RaiseException(GPBCodedInputStreamErrorRecursionDepthExceeded, nil); - } - ++state_.recursionDepth; - [message mergeFromCodedInputStream:self]; - GPBCodedInputStreamCheckLastTagWas( - &state_, GPBWireFormatMakeTag(fieldNumber, GPBWireFormatEndGroup)); - --state_.recursionDepth; -} - -- (void)readMessage:(GPBMessage *)message - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry { - int32_t length = ReadRawVarint32(&state_); - if (state_.recursionDepth >= kDefaultRecursionLimit) { - RaiseException(GPBCodedInputStreamErrorRecursionDepthExceeded, nil); - } - size_t oldLimit = GPBCodedInputStreamPushLimit(&state_, length); - ++state_.recursionDepth; - [message mergeFromCodedInputStream:self extensionRegistry:extensionRegistry]; - GPBCodedInputStreamCheckLastTagWas(&state_, 0); - --state_.recursionDepth; - GPBCodedInputStreamPopLimit(&state_, oldLimit); -} - -- (void)readMapEntry:(id)mapDictionary - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry - field:(GPBFieldDescriptor *)field - parentMessage:(GPBMessage *)parentMessage { - int32_t length = ReadRawVarint32(&state_); - if (state_.recursionDepth >= kDefaultRecursionLimit) { - RaiseException(GPBCodedInputStreamErrorRecursionDepthExceeded, nil); - } - size_t oldLimit = GPBCodedInputStreamPushLimit(&state_, length); - ++state_.recursionDepth; - GPBDictionaryReadEntry(mapDictionary, self, extensionRegistry, field, - parentMessage); - GPBCodedInputStreamCheckLastTagWas(&state_, 0); - --state_.recursionDepth; - GPBCodedInputStreamPopLimit(&state_, oldLimit); -} - -- (NSData *)readBytes { - return [GPBCodedInputStreamReadRetainedBytes(&state_) autorelease]; -} - -- (uint32_t)readUInt32 { - return GPBCodedInputStreamReadUInt32(&state_); -} - -- (int32_t)readEnum { - return GPBCodedInputStreamReadEnum(&state_); -} - -- (int32_t)readSFixed32 { - return GPBCodedInputStreamReadSFixed32(&state_); -} - -- (int64_t)readSFixed64 { - return GPBCodedInputStreamReadSFixed64(&state_); -} - -- (int32_t)readSInt32 { - return GPBCodedInputStreamReadSInt32(&state_); -} - -- (int64_t)readSInt64 { - return GPBCodedInputStreamReadSInt64(&state_); -} - -#pragma clang diagnostic pop - -@end diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedInputStream_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedInputStream_PackagePrivate.h deleted file mode 100644 index 90bd0c92..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedInputStream_PackagePrivate.h +++ /dev/null @@ -1,114 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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. - -// This header is private to the ProtobolBuffers library and must NOT be -// included by any sources outside this library. The contents of this file are -// subject to change at any time without notice. - -#import "GPBCodedInputStream.h" - -#import <libkern/OSAtomic.h> - -@class GPBUnknownFieldSet; -@class GPBFieldDescriptor; - -typedef struct GPBCodedInputStreamState { - const uint8_t *bytes; - size_t bufferSize; - size_t bufferPos; - - // For parsing subsections of an input stream you can put a hard limit on - // how much should be read. Normally the limit is the end of the stream, - // but you can adjust it to anywhere, and if you hit it you will be at the - // end of the stream, until you adjust the limit. - size_t currentLimit; - int32_t lastTag; - NSUInteger recursionDepth; -} GPBCodedInputStreamState; - -@interface GPBCodedInputStream () { - @package - struct GPBCodedInputStreamState state_; - NSData *buffer_; -} - -// Group support is deprecated, so we hide this interface from users, but -// support for older data. -- (void)readGroup:(int32_t)fieldNumber - message:(GPBMessage *)message - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry; - -// Reads a group field value from the stream and merges it into the given -// UnknownFieldSet. -- (void)readUnknownGroup:(int32_t)fieldNumber - message:(GPBUnknownFieldSet *)message; - -// Reads a map entry. -- (void)readMapEntry:(id)mapDictionary - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry - field:(GPBFieldDescriptor *)field - parentMessage:(GPBMessage *)parentMessage; -@end - -CF_EXTERN_C_BEGIN - -int32_t GPBCodedInputStreamReadTag(GPBCodedInputStreamState *state); - -double GPBCodedInputStreamReadDouble(GPBCodedInputStreamState *state); -float GPBCodedInputStreamReadFloat(GPBCodedInputStreamState *state); -uint64_t GPBCodedInputStreamReadUInt64(GPBCodedInputStreamState *state); -uint32_t GPBCodedInputStreamReadUInt32(GPBCodedInputStreamState *state); -int64_t GPBCodedInputStreamReadInt64(GPBCodedInputStreamState *state); -int32_t GPBCodedInputStreamReadInt32(GPBCodedInputStreamState *state); -uint64_t GPBCodedInputStreamReadFixed64(GPBCodedInputStreamState *state); -uint32_t GPBCodedInputStreamReadFixed32(GPBCodedInputStreamState *state); -int32_t GPBCodedInputStreamReadEnum(GPBCodedInputStreamState *state); -int32_t GPBCodedInputStreamReadSFixed32(GPBCodedInputStreamState *state); -int64_t GPBCodedInputStreamReadSFixed64(GPBCodedInputStreamState *state); -int32_t GPBCodedInputStreamReadSInt32(GPBCodedInputStreamState *state); -int64_t GPBCodedInputStreamReadSInt64(GPBCodedInputStreamState *state); -BOOL GPBCodedInputStreamReadBool(GPBCodedInputStreamState *state); -NSString *GPBCodedInputStreamReadRetainedString(GPBCodedInputStreamState *state) - __attribute((ns_returns_retained)); -NSData *GPBCodedInputStreamReadRetainedBytes(GPBCodedInputStreamState *state) - __attribute((ns_returns_retained)); -NSData *GPBCodedInputStreamReadRetainedBytesNoCopy( - GPBCodedInputStreamState *state) __attribute((ns_returns_retained)); - -size_t GPBCodedInputStreamPushLimit(GPBCodedInputStreamState *state, - size_t byteLimit); -void GPBCodedInputStreamPopLimit(GPBCodedInputStreamState *state, - size_t oldLimit); -size_t GPBCodedInputStreamBytesUntilLimit(GPBCodedInputStreamState *state); -BOOL GPBCodedInputStreamIsAtEnd(GPBCodedInputStreamState *state); -void GPBCodedInputStreamCheckLastTagWas(GPBCodedInputStreamState *state, - int32_t value); - -CF_EXTERN_C_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedOutputStream.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedOutputStream.h deleted file mode 100644 index d6fff3db..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedOutputStream.h +++ /dev/null @@ -1,739 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBRuntimeTypes.h" -#import "GPBWireFormat.h" - -@class GPBBoolArray; -@class GPBDoubleArray; -@class GPBEnumArray; -@class GPBFloatArray; -@class GPBMessage; -@class GPBInt32Array; -@class GPBInt64Array; -@class GPBUInt32Array; -@class GPBUInt64Array; -@class GPBUnknownFieldSet; - -NS_ASSUME_NONNULL_BEGIN - -/** - * Writes out protocol message fields. - * - * The common uses of protocol buffers shouldn't need to use this class. - * GPBMessage's provide a -data method that will serialize the message for you. - * - * @note Subclassing of GPBCodedOutputStream is NOT supported. - **/ -@interface GPBCodedOutputStream : NSObject - -/** - * Creates a stream to fill in the given data. Data must be sized to fit or - * an error will be raised when out of space. - * - * @param data The data where the stream will be written to. - * - * @return A newly instanced GPBCodedOutputStream. - **/ -+ (instancetype)streamWithData:(NSMutableData *)data; - -/** - * Creates a stream to write into the given NSOutputStream. - * - * @param output The output stream where the stream will be written to. - * - * @return A newly instanced GPBCodedOutputStream. - **/ -+ (instancetype)streamWithOutputStream:(NSOutputStream *)output; - -/** - * Initializes a stream to fill in the given data. Data must be sized to fit - * or an error will be raised when out of space. - * - * @param data The data where the stream will be written to. - * - * @return A newly initialized GPBCodedOutputStream. - **/ -- (instancetype)initWithData:(NSMutableData *)data; - -/** - * Initializes a stream to write into the given @c NSOutputStream. - * - * @param output The output stream where the stream will be written to. - * - * @return A newly initialized GPBCodedOutputStream. - **/ -- (instancetype)initWithOutputStream:(NSOutputStream *)output; - -/** - * Flush any buffered data out. - **/ -- (void)flush; - -/** - * Write the raw byte out. - * - * @param value The value to write out. - **/ -- (void)writeRawByte:(uint8_t)value; - -/** - * Write the tag for the given field number and wire format. - * - * @param fieldNumber The field number. - * @param format The wire format the data for the field will be in. - **/ -- (void)writeTag:(uint32_t)fieldNumber format:(GPBWireFormat)format; - -/** - * Write a 32bit value out in little endian format. - * - * @param value The value to write out. - **/ -- (void)writeRawLittleEndian32:(int32_t)value; -/** - * Write a 64bit value out in little endian format. - * - * @param value The value to write out. - **/ -- (void)writeRawLittleEndian64:(int64_t)value; - -/** - * Write a 32bit value out in varint format. - * - * @param value The value to write out. - **/ -- (void)writeRawVarint32:(int32_t)value; -/** - * Write a 64bit value out in varint format. - * - * @param value The value to write out. - **/ -- (void)writeRawVarint64:(int64_t)value; - -/** - * Write a size_t out as a 32bit varint value. - * - * @note This will truncate 64 bit values to 32. - * - * @param value The value to write out. - **/ -- (void)writeRawVarintSizeTAs32:(size_t)value; - -/** - * Writes the contents of an NSData out. - * - * @param data The data to write out. - **/ -- (void)writeRawData:(NSData *)data; -/** - * Writes out the given data. - * - * @param data The data blob to write out. - * @param offset The offset into the blob to start writing out. - * @param length The number of bytes from the blob to write out. - **/ -- (void)writeRawPtr:(const void *)data - offset:(size_t)offset - length:(size_t)length; - -//%PDDM-EXPAND _WRITE_DECLS() -// This block of code is generated, do not edit it directly. - -/** - * Write a double for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeDouble:(int32_t)fieldNumber value:(double)value; -/** - * Write a packed array of double for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeDoubleArray:(int32_t)fieldNumber - values:(GPBDoubleArray *)values - tag:(uint32_t)tag; -/** - * Write a double without any tag. - * - * @param value The value to write out. - **/ -- (void)writeDoubleNoTag:(double)value; - -/** - * Write a float for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeFloat:(int32_t)fieldNumber value:(float)value; -/** - * Write a packed array of float for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeFloatArray:(int32_t)fieldNumber - values:(GPBFloatArray *)values - tag:(uint32_t)tag; -/** - * Write a float without any tag. - * - * @param value The value to write out. - **/ -- (void)writeFloatNoTag:(float)value; - -/** - * Write a uint64_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeUInt64:(int32_t)fieldNumber value:(uint64_t)value; -/** - * Write a packed array of uint64_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeUInt64Array:(int32_t)fieldNumber - values:(GPBUInt64Array *)values - tag:(uint32_t)tag; -/** - * Write a uint64_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeUInt64NoTag:(uint64_t)value; - -/** - * Write a int64_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeInt64:(int32_t)fieldNumber value:(int64_t)value; -/** - * Write a packed array of int64_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeInt64Array:(int32_t)fieldNumber - values:(GPBInt64Array *)values - tag:(uint32_t)tag; -/** - * Write a int64_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeInt64NoTag:(int64_t)value; - -/** - * Write a int32_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeInt32:(int32_t)fieldNumber value:(int32_t)value; -/** - * Write a packed array of int32_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeInt32Array:(int32_t)fieldNumber - values:(GPBInt32Array *)values - tag:(uint32_t)tag; -/** - * Write a int32_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeInt32NoTag:(int32_t)value; - -/** - * Write a uint32_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeUInt32:(int32_t)fieldNumber value:(uint32_t)value; -/** - * Write a packed array of uint32_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeUInt32Array:(int32_t)fieldNumber - values:(GPBUInt32Array *)values - tag:(uint32_t)tag; -/** - * Write a uint32_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeUInt32NoTag:(uint32_t)value; - -/** - * Write a uint64_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeFixed64:(int32_t)fieldNumber value:(uint64_t)value; -/** - * Write a packed array of uint64_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeFixed64Array:(int32_t)fieldNumber - values:(GPBUInt64Array *)values - tag:(uint32_t)tag; -/** - * Write a uint64_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeFixed64NoTag:(uint64_t)value; - -/** - * Write a uint32_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeFixed32:(int32_t)fieldNumber value:(uint32_t)value; -/** - * Write a packed array of uint32_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeFixed32Array:(int32_t)fieldNumber - values:(GPBUInt32Array *)values - tag:(uint32_t)tag; -/** - * Write a uint32_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeFixed32NoTag:(uint32_t)value; - -/** - * Write a int32_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeSInt32:(int32_t)fieldNumber value:(int32_t)value; -/** - * Write a packed array of int32_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeSInt32Array:(int32_t)fieldNumber - values:(GPBInt32Array *)values - tag:(uint32_t)tag; -/** - * Write a int32_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeSInt32NoTag:(int32_t)value; - -/** - * Write a int64_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeSInt64:(int32_t)fieldNumber value:(int64_t)value; -/** - * Write a packed array of int64_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeSInt64Array:(int32_t)fieldNumber - values:(GPBInt64Array *)values - tag:(uint32_t)tag; -/** - * Write a int64_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeSInt64NoTag:(int64_t)value; - -/** - * Write a int64_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeSFixed64:(int32_t)fieldNumber value:(int64_t)value; -/** - * Write a packed array of int64_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeSFixed64Array:(int32_t)fieldNumber - values:(GPBInt64Array *)values - tag:(uint32_t)tag; -/** - * Write a int64_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeSFixed64NoTag:(int64_t)value; - -/** - * Write a int32_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeSFixed32:(int32_t)fieldNumber value:(int32_t)value; -/** - * Write a packed array of int32_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeSFixed32Array:(int32_t)fieldNumber - values:(GPBInt32Array *)values - tag:(uint32_t)tag; -/** - * Write a int32_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeSFixed32NoTag:(int32_t)value; - -/** - * Write a BOOL for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeBool:(int32_t)fieldNumber value:(BOOL)value; -/** - * Write a packed array of BOOL for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeBoolArray:(int32_t)fieldNumber - values:(GPBBoolArray *)values - tag:(uint32_t)tag; -/** - * Write a BOOL without any tag. - * - * @param value The value to write out. - **/ -- (void)writeBoolNoTag:(BOOL)value; - -/** - * Write a int32_t for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeEnum:(int32_t)fieldNumber value:(int32_t)value; -/** - * Write a packed array of int32_t for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - * @param tag The tag assigned to the values. - **/ -- (void)writeEnumArray:(int32_t)fieldNumber - values:(GPBEnumArray *)values - tag:(uint32_t)tag; -/** - * Write a int32_t without any tag. - * - * @param value The value to write out. - **/ -- (void)writeEnumNoTag:(int32_t)value; - -/** - * Write a NSString for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeString:(int32_t)fieldNumber value:(NSString *)value; -/** - * Write an array of NSString for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - **/ -- (void)writeStringArray:(int32_t)fieldNumber values:(NSArray<NSString*> *)values; -/** - * Write a NSString without any tag. - * - * @param value The value to write out. - **/ -- (void)writeStringNoTag:(NSString *)value; - -/** - * Write a GPBMessage for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeMessage:(int32_t)fieldNumber value:(GPBMessage *)value; -/** - * Write an array of GPBMessage for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - **/ -- (void)writeMessageArray:(int32_t)fieldNumber values:(NSArray<GPBMessage*> *)values; -/** - * Write a GPBMessage without any tag. - * - * @param value The value to write out. - **/ -- (void)writeMessageNoTag:(GPBMessage *)value; - -/** - * Write a NSData for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeBytes:(int32_t)fieldNumber value:(NSData *)value; -/** - * Write an array of NSData for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - **/ -- (void)writeBytesArray:(int32_t)fieldNumber values:(NSArray<NSData*> *)values; -/** - * Write a NSData without any tag. - * - * @param value The value to write out. - **/ -- (void)writeBytesNoTag:(NSData *)value; - -/** - * Write a GPBMessage for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeGroup:(int32_t)fieldNumber - value:(GPBMessage *)value; -/** - * Write an array of GPBMessage for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - **/ -- (void)writeGroupArray:(int32_t)fieldNumber values:(NSArray<GPBMessage*> *)values; -/** - * Write a GPBMessage without any tag (but does write the endGroup tag). - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeGroupNoTag:(int32_t)fieldNumber - value:(GPBMessage *)value; - -/** - * Write a GPBUnknownFieldSet for the given field number. - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeUnknownGroup:(int32_t)fieldNumber - value:(GPBUnknownFieldSet *)value; -/** - * Write an array of GPBUnknownFieldSet for the given field number. - * - * @param fieldNumber The field number assigned to the values. - * @param values The values to write out. - **/ -- (void)writeUnknownGroupArray:(int32_t)fieldNumber values:(NSArray<GPBUnknownFieldSet*> *)values; -/** - * Write a GPBUnknownFieldSet without any tag (but does write the endGroup tag). - * - * @param fieldNumber The field number assigned to the value. - * @param value The value to write out. - **/ -- (void)writeUnknownGroupNoTag:(int32_t)fieldNumber - value:(GPBUnknownFieldSet *)value; - -//%PDDM-EXPAND-END _WRITE_DECLS() - -/** -Write a MessageSet extension field to the stream. For historical reasons, -the wire format differs from normal fields. - -@param fieldNumber The extension field number to write out. -@param value The message from where to get the extension. -*/ -- (void)writeMessageSetExtension:(int32_t)fieldNumber value:(GPBMessage *)value; - -/** -Write an unparsed MessageSet extension field to the stream. For historical -reasons, the wire format differs from normal fields. - -@param fieldNumber The extension field number to write out. -@param value The raw message from where to get the extension. -*/ -- (void)writeRawMessageSetExtension:(int32_t)fieldNumber value:(NSData *)value; - -@end - -NS_ASSUME_NONNULL_END - -// Write methods for types that can be in packed arrays. -//%PDDM-DEFINE _WRITE_PACKABLE_DECLS(NAME, ARRAY_TYPE, TYPE) -//%/** -//% * Write a TYPE for the given field number. -//% * -//% * @param fieldNumber The field number assigned to the value. -//% * @param value The value to write out. -//% **/ -//%- (void)write##NAME:(int32_t)fieldNumber value:(TYPE)value; -//%/** -//% * Write a packed array of TYPE for the given field number. -//% * -//% * @param fieldNumber The field number assigned to the values. -//% * @param values The values to write out. -//% * @param tag The tag assigned to the values. -//% **/ -//%- (void)write##NAME##Array:(int32_t)fieldNumber -//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values -//% NAME$S tag:(uint32_t)tag; -//%/** -//% * Write a TYPE without any tag. -//% * -//% * @param value The value to write out. -//% **/ -//%- (void)write##NAME##NoTag:(TYPE)value; -//% -// Write methods for types that aren't in packed arrays. -//%PDDM-DEFINE _WRITE_UNPACKABLE_DECLS(NAME, TYPE) -//%/** -//% * Write a TYPE for the given field number. -//% * -//% * @param fieldNumber The field number assigned to the value. -//% * @param value The value to write out. -//% **/ -//%- (void)write##NAME:(int32_t)fieldNumber value:(TYPE *)value; -//%/** -//% * Write an array of TYPE for the given field number. -//% * -//% * @param fieldNumber The field number assigned to the values. -//% * @param values The values to write out. -//% **/ -//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray<##TYPE##*> *)values; -//%/** -//% * Write a TYPE without any tag. -//% * -//% * @param value The value to write out. -//% **/ -//%- (void)write##NAME##NoTag:(TYPE *)value; -//% -// Special write methods for Groups. -//%PDDM-DEFINE _WRITE_GROUP_DECLS(NAME, TYPE) -//%/** -//% * Write a TYPE for the given field number. -//% * -//% * @param fieldNumber The field number assigned to the value. -//% * @param value The value to write out. -//% **/ -//%- (void)write##NAME:(int32_t)fieldNumber -//% NAME$S value:(TYPE *)value; -//%/** -//% * Write an array of TYPE for the given field number. -//% * -//% * @param fieldNumber The field number assigned to the values. -//% * @param values The values to write out. -//% **/ -//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray<##TYPE##*> *)values; -//%/** -//% * Write a TYPE without any tag (but does write the endGroup tag). -//% * -//% * @param fieldNumber The field number assigned to the value. -//% * @param value The value to write out. -//% **/ -//%- (void)write##NAME##NoTag:(int32_t)fieldNumber -//% NAME$S value:(TYPE *)value; -//% - -// One macro to hide it all up above. -//%PDDM-DEFINE _WRITE_DECLS() -//%_WRITE_PACKABLE_DECLS(Double, Double, double) -//%_WRITE_PACKABLE_DECLS(Float, Float, float) -//%_WRITE_PACKABLE_DECLS(UInt64, UInt64, uint64_t) -//%_WRITE_PACKABLE_DECLS(Int64, Int64, int64_t) -//%_WRITE_PACKABLE_DECLS(Int32, Int32, int32_t) -//%_WRITE_PACKABLE_DECLS(UInt32, UInt32, uint32_t) -//%_WRITE_PACKABLE_DECLS(Fixed64, UInt64, uint64_t) -//%_WRITE_PACKABLE_DECLS(Fixed32, UInt32, uint32_t) -//%_WRITE_PACKABLE_DECLS(SInt32, Int32, int32_t) -//%_WRITE_PACKABLE_DECLS(SInt64, Int64, int64_t) -//%_WRITE_PACKABLE_DECLS(SFixed64, Int64, int64_t) -//%_WRITE_PACKABLE_DECLS(SFixed32, Int32, int32_t) -//%_WRITE_PACKABLE_DECLS(Bool, Bool, BOOL) -//%_WRITE_PACKABLE_DECLS(Enum, Enum, int32_t) -//%_WRITE_UNPACKABLE_DECLS(String, NSString) -//%_WRITE_UNPACKABLE_DECLS(Message, GPBMessage) -//%_WRITE_UNPACKABLE_DECLS(Bytes, NSData) -//%_WRITE_GROUP_DECLS(Group, GPBMessage) -//%_WRITE_GROUP_DECLS(UnknownGroup, GPBUnknownFieldSet) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedOutputStream.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedOutputStream.m deleted file mode 100644 index 7c3ab447..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedOutputStream.m +++ /dev/null @@ -1,1202 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBCodedOutputStream_PackagePrivate.h" - -#import <mach/vm_param.h> - -#import "GPBArray.h" -#import "GPBUnknownFieldSet_PackagePrivate.h" -#import "GPBUtilities_PackagePrivate.h" - -// Structure for containing state of a GPBCodedInputStream. Brought out into -// a struct so that we can inline several common functions instead of dealing -// with overhead of ObjC dispatch. -typedef struct GPBOutputBufferState { - uint8_t *bytes; - size_t size; - size_t position; - NSOutputStream *output; -} GPBOutputBufferState; - -@implementation GPBCodedOutputStream { - GPBOutputBufferState state_; - NSMutableData *buffer_; -} - -static const int32_t LITTLE_ENDIAN_32_SIZE = sizeof(uint32_t); -static const int32_t LITTLE_ENDIAN_64_SIZE = sizeof(uint64_t); - -// Internal helper that writes the current buffer to the output. The -// buffer position is reset to its initial value when this returns. -static void GPBRefreshBuffer(GPBOutputBufferState *state) { - if (state->output == nil) { - // We're writing to a single buffer. - [NSException raise:@"OutOfSpace" format:@""]; - } - if (state->position != 0) { - NSInteger written = - [state->output write:state->bytes maxLength:state->position]; - if (written != (NSInteger)state->position) { - [NSException raise:@"WriteFailed" format:@""]; - } - state->position = 0; - } -} - -static void GPBWriteRawByte(GPBOutputBufferState *state, uint8_t value) { - if (state->position == state->size) { - GPBRefreshBuffer(state); - } - state->bytes[state->position++] = value; -} - -static void GPBWriteRawVarint32(GPBOutputBufferState *state, int32_t value) { - while (YES) { - if ((value & ~0x7F) == 0) { - uint8_t val = (uint8_t)value; - GPBWriteRawByte(state, val); - return; - } else { - GPBWriteRawByte(state, (value & 0x7F) | 0x80); - value = GPBLogicalRightShift32(value, 7); - } - } -} - -static void GPBWriteRawVarint64(GPBOutputBufferState *state, int64_t value) { - while (YES) { - if ((value & ~0x7FL) == 0) { - uint8_t val = (uint8_t)value; - GPBWriteRawByte(state, val); - return; - } else { - GPBWriteRawByte(state, ((int32_t)value & 0x7F) | 0x80); - value = GPBLogicalRightShift64(value, 7); - } - } -} - -static void GPBWriteInt32NoTag(GPBOutputBufferState *state, int32_t value) { - if (value >= 0) { - GPBWriteRawVarint32(state, value); - } else { - // Must sign-extend - GPBWriteRawVarint64(state, value); - } -} - -static void GPBWriteUInt32(GPBOutputBufferState *state, int32_t fieldNumber, - uint32_t value) { - GPBWriteTagWithFormat(state, fieldNumber, GPBWireFormatVarint); - GPBWriteRawVarint32(state, value); -} - -static void GPBWriteTagWithFormat(GPBOutputBufferState *state, - uint32_t fieldNumber, GPBWireFormat format) { - GPBWriteRawVarint32(state, GPBWireFormatMakeTag(fieldNumber, format)); -} - -static void GPBWriteRawLittleEndian32(GPBOutputBufferState *state, - int32_t value) { - GPBWriteRawByte(state, (value)&0xFF); - GPBWriteRawByte(state, (value >> 8) & 0xFF); - GPBWriteRawByte(state, (value >> 16) & 0xFF); - GPBWriteRawByte(state, (value >> 24) & 0xFF); -} - -static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state, - int64_t value) { - GPBWriteRawByte(state, (int32_t)(value)&0xFF); - GPBWriteRawByte(state, (int32_t)(value >> 8) & 0xFF); - GPBWriteRawByte(state, (int32_t)(value >> 16) & 0xFF); - GPBWriteRawByte(state, (int32_t)(value >> 24) & 0xFF); - GPBWriteRawByte(state, (int32_t)(value >> 32) & 0xFF); - GPBWriteRawByte(state, (int32_t)(value >> 40) & 0xFF); - GPBWriteRawByte(state, (int32_t)(value >> 48) & 0xFF); - GPBWriteRawByte(state, (int32_t)(value >> 56) & 0xFF); -} - -- (void)dealloc { - [self flush]; - [state_.output close]; - [state_.output release]; - [buffer_ release]; - - [super dealloc]; -} - -- (instancetype)initWithOutputStream:(NSOutputStream *)output { - NSMutableData *data = [NSMutableData dataWithLength:PAGE_SIZE]; - return [self initWithOutputStream:output data:data]; -} - -- (instancetype)initWithData:(NSMutableData *)data { - return [self initWithOutputStream:nil data:data]; -} - -// This initializer isn't exposed, but it is the designated initializer. -// Setting OutputStream and NSData is to control the buffering behavior/size -// of the work, but that is more obvious via the bufferSize: version. -- (instancetype)initWithOutputStream:(NSOutputStream *)output - data:(NSMutableData *)data { - if ((self = [super init])) { - buffer_ = [data retain]; - [output open]; - state_.bytes = [data mutableBytes]; - state_.size = [data length]; - state_.output = [output retain]; - } - return self; -} - -+ (instancetype)streamWithOutputStream:(NSOutputStream *)output { - NSMutableData *data = [NSMutableData dataWithLength:PAGE_SIZE]; - return [[[self alloc] initWithOutputStream:output - data:data] autorelease]; -} - -+ (instancetype)streamWithData:(NSMutableData *)data { - return [[[self alloc] initWithData:data] autorelease]; -} - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -- (void)writeDoubleNoTag:(double)value { - GPBWriteRawLittleEndian64(&state_, GPBConvertDoubleToInt64(value)); -} - -- (void)writeDouble:(int32_t)fieldNumber value:(double)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed64); - GPBWriteRawLittleEndian64(&state_, GPBConvertDoubleToInt64(value)); -} - -- (void)writeFloatNoTag:(float)value { - GPBWriteRawLittleEndian32(&state_, GPBConvertFloatToInt32(value)); -} - -- (void)writeFloat:(int32_t)fieldNumber value:(float)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed32); - GPBWriteRawLittleEndian32(&state_, GPBConvertFloatToInt32(value)); -} - -- (void)writeUInt64NoTag:(uint64_t)value { - GPBWriteRawVarint64(&state_, value); -} - -- (void)writeUInt64:(int32_t)fieldNumber value:(uint64_t)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); - GPBWriteRawVarint64(&state_, value); -} - -- (void)writeInt64NoTag:(int64_t)value { - GPBWriteRawVarint64(&state_, value); -} - -- (void)writeInt64:(int32_t)fieldNumber value:(int64_t)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); - GPBWriteRawVarint64(&state_, value); -} - -- (void)writeInt32NoTag:(int32_t)value { - GPBWriteInt32NoTag(&state_, value); -} - -- (void)writeInt32:(int32_t)fieldNumber value:(int32_t)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); - GPBWriteInt32NoTag(&state_, value); -} - -- (void)writeFixed64NoTag:(uint64_t)value { - GPBWriteRawLittleEndian64(&state_, value); -} - -- (void)writeFixed64:(int32_t)fieldNumber value:(uint64_t)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed64); - GPBWriteRawLittleEndian64(&state_, value); -} - -- (void)writeFixed32NoTag:(uint32_t)value { - GPBWriteRawLittleEndian32(&state_, value); -} - -- (void)writeFixed32:(int32_t)fieldNumber value:(uint32_t)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed32); - GPBWriteRawLittleEndian32(&state_, value); -} - -- (void)writeBoolNoTag:(BOOL)value { - GPBWriteRawByte(&state_, (value ? 1 : 0)); -} - -- (void)writeBool:(int32_t)fieldNumber value:(BOOL)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); - GPBWriteRawByte(&state_, (value ? 1 : 0)); -} - -- (void)writeStringNoTag:(const NSString *)value { - size_t length = [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - GPBWriteRawVarint32(&state_, (int32_t)length); - if (length == 0) { - return; - } - - const char *quickString = - CFStringGetCStringPtr((CFStringRef)value, kCFStringEncodingUTF8); - - // Fast path: Most strings are short, if the buffer already has space, - // add to it directly. - NSUInteger bufferBytesLeft = state_.size - state_.position; - if (bufferBytesLeft >= length) { - NSUInteger usedBufferLength = 0; - BOOL result; - if (quickString != NULL) { - memcpy(state_.bytes + state_.position, quickString, length); - usedBufferLength = length; - result = YES; - } else { - result = [value getBytes:state_.bytes + state_.position - maxLength:bufferBytesLeft - usedLength:&usedBufferLength - encoding:NSUTF8StringEncoding - options:(NSStringEncodingConversionOptions)0 - range:NSMakeRange(0, [value length]) - remainingRange:NULL]; - } - if (result) { - NSAssert2((usedBufferLength == length), - @"Our UTF8 calc was wrong? %tu vs %zd", usedBufferLength, - length); - state_.position += usedBufferLength; - return; - } - } else if (quickString != NULL) { - [self writeRawPtr:quickString offset:0 length:length]; - } else { - // Slow path: just get it as data and write it out. - NSData *utf8Data = [value dataUsingEncoding:NSUTF8StringEncoding]; - NSAssert2(([utf8Data length] == length), - @"Strings UTF8 length was wrong? %tu vs %zd", [utf8Data length], - length); - [self writeRawData:utf8Data]; - } -} - -- (void)writeString:(int32_t)fieldNumber value:(NSString *)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatLengthDelimited); - [self writeStringNoTag:value]; -} - -- (void)writeGroupNoTag:(int32_t)fieldNumber value:(GPBMessage *)value { - [value writeToCodedOutputStream:self]; - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatEndGroup); -} - -- (void)writeGroup:(int32_t)fieldNumber value:(GPBMessage *)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatStartGroup); - [self writeGroupNoTag:fieldNumber value:value]; -} - -- (void)writeUnknownGroupNoTag:(int32_t)fieldNumber - value:(const GPBUnknownFieldSet *)value { - [value writeToCodedOutputStream:self]; - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatEndGroup); -} - -- (void)writeUnknownGroup:(int32_t)fieldNumber - value:(GPBUnknownFieldSet *)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatStartGroup); - [self writeUnknownGroupNoTag:fieldNumber value:value]; -} - -- (void)writeMessageNoTag:(GPBMessage *)value { - GPBWriteRawVarint32(&state_, (int32_t)[value serializedSize]); - [value writeToCodedOutputStream:self]; -} - -- (void)writeMessage:(int32_t)fieldNumber value:(GPBMessage *)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatLengthDelimited); - [self writeMessageNoTag:value]; -} - -- (void)writeBytesNoTag:(NSData *)value { - GPBWriteRawVarint32(&state_, (int32_t)[value length]); - [self writeRawData:value]; -} - -- (void)writeBytes:(int32_t)fieldNumber value:(NSData *)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatLengthDelimited); - [self writeBytesNoTag:value]; -} - -- (void)writeUInt32NoTag:(uint32_t)value { - GPBWriteRawVarint32(&state_, value); -} - -- (void)writeUInt32:(int32_t)fieldNumber value:(uint32_t)value { - GPBWriteUInt32(&state_, fieldNumber, value); -} - -- (void)writeEnumNoTag:(int32_t)value { - GPBWriteRawVarint32(&state_, value); -} - -- (void)writeEnum:(int32_t)fieldNumber value:(int32_t)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); - GPBWriteRawVarint32(&state_, value); -} - -- (void)writeSFixed32NoTag:(int32_t)value { - GPBWriteRawLittleEndian32(&state_, value); -} - -- (void)writeSFixed32:(int32_t)fieldNumber value:(int32_t)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed32); - GPBWriteRawLittleEndian32(&state_, value); -} - -- (void)writeSFixed64NoTag:(int64_t)value { - GPBWriteRawLittleEndian64(&state_, value); -} - -- (void)writeSFixed64:(int32_t)fieldNumber value:(int64_t)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed64); - GPBWriteRawLittleEndian64(&state_, value); -} - -- (void)writeSInt32NoTag:(int32_t)value { - GPBWriteRawVarint32(&state_, GPBEncodeZigZag32(value)); -} - -- (void)writeSInt32:(int32_t)fieldNumber value:(int32_t)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); - GPBWriteRawVarint32(&state_, GPBEncodeZigZag32(value)); -} - -- (void)writeSInt64NoTag:(int64_t)value { - GPBWriteRawVarint64(&state_, GPBEncodeZigZag64(value)); -} - -- (void)writeSInt64:(int32_t)fieldNumber value:(int64_t)value { - GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); - GPBWriteRawVarint64(&state_, GPBEncodeZigZag64(value)); -} - -//%PDDM-DEFINE WRITE_PACKABLE_DEFNS(NAME, ARRAY_TYPE, TYPE, ACCESSOR_NAME) -//%- (void)write##NAME##Array:(int32_t)fieldNumber -//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values -//% NAME$S tag:(uint32_t)tag { -//% if (tag != 0) { -//% if (values.count == 0) return; -//% __block size_t dataSize = 0; -//% [values enumerate##ACCESSOR_NAME##ValuesWithBlock:^(TYPE value, NSUInteger idx, BOOL *stop) { -//%#pragma unused(idx, stop) -//% dataSize += GPBCompute##NAME##SizeNoTag(value); -//% }]; -//% GPBWriteRawVarint32(&state_, tag); -//% GPBWriteRawVarint32(&state_, (int32_t)dataSize); -//% [values enumerate##ACCESSOR_NAME##ValuesWithBlock:^(TYPE value, NSUInteger idx, BOOL *stop) { -//%#pragma unused(idx, stop) -//% [self write##NAME##NoTag:value]; -//% }]; -//% } else { -//% [values enumerate##ACCESSOR_NAME##ValuesWithBlock:^(TYPE value, NSUInteger idx, BOOL *stop) { -//%#pragma unused(idx, stop) -//% [self write##NAME:fieldNumber value:value]; -//% }]; -//% } -//%} -//% -//%PDDM-DEFINE WRITE_UNPACKABLE_DEFNS(NAME, TYPE) -//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray *)values { -//% for (TYPE *value in values) { -//% [self write##NAME:fieldNumber value:value]; -//% } -//%} -//% -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Double, Double, double, ) -// This block of code is generated, do not edit it directly. - -- (void)writeDoubleArray:(int32_t)fieldNumber - values:(GPBDoubleArray *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(double value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeDoubleSizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(double value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeDoubleNoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(double value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeDouble:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Float, Float, float, ) -// This block of code is generated, do not edit it directly. - -- (void)writeFloatArray:(int32_t)fieldNumber - values:(GPBFloatArray *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(float value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeFloatSizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(float value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeFloatNoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(float value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeFloat:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(UInt64, UInt64, uint64_t, ) -// This block of code is generated, do not edit it directly. - -- (void)writeUInt64Array:(int32_t)fieldNumber - values:(GPBUInt64Array *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeUInt64SizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeUInt64NoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeUInt64:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Int64, Int64, int64_t, ) -// This block of code is generated, do not edit it directly. - -- (void)writeInt64Array:(int32_t)fieldNumber - values:(GPBInt64Array *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeInt64SizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeInt64NoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeInt64:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Int32, Int32, int32_t, ) -// This block of code is generated, do not edit it directly. - -- (void)writeInt32Array:(int32_t)fieldNumber - values:(GPBInt32Array *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeInt32SizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeInt32NoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeInt32:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(UInt32, UInt32, uint32_t, ) -// This block of code is generated, do not edit it directly. - -- (void)writeUInt32Array:(int32_t)fieldNumber - values:(GPBUInt32Array *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeUInt32SizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeUInt32NoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeUInt32:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Fixed64, UInt64, uint64_t, ) -// This block of code is generated, do not edit it directly. - -- (void)writeFixed64Array:(int32_t)fieldNumber - values:(GPBUInt64Array *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeFixed64SizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeFixed64NoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeFixed64:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Fixed32, UInt32, uint32_t, ) -// This block of code is generated, do not edit it directly. - -- (void)writeFixed32Array:(int32_t)fieldNumber - values:(GPBUInt32Array *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeFixed32SizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeFixed32NoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeFixed32:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SInt32, Int32, int32_t, ) -// This block of code is generated, do not edit it directly. - -- (void)writeSInt32Array:(int32_t)fieldNumber - values:(GPBInt32Array *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeSInt32SizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeSInt32NoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeSInt32:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SInt64, Int64, int64_t, ) -// This block of code is generated, do not edit it directly. - -- (void)writeSInt64Array:(int32_t)fieldNumber - values:(GPBInt64Array *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeSInt64SizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeSInt64NoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeSInt64:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SFixed64, Int64, int64_t, ) -// This block of code is generated, do not edit it directly. - -- (void)writeSFixed64Array:(int32_t)fieldNumber - values:(GPBInt64Array *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeSFixed64SizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeSFixed64NoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeSFixed64:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SFixed32, Int32, int32_t, ) -// This block of code is generated, do not edit it directly. - -- (void)writeSFixed32Array:(int32_t)fieldNumber - values:(GPBInt32Array *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeSFixed32SizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeSFixed32NoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeSFixed32:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Bool, Bool, BOOL, ) -// This block of code is generated, do not edit it directly. - -- (void)writeBoolArray:(int32_t)fieldNumber - values:(GPBBoolArray *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateValuesWithBlock:^(BOOL value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeBoolSizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateValuesWithBlock:^(BOOL value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeBoolNoTag:value]; - }]; - } else { - [values enumerateValuesWithBlock:^(BOOL value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeBool:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Enum, Enum, int32_t, Raw) -// This block of code is generated, do not edit it directly. - -- (void)writeEnumArray:(int32_t)fieldNumber - values:(GPBEnumArray *)values - tag:(uint32_t)tag { - if (tag != 0) { - if (values.count == 0) return; - __block size_t dataSize = 0; - [values enumerateRawValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - dataSize += GPBComputeEnumSizeNoTag(value); - }]; - GPBWriteRawVarint32(&state_, tag); - GPBWriteRawVarint32(&state_, (int32_t)dataSize); - [values enumerateRawValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeEnumNoTag:value]; - }]; - } else { - [values enumerateRawValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [self writeEnum:fieldNumber value:value]; - }]; - } -} - -//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(String, NSString) -// This block of code is generated, do not edit it directly. - -- (void)writeStringArray:(int32_t)fieldNumber values:(NSArray *)values { - for (NSString *value in values) { - [self writeString:fieldNumber value:value]; - } -} - -//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Message, GPBMessage) -// This block of code is generated, do not edit it directly. - -- (void)writeMessageArray:(int32_t)fieldNumber values:(NSArray *)values { - for (GPBMessage *value in values) { - [self writeMessage:fieldNumber value:value]; - } -} - -//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Bytes, NSData) -// This block of code is generated, do not edit it directly. - -- (void)writeBytesArray:(int32_t)fieldNumber values:(NSArray *)values { - for (NSData *value in values) { - [self writeBytes:fieldNumber value:value]; - } -} - -//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Group, GPBMessage) -// This block of code is generated, do not edit it directly. - -- (void)writeGroupArray:(int32_t)fieldNumber values:(NSArray *)values { - for (GPBMessage *value in values) { - [self writeGroup:fieldNumber value:value]; - } -} - -//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(UnknownGroup, GPBUnknownFieldSet) -// This block of code is generated, do not edit it directly. - -- (void)writeUnknownGroupArray:(int32_t)fieldNumber values:(NSArray *)values { - for (GPBUnknownFieldSet *value in values) { - [self writeUnknownGroup:fieldNumber value:value]; - } -} - -//%PDDM-EXPAND-END (19 expansions) - -- (void)writeMessageSetExtension:(int32_t)fieldNumber - value:(GPBMessage *)value { - GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem, - GPBWireFormatStartGroup); - GPBWriteUInt32(&state_, GPBWireFormatMessageSetTypeId, fieldNumber); - [self writeMessage:GPBWireFormatMessageSetMessage value:value]; - GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem, - GPBWireFormatEndGroup); -} - -- (void)writeRawMessageSetExtension:(int32_t)fieldNumber value:(NSData *)value { - GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem, - GPBWireFormatStartGroup); - GPBWriteUInt32(&state_, GPBWireFormatMessageSetTypeId, fieldNumber); - [self writeBytes:GPBWireFormatMessageSetMessage value:value]; - GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem, - GPBWireFormatEndGroup); -} - -- (void)flush { - if (state_.output != nil) { - GPBRefreshBuffer(&state_); - } -} - -- (void)writeRawByte:(uint8_t)value { - GPBWriteRawByte(&state_, value); -} - -- (void)writeRawData:(const NSData *)data { - [self writeRawPtr:[data bytes] offset:0 length:[data length]]; -} - -- (void)writeRawPtr:(const void *)value - offset:(size_t)offset - length:(size_t)length { - if (value == nil || length == 0) { - return; - } - - NSUInteger bufferLength = state_.size; - NSUInteger bufferBytesLeft = bufferLength - state_.position; - if (bufferBytesLeft >= length) { - // We have room in the current buffer. - memcpy(state_.bytes + state_.position, ((uint8_t *)value) + offset, length); - state_.position += length; - } else { - // Write extends past current buffer. Fill the rest of this buffer and - // flush. - size_t bytesWritten = bufferBytesLeft; - memcpy(state_.bytes + state_.position, ((uint8_t *)value) + offset, - bytesWritten); - offset += bytesWritten; - length -= bytesWritten; - state_.position = bufferLength; - GPBRefreshBuffer(&state_); - bufferLength = state_.size; - - // Now deal with the rest. - // Since we have an output stream, this is our buffer - // and buffer offset == 0 - if (length <= bufferLength) { - // Fits in new buffer. - memcpy(state_.bytes, ((uint8_t *)value) + offset, length); - state_.position = length; - } else { - // Write is very big. Let's do it all at once. - [state_.output write:((uint8_t *)value) + offset maxLength:length]; - } - } -} - -- (void)writeTag:(uint32_t)fieldNumber format:(GPBWireFormat)format { - GPBWriteTagWithFormat(&state_, fieldNumber, format); -} - -- (void)writeRawVarint32:(int32_t)value { - GPBWriteRawVarint32(&state_, value); -} - -- (void)writeRawVarintSizeTAs32:(size_t)value { - // Note the truncation. - GPBWriteRawVarint32(&state_, (int32_t)value); -} - -- (void)writeRawVarint64:(int64_t)value { - GPBWriteRawVarint64(&state_, value); -} - -- (void)writeRawLittleEndian32:(int32_t)value { - GPBWriteRawLittleEndian32(&state_, value); -} - -- (void)writeRawLittleEndian64:(int64_t)value { - GPBWriteRawLittleEndian64(&state_, value); -} - -#pragma clang diagnostic pop - -@end - -size_t GPBComputeDoubleSizeNoTag(Float64 value) { -#pragma unused(value) - return LITTLE_ENDIAN_64_SIZE; -} - -size_t GPBComputeFloatSizeNoTag(Float32 value) { -#pragma unused(value) - return LITTLE_ENDIAN_32_SIZE; -} - -size_t GPBComputeUInt64SizeNoTag(uint64_t value) { - return GPBComputeRawVarint64Size(value); -} - -size_t GPBComputeInt64SizeNoTag(int64_t value) { - return GPBComputeRawVarint64Size(value); -} - -size_t GPBComputeInt32SizeNoTag(int32_t value) { - if (value >= 0) { - return GPBComputeRawVarint32Size(value); - } else { - // Must sign-extend. - return 10; - } -} - -size_t GPBComputeSizeTSizeAsInt32NoTag(size_t value) { - return GPBComputeInt32SizeNoTag((int32_t)value); -} - -size_t GPBComputeFixed64SizeNoTag(uint64_t value) { -#pragma unused(value) - return LITTLE_ENDIAN_64_SIZE; -} - -size_t GPBComputeFixed32SizeNoTag(uint32_t value) { -#pragma unused(value) - return LITTLE_ENDIAN_32_SIZE; -} - -size_t GPBComputeBoolSizeNoTag(BOOL value) { -#pragma unused(value) - return 1; -} - -size_t GPBComputeStringSizeNoTag(NSString *value) { - NSUInteger length = [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - return GPBComputeRawVarint32SizeForInteger(length) + length; -} - -size_t GPBComputeGroupSizeNoTag(GPBMessage *value) { - return [value serializedSize]; -} - -size_t GPBComputeUnknownGroupSizeNoTag(GPBUnknownFieldSet *value) { - return value.serializedSize; -} - -size_t GPBComputeMessageSizeNoTag(GPBMessage *value) { - size_t size = [value serializedSize]; - return GPBComputeRawVarint32SizeForInteger(size) + size; -} - -size_t GPBComputeBytesSizeNoTag(NSData *value) { - NSUInteger valueLength = [value length]; - return GPBComputeRawVarint32SizeForInteger(valueLength) + valueLength; -} - -size_t GPBComputeUInt32SizeNoTag(int32_t value) { - return GPBComputeRawVarint32Size(value); -} - -size_t GPBComputeEnumSizeNoTag(int32_t value) { - return GPBComputeRawVarint32Size(value); -} - -size_t GPBComputeSFixed32SizeNoTag(int32_t value) { -#pragma unused(value) - return LITTLE_ENDIAN_32_SIZE; -} - -size_t GPBComputeSFixed64SizeNoTag(int64_t value) { -#pragma unused(value) - return LITTLE_ENDIAN_64_SIZE; -} - -size_t GPBComputeSInt32SizeNoTag(int32_t value) { - return GPBComputeRawVarint32Size(GPBEncodeZigZag32(value)); -} - -size_t GPBComputeSInt64SizeNoTag(int64_t value) { - return GPBComputeRawVarint64Size(GPBEncodeZigZag64(value)); -} - -size_t GPBComputeDoubleSize(int32_t fieldNumber, double value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeDoubleSizeNoTag(value); -} - -size_t GPBComputeFloatSize(int32_t fieldNumber, float value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeFloatSizeNoTag(value); -} - -size_t GPBComputeUInt64Size(int32_t fieldNumber, uint64_t value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeUInt64SizeNoTag(value); -} - -size_t GPBComputeInt64Size(int32_t fieldNumber, int64_t value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeInt64SizeNoTag(value); -} - -size_t GPBComputeInt32Size(int32_t fieldNumber, int32_t value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeInt32SizeNoTag(value); -} - -size_t GPBComputeFixed64Size(int32_t fieldNumber, uint64_t value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeFixed64SizeNoTag(value); -} - -size_t GPBComputeFixed32Size(int32_t fieldNumber, uint32_t value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeFixed32SizeNoTag(value); -} - -size_t GPBComputeBoolSize(int32_t fieldNumber, BOOL value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeBoolSizeNoTag(value); -} - -size_t GPBComputeStringSize(int32_t fieldNumber, NSString *value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeStringSizeNoTag(value); -} - -size_t GPBComputeGroupSize(int32_t fieldNumber, GPBMessage *value) { - return GPBComputeTagSize(fieldNumber) * 2 + GPBComputeGroupSizeNoTag(value); -} - -size_t GPBComputeUnknownGroupSize(int32_t fieldNumber, - GPBUnknownFieldSet *value) { - return GPBComputeTagSize(fieldNumber) * 2 + - GPBComputeUnknownGroupSizeNoTag(value); -} - -size_t GPBComputeMessageSize(int32_t fieldNumber, GPBMessage *value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeMessageSizeNoTag(value); -} - -size_t GPBComputeBytesSize(int32_t fieldNumber, NSData *value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeBytesSizeNoTag(value); -} - -size_t GPBComputeUInt32Size(int32_t fieldNumber, uint32_t value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeUInt32SizeNoTag(value); -} - -size_t GPBComputeEnumSize(int32_t fieldNumber, int32_t value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeEnumSizeNoTag(value); -} - -size_t GPBComputeSFixed32Size(int32_t fieldNumber, int32_t value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeSFixed32SizeNoTag(value); -} - -size_t GPBComputeSFixed64Size(int32_t fieldNumber, int64_t value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeSFixed64SizeNoTag(value); -} - -size_t GPBComputeSInt32Size(int32_t fieldNumber, int32_t value) { - return GPBComputeTagSize(fieldNumber) + GPBComputeSInt32SizeNoTag(value); -} - -size_t GPBComputeSInt64Size(int32_t fieldNumber, int64_t value) { - return GPBComputeTagSize(fieldNumber) + - GPBComputeRawVarint64Size(GPBEncodeZigZag64(value)); -} - -size_t GPBComputeMessageSetExtensionSize(int32_t fieldNumber, - GPBMessage *value) { - return GPBComputeTagSize(GPBWireFormatMessageSetItem) * 2 + - GPBComputeUInt32Size(GPBWireFormatMessageSetTypeId, fieldNumber) + - GPBComputeMessageSize(GPBWireFormatMessageSetMessage, value); -} - -size_t GPBComputeRawMessageSetExtensionSize(int32_t fieldNumber, - NSData *value) { - return GPBComputeTagSize(GPBWireFormatMessageSetItem) * 2 + - GPBComputeUInt32Size(GPBWireFormatMessageSetTypeId, fieldNumber) + - GPBComputeBytesSize(GPBWireFormatMessageSetMessage, value); -} - -size_t GPBComputeTagSize(int32_t fieldNumber) { - return GPBComputeRawVarint32Size( - GPBWireFormatMakeTag(fieldNumber, GPBWireFormatVarint)); -} - -size_t GPBComputeWireFormatTagSize(int field_number, GPBDataType dataType) { - size_t result = GPBComputeTagSize(field_number); - if (dataType == GPBDataTypeGroup) { - // Groups have both a start and an end tag. - return result * 2; - } else { - return result; - } -} - -size_t GPBComputeRawVarint32Size(int32_t value) { - // value is treated as unsigned, so it won't be sign-extended if negative. - if ((value & (0xffffffff << 7)) == 0) return 1; - if ((value & (0xffffffff << 14)) == 0) return 2; - if ((value & (0xffffffff << 21)) == 0) return 3; - if ((value & (0xffffffff << 28)) == 0) return 4; - return 5; -} - -size_t GPBComputeRawVarint32SizeForInteger(NSInteger value) { - // Note the truncation. - return GPBComputeRawVarint32Size((int32_t)value); -} - -size_t GPBComputeRawVarint64Size(int64_t value) { - if ((value & (0xffffffffffffffffL << 7)) == 0) return 1; - if ((value & (0xffffffffffffffffL << 14)) == 0) return 2; - if ((value & (0xffffffffffffffffL << 21)) == 0) return 3; - if ((value & (0xffffffffffffffffL << 28)) == 0) return 4; - if ((value & (0xffffffffffffffffL << 35)) == 0) return 5; - if ((value & (0xffffffffffffffffL << 42)) == 0) return 6; - if ((value & (0xffffffffffffffffL << 49)) == 0) return 7; - if ((value & (0xffffffffffffffffL << 56)) == 0) return 8; - if ((value & (0xffffffffffffffffL << 63)) == 0) return 9; - return 10; -} diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedOutputStream_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedOutputStream_PackagePrivate.h deleted file mode 100644 index 2e7bb4c4..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBCodedOutputStream_PackagePrivate.h +++ /dev/null @@ -1,126 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2016 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBCodedOutputStream.h" - -NS_ASSUME_NONNULL_BEGIN - -CF_EXTERN_C_BEGIN - -size_t GPBComputeDoubleSize(int32_t fieldNumber, double value) - __attribute__((const)); -size_t GPBComputeFloatSize(int32_t fieldNumber, float value) - __attribute__((const)); -size_t GPBComputeUInt64Size(int32_t fieldNumber, uint64_t value) - __attribute__((const)); -size_t GPBComputeInt64Size(int32_t fieldNumber, int64_t value) - __attribute__((const)); -size_t GPBComputeInt32Size(int32_t fieldNumber, int32_t value) - __attribute__((const)); -size_t GPBComputeFixed64Size(int32_t fieldNumber, uint64_t value) - __attribute__((const)); -size_t GPBComputeFixed32Size(int32_t fieldNumber, uint32_t value) - __attribute__((const)); -size_t GPBComputeBoolSize(int32_t fieldNumber, BOOL value) - __attribute__((const)); -size_t GPBComputeStringSize(int32_t fieldNumber, NSString *value) - __attribute__((const)); -size_t GPBComputeGroupSize(int32_t fieldNumber, GPBMessage *value) - __attribute__((const)); -size_t GPBComputeUnknownGroupSize(int32_t fieldNumber, - GPBUnknownFieldSet *value) - __attribute__((const)); -size_t GPBComputeMessageSize(int32_t fieldNumber, GPBMessage *value) - __attribute__((const)); -size_t GPBComputeBytesSize(int32_t fieldNumber, NSData *value) - __attribute__((const)); -size_t GPBComputeUInt32Size(int32_t fieldNumber, uint32_t value) - __attribute__((const)); -size_t GPBComputeSFixed32Size(int32_t fieldNumber, int32_t value) - __attribute__((const)); -size_t GPBComputeSFixed64Size(int32_t fieldNumber, int64_t value) - __attribute__((const)); -size_t GPBComputeSInt32Size(int32_t fieldNumber, int32_t value) - __attribute__((const)); -size_t GPBComputeSInt64Size(int32_t fieldNumber, int64_t value) - __attribute__((const)); -size_t GPBComputeTagSize(int32_t fieldNumber) __attribute__((const)); -size_t GPBComputeWireFormatTagSize(int field_number, GPBDataType dataType) - __attribute__((const)); - -size_t GPBComputeDoubleSizeNoTag(double value) __attribute__((const)); -size_t GPBComputeFloatSizeNoTag(float value) __attribute__((const)); -size_t GPBComputeUInt64SizeNoTag(uint64_t value) __attribute__((const)); -size_t GPBComputeInt64SizeNoTag(int64_t value) __attribute__((const)); -size_t GPBComputeInt32SizeNoTag(int32_t value) __attribute__((const)); -size_t GPBComputeFixed64SizeNoTag(uint64_t value) __attribute__((const)); -size_t GPBComputeFixed32SizeNoTag(uint32_t value) __attribute__((const)); -size_t GPBComputeBoolSizeNoTag(BOOL value) __attribute__((const)); -size_t GPBComputeStringSizeNoTag(NSString *value) __attribute__((const)); -size_t GPBComputeGroupSizeNoTag(GPBMessage *value) __attribute__((const)); -size_t GPBComputeUnknownGroupSizeNoTag(GPBUnknownFieldSet *value) - __attribute__((const)); -size_t GPBComputeMessageSizeNoTag(GPBMessage *value) __attribute__((const)); -size_t GPBComputeBytesSizeNoTag(NSData *value) __attribute__((const)); -size_t GPBComputeUInt32SizeNoTag(int32_t value) __attribute__((const)); -size_t GPBComputeEnumSizeNoTag(int32_t value) __attribute__((const)); -size_t GPBComputeSFixed32SizeNoTag(int32_t value) __attribute__((const)); -size_t GPBComputeSFixed64SizeNoTag(int64_t value) __attribute__((const)); -size_t GPBComputeSInt32SizeNoTag(int32_t value) __attribute__((const)); -size_t GPBComputeSInt64SizeNoTag(int64_t value) __attribute__((const)); - -// Note that this will calculate the size of 64 bit values truncated to 32. -size_t GPBComputeSizeTSizeAsInt32NoTag(size_t value) __attribute__((const)); - -size_t GPBComputeRawVarint32Size(int32_t value) __attribute__((const)); -size_t GPBComputeRawVarint64Size(int64_t value) __attribute__((const)); - -// Note that this will calculate the size of 64 bit values truncated to 32. -size_t GPBComputeRawVarint32SizeForInteger(NSInteger value) - __attribute__((const)); - -// Compute the number of bytes that would be needed to encode a -// MessageSet extension to the stream. For historical reasons, -// the wire format differs from normal fields. -size_t GPBComputeMessageSetExtensionSize(int32_t fieldNumber, GPBMessage *value) - __attribute__((const)); - -// Compute the number of bytes that would be needed to encode an -// unparsed MessageSet extension field to the stream. For -// historical reasons, the wire format differs from normal fields. -size_t GPBComputeRawMessageSetExtensionSize(int32_t fieldNumber, NSData *value) - __attribute__((const)); - -size_t GPBComputeEnumSize(int32_t fieldNumber, int32_t value) - __attribute__((const)); - -CF_EXTERN_C_END - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDescriptor.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDescriptor.h deleted file mode 100644 index 651f4de0..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDescriptor.h +++ /dev/null @@ -1,288 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBRuntimeTypes.h" - -@class GPBEnumDescriptor; -@class GPBFieldDescriptor; -@class GPBFileDescriptor; -@class GPBOneofDescriptor; - -NS_ASSUME_NONNULL_BEGIN - -/** Syntax used in the proto file. */ -typedef NS_ENUM(uint8_t, GPBFileSyntax) { - /** Unknown syntax. */ - GPBFileSyntaxUnknown = 0, - /** Proto2 syntax. */ - GPBFileSyntaxProto2 = 2, - /** Proto3 syntax. */ - GPBFileSyntaxProto3 = 3, -}; - -/** Type of proto field. */ -typedef NS_ENUM(uint8_t, GPBFieldType) { - /** Optional/required field. Only valid for proto2 fields. */ - GPBFieldTypeSingle, - /** Repeated field. */ - GPBFieldTypeRepeated, - /** Map field. */ - GPBFieldTypeMap, -}; - -/** - * Describes a proto message. - **/ -@interface GPBDescriptor : NSObject<NSCopying> - -/** Name of the message. */ -@property(nonatomic, readonly, copy) NSString *name; -/** Fields declared in the message. */ -@property(nonatomic, readonly, strong, nullable) NSArray<GPBFieldDescriptor*> *fields; -/** Oneofs declared in the message. */ -@property(nonatomic, readonly, strong, nullable) NSArray<GPBOneofDescriptor*> *oneofs; -/** Extension range declared for the message. */ -@property(nonatomic, readonly, nullable) const GPBExtensionRange *extensionRanges; -/** Number of extension ranges declared for the message. */ -@property(nonatomic, readonly) uint32_t extensionRangesCount; -/** Descriptor for the file where the message was defined. */ -@property(nonatomic, readonly, assign) GPBFileDescriptor *file; - -/** Whether the message is in wire format or not. */ -@property(nonatomic, readonly, getter=isWireFormat) BOOL wireFormat; -/** The class of this message. */ -@property(nonatomic, readonly) Class messageClass; -/** Containing message descriptor if this message is nested, or nil otherwise. */ -@property(readonly, nullable) GPBDescriptor *containingType; -/** - * Fully qualified name for this message (package.message). Can be nil if the - * value is unable to be computed. - */ -@property(readonly, nullable) NSString *fullName; - -/** - * Gets the field for the given number. - * - * @param fieldNumber The number for the field to get. - * - * @return The field descriptor for the given number, or nil if not found. - **/ -- (nullable GPBFieldDescriptor *)fieldWithNumber:(uint32_t)fieldNumber; - -/** - * Gets the field for the given name. - * - * @param name The name for the field to get. - * - * @return The field descriptor for the given name, or nil if not found. - **/ -- (nullable GPBFieldDescriptor *)fieldWithName:(NSString *)name; - -/** - * Gets the oneof for the given name. - * - * @param name The name for the oneof to get. - * - * @return The oneof descriptor for the given name, or nil if not found. - **/ -- (nullable GPBOneofDescriptor *)oneofWithName:(NSString *)name; - -@end - -/** - * Describes a proto file. - **/ -@interface GPBFileDescriptor : NSObject - -/** The package declared in the proto file. */ -@property(nonatomic, readonly, copy) NSString *package; -/** The objc prefix declared in the proto file. */ -@property(nonatomic, readonly, copy, nullable) NSString *objcPrefix; -/** The syntax of the proto file. */ -@property(nonatomic, readonly) GPBFileSyntax syntax; - -@end - -/** - * Describes a oneof field. - **/ -@interface GPBOneofDescriptor : NSObject -/** Name of the oneof field. */ -@property(nonatomic, readonly) NSString *name; -/** Fields declared in the oneof. */ -@property(nonatomic, readonly) NSArray<GPBFieldDescriptor*> *fields; - -/** - * Gets the field for the given number. - * - * @param fieldNumber The number for the field to get. - * - * @return The field descriptor for the given number, or nil if not found. - **/ -- (nullable GPBFieldDescriptor *)fieldWithNumber:(uint32_t)fieldNumber; - -/** - * Gets the field for the given name. - * - * @param name The name for the field to get. - * - * @return The field descriptor for the given name, or nil if not found. - **/ -- (nullable GPBFieldDescriptor *)fieldWithName:(NSString *)name; - -@end - -/** - * Describes a proto field. - **/ -@interface GPBFieldDescriptor : NSObject - -/** Name of the field. */ -@property(nonatomic, readonly, copy) NSString *name; -/** Number associated with the field. */ -@property(nonatomic, readonly) uint32_t number; -/** Data type contained in the field. */ -@property(nonatomic, readonly) GPBDataType dataType; -/** Whether it has a default value or not. */ -@property(nonatomic, readonly) BOOL hasDefaultValue; -/** Default value for the field. */ -@property(nonatomic, readonly) GPBGenericValue defaultValue; -/** Whether this field is required. Only valid for proto2 fields. */ -@property(nonatomic, readonly, getter=isRequired) BOOL required; -/** Whether this field is optional. */ -@property(nonatomic, readonly, getter=isOptional) BOOL optional; -/** Type of field (single, repeated, map). */ -@property(nonatomic, readonly) GPBFieldType fieldType; -/** Type of the key if the field is a map. The value's type is -fieldType. */ -@property(nonatomic, readonly) GPBDataType mapKeyDataType; -/** Whether the field is packable. */ -@property(nonatomic, readonly, getter=isPackable) BOOL packable; - -/** The containing oneof if this field is part of one, nil otherwise. */ -@property(nonatomic, readonly, assign, nullable) GPBOneofDescriptor *containingOneof; - -/** Class of the message if the field is of message type. */ -@property(nonatomic, readonly, assign, nullable) Class msgClass; - -/** Descriptor for the enum if this field is an enum. */ -@property(nonatomic, readonly, strong, nullable) GPBEnumDescriptor *enumDescriptor; - -/** - * Checks whether the given enum raw value is a valid enum value. - * - * @param value The raw enum value to check. - * - * @return YES if value is a valid enum raw value. - **/ -- (BOOL)isValidEnumValue:(int32_t)value; - -/** @return Name for the text format, or nil if not known. */ -- (nullable NSString *)textFormatName; - -@end - -/** - * Describes a proto enum. - **/ -@interface GPBEnumDescriptor : NSObject - -/** Name of the enum. */ -@property(nonatomic, readonly, copy) NSString *name; -/** Function that validates that raw values are valid enum values. */ -@property(nonatomic, readonly) GPBEnumValidationFunc enumVerifier; - -/** - * Returns the enum value name for the given raw enum. - * - * @param number The raw enum value. - * - * @return The name of the enum value passed, or nil if not valid. - **/ -- (nullable NSString *)enumNameForValue:(int32_t)number; - -/** - * Gets the enum raw value for the given enum name. - * - * @param outValue A pointer where the value will be set. - * @param name The enum name for which to get the raw value. - * - * @return YES if a value was copied into the pointer, NO otherwise. - **/ -- (BOOL)getValue:(nullable int32_t *)outValue forEnumName:(NSString *)name; - -/** - * Returns the text format for the given raw enum value. - * - * @param number The raw enum value. - * - * @return The text format name for the raw enum value, or nil if not valid. - **/ -- (nullable NSString *)textFormatNameForValue:(int32_t)number; - -/** - * Gets the enum raw value for the given text format name. - * - * @param outValue A pointer where the value will be set. - * @param textFormatName The text format name for which to get the raw value. - * - * @return YES if a value was copied into the pointer, NO otherwise. - **/ -- (BOOL)getValue:(nullable int32_t *)outValue forEnumTextFormatName:(NSString *)textFormatName; - -@end - -/** - * Describes a proto extension. - **/ -@interface GPBExtensionDescriptor : NSObject<NSCopying> -/** Field number under which the extension is stored. */ -@property(nonatomic, readonly) uint32_t fieldNumber; -/** The containing message class, i.e. the class extended by this extension. */ -@property(nonatomic, readonly) Class containingMessageClass; -/** Data type contained in the extension. */ -@property(nonatomic, readonly) GPBDataType dataType; -/** Whether the extension is repeated. */ -@property(nonatomic, readonly, getter=isRepeated) BOOL repeated; -/** Whether the extension is packable. */ -@property(nonatomic, readonly, getter=isPackable) BOOL packable; -/** The class of the message if the extension is of message type. */ -@property(nonatomic, readonly, assign) Class msgClass; -/** The singleton name for the extension. */ -@property(nonatomic, readonly) NSString *singletonName; -/** The enum descriptor if the extension is of enum type. */ -@property(nonatomic, readonly, strong, nullable) GPBEnumDescriptor *enumDescriptor; -/** The default value for the extension. */ -@property(nonatomic, readonly, nullable) id defaultValue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDescriptor.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDescriptor.m deleted file mode 100644 index 0753a948..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDescriptor.m +++ /dev/null @@ -1,1104 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBDescriptor_PackagePrivate.h" - -#import <objc/runtime.h> - -#import "GPBUtilities_PackagePrivate.h" -#import "GPBWireFormat.h" -#import "GPBMessage_PackagePrivate.h" - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -// The addresses of these variables are used as keys for objc_getAssociatedObject. -static const char kTextFormatExtraValueKey = 0; -static const char kParentClassNameValueKey = 0; -static const char kClassNameSuffixKey = 0; - -// Utility function to generate selectors on the fly. -static SEL SelFromStrings(const char *prefix, const char *middle, - const char *suffix, BOOL takesArg) { - if (prefix == NULL && suffix == NULL && !takesArg) { - return sel_getUid(middle); - } - const size_t prefixLen = prefix != NULL ? strlen(prefix) : 0; - const size_t middleLen = strlen(middle); - const size_t suffixLen = suffix != NULL ? strlen(suffix) : 0; - size_t totalLen = - prefixLen + middleLen + suffixLen + 1; // include space for null on end. - if (takesArg) { - totalLen += 1; - } - char buffer[totalLen]; - if (prefix != NULL) { - memcpy(buffer, prefix, prefixLen); - memcpy(buffer + prefixLen, middle, middleLen); - buffer[prefixLen] = (char)toupper(buffer[prefixLen]); - } else { - memcpy(buffer, middle, middleLen); - } - if (suffix != NULL) { - memcpy(buffer + prefixLen + middleLen, suffix, suffixLen); - } - if (takesArg) { - buffer[totalLen - 2] = ':'; - } - // Always null terminate it. - buffer[totalLen - 1] = 0; - - SEL result = sel_getUid(buffer); - return result; -} - -static NSArray *NewFieldsArrayForHasIndex(int hasIndex, - NSArray *allMessageFields) - __attribute__((ns_returns_retained)); - -static NSArray *NewFieldsArrayForHasIndex(int hasIndex, - NSArray *allMessageFields) { - NSMutableArray *result = [[NSMutableArray alloc] init]; - for (GPBFieldDescriptor *fieldDesc in allMessageFields) { - if (fieldDesc->description_->hasIndex == hasIndex) { - [result addObject:fieldDesc]; - } - } - return result; -} - -@implementation GPBDescriptor { - Class messageClass_; - GPBFileDescriptor *file_; - BOOL wireFormat_; -} - -@synthesize messageClass = messageClass_; -@synthesize fields = fields_; -@synthesize oneofs = oneofs_; -@synthesize extensionRanges = extensionRanges_; -@synthesize extensionRangesCount = extensionRangesCount_; -@synthesize file = file_; -@synthesize wireFormat = wireFormat_; - -+ (instancetype) - allocDescriptorForClass:(Class)messageClass - rootClass:(Class)rootClass - file:(GPBFileDescriptor *)file - fields:(void *)fieldDescriptions - fieldCount:(uint32_t)fieldCount - storageSize:(uint32_t)storageSize - flags:(GPBDescriptorInitializationFlags)flags { - // The rootClass is no longer used, but it is passed in to ensure it - // was started up during initialization also. - (void)rootClass; - NSMutableArray *fields = nil; - GPBFileSyntax syntax = file.syntax; - BOOL fieldsIncludeDefault = - (flags & GPBDescriptorInitializationFlag_FieldsWithDefault) != 0; - - void *desc; - for (uint32_t i = 0; i < fieldCount; ++i) { - if (fields == nil) { - fields = [[NSMutableArray alloc] initWithCapacity:fieldCount]; - } - // Need correctly typed pointer for array indexing below to work. - if (fieldsIncludeDefault) { - GPBMessageFieldDescriptionWithDefault *fieldDescWithDefault = fieldDescriptions; - desc = &(fieldDescWithDefault[i]); - } else { - GPBMessageFieldDescription *fieldDesc = fieldDescriptions; - desc = &(fieldDesc[i]); - } - GPBFieldDescriptor *fieldDescriptor = - [[GPBFieldDescriptor alloc] initWithFieldDescription:desc - includesDefault:fieldsIncludeDefault - syntax:syntax]; - [fields addObject:fieldDescriptor]; - [fieldDescriptor release]; - } - - BOOL wireFormat = (flags & GPBDescriptorInitializationFlag_WireFormat) != 0; - GPBDescriptor *descriptor = [[self alloc] initWithClass:messageClass - file:file - fields:fields - storageSize:storageSize - wireFormat:wireFormat]; - [fields release]; - return descriptor; -} - -- (instancetype)initWithClass:(Class)messageClass - file:(GPBFileDescriptor *)file - fields:(NSArray *)fields - storageSize:(uint32_t)storageSize - wireFormat:(BOOL)wireFormat { - if ((self = [super init])) { - messageClass_ = messageClass; - file_ = file; - fields_ = [fields retain]; - storageSize_ = storageSize; - wireFormat_ = wireFormat; - } - return self; -} - -- (void)dealloc { - [fields_ release]; - [oneofs_ release]; - [super dealloc]; -} - -- (void)setupOneofs:(const char **)oneofNames - count:(uint32_t)count - firstHasIndex:(int32_t)firstHasIndex { - NSCAssert(firstHasIndex < 0, @"Should always be <0"); - NSMutableArray *oneofs = [[NSMutableArray alloc] initWithCapacity:count]; - for (uint32_t i = 0, hasIndex = firstHasIndex; i < count; ++i, --hasIndex) { - const char *name = oneofNames[i]; - NSArray *fieldsForOneof = NewFieldsArrayForHasIndex(hasIndex, fields_); - NSCAssert(fieldsForOneof.count > 0, - @"No fields for this oneof? (%s:%d)", name, hasIndex); - GPBOneofDescriptor *oneofDescriptor = - [[GPBOneofDescriptor alloc] initWithName:name fields:fieldsForOneof]; - [oneofs addObject:oneofDescriptor]; - [oneofDescriptor release]; - [fieldsForOneof release]; - } - oneofs_ = oneofs; -} - -- (void)setupExtraTextInfo:(const char *)extraTextFormatInfo { - // Extra info is a compile time option, so skip the work if not needed. - if (extraTextFormatInfo) { - NSValue *extraInfoValue = [NSValue valueWithPointer:extraTextFormatInfo]; - for (GPBFieldDescriptor *fieldDescriptor in fields_) { - if (fieldDescriptor->description_->flags & GPBFieldTextFormatNameCustom) { - objc_setAssociatedObject(fieldDescriptor, &kTextFormatExtraValueKey, - extraInfoValue, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - } - } -} - -- (void)setupExtensionRanges:(const GPBExtensionRange *)ranges count:(int32_t)count { - extensionRanges_ = ranges; - extensionRangesCount_ = count; -} - -- (void)setupContainingMessageClassName:(const char *)msgClassName { - // Note: Only fetch the class here, can't send messages to it because - // that could cause cycles back to this class within +initialize if - // two messages have each other in fields (i.e. - they build a graph). - NSAssert(objc_getClass(msgClassName), @"Class %s not defined", msgClassName); - NSValue *parentNameValue = [NSValue valueWithPointer:msgClassName]; - objc_setAssociatedObject(self, &kParentClassNameValueKey, - parentNameValue, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setupMessageClassNameSuffix:(NSString *)suffix { - if (suffix.length) { - objc_setAssociatedObject(self, &kClassNameSuffixKey, - suffix, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } -} - -- (NSString *)name { - return NSStringFromClass(messageClass_); -} - -- (GPBDescriptor *)containingType { - NSValue *parentNameValue = - objc_getAssociatedObject(self, &kParentClassNameValueKey); - if (!parentNameValue) { - return nil; - } - const char *parentName = [parentNameValue pointerValue]; - Class parentClass = objc_getClass(parentName); - NSAssert(parentClass, @"Class %s not defined", parentName); - return [parentClass descriptor]; -} - -- (NSString *)fullName { - NSString *className = NSStringFromClass(self.messageClass); - GPBFileDescriptor *file = self.file; - NSString *objcPrefix = file.objcPrefix; - if (objcPrefix && ![className hasPrefix:objcPrefix]) { - NSAssert(0, - @"Class didn't have correct prefix? (%@ - %@)", - className, objcPrefix); - return nil; - } - GPBDescriptor *parent = self.containingType; - - NSString *name = nil; - if (parent) { - NSString *parentClassName = NSStringFromClass(parent.messageClass); - // The generator will add _Class to avoid reserved words, drop it. - NSString *suffix = objc_getAssociatedObject(parent, &kClassNameSuffixKey); - if (suffix) { - if (![parentClassName hasSuffix:suffix]) { - NSAssert(0, - @"ParentMessage class didn't have correct suffix? (%@ - %@)", - className, suffix); - return nil; - } - parentClassName = - [parentClassName substringToIndex:(parentClassName.length - suffix.length)]; - } - NSString *parentPrefix = [parentClassName stringByAppendingString:@"_"]; - if (![className hasPrefix:parentPrefix]) { - NSAssert(0, - @"Class didn't have the correct parent name prefix? (%@ - %@)", - parentPrefix, className); - return nil; - } - name = [className substringFromIndex:parentPrefix.length]; - } else { - name = [className substringFromIndex:objcPrefix.length]; - } - - // The generator will add _Class to avoid reserved words, drop it. - NSString *suffix = objc_getAssociatedObject(self, &kClassNameSuffixKey); - if (suffix) { - if (![name hasSuffix:suffix]) { - NSAssert(0, - @"Message class didn't have correct suffix? (%@ - %@)", - name, suffix); - return nil; - } - name = [name substringToIndex:(name.length - suffix.length)]; - } - - NSString *prefix = (parent != nil ? parent.fullName : file.package); - NSString *result; - if (prefix.length > 0) { - result = [NSString stringWithFormat:@"%@.%@", prefix, name]; - } else { - result = name; - } - return result; -} - -- (id)copyWithZone:(NSZone *)zone { -#pragma unused(zone) - return [self retain]; -} - -- (GPBFieldDescriptor *)fieldWithNumber:(uint32_t)fieldNumber { - for (GPBFieldDescriptor *descriptor in fields_) { - if (GPBFieldNumber(descriptor) == fieldNumber) { - return descriptor; - } - } - return nil; -} - -- (GPBFieldDescriptor *)fieldWithName:(NSString *)name { - for (GPBFieldDescriptor *descriptor in fields_) { - if ([descriptor.name isEqual:name]) { - return descriptor; - } - } - return nil; -} - -- (GPBOneofDescriptor *)oneofWithName:(NSString *)name { - for (GPBOneofDescriptor *descriptor in oneofs_) { - if ([descriptor.name isEqual:name]) { - return descriptor; - } - } - return nil; -} - -@end - -@implementation GPBFileDescriptor { - NSString *package_; - NSString *objcPrefix_; - GPBFileSyntax syntax_; -} - -@synthesize package = package_; -@synthesize objcPrefix = objcPrefix_; -@synthesize syntax = syntax_; - -- (instancetype)initWithPackage:(NSString *)package - objcPrefix:(NSString *)objcPrefix - syntax:(GPBFileSyntax)syntax { - self = [super init]; - if (self) { - package_ = [package copy]; - objcPrefix_ = [objcPrefix copy]; - syntax_ = syntax; - } - return self; -} - -- (instancetype)initWithPackage:(NSString *)package - syntax:(GPBFileSyntax)syntax { - self = [super init]; - if (self) { - package_ = [package copy]; - syntax_ = syntax; - } - return self; -} - -- (void)dealloc { - [package_ release]; - [objcPrefix_ release]; - [super dealloc]; -} - -@end - -@implementation GPBOneofDescriptor - -@synthesize fields = fields_; - -- (instancetype)initWithName:(const char *)name fields:(NSArray *)fields { - self = [super init]; - if (self) { - name_ = name; - fields_ = [fields retain]; - for (GPBFieldDescriptor *fieldDesc in fields) { - fieldDesc->containingOneof_ = self; - } - - caseSel_ = SelFromStrings(NULL, name, "OneOfCase", NO); - } - return self; -} - -- (void)dealloc { - [fields_ release]; - [super dealloc]; -} - -- (NSString *)name { - return @(name_); -} - -- (GPBFieldDescriptor *)fieldWithNumber:(uint32_t)fieldNumber { - for (GPBFieldDescriptor *descriptor in fields_) { - if (GPBFieldNumber(descriptor) == fieldNumber) { - return descriptor; - } - } - return nil; -} - -- (GPBFieldDescriptor *)fieldWithName:(NSString *)name { - for (GPBFieldDescriptor *descriptor in fields_) { - if ([descriptor.name isEqual:name]) { - return descriptor; - } - } - return nil; -} - -@end - -uint32_t GPBFieldTag(GPBFieldDescriptor *self) { - GPBMessageFieldDescription *description = self->description_; - GPBWireFormat format; - if ((description->flags & GPBFieldMapKeyMask) != 0) { - // Maps are repeated messages on the wire. - format = GPBWireFormatForType(GPBDataTypeMessage, NO); - } else { - format = GPBWireFormatForType(description->dataType, - ((description->flags & GPBFieldPacked) != 0)); - } - return GPBWireFormatMakeTag(description->number, format); -} - -uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self) { - GPBMessageFieldDescription *description = self->description_; - NSCAssert((description->flags & GPBFieldRepeated) != 0, - @"Only valid on repeated fields"); - GPBWireFormat format = - GPBWireFormatForType(description->dataType, - ((description->flags & GPBFieldPacked) == 0)); - return GPBWireFormatMakeTag(description->number, format); -} - -@implementation GPBFieldDescriptor { - GPBGenericValue defaultValue_; - - // Message ivars - Class msgClass_; - - // Enum ivars. - // If protos are generated with GenerateEnumDescriptors on then it will - // be a enumDescriptor, otherwise it will be a enumVerifier. - union { - GPBEnumDescriptor *enumDescriptor_; - GPBEnumValidationFunc enumVerifier_; - } enumHandling_; -} - -@synthesize msgClass = msgClass_; -@synthesize containingOneof = containingOneof_; - -- (instancetype)init { - // Throw an exception if people attempt to not use the designated initializer. - self = [super init]; - if (self != nil) { - [self doesNotRecognizeSelector:_cmd]; - self = nil; - } - return self; -} - -- (instancetype)initWithFieldDescription:(void *)description - includesDefault:(BOOL)includesDefault - syntax:(GPBFileSyntax)syntax { - if ((self = [super init])) { - GPBMessageFieldDescription *coreDesc; - if (includesDefault) { - coreDesc = &(((GPBMessageFieldDescriptionWithDefault *)description)->core); - } else { - coreDesc = description; - } - description_ = coreDesc; - getSel_ = sel_getUid(coreDesc->name); - setSel_ = SelFromStrings("set", coreDesc->name, NULL, YES); - - GPBDataType dataType = coreDesc->dataType; - BOOL isMessage = GPBDataTypeIsMessage(dataType); - BOOL isMapOrArray = GPBFieldIsMapOrArray(self); - - if (isMapOrArray) { - // map<>/repeated fields get a *Count property (inplace of a has*) to - // support checking if there are any entries without triggering - // autocreation. - hasOrCountSel_ = SelFromStrings(NULL, coreDesc->name, "_Count", NO); - } else { - // If there is a positive hasIndex, then: - // - All fields types for proto2 messages get has* selectors. - // - Only message fields for proto3 messages get has* selectors. - // Note: the positive check is to handle oneOfs, we can't check - // containingOneof_ because it isn't set until after initialization. - if ((coreDesc->hasIndex >= 0) && - (coreDesc->hasIndex != GPBNoHasBit) && - ((syntax != GPBFileSyntaxProto3) || isMessage)) { - hasOrCountSel_ = SelFromStrings("has", coreDesc->name, NULL, NO); - setHasSel_ = SelFromStrings("setHas", coreDesc->name, NULL, YES); - } - } - - // Extra type specific data. - if (isMessage) { - const char *className = coreDesc->dataTypeSpecific.className; - // Note: Only fetch the class here, can't send messages to it because - // that could cause cycles back to this class within +initialize if - // two messages have each other in fields (i.e. - they build a graph). - msgClass_ = objc_getClass(className); - NSAssert(msgClass_, @"Class %s not defined", className); - } else if (dataType == GPBDataTypeEnum) { - if ((coreDesc->flags & GPBFieldHasEnumDescriptor) != 0) { - enumHandling_.enumDescriptor_ = - coreDesc->dataTypeSpecific.enumDescFunc(); - } else { - enumHandling_.enumVerifier_ = - coreDesc->dataTypeSpecific.enumVerifier; - } - } - - // Non map<>/repeated fields can have defaults in proto2 syntax. - if (!isMapOrArray && includesDefault) { - defaultValue_ = ((GPBMessageFieldDescriptionWithDefault *)description)->defaultValue; - if (dataType == GPBDataTypeBytes) { - // Data stored as a length prefixed (network byte order) c-string in - // descriptor structure. - const uint8_t *bytes = (const uint8_t *)defaultValue_.valueData; - if (bytes) { - uint32_t length = *((uint32_t *)bytes); - length = ntohl(length); - bytes += sizeof(length); - defaultValue_.valueData = - [[NSData alloc] initWithBytes:bytes length:length]; - } - } - } - } - return self; -} - -- (void)dealloc { - if (description_->dataType == GPBDataTypeBytes && - !(description_->flags & GPBFieldRepeated)) { - [defaultValue_.valueData release]; - } - [super dealloc]; -} - -- (GPBDataType)dataType { - return description_->dataType; -} - -- (BOOL)hasDefaultValue { - return (description_->flags & GPBFieldHasDefaultValue) != 0; -} - -- (uint32_t)number { - return description_->number; -} - -- (NSString *)name { - return @(description_->name); -} - -- (BOOL)isRequired { - return (description_->flags & GPBFieldRequired) != 0; -} - -- (BOOL)isOptional { - return (description_->flags & GPBFieldOptional) != 0; -} - -- (GPBFieldType)fieldType { - GPBFieldFlags flags = description_->flags; - if ((flags & GPBFieldRepeated) != 0) { - return GPBFieldTypeRepeated; - } else if ((flags & GPBFieldMapKeyMask) != 0) { - return GPBFieldTypeMap; - } else { - return GPBFieldTypeSingle; - } -} - -- (GPBDataType)mapKeyDataType { - switch (description_->flags & GPBFieldMapKeyMask) { - case GPBFieldMapKeyInt32: - return GPBDataTypeInt32; - case GPBFieldMapKeyInt64: - return GPBDataTypeInt64; - case GPBFieldMapKeyUInt32: - return GPBDataTypeUInt32; - case GPBFieldMapKeyUInt64: - return GPBDataTypeUInt64; - case GPBFieldMapKeySInt32: - return GPBDataTypeSInt32; - case GPBFieldMapKeySInt64: - return GPBDataTypeSInt64; - case GPBFieldMapKeyFixed32: - return GPBDataTypeFixed32; - case GPBFieldMapKeyFixed64: - return GPBDataTypeFixed64; - case GPBFieldMapKeySFixed32: - return GPBDataTypeSFixed32; - case GPBFieldMapKeySFixed64: - return GPBDataTypeSFixed64; - case GPBFieldMapKeyBool: - return GPBDataTypeBool; - case GPBFieldMapKeyString: - return GPBDataTypeString; - - default: - NSAssert(0, @"Not a map type"); - return GPBDataTypeInt32; // For lack of anything better. - } -} - -- (BOOL)isPackable { - return (description_->flags & GPBFieldPacked) != 0; -} - -- (BOOL)isValidEnumValue:(int32_t)value { - NSAssert(description_->dataType == GPBDataTypeEnum, - @"Field Must be of type GPBDataTypeEnum"); - if (description_->flags & GPBFieldHasEnumDescriptor) { - return enumHandling_.enumDescriptor_.enumVerifier(value); - } else { - return enumHandling_.enumVerifier_(value); - } -} - -- (GPBEnumDescriptor *)enumDescriptor { - if (description_->flags & GPBFieldHasEnumDescriptor) { - return enumHandling_.enumDescriptor_; - } else { - return nil; - } -} - -- (GPBGenericValue)defaultValue { - // Depends on the fact that defaultValue_ is initialized either to "0/nil" or - // to an actual defaultValue in our initializer. - GPBGenericValue value = defaultValue_; - - if (!(description_->flags & GPBFieldRepeated)) { - // We special handle data and strings. If they are nil, we replace them - // with empty string/empty data. - GPBDataType type = description_->dataType; - if (type == GPBDataTypeBytes && value.valueData == nil) { - value.valueData = GPBEmptyNSData(); - } else if (type == GPBDataTypeString && value.valueString == nil) { - value.valueString = @""; - } - } - return value; -} - -- (NSString *)textFormatName { - if ((description_->flags & GPBFieldTextFormatNameCustom) != 0) { - NSValue *extraInfoValue = - objc_getAssociatedObject(self, &kTextFormatExtraValueKey); - // Support can be left out at generation time. - if (!extraInfoValue) { - return nil; - } - const uint8_t *extraTextFormatInfo = [extraInfoValue pointerValue]; - return GPBDecodeTextFormatName(extraTextFormatInfo, GPBFieldNumber(self), - self.name); - } - - // The logic here has to match SetCommonFieldVariables() from - // objectivec_field.cc in the proto compiler. - NSString *name = self.name; - NSUInteger len = [name length]; - - // Remove the "_p" added to reserved names. - if ([name hasSuffix:@"_p"]) { - name = [name substringToIndex:(len - 2)]; - len = [name length]; - } - - // Remove "Array" from the end for repeated fields. - if (((description_->flags & GPBFieldRepeated) != 0) && - [name hasSuffix:@"Array"]) { - name = [name substringToIndex:(len - 5)]; - len = [name length]; - } - - // Groups vs. other fields. - if (description_->dataType == GPBDataTypeGroup) { - // Just capitalize the first letter. - unichar firstChar = [name characterAtIndex:0]; - if (firstChar >= 'a' && firstChar <= 'z') { - NSString *firstCharString = - [NSString stringWithFormat:@"%C", (unichar)(firstChar - 'a' + 'A')]; - NSString *result = - [name stringByReplacingCharactersInRange:NSMakeRange(0, 1) - withString:firstCharString]; - return result; - } - return name; - - } else { - // Undo the CamelCase. - NSMutableString *result = [NSMutableString stringWithCapacity:len]; - for (uint32_t i = 0; i < len; i++) { - unichar c = [name characterAtIndex:i]; - if (c >= 'A' && c <= 'Z') { - if (i > 0) { - [result appendFormat:@"_%C", (unichar)(c - 'A' + 'a')]; - } else { - [result appendFormat:@"%C", c]; - } - } else { - [result appendFormat:@"%C", c]; - } - } - return result; - } -} - -@end - -@implementation GPBEnumDescriptor { - NSString *name_; - // valueNames_ is a single c string with all of the value names appended - // together, each null terminated. -calcValueNameOffsets fills in - // nameOffsets_ with the offsets to allow quicker access to the individual - // names. - const char *valueNames_; - const int32_t *values_; - GPBEnumValidationFunc enumVerifier_; - const uint8_t *extraTextFormatInfo_; - uint32_t *nameOffsets_; - uint32_t valueCount_; -} - -@synthesize name = name_; -@synthesize enumVerifier = enumVerifier_; - -+ (instancetype) - allocDescriptorForName:(NSString *)name - valueNames:(const char *)valueNames - values:(const int32_t *)values - count:(uint32_t)valueCount - enumVerifier:(GPBEnumValidationFunc)enumVerifier { - GPBEnumDescriptor *descriptor = [[self alloc] initWithName:name - valueNames:valueNames - values:values - count:valueCount - enumVerifier:enumVerifier]; - return descriptor; -} - -+ (instancetype) - allocDescriptorForName:(NSString *)name - valueNames:(const char *)valueNames - values:(const int32_t *)values - count:(uint32_t)valueCount - enumVerifier:(GPBEnumValidationFunc)enumVerifier - extraTextFormatInfo:(const char *)extraTextFormatInfo { - // Call the common case. - GPBEnumDescriptor *descriptor = [self allocDescriptorForName:name - valueNames:valueNames - values:values - count:valueCount - enumVerifier:enumVerifier]; - // Set the extra info. - descriptor->extraTextFormatInfo_ = (const uint8_t *)extraTextFormatInfo; - return descriptor; -} - -- (instancetype)initWithName:(NSString *)name - valueNames:(const char *)valueNames - values:(const int32_t *)values - count:(uint32_t)valueCount - enumVerifier:(GPBEnumValidationFunc)enumVerifier { - if ((self = [super init])) { - name_ = [name copy]; - valueNames_ = valueNames; - values_ = values; - valueCount_ = valueCount; - enumVerifier_ = enumVerifier; - } - return self; -} - -- (void)dealloc { - [name_ release]; - if (nameOffsets_) free(nameOffsets_); - [super dealloc]; -} - -- (void)calcValueNameOffsets { - @synchronized(self) { - if (nameOffsets_ != NULL) { - return; - } - uint32_t *offsets = malloc(valueCount_ * sizeof(uint32_t)); - const char *scan = valueNames_; - for (uint32_t i = 0; i < valueCount_; ++i) { - offsets[i] = (uint32_t)(scan - valueNames_); - while (*scan != '\0') ++scan; - ++scan; // Step over the null. - } - nameOffsets_ = offsets; - } -} - -- (NSString *)enumNameForValue:(int32_t)number { - if (nameOffsets_ == NULL) [self calcValueNameOffsets]; - - for (uint32_t i = 0; i < valueCount_; ++i) { - if (values_[i] == number) { - const char *valueName = valueNames_ + nameOffsets_[i]; - NSString *fullName = [NSString stringWithFormat:@"%@_%s", name_, valueName]; - return fullName; - } - } - return nil; -} - -- (BOOL)getValue:(int32_t *)outValue forEnumName:(NSString *)name { - // Must have the prefix. - NSUInteger prefixLen = name_.length + 1; - if ((name.length <= prefixLen) || ![name hasPrefix:name_] || - ([name characterAtIndex:prefixLen - 1] != '_')) { - return NO; - } - - // Skip over the prefix. - const char *nameAsCStr = [name UTF8String]; - nameAsCStr += prefixLen; - - if (nameOffsets_ == NULL) [self calcValueNameOffsets]; - - // Find it. - for (uint32_t i = 0; i < valueCount_; ++i) { - const char *valueName = valueNames_ + nameOffsets_[i]; - if (strcmp(nameAsCStr, valueName) == 0) { - if (outValue) { - *outValue = values_[i]; - } - return YES; - } - } - return NO; -} - -- (BOOL)getValue:(int32_t *)outValue forEnumTextFormatName:(NSString *)textFormatName { - if (nameOffsets_ == NULL) [self calcValueNameOffsets]; - - for (uint32_t i = 0; i < valueCount_; ++i) { - int32_t value = values_[i]; - NSString *valueTextFormatName = [self textFormatNameForValue:value]; - if ([valueTextFormatName isEqual:textFormatName]) { - if (outValue) { - *outValue = value; - } - return YES; - } - } - return NO; -} - -- (NSString *)textFormatNameForValue:(int32_t)number { - if (nameOffsets_ == NULL) [self calcValueNameOffsets]; - - // Find the EnumValue descriptor and its index. - BOOL foundIt = NO; - uint32_t valueDescriptorIndex; - for (valueDescriptorIndex = 0; valueDescriptorIndex < valueCount_; - ++valueDescriptorIndex) { - if (values_[valueDescriptorIndex] == number) { - foundIt = YES; - break; - } - } - - if (!foundIt) { - return nil; - } - - NSString *result = nil; - // Naming adds an underscore between enum name and value name, skip that also. - const char *valueName = valueNames_ + nameOffsets_[valueDescriptorIndex]; - NSString *shortName = @(valueName); - - // See if it is in the map of special format handling. - if (extraTextFormatInfo_) { - result = GPBDecodeTextFormatName(extraTextFormatInfo_, - (int32_t)valueDescriptorIndex, shortName); - } - // Logic here needs to match what objectivec_enum.cc does in the proto - // compiler. - if (result == nil) { - NSUInteger len = [shortName length]; - NSMutableString *worker = [NSMutableString stringWithCapacity:len]; - for (NSUInteger i = 0; i < len; i++) { - unichar c = [shortName characterAtIndex:i]; - if (i > 0 && c >= 'A' && c <= 'Z') { - [worker appendString:@"_"]; - } - [worker appendFormat:@"%c", toupper((char)c)]; - } - result = worker; - } - return result; -} - -@end - -@implementation GPBExtensionDescriptor { - GPBGenericValue defaultValue_; -} - -@synthesize containingMessageClass = containingMessageClass_; - -- (instancetype)initWithExtensionDescription: - (GPBExtensionDescription *)description { - if ((self = [super init])) { - description_ = description; - -#if defined(DEBUG) && DEBUG - const char *className = description->messageOrGroupClassName; - if (className) { - NSAssert(objc_lookUpClass(className) != Nil, - @"Class %s not defined", className); - } -#endif - - if (description->extendedClass) { - Class containingClass = objc_lookUpClass(description->extendedClass); - NSAssert(containingClass, @"Class %s not defined", - description->extendedClass); - containingMessageClass_ = containingClass; - } - - GPBDataType type = description_->dataType; - if (type == GPBDataTypeBytes) { - // Data stored as a length prefixed c-string in descriptor records. - const uint8_t *bytes = - (const uint8_t *)description->defaultValue.valueData; - if (bytes) { - uint32_t length = *((uint32_t *)bytes); - // The length is stored in network byte order. - length = ntohl(length); - bytes += sizeof(length); - defaultValue_.valueData = - [[NSData alloc] initWithBytes:bytes length:length]; - } - } else if (type == GPBDataTypeMessage || type == GPBDataTypeGroup) { - // The default is looked up in -defaultValue instead since extensions - // aren't common, we avoid the hit startup hit and it avoid initialization - // order issues. - } else { - defaultValue_ = description->defaultValue; - } - } - return self; -} - -- (void)dealloc { - if ((description_->dataType == GPBDataTypeBytes) && - !GPBExtensionIsRepeated(description_)) { - [defaultValue_.valueData release]; - } - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { -#pragma unused(zone) - // Immutable. - return [self retain]; -} - -- (NSString *)singletonName { - return @(description_->singletonName); -} - -- (const char *)singletonNameC { - return description_->singletonName; -} - -- (uint32_t)fieldNumber { - return description_->fieldNumber; -} - -- (GPBDataType)dataType { - return description_->dataType; -} - -- (GPBWireFormat)wireType { - return GPBWireFormatForType(description_->dataType, - GPBExtensionIsPacked(description_)); -} - -- (GPBWireFormat)alternateWireType { - NSAssert(GPBExtensionIsRepeated(description_), - @"Only valid on repeated extensions"); - return GPBWireFormatForType(description_->dataType, - !GPBExtensionIsPacked(description_)); -} - -- (BOOL)isRepeated { - return GPBExtensionIsRepeated(description_); -} - -- (BOOL)isMap { - return (description_->options & GPBFieldMapKeyMask) != 0; -} - -- (BOOL)isPackable { - return GPBExtensionIsPacked(description_); -} - -- (Class)msgClass { - return objc_getClass(description_->messageOrGroupClassName); -} - -- (GPBEnumDescriptor *)enumDescriptor { - if (description_->dataType == GPBDataTypeEnum) { - GPBEnumDescriptor *enumDescriptor = description_->enumDescriptorFunc(); - return enumDescriptor; - } - return nil; -} - -- (id)defaultValue { - if (GPBExtensionIsRepeated(description_)) { - return nil; - } - - switch (description_->dataType) { - case GPBDataTypeBool: - return @(defaultValue_.valueBool); - case GPBDataTypeFloat: - return @(defaultValue_.valueFloat); - case GPBDataTypeDouble: - return @(defaultValue_.valueDouble); - case GPBDataTypeInt32: - case GPBDataTypeSInt32: - case GPBDataTypeEnum: - case GPBDataTypeSFixed32: - return @(defaultValue_.valueInt32); - case GPBDataTypeInt64: - case GPBDataTypeSInt64: - case GPBDataTypeSFixed64: - return @(defaultValue_.valueInt64); - case GPBDataTypeUInt32: - case GPBDataTypeFixed32: - return @(defaultValue_.valueUInt32); - case GPBDataTypeUInt64: - case GPBDataTypeFixed64: - return @(defaultValue_.valueUInt64); - case GPBDataTypeBytes: - // Like message fields, the default is zero length data. - return (defaultValue_.valueData ? defaultValue_.valueData - : GPBEmptyNSData()); - case GPBDataTypeString: - // Like message fields, the default is zero length string. - return (defaultValue_.valueString ? defaultValue_.valueString : @""); - case GPBDataTypeGroup: - case GPBDataTypeMessage: - return nil; - } -} - -- (NSComparisonResult)compareByFieldNumber:(GPBExtensionDescriptor *)other { - int32_t selfNumber = description_->fieldNumber; - int32_t otherNumber = other->description_->fieldNumber; - if (selfNumber < otherNumber) { - return NSOrderedAscending; - } else if (selfNumber == otherNumber) { - return NSOrderedSame; - } else { - return NSOrderedDescending; - } -} - -@end - -#pragma clang diagnostic pop diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDescriptor_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDescriptor_PackagePrivate.h deleted file mode 100644 index 9173e7a2..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDescriptor_PackagePrivate.h +++ /dev/null @@ -1,329 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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. - -// This header is private to the ProtobolBuffers library and must NOT be -// included by any sources outside this library. The contents of this file are -// subject to change at any time without notice. - -#import "GPBDescriptor.h" -#import "GPBWireFormat.h" - -// Describes attributes of the field. -typedef NS_OPTIONS(uint16_t, GPBFieldFlags) { - GPBFieldNone = 0, - // These map to standard protobuf concepts. - GPBFieldRequired = 1 << 0, - GPBFieldRepeated = 1 << 1, - GPBFieldPacked = 1 << 2, - GPBFieldOptional = 1 << 3, - GPBFieldHasDefaultValue = 1 << 4, - - // Indicates the field needs custom handling for the TextFormat name, if not - // set, the name can be derived from the ObjC name. - GPBFieldTextFormatNameCustom = 1 << 6, - // Indicates the field has an enum descriptor. - GPBFieldHasEnumDescriptor = 1 << 7, - - // These are not standard protobuf concepts, they are specific to the - // Objective C runtime. - - // These bits are used to mark the field as a map and what the key - // type is. - GPBFieldMapKeyMask = 0xF << 8, - GPBFieldMapKeyInt32 = 1 << 8, - GPBFieldMapKeyInt64 = 2 << 8, - GPBFieldMapKeyUInt32 = 3 << 8, - GPBFieldMapKeyUInt64 = 4 << 8, - GPBFieldMapKeySInt32 = 5 << 8, - GPBFieldMapKeySInt64 = 6 << 8, - GPBFieldMapKeyFixed32 = 7 << 8, - GPBFieldMapKeyFixed64 = 8 << 8, - GPBFieldMapKeySFixed32 = 9 << 8, - GPBFieldMapKeySFixed64 = 10 << 8, - GPBFieldMapKeyBool = 11 << 8, - GPBFieldMapKeyString = 12 << 8, -}; - -// NOTE: The structures defined here have their members ordered to minimize -// their size. This directly impacts the size of apps since these exist per -// field/extension. - -// Describes a single field in a protobuf as it is represented as an ivar. -typedef struct GPBMessageFieldDescription { - // Name of ivar. - const char *name; - union { - const char *className; // Name for message class. - // For enums only: If EnumDescriptors are compiled in, it will be that, - // otherwise it will be the verifier. - GPBEnumDescriptorFunc enumDescFunc; - GPBEnumValidationFunc enumVerifier; - } dataTypeSpecific; - // The field number for the ivar. - uint32_t number; - // The index (in bits) into _has_storage_. - // >= 0: the bit to use for a value being set. - // = GPBNoHasBit(INT32_MAX): no storage used. - // < 0: in a oneOf, use a full int32 to record the field active. - int32_t hasIndex; - // Offset of the variable into it's structure struct. - uint32_t offset; - // Field flags. Use accessor functions below. - GPBFieldFlags flags; - // Data type of the ivar. - GPBDataType dataType; -} GPBMessageFieldDescription; - -// Fields in messages defined in a 'proto2' syntax file can provide a default -// value. This struct provides the default along with the field info. -typedef struct GPBMessageFieldDescriptionWithDefault { - // Default value for the ivar. - GPBGenericValue defaultValue; - - GPBMessageFieldDescription core; -} GPBMessageFieldDescriptionWithDefault; - -// Describes attributes of the extension. -typedef NS_OPTIONS(uint8_t, GPBExtensionOptions) { - GPBExtensionNone = 0, - // These map to standard protobuf concepts. - GPBExtensionRepeated = 1 << 0, - GPBExtensionPacked = 1 << 1, - GPBExtensionSetWireFormat = 1 << 2, -}; - -// An extension -typedef struct GPBExtensionDescription { - GPBGenericValue defaultValue; - const char *singletonName; - const char *extendedClass; - const char *messageOrGroupClassName; - GPBEnumDescriptorFunc enumDescriptorFunc; - int32_t fieldNumber; - GPBDataType dataType; - GPBExtensionOptions options; -} GPBExtensionDescription; - -typedef NS_OPTIONS(uint32_t, GPBDescriptorInitializationFlags) { - GPBDescriptorInitializationFlag_None = 0, - GPBDescriptorInitializationFlag_FieldsWithDefault = 1 << 0, - GPBDescriptorInitializationFlag_WireFormat = 1 << 1, -}; - -@interface GPBDescriptor () { - @package - NSArray *fields_; - NSArray *oneofs_; - uint32_t storageSize_; -} - -// fieldDescriptions have to be long lived, they are held as raw pointers. -+ (instancetype) - allocDescriptorForClass:(Class)messageClass - rootClass:(Class)rootClass - file:(GPBFileDescriptor *)file - fields:(void *)fieldDescriptions - fieldCount:(uint32_t)fieldCount - storageSize:(uint32_t)storageSize - flags:(GPBDescriptorInitializationFlags)flags; - -- (instancetype)initWithClass:(Class)messageClass - file:(GPBFileDescriptor *)file - fields:(NSArray *)fields - storageSize:(uint32_t)storage - wireFormat:(BOOL)wireFormat; - -// Called right after init to provide extra information to avoid init having -// an explosion of args. These pointers are recorded, so they are expected -// to live for the lifetime of the app. -- (void)setupOneofs:(const char **)oneofNames - count:(uint32_t)count - firstHasIndex:(int32_t)firstHasIndex; -- (void)setupExtraTextInfo:(const char *)extraTextFormatInfo; -- (void)setupExtensionRanges:(const GPBExtensionRange *)ranges count:(int32_t)count; -- (void)setupContainingMessageClassName:(const char *)msgClassName; -- (void)setupMessageClassNameSuffix:(NSString *)suffix; - -@end - -@interface GPBFileDescriptor () -- (instancetype)initWithPackage:(NSString *)package - objcPrefix:(NSString *)objcPrefix - syntax:(GPBFileSyntax)syntax; -- (instancetype)initWithPackage:(NSString *)package - syntax:(GPBFileSyntax)syntax; -@end - -@interface GPBOneofDescriptor () { - @package - const char *name_; - NSArray *fields_; - SEL caseSel_; -} -// name must be long lived. -- (instancetype)initWithName:(const char *)name fields:(NSArray *)fields; -@end - -@interface GPBFieldDescriptor () { - @package - GPBMessageFieldDescription *description_; - GPB_UNSAFE_UNRETAINED GPBOneofDescriptor *containingOneof_; - - SEL getSel_; - SEL setSel_; - SEL hasOrCountSel_; // *Count for map<>/repeated fields, has* otherwise. - SEL setHasSel_; -} - -// Single initializer -// description has to be long lived, it is held as a raw pointer. -- (instancetype)initWithFieldDescription:(void *)description - includesDefault:(BOOL)includesDefault - syntax:(GPBFileSyntax)syntax; -@end - -@interface GPBEnumDescriptor () -// valueNames, values and extraTextFormatInfo have to be long lived, they are -// held as raw pointers. -+ (instancetype) - allocDescriptorForName:(NSString *)name - valueNames:(const char *)valueNames - values:(const int32_t *)values - count:(uint32_t)valueCount - enumVerifier:(GPBEnumValidationFunc)enumVerifier; -+ (instancetype) - allocDescriptorForName:(NSString *)name - valueNames:(const char *)valueNames - values:(const int32_t *)values - count:(uint32_t)valueCount - enumVerifier:(GPBEnumValidationFunc)enumVerifier - extraTextFormatInfo:(const char *)extraTextFormatInfo; - -- (instancetype)initWithName:(NSString *)name - valueNames:(const char *)valueNames - values:(const int32_t *)values - count:(uint32_t)valueCount - enumVerifier:(GPBEnumValidationFunc)enumVerifier; -@end - -@interface GPBExtensionDescriptor () { - @package - GPBExtensionDescription *description_; -} -@property(nonatomic, readonly) GPBWireFormat wireType; - -// For repeated extensions, alternateWireType is the wireType with the opposite -// value for the packable property. i.e. - if the extension was marked packed -// it would be the wire type for unpacked; if the extension was marked unpacked, -// it would be the wire type for packed. -@property(nonatomic, readonly) GPBWireFormat alternateWireType; - -// description has to be long lived, it is held as a raw pointer. -- (instancetype)initWithExtensionDescription: - (GPBExtensionDescription *)description; -- (NSComparisonResult)compareByFieldNumber:(GPBExtensionDescriptor *)other; -@end - -CF_EXTERN_C_BEGIN - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -GPB_INLINE BOOL GPBFieldIsMapOrArray(GPBFieldDescriptor *field) { - return (field->description_->flags & - (GPBFieldRepeated | GPBFieldMapKeyMask)) != 0; -} - -GPB_INLINE GPBDataType GPBGetFieldDataType(GPBFieldDescriptor *field) { - return field->description_->dataType; -} - -GPB_INLINE int32_t GPBFieldHasIndex(GPBFieldDescriptor *field) { - return field->description_->hasIndex; -} - -GPB_INLINE uint32_t GPBFieldNumber(GPBFieldDescriptor *field) { - return field->description_->number; -} - -#pragma clang diagnostic pop - -uint32_t GPBFieldTag(GPBFieldDescriptor *self); - -// For repeated fields, alternateWireType is the wireType with the opposite -// value for the packable property. i.e. - if the field was marked packed it -// would be the wire type for unpacked; if the field was marked unpacked, it -// would be the wire type for packed. -uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self); - -GPB_INLINE BOOL GPBPreserveUnknownFields(GPBFileSyntax syntax) { - return syntax != GPBFileSyntaxProto3; -} - -GPB_INLINE BOOL GPBHasPreservingUnknownEnumSemantics(GPBFileSyntax syntax) { - return syntax == GPBFileSyntaxProto3; -} - -GPB_INLINE BOOL GPBExtensionIsRepeated(GPBExtensionDescription *description) { - return (description->options & GPBExtensionRepeated) != 0; -} - -GPB_INLINE BOOL GPBExtensionIsPacked(GPBExtensionDescription *description) { - return (description->options & GPBExtensionPacked) != 0; -} - -GPB_INLINE BOOL GPBExtensionIsWireFormat(GPBExtensionDescription *description) { - return (description->options & GPBExtensionSetWireFormat) != 0; -} - -// Helper for compile time assets. -#ifndef GPBInternalCompileAssert - #if __has_feature(c_static_assert) || __has_extension(c_static_assert) - #define GPBInternalCompileAssert(test, msg) _Static_assert((test), #msg) - #else - // Pre-Xcode 7 support. - #define GPBInternalCompileAssertSymbolInner(line, msg) GPBInternalCompileAssert ## line ## __ ## msg - #define GPBInternalCompileAssertSymbol(line, msg) GPBInternalCompileAssertSymbolInner(line, msg) - #define GPBInternalCompileAssert(test, msg) \ - typedef char GPBInternalCompileAssertSymbol(__LINE__, msg) [ ((test) ? 1 : -1) ] - #endif // __has_feature(c_static_assert) || __has_extension(c_static_assert) -#endif // GPBInternalCompileAssert - -// Sanity check that there isn't padding between the field description -// structures with and without a default. -GPBInternalCompileAssert(sizeof(GPBMessageFieldDescriptionWithDefault) == - (sizeof(GPBGenericValue) + - sizeof(GPBMessageFieldDescription)), - DescriptionsWithDefault_different_size_than_expected); - -CF_EXTERN_C_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDictionary.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDictionary.h deleted file mode 100644 index 9d674150..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDictionary.h +++ /dev/null @@ -1,8570 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBRuntimeTypes.h" - -// Note on naming: for the classes holding numeric values, a more natural -// naming of the method might be things like "-valueForKey:", -// "-setValue:forKey:"; etc. But those selectors are also defined by Key Value -// Coding (KVC) as categories on NSObject. So "overloading" the selectors with -// other meanings can cause warnings (based on compiler settings), but more -// importantly, some of those selector get called as KVC breaks up keypaths. -// So if those selectors are used, using KVC will compile cleanly, but could -// crash as it invokes those selectors with the wrong types of arguments. - -NS_ASSUME_NONNULL_BEGIN - -//%PDDM-EXPAND DECLARE_DICTIONARIES() -// This block of code is generated, do not edit it directly. - -#pragma mark - UInt32 -> UInt32 - -/** - * Class used for map fields of <uint32_t, uint32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt32UInt32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(uint32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt32UInt32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt32UInt32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(uint32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(uint32_t key, uint32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt32UInt32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt32:(uint32_t)value forKey:(uint32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt32ForKey:(uint32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt32 -> Int32 - -/** - * Class used for map fields of <uint32_t, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt32Int32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(uint32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt32s:(const int32_t [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt32Int32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt32s:(const int32_t [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt32Int32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt32:(nullable int32_t *)value forKey:(uint32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(uint32_t key, int32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt32Int32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt32:(int32_t)value forKey:(uint32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt32ForKey:(uint32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt32 -> UInt64 - -/** - * Class used for map fields of <uint32_t, uint64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt32UInt64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(uint32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt32UInt64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt32UInt64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(uint32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(uint32_t key, uint64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt32UInt64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt64:(uint64_t)value forKey:(uint32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt64ForKey:(uint32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt32 -> Int64 - -/** - * Class used for map fields of <uint32_t, int64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt32Int64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(uint32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt64s:(const int64_t [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt32Int64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt64s:(const int64_t [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt32Int64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt64:(nullable int64_t *)value forKey:(uint32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(uint32_t key, int64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt32Int64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt64:(int64_t)value forKey:(uint32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt64ForKey:(uint32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt32 -> Bool - -/** - * Class used for map fields of <uint32_t, BOOL> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt32BoolDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(uint32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithBools:(const BOOL [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt32BoolDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithBools:(const BOOL [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt32BoolDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getBool:(nullable BOOL *)value forKey:(uint32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(uint32_t key, BOOL value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt32BoolDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setBool:(BOOL)value forKey:(uint32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeBoolForKey:(uint32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt32 -> Float - -/** - * Class used for map fields of <uint32_t, float> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt32FloatDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(uint32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithFloats:(const float [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt32FloatDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithFloats:(const float [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt32FloatDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getFloat:(nullable float *)value forKey:(uint32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(uint32_t key, float value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt32FloatDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setFloat:(float)value forKey:(uint32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeFloatForKey:(uint32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt32 -> Double - -/** - * Class used for map fields of <uint32_t, double> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt32DoubleDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(uint32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithDoubles:(const double [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt32DoubleDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithDoubles:(const double [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt32DoubleDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getDouble:(nullable double *)value forKey:(uint32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(uint32_t key, double value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt32DoubleDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setDouble:(double)value forKey:(uint32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeDoubleForKey:(uint32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt32 -> Enum - -/** - * Class used for map fields of <uint32_t, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt32EnumDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; -/** The validation function to check if the enums are valid. */ -@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly instanced dictionary. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param func The enum validation function for the dictionary. - * @param rawValue The raw enum value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(uint32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt32EnumDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -/** - * Initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly initialized dictionary. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly initialized dictionary with the keys and values in it. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly initialized dictionary with the entries from the given - * dictionary in it. - **/ -- (instancetype)initWithDictionary:(GPBUInt32EnumDictionary *)dictionary; - -/** - * Initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly initialized dictionary with the given capacity. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -// These will return kGPBUnrecognizedEnumeratorValue if the value for the key -// is not a valid enumerator as defined by validationFunc. If the actual value is -// desired, use "raw" version of the method. - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getEnum:(nullable int32_t *)value forKey:(uint32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(uint32_t key, int32_t value, BOOL *stop))block; - -/** - * Gets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param rawValue Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getRawValue:(nullable int32_t *)rawValue forKey:(uint32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **rawValue**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(uint32_t key, int32_t rawValue, BOOL *stop))block; - -/** - * Adds the keys and raw enum values from another dictionary. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addRawEntriesFromDictionary:(GPBUInt32EnumDictionary *)otherDictionary; - -// If value is not a valid enumerator as defined by validationFunc, these -// methods will assert in debug, and will log in release and assign the value -// to the default value. Use the rawValue methods below to assign non enumerator -// values. - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setEnum:(int32_t)value forKey:(uint32_t)key; - -/** - * Sets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param rawValue The raw enum value to set. - * @param key The key under which to store the raw enum value. - **/ -- (void)setRawValue:(int32_t)rawValue forKey:(uint32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeEnumForKey:(uint32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt32 -> Object - -/** - * Class used for map fields of <uint32_t, ObjectType> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt32ObjectDictionary<__covariant ObjectType> : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param object The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithObject:(ObjectType)object - forKey:(uint32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param objects The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithObjects:(const ObjectType __nonnull GPB_UNSAFE_UNRETAINED [__nullable])objects - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt32ObjectDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param objects The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithObjects:(const ObjectType __nonnull GPB_UNSAFE_UNRETAINED [__nullable])objects - forKeys:(const uint32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt32ObjectDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Fetches the object stored under the given key. - * - * @param key Key under which the value is stored, if present. - * - * @return The object if found, nil otherwise. - **/ -- (ObjectType)objectForKey:(uint32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **object**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndObjectsUsingBlock: - (void (^)(uint32_t key, ObjectType object, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt32ObjectDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param object The value to set. - * @param key The key under which to store the value. - **/ -- (void)setObject:(ObjectType)object forKey:(uint32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeObjectForKey:(uint32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int32 -> UInt32 - -/** - * Class used for map fields of <int32_t, uint32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt32UInt32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(int32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt32UInt32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt32UInt32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(int32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(int32_t key, uint32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt32UInt32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt32:(uint32_t)value forKey:(int32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt32ForKey:(int32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int32 -> Int32 - -/** - * Class used for map fields of <int32_t, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt32Int32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(int32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt32s:(const int32_t [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt32Int32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt32s:(const int32_t [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt32Int32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt32:(nullable int32_t *)value forKey:(int32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(int32_t key, int32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt32Int32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt32:(int32_t)value forKey:(int32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt32ForKey:(int32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int32 -> UInt64 - -/** - * Class used for map fields of <int32_t, uint64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt32UInt64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(int32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt32UInt64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt32UInt64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(int32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(int32_t key, uint64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt32UInt64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt64:(uint64_t)value forKey:(int32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt64ForKey:(int32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int32 -> Int64 - -/** - * Class used for map fields of <int32_t, int64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt32Int64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(int32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt64s:(const int64_t [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt32Int64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt64s:(const int64_t [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt32Int64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt64:(nullable int64_t *)value forKey:(int32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(int32_t key, int64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt32Int64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt64:(int64_t)value forKey:(int32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt64ForKey:(int32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int32 -> Bool - -/** - * Class used for map fields of <int32_t, BOOL> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt32BoolDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(int32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithBools:(const BOOL [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt32BoolDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithBools:(const BOOL [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt32BoolDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getBool:(nullable BOOL *)value forKey:(int32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(int32_t key, BOOL value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt32BoolDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setBool:(BOOL)value forKey:(int32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeBoolForKey:(int32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int32 -> Float - -/** - * Class used for map fields of <int32_t, float> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt32FloatDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(int32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithFloats:(const float [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt32FloatDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithFloats:(const float [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt32FloatDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getFloat:(nullable float *)value forKey:(int32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(int32_t key, float value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt32FloatDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setFloat:(float)value forKey:(int32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeFloatForKey:(int32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int32 -> Double - -/** - * Class used for map fields of <int32_t, double> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt32DoubleDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(int32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithDoubles:(const double [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt32DoubleDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithDoubles:(const double [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt32DoubleDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getDouble:(nullable double *)value forKey:(int32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(int32_t key, double value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt32DoubleDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setDouble:(double)value forKey:(int32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeDoubleForKey:(int32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int32 -> Enum - -/** - * Class used for map fields of <int32_t, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt32EnumDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; -/** The validation function to check if the enums are valid. */ -@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly instanced dictionary. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param func The enum validation function for the dictionary. - * @param rawValue The raw enum value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(int32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt32EnumDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -/** - * Initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly initialized dictionary. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly initialized dictionary with the keys and values in it. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly initialized dictionary with the entries from the given - * dictionary in it. - **/ -- (instancetype)initWithDictionary:(GPBInt32EnumDictionary *)dictionary; - -/** - * Initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly initialized dictionary with the given capacity. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -// These will return kGPBUnrecognizedEnumeratorValue if the value for the key -// is not a valid enumerator as defined by validationFunc. If the actual value is -// desired, use "raw" version of the method. - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getEnum:(nullable int32_t *)value forKey:(int32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(int32_t key, int32_t value, BOOL *stop))block; - -/** - * Gets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param rawValue Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getRawValue:(nullable int32_t *)rawValue forKey:(int32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **rawValue**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(int32_t key, int32_t rawValue, BOOL *stop))block; - -/** - * Adds the keys and raw enum values from another dictionary. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addRawEntriesFromDictionary:(GPBInt32EnumDictionary *)otherDictionary; - -// If value is not a valid enumerator as defined by validationFunc, these -// methods will assert in debug, and will log in release and assign the value -// to the default value. Use the rawValue methods below to assign non enumerator -// values. - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setEnum:(int32_t)value forKey:(int32_t)key; - -/** - * Sets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param rawValue The raw enum value to set. - * @param key The key under which to store the raw enum value. - **/ -- (void)setRawValue:(int32_t)rawValue forKey:(int32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeEnumForKey:(int32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int32 -> Object - -/** - * Class used for map fields of <int32_t, ObjectType> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt32ObjectDictionary<__covariant ObjectType> : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param object The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithObject:(ObjectType)object - forKey:(int32_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param objects The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithObjects:(const ObjectType __nonnull GPB_UNSAFE_UNRETAINED [__nullable])objects - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt32ObjectDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param objects The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithObjects:(const ObjectType __nonnull GPB_UNSAFE_UNRETAINED [__nullable])objects - forKeys:(const int32_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt32ObjectDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Fetches the object stored under the given key. - * - * @param key Key under which the value is stored, if present. - * - * @return The object if found, nil otherwise. - **/ -- (ObjectType)objectForKey:(int32_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **object**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndObjectsUsingBlock: - (void (^)(int32_t key, ObjectType object, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt32ObjectDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param object The value to set. - * @param key The key under which to store the value. - **/ -- (void)setObject:(ObjectType)object forKey:(int32_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeObjectForKey:(int32_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt64 -> UInt32 - -/** - * Class used for map fields of <uint64_t, uint32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt64UInt32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(uint64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt64UInt32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt64UInt32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(uint64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(uint64_t key, uint32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt64UInt32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt32:(uint32_t)value forKey:(uint64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt32ForKey:(uint64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt64 -> Int32 - -/** - * Class used for map fields of <uint64_t, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt64Int32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(uint64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt32s:(const int32_t [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt64Int32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt32s:(const int32_t [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt64Int32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt32:(nullable int32_t *)value forKey:(uint64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(uint64_t key, int32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt64Int32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt32:(int32_t)value forKey:(uint64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt32ForKey:(uint64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt64 -> UInt64 - -/** - * Class used for map fields of <uint64_t, uint64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt64UInt64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(uint64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt64UInt64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt64UInt64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(uint64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(uint64_t key, uint64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt64UInt64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt64:(uint64_t)value forKey:(uint64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt64ForKey:(uint64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt64 -> Int64 - -/** - * Class used for map fields of <uint64_t, int64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt64Int64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(uint64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt64s:(const int64_t [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt64Int64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt64s:(const int64_t [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt64Int64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt64:(nullable int64_t *)value forKey:(uint64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(uint64_t key, int64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt64Int64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt64:(int64_t)value forKey:(uint64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt64ForKey:(uint64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt64 -> Bool - -/** - * Class used for map fields of <uint64_t, BOOL> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt64BoolDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(uint64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithBools:(const BOOL [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt64BoolDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithBools:(const BOOL [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt64BoolDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getBool:(nullable BOOL *)value forKey:(uint64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(uint64_t key, BOOL value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt64BoolDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setBool:(BOOL)value forKey:(uint64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeBoolForKey:(uint64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt64 -> Float - -/** - * Class used for map fields of <uint64_t, float> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt64FloatDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(uint64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithFloats:(const float [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt64FloatDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithFloats:(const float [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt64FloatDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getFloat:(nullable float *)value forKey:(uint64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(uint64_t key, float value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt64FloatDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setFloat:(float)value forKey:(uint64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeFloatForKey:(uint64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt64 -> Double - -/** - * Class used for map fields of <uint64_t, double> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt64DoubleDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(uint64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithDoubles:(const double [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt64DoubleDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithDoubles:(const double [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt64DoubleDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getDouble:(nullable double *)value forKey:(uint64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(uint64_t key, double value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt64DoubleDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setDouble:(double)value forKey:(uint64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeDoubleForKey:(uint64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt64 -> Enum - -/** - * Class used for map fields of <uint64_t, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt64EnumDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; -/** The validation function to check if the enums are valid. */ -@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly instanced dictionary. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param func The enum validation function for the dictionary. - * @param rawValue The raw enum value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(uint64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt64EnumDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -/** - * Initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly initialized dictionary. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly initialized dictionary with the keys and values in it. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly initialized dictionary with the entries from the given - * dictionary in it. - **/ -- (instancetype)initWithDictionary:(GPBUInt64EnumDictionary *)dictionary; - -/** - * Initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly initialized dictionary with the given capacity. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -// These will return kGPBUnrecognizedEnumeratorValue if the value for the key -// is not a valid enumerator as defined by validationFunc. If the actual value is -// desired, use "raw" version of the method. - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getEnum:(nullable int32_t *)value forKey:(uint64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(uint64_t key, int32_t value, BOOL *stop))block; - -/** - * Gets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param rawValue Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getRawValue:(nullable int32_t *)rawValue forKey:(uint64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **rawValue**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(uint64_t key, int32_t rawValue, BOOL *stop))block; - -/** - * Adds the keys and raw enum values from another dictionary. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addRawEntriesFromDictionary:(GPBUInt64EnumDictionary *)otherDictionary; - -// If value is not a valid enumerator as defined by validationFunc, these -// methods will assert in debug, and will log in release and assign the value -// to the default value. Use the rawValue methods below to assign non enumerator -// values. - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setEnum:(int32_t)value forKey:(uint64_t)key; - -/** - * Sets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param rawValue The raw enum value to set. - * @param key The key under which to store the raw enum value. - **/ -- (void)setRawValue:(int32_t)rawValue forKey:(uint64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeEnumForKey:(uint64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - UInt64 -> Object - -/** - * Class used for map fields of <uint64_t, ObjectType> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBUInt64ObjectDictionary<__covariant ObjectType> : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param object The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithObject:(ObjectType)object - forKey:(uint64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param objects The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithObjects:(const ObjectType __nonnull GPB_UNSAFE_UNRETAINED [__nullable])objects - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBUInt64ObjectDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param objects The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithObjects:(const ObjectType __nonnull GPB_UNSAFE_UNRETAINED [__nullable])objects - forKeys:(const uint64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBUInt64ObjectDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Fetches the object stored under the given key. - * - * @param key Key under which the value is stored, if present. - * - * @return The object if found, nil otherwise. - **/ -- (ObjectType)objectForKey:(uint64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **object**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndObjectsUsingBlock: - (void (^)(uint64_t key, ObjectType object, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBUInt64ObjectDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param object The value to set. - * @param key The key under which to store the value. - **/ -- (void)setObject:(ObjectType)object forKey:(uint64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeObjectForKey:(uint64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int64 -> UInt32 - -/** - * Class used for map fields of <int64_t, uint32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt64UInt32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(int64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt64UInt32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt64UInt32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(int64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(int64_t key, uint32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt64UInt32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt32:(uint32_t)value forKey:(int64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt32ForKey:(int64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int64 -> Int32 - -/** - * Class used for map fields of <int64_t, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt64Int32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(int64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt32s:(const int32_t [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt64Int32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt32s:(const int32_t [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt64Int32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt32:(nullable int32_t *)value forKey:(int64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(int64_t key, int32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt64Int32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt32:(int32_t)value forKey:(int64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt32ForKey:(int64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int64 -> UInt64 - -/** - * Class used for map fields of <int64_t, uint64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt64UInt64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(int64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt64UInt64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt64UInt64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(int64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(int64_t key, uint64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt64UInt64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt64:(uint64_t)value forKey:(int64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt64ForKey:(int64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int64 -> Int64 - -/** - * Class used for map fields of <int64_t, int64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt64Int64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(int64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt64s:(const int64_t [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt64Int64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt64s:(const int64_t [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt64Int64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt64:(nullable int64_t *)value forKey:(int64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(int64_t key, int64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt64Int64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt64:(int64_t)value forKey:(int64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt64ForKey:(int64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int64 -> Bool - -/** - * Class used for map fields of <int64_t, BOOL> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt64BoolDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(int64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithBools:(const BOOL [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt64BoolDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithBools:(const BOOL [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt64BoolDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getBool:(nullable BOOL *)value forKey:(int64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(int64_t key, BOOL value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt64BoolDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setBool:(BOOL)value forKey:(int64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeBoolForKey:(int64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int64 -> Float - -/** - * Class used for map fields of <int64_t, float> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt64FloatDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(int64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithFloats:(const float [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt64FloatDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithFloats:(const float [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt64FloatDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getFloat:(nullable float *)value forKey:(int64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(int64_t key, float value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt64FloatDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setFloat:(float)value forKey:(int64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeFloatForKey:(int64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int64 -> Double - -/** - * Class used for map fields of <int64_t, double> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt64DoubleDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(int64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithDoubles:(const double [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt64DoubleDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithDoubles:(const double [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt64DoubleDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getDouble:(nullable double *)value forKey:(int64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(int64_t key, double value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt64DoubleDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setDouble:(double)value forKey:(int64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeDoubleForKey:(int64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int64 -> Enum - -/** - * Class used for map fields of <int64_t, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt64EnumDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; -/** The validation function to check if the enums are valid. */ -@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly instanced dictionary. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param func The enum validation function for the dictionary. - * @param rawValue The raw enum value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(int64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt64EnumDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -/** - * Initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly initialized dictionary. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly initialized dictionary with the keys and values in it. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly initialized dictionary with the entries from the given - * dictionary in it. - **/ -- (instancetype)initWithDictionary:(GPBInt64EnumDictionary *)dictionary; - -/** - * Initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly initialized dictionary with the given capacity. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -// These will return kGPBUnrecognizedEnumeratorValue if the value for the key -// is not a valid enumerator as defined by validationFunc. If the actual value is -// desired, use "raw" version of the method. - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getEnum:(nullable int32_t *)value forKey:(int64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(int64_t key, int32_t value, BOOL *stop))block; - -/** - * Gets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param rawValue Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getRawValue:(nullable int32_t *)rawValue forKey:(int64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **rawValue**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(int64_t key, int32_t rawValue, BOOL *stop))block; - -/** - * Adds the keys and raw enum values from another dictionary. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addRawEntriesFromDictionary:(GPBInt64EnumDictionary *)otherDictionary; - -// If value is not a valid enumerator as defined by validationFunc, these -// methods will assert in debug, and will log in release and assign the value -// to the default value. Use the rawValue methods below to assign non enumerator -// values. - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setEnum:(int32_t)value forKey:(int64_t)key; - -/** - * Sets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param rawValue The raw enum value to set. - * @param key The key under which to store the raw enum value. - **/ -- (void)setRawValue:(int32_t)rawValue forKey:(int64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeEnumForKey:(int64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Int64 -> Object - -/** - * Class used for map fields of <int64_t, ObjectType> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBInt64ObjectDictionary<__covariant ObjectType> : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param object The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithObject:(ObjectType)object - forKey:(int64_t)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param objects The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithObjects:(const ObjectType __nonnull GPB_UNSAFE_UNRETAINED [__nullable])objects - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBInt64ObjectDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param objects The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithObjects:(const ObjectType __nonnull GPB_UNSAFE_UNRETAINED [__nullable])objects - forKeys:(const int64_t [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBInt64ObjectDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Fetches the object stored under the given key. - * - * @param key Key under which the value is stored, if present. - * - * @return The object if found, nil otherwise. - **/ -- (ObjectType)objectForKey:(int64_t)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **object**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndObjectsUsingBlock: - (void (^)(int64_t key, ObjectType object, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBInt64ObjectDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param object The value to set. - * @param key The key under which to store the value. - **/ -- (void)setObject:(ObjectType)object forKey:(int64_t)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeObjectForKey:(int64_t)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Bool -> UInt32 - -/** - * Class used for map fields of <BOOL, uint32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBBoolUInt32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(BOOL)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBBoolUInt32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBBoolUInt32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(BOOL)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(BOOL key, uint32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBBoolUInt32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt32:(uint32_t)value forKey:(BOOL)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt32ForKey:(BOOL)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Bool -> Int32 - -/** - * Class used for map fields of <BOOL, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBBoolInt32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(BOOL)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt32s:(const int32_t [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBBoolInt32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt32s:(const int32_t [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBBoolInt32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt32:(nullable int32_t *)value forKey:(BOOL)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(BOOL key, int32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBBoolInt32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt32:(int32_t)value forKey:(BOOL)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt32ForKey:(BOOL)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Bool -> UInt64 - -/** - * Class used for map fields of <BOOL, uint64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBBoolUInt64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(BOOL)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBBoolUInt64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBBoolUInt64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(BOOL)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(BOOL key, uint64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBBoolUInt64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt64:(uint64_t)value forKey:(BOOL)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt64ForKey:(BOOL)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Bool -> Int64 - -/** - * Class used for map fields of <BOOL, int64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBBoolInt64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(BOOL)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt64s:(const int64_t [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBBoolInt64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt64s:(const int64_t [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBBoolInt64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt64:(nullable int64_t *)value forKey:(BOOL)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(BOOL key, int64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBBoolInt64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt64:(int64_t)value forKey:(BOOL)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt64ForKey:(BOOL)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Bool -> Bool - -/** - * Class used for map fields of <BOOL, BOOL> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBBoolBoolDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(BOOL)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithBools:(const BOOL [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBBoolBoolDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithBools:(const BOOL [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBBoolBoolDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getBool:(nullable BOOL *)value forKey:(BOOL)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(BOOL key, BOOL value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBBoolBoolDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setBool:(BOOL)value forKey:(BOOL)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeBoolForKey:(BOOL)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Bool -> Float - -/** - * Class used for map fields of <BOOL, float> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBBoolFloatDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(BOOL)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithFloats:(const float [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBBoolFloatDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithFloats:(const float [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBBoolFloatDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getFloat:(nullable float *)value forKey:(BOOL)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(BOOL key, float value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBBoolFloatDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setFloat:(float)value forKey:(BOOL)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeFloatForKey:(BOOL)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Bool -> Double - -/** - * Class used for map fields of <BOOL, double> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBBoolDoubleDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(BOOL)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithDoubles:(const double [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBBoolDoubleDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithDoubles:(const double [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBBoolDoubleDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getDouble:(nullable double *)value forKey:(BOOL)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(BOOL key, double value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBBoolDoubleDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setDouble:(double)value forKey:(BOOL)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeDoubleForKey:(BOOL)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Bool -> Enum - -/** - * Class used for map fields of <BOOL, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBBoolEnumDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; -/** The validation function to check if the enums are valid. */ -@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly instanced dictionary. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param func The enum validation function for the dictionary. - * @param rawValue The raw enum value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(BOOL)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBBoolEnumDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -/** - * Initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly initialized dictionary. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly initialized dictionary with the keys and values in it. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly initialized dictionary with the entries from the given - * dictionary in it. - **/ -- (instancetype)initWithDictionary:(GPBBoolEnumDictionary *)dictionary; - -/** - * Initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly initialized dictionary with the given capacity. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -// These will return kGPBUnrecognizedEnumeratorValue if the value for the key -// is not a valid enumerator as defined by validationFunc. If the actual value is -// desired, use "raw" version of the method. - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getEnum:(nullable int32_t *)value forKey:(BOOL)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(BOOL key, int32_t value, BOOL *stop))block; - -/** - * Gets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param rawValue Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getRawValue:(nullable int32_t *)rawValue forKey:(BOOL)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **rawValue**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(BOOL key, int32_t rawValue, BOOL *stop))block; - -/** - * Adds the keys and raw enum values from another dictionary. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addRawEntriesFromDictionary:(GPBBoolEnumDictionary *)otherDictionary; - -// If value is not a valid enumerator as defined by validationFunc, these -// methods will assert in debug, and will log in release and assign the value -// to the default value. Use the rawValue methods below to assign non enumerator -// values. - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setEnum:(int32_t)value forKey:(BOOL)key; - -/** - * Sets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param rawValue The raw enum value to set. - * @param key The key under which to store the raw enum value. - **/ -- (void)setRawValue:(int32_t)rawValue forKey:(BOOL)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeEnumForKey:(BOOL)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - Bool -> Object - -/** - * Class used for map fields of <BOOL, ObjectType> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBBoolObjectDictionary<__covariant ObjectType> : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param object The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithObject:(ObjectType)object - forKey:(BOOL)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param objects The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithObjects:(const ObjectType __nonnull GPB_UNSAFE_UNRETAINED [__nullable])objects - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBBoolObjectDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param objects The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithObjects:(const ObjectType __nonnull GPB_UNSAFE_UNRETAINED [__nullable])objects - forKeys:(const BOOL [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBBoolObjectDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Fetches the object stored under the given key. - * - * @param key Key under which the value is stored, if present. - * - * @return The object if found, nil otherwise. - **/ -- (ObjectType)objectForKey:(BOOL)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **object**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndObjectsUsingBlock: - (void (^)(BOOL key, ObjectType object, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBBoolObjectDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param object The value to set. - * @param key The key under which to store the value. - **/ -- (void)setObject:(ObjectType)object forKey:(BOOL)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeObjectForKey:(BOOL)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - String -> UInt32 - -/** - * Class used for map fields of <NSString, uint32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBStringUInt32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(NSString *)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBStringUInt32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt32s:(const uint32_t [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBStringUInt32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(NSString *)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(NSString *key, uint32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBStringUInt32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt32:(uint32_t)value forKey:(NSString *)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt32ForKey:(NSString *)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - String -> Int32 - -/** - * Class used for map fields of <NSString, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBStringInt32Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(NSString *)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt32s:(const int32_t [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBStringInt32Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt32s:(const int32_t [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBStringInt32Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt32:(nullable int32_t *)value forKey:(NSString *)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(NSString *key, int32_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBStringInt32Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt32:(int32_t)value forKey:(NSString *)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt32ForKey:(NSString *)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - String -> UInt64 - -/** - * Class used for map fields of <NSString, uint64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBStringUInt64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(NSString *)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBStringUInt64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithUInt64s:(const uint64_t [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBStringUInt64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(NSString *)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(NSString *key, uint64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBStringUInt64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setUInt64:(uint64_t)value forKey:(NSString *)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeUInt64ForKey:(NSString *)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - String -> Int64 - -/** - * Class used for map fields of <NSString, int64_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBStringInt64Dictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(NSString *)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithInt64s:(const int64_t [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBStringInt64Dictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithInt64s:(const int64_t [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBStringInt64Dictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getInt64:(nullable int64_t *)value forKey:(NSString *)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(NSString *key, int64_t value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBStringInt64Dictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setInt64:(int64_t)value forKey:(NSString *)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeInt64ForKey:(NSString *)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - String -> Bool - -/** - * Class used for map fields of <NSString, BOOL> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBStringBoolDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(NSString *)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithBools:(const BOOL [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBStringBoolDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithBools:(const BOOL [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBStringBoolDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getBool:(nullable BOOL *)value forKey:(NSString *)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(NSString *key, BOOL value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBStringBoolDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setBool:(BOOL)value forKey:(NSString *)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeBoolForKey:(NSString *)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - String -> Float - -/** - * Class used for map fields of <NSString, float> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBStringFloatDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(NSString *)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithFloats:(const float [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBStringFloatDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithFloats:(const float [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBStringFloatDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getFloat:(nullable float *)value forKey:(NSString *)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(NSString *key, float value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBStringFloatDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setFloat:(float)value forKey:(NSString *)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeFloatForKey:(NSString *)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - String -> Double - -/** - * Class used for map fields of <NSString, double> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBStringDoubleDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param value The value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(NSString *)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param values The values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithDoubles:(const double [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBStringDoubleDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; - -/** - * Initializes this dictionary, copying the given values and keys. - * - * @param values The values to be placed in this dictionary. - * @param keys The keys under which to store the values. - * @param count The number of elements to copy into the dictionary. - * - * @return A newly initialized dictionary with a copy of the values and keys. - **/ -- (instancetype)initWithDoubles:(const double [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes this dictionary, copying the entries from the given dictionary. - * - * @param dictionary Dictionary containing the entries to add to this dictionary. - * - * @return A newly initialized dictionary with the entries of the given dictionary. - **/ -- (instancetype)initWithDictionary:(GPBStringDoubleDictionary *)dictionary; - -/** - * Initializes this dictionary with the requested capacity. - * - * @param numItems Number of items needed for this dictionary. - * - * @return A newly initialized dictionary with the requested capacity. - **/ -- (instancetype)initWithCapacity:(NSUInteger)numItems; - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getDouble:(nullable double *)value forKey:(NSString *)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(NSString *key, double value, BOOL *stop))block; - -/** - * Adds the keys and values from another dictionary. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addEntriesFromDictionary:(GPBStringDoubleDictionary *)otherDictionary; - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setDouble:(double)value forKey:(NSString *)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeDoubleForKey:(NSString *)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -#pragma mark - String -> Enum - -/** - * Class used for map fields of <NSString, int32_t> - * values. This performs better than boxing into NSNumbers in NSDictionaries. - * - * @note This class is not meant to be subclassed. - **/ -@interface GPBStringEnumDictionary : NSObject <NSCopying> - -/** Number of entries stored in this dictionary. */ -@property(nonatomic, readonly) NSUInteger count; -/** The validation function to check if the enums are valid. */ -@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc; - -/** - * @return A newly instanced and empty dictionary. - **/ -+ (instancetype)dictionary; - -/** - * Creates and initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly instanced dictionary. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Creates and initializes a dictionary with the single entry given. - * - * @param func The enum validation function for the dictionary. - * @param rawValue The raw enum value to be placed in the dictionary. - * @param key The key under which to store the value. - * - * @return A newly instanced dictionary with the key and value in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(NSString *)key; - -/** - * Creates and initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly instanced dictionary with the keys and values in it. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count; - -/** - * Creates and initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly instanced dictionary with the entries from the given - * dictionary in it. - **/ -+ (instancetype)dictionaryWithDictionary:(GPBStringEnumDictionary *)dictionary; - -/** - * Creates and initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly instanced dictionary with the given capacity. - **/ -+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -/** - * Initializes a dictionary with the given validation function. - * - * @param func The enum validation function for the dictionary. - * - * @return A newly initialized dictionary. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func; - -/** - * Initializes a dictionary with the entries given. - * - * @param func The enum validation function for the dictionary. - * @param values The raw enum values values to be placed in the dictionary. - * @param keys The keys under which to store the values. - * @param count The number of entries to store in the dictionary. - * - * @return A newly initialized dictionary with the keys and values in it. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - rawValues:(const int32_t [__nullable])values - forKeys:(const NSString * __nonnull GPB_UNSAFE_UNRETAINED [__nullable])keys - count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; - -/** - * Initializes a dictionary with the entries from the given. - * dictionary. - * - * @param dictionary Dictionary containing the entries to add to the dictionary. - * - * @return A newly initialized dictionary with the entries from the given - * dictionary in it. - **/ -- (instancetype)initWithDictionary:(GPBStringEnumDictionary *)dictionary; - -/** - * Initializes a dictionary with the given capacity. - * - * @param func The enum validation function for the dictionary. - * @param numItems Capacity needed for the dictionary. - * - * @return A newly initialized dictionary with the given capacity. - **/ -- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems; - -// These will return kGPBUnrecognizedEnumeratorValue if the value for the key -// is not a valid enumerator as defined by validationFunc. If the actual value is -// desired, use "raw" version of the method. - -/** - * Gets the value for the given key. - * - * @param value Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getEnum:(nullable int32_t *)value forKey:(NSString *)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **value**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(NSString *key, int32_t value, BOOL *stop))block; - -/** - * Gets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param rawValue Pointer into which the value will be set, if found. - * @param key Key under which the value is stored, if present. - * - * @return YES if the key was found and the value was copied, NO otherwise. - **/ -- (BOOL)getRawValue:(nullable int32_t *)rawValue forKey:(NSString *)key; - -/** - * Enumerates the keys and values on this dictionary with the given block. - * - * @note This method bypass the validationFunc to enable the access of values that - * were not known at the time the binary was compiled. - * - * @param block The block to enumerate with. - * **key**: The key for the current entry. - * **rawValue**: The value for the current entry - * **stop**: A pointer to a boolean that when set stops the enumeration. - **/ -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(NSString *key, int32_t rawValue, BOOL *stop))block; - -/** - * Adds the keys and raw enum values from another dictionary. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param otherDictionary Dictionary containing entries to be added to this - * dictionary. - **/ -- (void)addRawEntriesFromDictionary:(GPBStringEnumDictionary *)otherDictionary; - -// If value is not a valid enumerator as defined by validationFunc, these -// methods will assert in debug, and will log in release and assign the value -// to the default value. Use the rawValue methods below to assign non enumerator -// values. - -/** - * Sets the value for the given key. - * - * @param value The value to set. - * @param key The key under which to store the value. - **/ -- (void)setEnum:(int32_t)value forKey:(NSString *)key; - -/** - * Sets the raw enum value for the given key. - * - * @note This method bypass the validationFunc to enable the setting of values that - * were not known at the time the binary was compiled. - * - * @param rawValue The raw enum value to set. - * @param key The key under which to store the raw enum value. - **/ -- (void)setRawValue:(int32_t)rawValue forKey:(NSString *)key; - -/** - * Removes the entry for the given key. - * - * @param aKey Key to be removed from this dictionary. - **/ -- (void)removeEnumForKey:(NSString *)aKey; - -/** - * Removes all entries in this dictionary. - **/ -- (void)removeAll; - -@end - -//%PDDM-EXPAND-END DECLARE_DICTIONARIES() - -NS_ASSUME_NONNULL_END - -//%PDDM-DEFINE DECLARE_DICTIONARIES() -//%DICTIONARY_INTERFACES_FOR_POD_KEY(UInt32, uint32_t) -//%DICTIONARY_INTERFACES_FOR_POD_KEY(Int32, int32_t) -//%DICTIONARY_INTERFACES_FOR_POD_KEY(UInt64, uint64_t) -//%DICTIONARY_INTERFACES_FOR_POD_KEY(Int64, int64_t) -//%DICTIONARY_INTERFACES_FOR_POD_KEY(Bool, BOOL) -//%DICTIONARY_POD_INTERFACES_FOR_KEY(String, NSString, *, OBJECT) -//%PDDM-DEFINE DICTIONARY_INTERFACES_FOR_POD_KEY(KEY_NAME, KEY_TYPE) -//%DICTIONARY_POD_INTERFACES_FOR_KEY(KEY_NAME, KEY_TYPE, , POD) -//%DICTIONARY_POD_KEY_TO_OBJECT_INTERFACE(KEY_NAME, KEY_TYPE, Object, ObjectType) -//%PDDM-DEFINE DICTIONARY_POD_INTERFACES_FOR_KEY(KEY_NAME, KEY_TYPE, KisP, KHELPER) -//%DICTIONARY_KEY_TO_POD_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, UInt32, uint32_t) -//%DICTIONARY_KEY_TO_POD_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, Int32, int32_t) -//%DICTIONARY_KEY_TO_POD_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, UInt64, uint64_t) -//%DICTIONARY_KEY_TO_POD_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, Int64, int64_t) -//%DICTIONARY_KEY_TO_POD_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, Bool, BOOL) -//%DICTIONARY_KEY_TO_POD_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, Float, float) -//%DICTIONARY_KEY_TO_POD_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, Double, double) -//%DICTIONARY_KEY_TO_ENUM_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, Enum, int32_t) -//%PDDM-DEFINE DICTIONARY_KEY_TO_POD_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, VALUE_NAME, VALUE_TYPE) -//%DICTIONARY_COMMON_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, VALUE_NAME, VALUE_TYPE, POD, VALUE_NAME, value) -//%PDDM-DEFINE DICTIONARY_POD_KEY_TO_OBJECT_INTERFACE(KEY_NAME, KEY_TYPE, VALUE_NAME, VALUE_TYPE) -//%DICTIONARY_COMMON_INTERFACE(KEY_NAME, KEY_TYPE, , POD, VALUE_NAME, VALUE_TYPE, OBJECT, Object, object) -//%PDDM-DEFINE VALUE_FOR_KEY_POD(KEY_TYPE, VALUE_TYPE, VNAME) -//%/** -//% * Gets the value for the given key. -//% * -//% * @param value Pointer into which the value will be set, if found. -//% * @param key Key under which the value is stored, if present. -//% * -//% * @return YES if the key was found and the value was copied, NO otherwise. -//% **/ -//%- (BOOL)get##VNAME##:(nullable VALUE_TYPE *)value forKey:(KEY_TYPE)key; -//%PDDM-DEFINE VALUE_FOR_KEY_OBJECT(KEY_TYPE, VALUE_TYPE, VNAME) -//%/** -//% * Fetches the object stored under the given key. -//% * -//% * @param key Key under which the value is stored, if present. -//% * -//% * @return The object if found, nil otherwise. -//% **/ -//%- (VALUE_TYPE)objectForKey:(KEY_TYPE)key; -//%PDDM-DEFINE VALUE_FOR_KEY_Enum(KEY_TYPE, VALUE_TYPE, VNAME) -//%VALUE_FOR_KEY_POD(KEY_TYPE, VALUE_TYPE, VNAME) -//%PDDM-DEFINE ARRAY_ARG_MODIFIERPOD() -// Nothing -//%PDDM-DEFINE ARRAY_ARG_MODIFIEREnum() -// Nothing -//%PDDM-DEFINE ARRAY_ARG_MODIFIEROBJECT() -//%__nonnull GPB_UNSAFE_UNRETAINED ## -//%PDDM-DEFINE DICTIONARY_CLASS_DECLPOD(KEY_NAME, VALUE_NAME, VALUE_TYPE) -//%GPB##KEY_NAME##VALUE_NAME##Dictionary -//%PDDM-DEFINE DICTIONARY_CLASS_DECLEnum(KEY_NAME, VALUE_NAME, VALUE_TYPE) -//%GPB##KEY_NAME##VALUE_NAME##Dictionary -//%PDDM-DEFINE DICTIONARY_CLASS_DECLOBJECT(KEY_NAME, VALUE_NAME, VALUE_TYPE) -//%GPB##KEY_NAME##VALUE_NAME##Dictionary<__covariant VALUE_TYPE> -//%PDDM-DEFINE DICTIONARY_COMMON_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, VALUE_NAME, VALUE_TYPE, VHELPER, VNAME, VNAME_VAR) -//%#pragma mark - KEY_NAME -> VALUE_NAME -//% -//%/** -//% * Class used for map fields of <##KEY_TYPE##, ##VALUE_TYPE##> -//% * values. This performs better than boxing into NSNumbers in NSDictionaries. -//% * -//% * @note This class is not meant to be subclassed. -//% **/ -//%@interface DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) : NSObject <NSCopying> -//% -//%/** Number of entries stored in this dictionary. */ -//%@property(nonatomic, readonly) NSUInteger count; -//% -//%/** -//% * @return A newly instanced and empty dictionary. -//% **/ -//%+ (instancetype)dictionary; -//% -//%/** -//% * Creates and initializes a dictionary with the single entry given. -//% * -//% * @param ##VNAME_VAR The value to be placed in the dictionary. -//% * @param key ##VNAME_VAR$S## The key under which to store the value. -//% * -//% * @return A newly instanced dictionary with the key and value in it. -//% **/ -//%+ (instancetype)dictionaryWith##VNAME##:(VALUE_TYPE)##VNAME_VAR -//% ##VNAME$S## forKey:(KEY_TYPE##KisP$S##KisP)key; -//% -//%/** -//% * Creates and initializes a dictionary with the entries given. -//% * -//% * @param ##VNAME_VAR##s The values to be placed in the dictionary. -//% * @param keys ##VNAME_VAR$S## The keys under which to store the values. -//% * @param count ##VNAME_VAR$S## The number of entries to store in the dictionary. -//% * -//% * @return A newly instanced dictionary with the keys and values in it. -//% **/ -//%+ (instancetype)dictionaryWith##VNAME##s:(const VALUE_TYPE ARRAY_ARG_MODIFIER##VHELPER()[__nullable])##VNAME_VAR##s -//% ##VNAME$S## forKeys:(const KEY_TYPE##KisP$S##KisP ARRAY_ARG_MODIFIER##KHELPER()[__nullable])keys -//% ##VNAME$S## count:(NSUInteger)count; -//% -//%/** -//% * Creates and initializes a dictionary with the entries from the given. -//% * dictionary. -//% * -//% * @param dictionary Dictionary containing the entries to add to the dictionary. -//% * -//% * @return A newly instanced dictionary with the entries from the given -//% * dictionary in it. -//% **/ -//%+ (instancetype)dictionaryWithDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)dictionary; -//% -//%/** -//% * Creates and initializes a dictionary with the given capacity. -//% * -//% * @param numItems Capacity needed for the dictionary. -//% * -//% * @return A newly instanced dictionary with the given capacity. -//% **/ -//%+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; -//% -//%/** -//% * Initializes this dictionary, copying the given values and keys. -//% * -//% * @param ##VNAME_VAR##s The values to be placed in this dictionary. -//% * @param keys ##VNAME_VAR$S## The keys under which to store the values. -//% * @param count ##VNAME_VAR$S## The number of elements to copy into the dictionary. -//% * -//% * @return A newly initialized dictionary with a copy of the values and keys. -//% **/ -//%- (instancetype)initWith##VNAME##s:(const VALUE_TYPE ARRAY_ARG_MODIFIER##VHELPER()[__nullable])##VNAME_VAR##s -//% ##VNAME$S## forKeys:(const KEY_TYPE##KisP$S##KisP ARRAY_ARG_MODIFIER##KHELPER()[__nullable])keys -//% ##VNAME$S## count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; -//% -//%/** -//% * Initializes this dictionary, copying the entries from the given dictionary. -//% * -//% * @param dictionary Dictionary containing the entries to add to this dictionary. -//% * -//% * @return A newly initialized dictionary with the entries of the given dictionary. -//% **/ -//%- (instancetype)initWithDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)dictionary; -//% -//%/** -//% * Initializes this dictionary with the requested capacity. -//% * -//% * @param numItems Number of items needed for this dictionary. -//% * -//% * @return A newly initialized dictionary with the requested capacity. -//% **/ -//%- (instancetype)initWithCapacity:(NSUInteger)numItems; -//% -//%DICTIONARY_IMMUTABLE_INTERFACE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, VHELPER, VNAME, VNAME_VAR) -//% -//%/** -//% * Adds the keys and values from another dictionary. -//% * -//% * @param otherDictionary Dictionary containing entries to be added to this -//% * dictionary. -//% **/ -//%- (void)addEntriesFromDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)otherDictionary; -//% -//%DICTIONARY_MUTABLE_INTERFACE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, VHELPER, VNAME, VNAME_VAR) -//% -//%@end -//% - -//%PDDM-DEFINE DICTIONARY_KEY_TO_ENUM_INTERFACE(KEY_NAME, KEY_TYPE, KisP, KHELPER, VALUE_NAME, VALUE_TYPE) -//%DICTIONARY_KEY_TO_ENUM_INTERFACE2(KEY_NAME, KEY_TYPE, KisP, KHELPER, VALUE_NAME, VALUE_TYPE, Enum) -//%PDDM-DEFINE DICTIONARY_KEY_TO_ENUM_INTERFACE2(KEY_NAME, KEY_TYPE, KisP, KHELPER, VALUE_NAME, VALUE_TYPE, VHELPER) -//%#pragma mark - KEY_NAME -> VALUE_NAME -//% -//%/** -//% * Class used for map fields of <##KEY_TYPE##, ##VALUE_TYPE##> -//% * values. This performs better than boxing into NSNumbers in NSDictionaries. -//% * -//% * @note This class is not meant to be subclassed. -//% **/ -//%@interface GPB##KEY_NAME##VALUE_NAME##Dictionary : NSObject <NSCopying> -//% -//%/** Number of entries stored in this dictionary. */ -//%@property(nonatomic, readonly) NSUInteger count; -//%/** The validation function to check if the enums are valid. */ -//%@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc; -//% -//%/** -//% * @return A newly instanced and empty dictionary. -//% **/ -//%+ (instancetype)dictionary; -//% -//%/** -//% * Creates and initializes a dictionary with the given validation function. -//% * -//% * @param func The enum validation function for the dictionary. -//% * -//% * @return A newly instanced dictionary. -//% **/ -//%+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func; -//% -//%/** -//% * Creates and initializes a dictionary with the single entry given. -//% * -//% * @param func The enum validation function for the dictionary. -//% * @param rawValue The raw enum value to be placed in the dictionary. -//% * @param key The key under which to store the value. -//% * -//% * @return A newly instanced dictionary with the key and value in it. -//% **/ -//%+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func -//% rawValue:(VALUE_TYPE)rawValue -//% forKey:(KEY_TYPE##KisP$S##KisP)key; -//% -//%/** -//% * Creates and initializes a dictionary with the entries given. -//% * -//% * @param func The enum validation function for the dictionary. -//% * @param values The raw enum values values to be placed in the dictionary. -//% * @param keys The keys under which to store the values. -//% * @param count The number of entries to store in the dictionary. -//% * -//% * @return A newly instanced dictionary with the keys and values in it. -//% **/ -//%+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func -//% rawValues:(const VALUE_TYPE ARRAY_ARG_MODIFIER##VHELPER()[__nullable])values -//% forKeys:(const KEY_TYPE##KisP$S##KisP ARRAY_ARG_MODIFIER##KHELPER()[__nullable])keys -//% count:(NSUInteger)count; -//% -//%/** -//% * Creates and initializes a dictionary with the entries from the given. -//% * dictionary. -//% * -//% * @param dictionary Dictionary containing the entries to add to the dictionary. -//% * -//% * @return A newly instanced dictionary with the entries from the given -//% * dictionary in it. -//% **/ -//%+ (instancetype)dictionaryWithDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)dictionary; -//% -//%/** -//% * Creates and initializes a dictionary with the given capacity. -//% * -//% * @param func The enum validation function for the dictionary. -//% * @param numItems Capacity needed for the dictionary. -//% * -//% * @return A newly instanced dictionary with the given capacity. -//% **/ -//%+ (instancetype)dictionaryWithValidationFunction:(nullable GPBEnumValidationFunc)func -//% capacity:(NSUInteger)numItems; -//% -//%/** -//% * Initializes a dictionary with the given validation function. -//% * -//% * @param func The enum validation function for the dictionary. -//% * -//% * @return A newly initialized dictionary. -//% **/ -//%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func; -//% -//%/** -//% * Initializes a dictionary with the entries given. -//% * -//% * @param func The enum validation function for the dictionary. -//% * @param values The raw enum values values to be placed in the dictionary. -//% * @param keys The keys under which to store the values. -//% * @param count The number of entries to store in the dictionary. -//% * -//% * @return A newly initialized dictionary with the keys and values in it. -//% **/ -//%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func -//% rawValues:(const VALUE_TYPE ARRAY_ARG_MODIFIER##VHELPER()[__nullable])values -//% forKeys:(const KEY_TYPE##KisP$S##KisP ARRAY_ARG_MODIFIER##KHELPER()[__nullable])keys -//% count:(NSUInteger)count NS_DESIGNATED_INITIALIZER; -//% -//%/** -//% * Initializes a dictionary with the entries from the given. -//% * dictionary. -//% * -//% * @param dictionary Dictionary containing the entries to add to the dictionary. -//% * -//% * @return A newly initialized dictionary with the entries from the given -//% * dictionary in it. -//% **/ -//%- (instancetype)initWithDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)dictionary; -//% -//%/** -//% * Initializes a dictionary with the given capacity. -//% * -//% * @param func The enum validation function for the dictionary. -//% * @param numItems Capacity needed for the dictionary. -//% * -//% * @return A newly initialized dictionary with the given capacity. -//% **/ -//%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func -//% capacity:(NSUInteger)numItems; -//% -//%// These will return kGPBUnrecognizedEnumeratorValue if the value for the key -//%// is not a valid enumerator as defined by validationFunc. If the actual value is -//%// desired, use "raw" version of the method. -//% -//%DICTIONARY_IMMUTABLE_INTERFACE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, VHELPER, Enum, value) -//% -//%/** -//% * Gets the raw enum value for the given key. -//% * -//% * @note This method bypass the validationFunc to enable the access of values that -//% * were not known at the time the binary was compiled. -//% * -//% * @param rawValue Pointer into which the value will be set, if found. -//% * @param key Key under which the value is stored, if present. -//% * -//% * @return YES if the key was found and the value was copied, NO otherwise. -//% **/ -//%- (BOOL)getRawValue:(nullable VALUE_TYPE *)rawValue forKey:(KEY_TYPE##KisP$S##KisP)key; -//% -//%/** -//% * Enumerates the keys and values on this dictionary with the given block. -//% * -//% * @note This method bypass the validationFunc to enable the access of values that -//% * were not known at the time the binary was compiled. -//% * -//% * @param block The block to enumerate with. -//% * **key**: The key for the current entry. -//% * **rawValue**: The value for the current entry -//% * **stop**: A pointer to a boolean that when set stops the enumeration. -//% **/ -//%- (void)enumerateKeysAndRawValuesUsingBlock: -//% (void (^)(KEY_TYPE KisP##key, VALUE_TYPE rawValue, BOOL *stop))block; -//% -//%/** -//% * Adds the keys and raw enum values from another dictionary. -//% * -//% * @note This method bypass the validationFunc to enable the setting of values that -//% * were not known at the time the binary was compiled. -//% * -//% * @param otherDictionary Dictionary containing entries to be added to this -//% * dictionary. -//% **/ -//%- (void)addRawEntriesFromDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)otherDictionary; -//% -//%// If value is not a valid enumerator as defined by validationFunc, these -//%// methods will assert in debug, and will log in release and assign the value -//%// to the default value. Use the rawValue methods below to assign non enumerator -//%// values. -//% -//%DICTIONARY_MUTABLE_INTERFACE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, VHELPER, Enum, value) -//% -//%@end -//% - -//%PDDM-DEFINE DICTIONARY_IMMUTABLE_INTERFACE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, VHELPER, VNAME, VNAME_VAR) -//%VALUE_FOR_KEY_##VHELPER(KEY_TYPE##KisP$S##KisP, VALUE_TYPE, VNAME) -//% -//%/** -//% * Enumerates the keys and values on this dictionary with the given block. -//% * -//% * @param block The block to enumerate with. -//% * **key**: ##VNAME_VAR$S## The key for the current entry. -//% * **VNAME_VAR**: The value for the current entry -//% * **stop**: ##VNAME_VAR$S## A pointer to a boolean that when set stops the enumeration. -//% **/ -//%- (void)enumerateKeysAnd##VNAME##sUsingBlock: -//% (void (^)(KEY_TYPE KisP##key, VALUE_TYPE VNAME_VAR, BOOL *stop))block; - -//%PDDM-DEFINE DICTIONARY_MUTABLE_INTERFACE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, VHELPER, VNAME, VNAME_VAR) -//%/** -//% * Sets the value for the given key. -//% * -//% * @param ##VNAME_VAR The value to set. -//% * @param key ##VNAME_VAR$S## The key under which to store the value. -//% **/ -//%- (void)set##VNAME##:(VALUE_TYPE)##VNAME_VAR forKey:(KEY_TYPE##KisP$S##KisP)key; -//%DICTIONARY_EXTRA_MUTABLE_METHODS_##VHELPER(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE) -//%/** -//% * Removes the entry for the given key. -//% * -//% * @param aKey Key to be removed from this dictionary. -//% **/ -//%- (void)remove##VNAME##ForKey:(KEY_TYPE##KisP$S##KisP)aKey; -//% -//%/** -//% * Removes all entries in this dictionary. -//% **/ -//%- (void)removeAll; - -//%PDDM-DEFINE DICTIONARY_EXTRA_MUTABLE_METHODS_POD(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE) -// Empty -//%PDDM-DEFINE DICTIONARY_EXTRA_MUTABLE_METHODS_OBJECT(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE) -// Empty -//%PDDM-DEFINE DICTIONARY_EXTRA_MUTABLE_METHODS_Enum(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE) -//% -//%/** -//% * Sets the raw enum value for the given key. -//% * -//% * @note This method bypass the validationFunc to enable the setting of values that -//% * were not known at the time the binary was compiled. -//% * -//% * @param rawValue The raw enum value to set. -//% * @param key The key under which to store the raw enum value. -//% **/ -//%- (void)setRawValue:(VALUE_TYPE)rawValue forKey:(KEY_TYPE##KisP$S##KisP)key; -//% diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDictionary.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDictionary.m deleted file mode 100644 index 1c67c680..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDictionary.m +++ /dev/null @@ -1,13627 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBDictionary_PackagePrivate.h" - -#import "GPBCodedInputStream_PackagePrivate.h" -#import "GPBCodedOutputStream_PackagePrivate.h" -#import "GPBDescriptor_PackagePrivate.h" -#import "GPBMessage_PackagePrivate.h" -#import "GPBUtilities_PackagePrivate.h" - -// ------------------------------ NOTE ------------------------------ -// At the moment, this is all using NSNumbers in NSDictionaries under -// the hood, but it is all hidden so we can come back and optimize -// with direct CFDictionary usage later. The reason that wasn't -// done yet is needing to support 32bit iOS builds. Otherwise -// it would be pretty simple to store all this data in CFDictionaries -// directly. -// ------------------------------------------------------------------ - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -// Used to include code only visible to specific versions of the static -// analyzer. Useful for wrapping code that only exists to silence the analyzer. -// Determine the values you want to use for BEGIN_APPLE_BUILD_VERSION, -// END_APPLE_BUILD_VERSION using: -// xcrun clang -dM -E -x c /dev/null | grep __apple_build_version__ -// Example usage: -// #if GPB_STATIC_ANALYZER_ONLY(5621, 5623) ... #endif -#define GPB_STATIC_ANALYZER_ONLY(BEGIN_APPLE_BUILD_VERSION, END_APPLE_BUILD_VERSION) \ - (defined(__clang_analyzer__) && \ - (__apple_build_version__ >= BEGIN_APPLE_BUILD_VERSION && \ - __apple_build_version__ <= END_APPLE_BUILD_VERSION)) - -enum { - kMapKeyFieldNumber = 1, - kMapValueFieldNumber = 2, -}; - -static BOOL DictDefault_IsValidValue(int32_t value) { - // Anything but the bad value marker is allowed. - return (value != kGPBUnrecognizedEnumeratorValue); -} - -//%PDDM-DEFINE SERIALIZE_SUPPORT_2_TYPE(VALUE_NAME, VALUE_TYPE, GPBDATATYPE_NAME1, GPBDATATYPE_NAME2) -//%static size_t ComputeDict##VALUE_NAME##FieldSize(VALUE_TYPE value, uint32_t fieldNum, GPBDataType dataType) { -//% if (dataType == GPBDataType##GPBDATATYPE_NAME1) { -//% return GPBCompute##GPBDATATYPE_NAME1##Size(fieldNum, value); -//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME2) { -//% return GPBCompute##GPBDATATYPE_NAME2##Size(fieldNum, value); -//% } else { -//% NSCAssert(NO, @"Unexpected type %d", dataType); -//% return 0; -//% } -//%} -//% -//%static void WriteDict##VALUE_NAME##Field(GPBCodedOutputStream *stream, VALUE_TYPE value, uint32_t fieldNum, GPBDataType dataType) { -//% if (dataType == GPBDataType##GPBDATATYPE_NAME1) { -//% [stream write##GPBDATATYPE_NAME1##:fieldNum value:value]; -//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME2) { -//% [stream write##GPBDATATYPE_NAME2##:fieldNum value:value]; -//% } else { -//% NSCAssert(NO, @"Unexpected type %d", dataType); -//% } -//%} -//% -//%PDDM-DEFINE SERIALIZE_SUPPORT_3_TYPE(VALUE_NAME, VALUE_TYPE, GPBDATATYPE_NAME1, GPBDATATYPE_NAME2, GPBDATATYPE_NAME3) -//%static size_t ComputeDict##VALUE_NAME##FieldSize(VALUE_TYPE value, uint32_t fieldNum, GPBDataType dataType) { -//% if (dataType == GPBDataType##GPBDATATYPE_NAME1) { -//% return GPBCompute##GPBDATATYPE_NAME1##Size(fieldNum, value); -//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME2) { -//% return GPBCompute##GPBDATATYPE_NAME2##Size(fieldNum, value); -//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME3) { -//% return GPBCompute##GPBDATATYPE_NAME3##Size(fieldNum, value); -//% } else { -//% NSCAssert(NO, @"Unexpected type %d", dataType); -//% return 0; -//% } -//%} -//% -//%static void WriteDict##VALUE_NAME##Field(GPBCodedOutputStream *stream, VALUE_TYPE value, uint32_t fieldNum, GPBDataType dataType) { -//% if (dataType == GPBDataType##GPBDATATYPE_NAME1) { -//% [stream write##GPBDATATYPE_NAME1##:fieldNum value:value]; -//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME2) { -//% [stream write##GPBDATATYPE_NAME2##:fieldNum value:value]; -//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME3) { -//% [stream write##GPBDATATYPE_NAME3##:fieldNum value:value]; -//% } else { -//% NSCAssert(NO, @"Unexpected type %d", dataType); -//% } -//%} -//% -//%PDDM-DEFINE SIMPLE_SERIALIZE_SUPPORT(VALUE_NAME, VALUE_TYPE, VisP) -//%static size_t ComputeDict##VALUE_NAME##FieldSize(VALUE_TYPE VisP##value, uint32_t fieldNum, GPBDataType dataType) { -//% NSCAssert(dataType == GPBDataType##VALUE_NAME, @"bad type: %d", dataType); -//% #pragma unused(dataType) // For when asserts are off in release. -//% return GPBCompute##VALUE_NAME##Size(fieldNum, value); -//%} -//% -//%static void WriteDict##VALUE_NAME##Field(GPBCodedOutputStream *stream, VALUE_TYPE VisP##value, uint32_t fieldNum, GPBDataType dataType) { -//% NSCAssert(dataType == GPBDataType##VALUE_NAME, @"bad type: %d", dataType); -//% #pragma unused(dataType) // For when asserts are off in release. -//% [stream write##VALUE_NAME##:fieldNum value:value]; -//%} -//% -//%PDDM-DEFINE SERIALIZE_SUPPORT_HELPERS() -//%SERIALIZE_SUPPORT_3_TYPE(Int32, int32_t, Int32, SInt32, SFixed32) -//%SERIALIZE_SUPPORT_2_TYPE(UInt32, uint32_t, UInt32, Fixed32) -//%SERIALIZE_SUPPORT_3_TYPE(Int64, int64_t, Int64, SInt64, SFixed64) -//%SERIALIZE_SUPPORT_2_TYPE(UInt64, uint64_t, UInt64, Fixed64) -//%SIMPLE_SERIALIZE_SUPPORT(Bool, BOOL, ) -//%SIMPLE_SERIALIZE_SUPPORT(Enum, int32_t, ) -//%SIMPLE_SERIALIZE_SUPPORT(Float, float, ) -//%SIMPLE_SERIALIZE_SUPPORT(Double, double, ) -//%SIMPLE_SERIALIZE_SUPPORT(String, NSString, *) -//%SERIALIZE_SUPPORT_3_TYPE(Object, id, Message, String, Bytes) -//%PDDM-EXPAND SERIALIZE_SUPPORT_HELPERS() -// This block of code is generated, do not edit it directly. - -static size_t ComputeDictInt32FieldSize(int32_t value, uint32_t fieldNum, GPBDataType dataType) { - if (dataType == GPBDataTypeInt32) { - return GPBComputeInt32Size(fieldNum, value); - } else if (dataType == GPBDataTypeSInt32) { - return GPBComputeSInt32Size(fieldNum, value); - } else if (dataType == GPBDataTypeSFixed32) { - return GPBComputeSFixed32Size(fieldNum, value); - } else { - NSCAssert(NO, @"Unexpected type %d", dataType); - return 0; - } -} - -static void WriteDictInt32Field(GPBCodedOutputStream *stream, int32_t value, uint32_t fieldNum, GPBDataType dataType) { - if (dataType == GPBDataTypeInt32) { - [stream writeInt32:fieldNum value:value]; - } else if (dataType == GPBDataTypeSInt32) { - [stream writeSInt32:fieldNum value:value]; - } else if (dataType == GPBDataTypeSFixed32) { - [stream writeSFixed32:fieldNum value:value]; - } else { - NSCAssert(NO, @"Unexpected type %d", dataType); - } -} - -static size_t ComputeDictUInt32FieldSize(uint32_t value, uint32_t fieldNum, GPBDataType dataType) { - if (dataType == GPBDataTypeUInt32) { - return GPBComputeUInt32Size(fieldNum, value); - } else if (dataType == GPBDataTypeFixed32) { - return GPBComputeFixed32Size(fieldNum, value); - } else { - NSCAssert(NO, @"Unexpected type %d", dataType); - return 0; - } -} - -static void WriteDictUInt32Field(GPBCodedOutputStream *stream, uint32_t value, uint32_t fieldNum, GPBDataType dataType) { - if (dataType == GPBDataTypeUInt32) { - [stream writeUInt32:fieldNum value:value]; - } else if (dataType == GPBDataTypeFixed32) { - [stream writeFixed32:fieldNum value:value]; - } else { - NSCAssert(NO, @"Unexpected type %d", dataType); - } -} - -static size_t ComputeDictInt64FieldSize(int64_t value, uint32_t fieldNum, GPBDataType dataType) { - if (dataType == GPBDataTypeInt64) { - return GPBComputeInt64Size(fieldNum, value); - } else if (dataType == GPBDataTypeSInt64) { - return GPBComputeSInt64Size(fieldNum, value); - } else if (dataType == GPBDataTypeSFixed64) { - return GPBComputeSFixed64Size(fieldNum, value); - } else { - NSCAssert(NO, @"Unexpected type %d", dataType); - return 0; - } -} - -static void WriteDictInt64Field(GPBCodedOutputStream *stream, int64_t value, uint32_t fieldNum, GPBDataType dataType) { - if (dataType == GPBDataTypeInt64) { - [stream writeInt64:fieldNum value:value]; - } else if (dataType == GPBDataTypeSInt64) { - [stream writeSInt64:fieldNum value:value]; - } else if (dataType == GPBDataTypeSFixed64) { - [stream writeSFixed64:fieldNum value:value]; - } else { - NSCAssert(NO, @"Unexpected type %d", dataType); - } -} - -static size_t ComputeDictUInt64FieldSize(uint64_t value, uint32_t fieldNum, GPBDataType dataType) { - if (dataType == GPBDataTypeUInt64) { - return GPBComputeUInt64Size(fieldNum, value); - } else if (dataType == GPBDataTypeFixed64) { - return GPBComputeFixed64Size(fieldNum, value); - } else { - NSCAssert(NO, @"Unexpected type %d", dataType); - return 0; - } -} - -static void WriteDictUInt64Field(GPBCodedOutputStream *stream, uint64_t value, uint32_t fieldNum, GPBDataType dataType) { - if (dataType == GPBDataTypeUInt64) { - [stream writeUInt64:fieldNum value:value]; - } else if (dataType == GPBDataTypeFixed64) { - [stream writeFixed64:fieldNum value:value]; - } else { - NSCAssert(NO, @"Unexpected type %d", dataType); - } -} - -static size_t ComputeDictBoolFieldSize(BOOL value, uint32_t fieldNum, GPBDataType dataType) { - NSCAssert(dataType == GPBDataTypeBool, @"bad type: %d", dataType); - #pragma unused(dataType) // For when asserts are off in release. - return GPBComputeBoolSize(fieldNum, value); -} - -static void WriteDictBoolField(GPBCodedOutputStream *stream, BOOL value, uint32_t fieldNum, GPBDataType dataType) { - NSCAssert(dataType == GPBDataTypeBool, @"bad type: %d", dataType); - #pragma unused(dataType) // For when asserts are off in release. - [stream writeBool:fieldNum value:value]; -} - -static size_t ComputeDictEnumFieldSize(int32_t value, uint32_t fieldNum, GPBDataType dataType) { - NSCAssert(dataType == GPBDataTypeEnum, @"bad type: %d", dataType); - #pragma unused(dataType) // For when asserts are off in release. - return GPBComputeEnumSize(fieldNum, value); -} - -static void WriteDictEnumField(GPBCodedOutputStream *stream, int32_t value, uint32_t fieldNum, GPBDataType dataType) { - NSCAssert(dataType == GPBDataTypeEnum, @"bad type: %d", dataType); - #pragma unused(dataType) // For when asserts are off in release. - [stream writeEnum:fieldNum value:value]; -} - -static size_t ComputeDictFloatFieldSize(float value, uint32_t fieldNum, GPBDataType dataType) { - NSCAssert(dataType == GPBDataTypeFloat, @"bad type: %d", dataType); - #pragma unused(dataType) // For when asserts are off in release. - return GPBComputeFloatSize(fieldNum, value); -} - -static void WriteDictFloatField(GPBCodedOutputStream *stream, float value, uint32_t fieldNum, GPBDataType dataType) { - NSCAssert(dataType == GPBDataTypeFloat, @"bad type: %d", dataType); - #pragma unused(dataType) // For when asserts are off in release. - [stream writeFloat:fieldNum value:value]; -} - -static size_t ComputeDictDoubleFieldSize(double value, uint32_t fieldNum, GPBDataType dataType) { - NSCAssert(dataType == GPBDataTypeDouble, @"bad type: %d", dataType); - #pragma unused(dataType) // For when asserts are off in release. - return GPBComputeDoubleSize(fieldNum, value); -} - -static void WriteDictDoubleField(GPBCodedOutputStream *stream, double value, uint32_t fieldNum, GPBDataType dataType) { - NSCAssert(dataType == GPBDataTypeDouble, @"bad type: %d", dataType); - #pragma unused(dataType) // For when asserts are off in release. - [stream writeDouble:fieldNum value:value]; -} - -static size_t ComputeDictStringFieldSize(NSString *value, uint32_t fieldNum, GPBDataType dataType) { - NSCAssert(dataType == GPBDataTypeString, @"bad type: %d", dataType); - #pragma unused(dataType) // For when asserts are off in release. - return GPBComputeStringSize(fieldNum, value); -} - -static void WriteDictStringField(GPBCodedOutputStream *stream, NSString *value, uint32_t fieldNum, GPBDataType dataType) { - NSCAssert(dataType == GPBDataTypeString, @"bad type: %d", dataType); - #pragma unused(dataType) // For when asserts are off in release. - [stream writeString:fieldNum value:value]; -} - -static size_t ComputeDictObjectFieldSize(id value, uint32_t fieldNum, GPBDataType dataType) { - if (dataType == GPBDataTypeMessage) { - return GPBComputeMessageSize(fieldNum, value); - } else if (dataType == GPBDataTypeString) { - return GPBComputeStringSize(fieldNum, value); - } else if (dataType == GPBDataTypeBytes) { - return GPBComputeBytesSize(fieldNum, value); - } else { - NSCAssert(NO, @"Unexpected type %d", dataType); - return 0; - } -} - -static void WriteDictObjectField(GPBCodedOutputStream *stream, id value, uint32_t fieldNum, GPBDataType dataType) { - if (dataType == GPBDataTypeMessage) { - [stream writeMessage:fieldNum value:value]; - } else if (dataType == GPBDataTypeString) { - [stream writeString:fieldNum value:value]; - } else if (dataType == GPBDataTypeBytes) { - [stream writeBytes:fieldNum value:value]; - } else { - NSCAssert(NO, @"Unexpected type %d", dataType); - } -} - -//%PDDM-EXPAND-END SERIALIZE_SUPPORT_HELPERS() - -size_t GPBDictionaryComputeSizeInternalHelper(NSDictionary *dict, GPBFieldDescriptor *field) { - GPBDataType mapValueType = GPBGetFieldDataType(field); - __block size_t result = 0; - [dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { - #pragma unused(stop) - size_t msgSize = GPBComputeStringSize(kMapKeyFieldNumber, key); - msgSize += ComputeDictObjectFieldSize(obj, kMapValueFieldNumber, mapValueType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * dict.count; - return result; -} - -void GPBDictionaryWriteToStreamInternalHelper(GPBCodedOutputStream *outputStream, - NSDictionary *dict, - GPBFieldDescriptor *field) { - NSCAssert(field.mapKeyDataType == GPBDataTypeString, @"Unexpected key type"); - GPBDataType mapValueType = GPBGetFieldDataType(field); - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = GPBComputeStringSize(kMapKeyFieldNumber, key); - msgSize += ComputeDictObjectFieldSize(obj, kMapValueFieldNumber, mapValueType); - - // Write the size and fields. - [outputStream writeInt32NoTag:(int32_t)msgSize]; - [outputStream writeString:kMapKeyFieldNumber value:key]; - WriteDictObjectField(outputStream, obj, kMapValueFieldNumber, mapValueType); - }]; -} - -BOOL GPBDictionaryIsInitializedInternalHelper(NSDictionary *dict, GPBFieldDescriptor *field) { - NSCAssert(field.mapKeyDataType == GPBDataTypeString, @"Unexpected key type"); - NSCAssert(GPBGetFieldDataType(field) == GPBDataTypeMessage, @"Unexpected value type"); - #pragma unused(field) // For when asserts are off in release. - for (GPBMessage *msg in [dict objectEnumerator]) { - if (!msg.initialized) { - return NO; - } - } - return YES; -} - -// Note: if the type is an object, it the retain pass back to the caller. -static void ReadValue(GPBCodedInputStream *stream, - GPBGenericValue *valueToFill, - GPBDataType type, - GPBExtensionRegistry *registry, - GPBFieldDescriptor *field) { - switch (type) { - case GPBDataTypeBool: - valueToFill->valueBool = GPBCodedInputStreamReadBool(&stream->state_); - break; - case GPBDataTypeFixed32: - valueToFill->valueUInt32 = GPBCodedInputStreamReadFixed32(&stream->state_); - break; - case GPBDataTypeSFixed32: - valueToFill->valueInt32 = GPBCodedInputStreamReadSFixed32(&stream->state_); - break; - case GPBDataTypeFloat: - valueToFill->valueFloat = GPBCodedInputStreamReadFloat(&stream->state_); - break; - case GPBDataTypeFixed64: - valueToFill->valueUInt64 = GPBCodedInputStreamReadFixed64(&stream->state_); - break; - case GPBDataTypeSFixed64: - valueToFill->valueInt64 = GPBCodedInputStreamReadSFixed64(&stream->state_); - break; - case GPBDataTypeDouble: - valueToFill->valueDouble = GPBCodedInputStreamReadDouble(&stream->state_); - break; - case GPBDataTypeInt32: - valueToFill->valueInt32 = GPBCodedInputStreamReadInt32(&stream->state_); - break; - case GPBDataTypeInt64: - valueToFill->valueInt64 = GPBCodedInputStreamReadInt32(&stream->state_); - break; - case GPBDataTypeSInt32: - valueToFill->valueInt32 = GPBCodedInputStreamReadSInt32(&stream->state_); - break; - case GPBDataTypeSInt64: - valueToFill->valueInt64 = GPBCodedInputStreamReadSInt64(&stream->state_); - break; - case GPBDataTypeUInt32: - valueToFill->valueUInt32 = GPBCodedInputStreamReadUInt32(&stream->state_); - break; - case GPBDataTypeUInt64: - valueToFill->valueUInt64 = GPBCodedInputStreamReadUInt64(&stream->state_); - break; - case GPBDataTypeBytes: - [valueToFill->valueData release]; - valueToFill->valueData = GPBCodedInputStreamReadRetainedBytes(&stream->state_); - break; - case GPBDataTypeString: - [valueToFill->valueString release]; - valueToFill->valueString = GPBCodedInputStreamReadRetainedString(&stream->state_); - break; - case GPBDataTypeMessage: { - GPBMessage *message = [[field.msgClass alloc] init]; - [stream readMessage:message extensionRegistry:registry]; - [valueToFill->valueMessage release]; - valueToFill->valueMessage = message; - break; - } - case GPBDataTypeGroup: - NSCAssert(NO, @"Can't happen"); - break; - case GPBDataTypeEnum: - valueToFill->valueEnum = GPBCodedInputStreamReadEnum(&stream->state_); - break; - } -} - -void GPBDictionaryReadEntry(id mapDictionary, - GPBCodedInputStream *stream, - GPBExtensionRegistry *registry, - GPBFieldDescriptor *field, - GPBMessage *parentMessage) { - GPBDataType keyDataType = field.mapKeyDataType; - GPBDataType valueDataType = GPBGetFieldDataType(field); - - GPBGenericValue key; - GPBGenericValue value; - // Zero them (but pick up any enum default for proto2). - key.valueString = value.valueString = nil; - if (valueDataType == GPBDataTypeEnum) { - value = field.defaultValue; - } - - GPBCodedInputStreamState *state = &stream->state_; - uint32_t keyTag = - GPBWireFormatMakeTag(kMapKeyFieldNumber, GPBWireFormatForType(keyDataType, NO)); - uint32_t valueTag = - GPBWireFormatMakeTag(kMapValueFieldNumber, GPBWireFormatForType(valueDataType, NO)); - - BOOL hitError = NO; - while (YES) { - uint32_t tag = GPBCodedInputStreamReadTag(state); - if (tag == keyTag) { - ReadValue(stream, &key, keyDataType, registry, field); - } else if (tag == valueTag) { - ReadValue(stream, &value, valueDataType, registry, field); - } else if (tag == 0) { - // zero signals EOF / limit reached - break; - } else { // Unknown - if (![stream skipField:tag]){ - hitError = YES; - break; - } - } - } - - if (!hitError) { - // Handle the special defaults and/or missing key/value. - if ((keyDataType == GPBDataTypeString) && (key.valueString == nil)) { - key.valueString = [@"" retain]; - } - if (GPBDataTypeIsObject(valueDataType) && value.valueString == nil) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wswitch-enum" - switch (valueDataType) { - case GPBDataTypeString: - value.valueString = [@"" retain]; - break; - case GPBDataTypeBytes: - value.valueData = [GPBEmptyNSData() retain]; - break; -#if defined(__clang_analyzer__) - case GPBDataTypeGroup: - // Maps can't really have Groups as the value type, but this case is needed - // so the analyzer won't report the posibility of send nil in for the value - // in the NSMutableDictionary case below. -#endif - case GPBDataTypeMessage: { - value.valueMessage = [[field.msgClass alloc] init]; - break; - } - default: - // Nothing - break; - } -#pragma clang diagnostic pop - } - - if ((keyDataType == GPBDataTypeString) && GPBDataTypeIsObject(valueDataType)) { -#if GPB_STATIC_ANALYZER_ONLY(6020053, 7000181) - // Limited to Xcode 6.4 - 7.2, are known to fail here. The upper end can - // be raised as needed for new Xcodes. - // - // This is only needed on a "shallow" analyze; on a "deep" analyze, the - // existing code path gets this correct. In shallow, the analyzer decides - // GPBDataTypeIsObject(valueDataType) is both false and true on a single - // path through this function, allowing nil to be used for the - // setObject:forKey:. - if (value.valueString == nil) { - value.valueString = [@"" retain]; - } -#endif - // mapDictionary is an NSMutableDictionary - [(NSMutableDictionary *)mapDictionary setObject:value.valueString - forKey:key.valueString]; - } else { - if (valueDataType == GPBDataTypeEnum) { - if (GPBHasPreservingUnknownEnumSemantics([parentMessage descriptor].file.syntax) || - [field isValidEnumValue:value.valueEnum]) { - [mapDictionary setGPBGenericValue:&value forGPBGenericValueKey:&key]; - } else { - NSData *data = [mapDictionary serializedDataForUnknownValue:value.valueEnum - forKey:&key - keyDataType:keyDataType]; - [parentMessage addUnknownMapEntry:GPBFieldNumber(field) value:data]; - } - } else { - [mapDictionary setGPBGenericValue:&value forGPBGenericValueKey:&key]; - } - } - } - - if (GPBDataTypeIsObject(keyDataType)) { - [key.valueString release]; - } - if (GPBDataTypeIsObject(valueDataType)) { - [value.valueString release]; - } -} - -// -// Macros for the common basic cases. -// - -//%PDDM-DEFINE DICTIONARY_IMPL_FOR_POD_KEY(KEY_NAME, KEY_TYPE) -//%DICTIONARY_POD_IMPL_FOR_KEY(KEY_NAME, KEY_TYPE, , POD) -//%DICTIONARY_POD_KEY_TO_OBJECT_IMPL(KEY_NAME, KEY_TYPE, Object, id) - -//%PDDM-DEFINE DICTIONARY_POD_IMPL_FOR_KEY(KEY_NAME, KEY_TYPE, KisP, KHELPER) -//%DICTIONARY_KEY_TO_POD_IMPL(KEY_NAME, KEY_TYPE, KisP, UInt32, uint32_t, KHELPER) -//%DICTIONARY_KEY_TO_POD_IMPL(KEY_NAME, KEY_TYPE, KisP, Int32, int32_t, KHELPER) -//%DICTIONARY_KEY_TO_POD_IMPL(KEY_NAME, KEY_TYPE, KisP, UInt64, uint64_t, KHELPER) -//%DICTIONARY_KEY_TO_POD_IMPL(KEY_NAME, KEY_TYPE, KisP, Int64, int64_t, KHELPER) -//%DICTIONARY_KEY_TO_POD_IMPL(KEY_NAME, KEY_TYPE, KisP, Bool, BOOL, KHELPER) -//%DICTIONARY_KEY_TO_POD_IMPL(KEY_NAME, KEY_TYPE, KisP, Float, float, KHELPER) -//%DICTIONARY_KEY_TO_POD_IMPL(KEY_NAME, KEY_TYPE, KisP, Double, double, KHELPER) -//%DICTIONARY_KEY_TO_ENUM_IMPL(KEY_NAME, KEY_TYPE, KisP, Enum, int32_t, KHELPER) - -//%PDDM-DEFINE DICTIONARY_KEY_TO_POD_IMPL(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER) -//%DICTIONARY_COMMON_IMPL(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, POD, VALUE_NAME, value) - -//%PDDM-DEFINE DICTIONARY_POD_KEY_TO_OBJECT_IMPL(KEY_NAME, KEY_TYPE, VALUE_NAME, VALUE_TYPE) -//%DICTIONARY_COMMON_IMPL(KEY_NAME, KEY_TYPE, , VALUE_NAME, VALUE_TYPE, POD, OBJECT, Object, object) - -//%PDDM-DEFINE DICTIONARY_COMMON_IMPL(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, VHELPER, VNAME, VNAME_VAR) -//%#pragma mark - KEY_NAME -> VALUE_NAME -//% -//%@implementation GPB##KEY_NAME##VALUE_NAME##Dictionary { -//% @package -//% NSMutableDictionary *_dictionary; -//%} -//% -//%+ (instancetype)dictionary { -//% return [[[self alloc] initWith##VNAME##s:NULL forKeys:NULL count:0] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWith##VNAME##:(VALUE_TYPE)##VNAME_VAR -//% ##VNAME$S## forKey:(KEY_TYPE##KisP$S##KisP)key { -//% // Cast is needed so the compiler knows what class we are invoking initWith##VNAME##s:forKeys:count: -//% // on to get the type correct. -//% return [[(GPB##KEY_NAME##VALUE_NAME##Dictionary*)[self alloc] initWith##VNAME##s:&##VNAME_VAR -//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:&key -//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:1] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWith##VNAME##s:(const VALUE_TYPE [])##VNAME_VAR##s -//% ##VNAME$S## forKeys:(const KEY_TYPE##KisP$S##KisP [])keys -//% ##VNAME$S## count:(NSUInteger)count { -//% // Cast is needed so the compiler knows what class we are invoking initWith##VNAME##s:forKeys:count: -//% // on to get the type correct. -//% return [[(GPB##KEY_NAME##VALUE_NAME##Dictionary*)[self alloc] initWith##VNAME##s:##VNAME_VAR##s -//% KEY_NAME$S VALUE_NAME$S forKeys:keys -//% KEY_NAME$S VALUE_NAME$S count:count] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWithDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)dictionary { -//% // Cast is needed so the compiler knows what class we are invoking initWithDictionary: -//% // on to get the type correct. -//% return [[(GPB##KEY_NAME##VALUE_NAME##Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { -//% return [[[self alloc] initWithCapacity:numItems] autorelease]; -//%} -//% -//%- (instancetype)init { -//% return [self initWith##VNAME##s:NULL forKeys:NULL count:0]; -//%} -//% -//%- (instancetype)initWith##VNAME##s:(const VALUE_TYPE [])##VNAME_VAR##s -//% ##VNAME$S## forKeys:(const KEY_TYPE##KisP$S##KisP [])keys -//% ##VNAME$S## count:(NSUInteger)count { -//% self = [super init]; -//% if (self) { -//% _dictionary = [[NSMutableDictionary alloc] init]; -//% if (count && VNAME_VAR##s && keys) { -//% for (NSUInteger i = 0; i < count; ++i) { -//%DICTIONARY_VALIDATE_VALUE_##VHELPER(VNAME_VAR##s[i], ______)##DICTIONARY_VALIDATE_KEY_##KHELPER(keys[i], ______) [_dictionary setObject:WRAPPED##VHELPER(VNAME_VAR##s[i]) forKey:WRAPPED##KHELPER(keys[i])]; -//% } -//% } -//% } -//% return self; -//%} -//% -//%- (instancetype)initWithDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)dictionary { -//% self = [self initWith##VNAME##s:NULL forKeys:NULL count:0]; -//% if (self) { -//% if (dictionary) { -//% [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; -//% } -//% } -//% return self; -//%} -//% -//%- (instancetype)initWithCapacity:(NSUInteger)numItems { -//% #pragma unused(numItems) -//% return [self initWith##VNAME##s:NULL forKeys:NULL count:0]; -//%} -//% -//%DICTIONARY_IMMUTABLE_CORE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, VHELPER, VNAME, VNAME_VAR, ) -//% -//%VALUE_FOR_KEY_##VHELPER(KEY_TYPE##KisP$S##KisP, VALUE_NAME, VALUE_TYPE, KHELPER) -//% -//%DICTIONARY_MUTABLE_CORE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, VHELPER, VNAME, VNAME_VAR, ) -//% -//%@end -//% - -//%PDDM-DEFINE DICTIONARY_KEY_TO_ENUM_IMPL(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER) -//%DICTIONARY_KEY_TO_ENUM_IMPL2(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, POD) -//%PDDM-DEFINE DICTIONARY_KEY_TO_ENUM_IMPL2(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, VHELPER) -//%#pragma mark - KEY_NAME -> VALUE_NAME -//% -//%@implementation GPB##KEY_NAME##VALUE_NAME##Dictionary { -//% @package -//% NSMutableDictionary *_dictionary; -//% GPBEnumValidationFunc _validationFunc; -//%} -//% -//%@synthesize validationFunc = _validationFunc; -//% -//%+ (instancetype)dictionary { -//% return [[[self alloc] initWithValidationFunction:NULL -//% rawValues:NULL -//% forKeys:NULL -//% count:0] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func { -//% return [[[self alloc] initWithValidationFunction:func -//% rawValues:NULL -//% forKeys:NULL -//% count:0] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func -//% rawValue:(VALUE_TYPE)rawValue -//% forKey:(KEY_TYPE##KisP$S##KisP)key { -//% // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: -//% // on to get the type correct. -//% return [[(GPB##KEY_NAME##VALUE_NAME##Dictionary*)[self alloc] initWithValidationFunction:func -//% KEY_NAME$S VALUE_NAME$S rawValues:&rawValue -//% KEY_NAME$S VALUE_NAME$S forKeys:&key -//% KEY_NAME$S VALUE_NAME$S count:1] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func -//% rawValues:(const VALUE_TYPE [])rawValues -//% forKeys:(const KEY_TYPE##KisP$S##KisP [])keys -//% count:(NSUInteger)count { -//% // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: -//% // on to get the type correct. -//% return [[(GPB##KEY_NAME##VALUE_NAME##Dictionary*)[self alloc] initWithValidationFunction:func -//% KEY_NAME$S VALUE_NAME$S rawValues:rawValues -//% KEY_NAME$S VALUE_NAME$S forKeys:keys -//% KEY_NAME$S VALUE_NAME$S count:count] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWithDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)dictionary { -//% // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: -//% // on to get the type correct. -//% return [[(GPB##KEY_NAME##VALUE_NAME##Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func -//% capacity:(NSUInteger)numItems { -//% return [[[self alloc] initWithValidationFunction:func capacity:numItems] autorelease]; -//%} -//% -//%- (instancetype)init { -//% return [self initWithValidationFunction:NULL rawValues:NULL forKeys:NULL count:0]; -//%} -//% -//%- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func { -//% return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -//%} -//% -//%- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func -//% rawValues:(const VALUE_TYPE [])rawValues -//% forKeys:(const KEY_TYPE##KisP$S##KisP [])keys -//% count:(NSUInteger)count { -//% self = [super init]; -//% if (self) { -//% _dictionary = [[NSMutableDictionary alloc] init]; -//% _validationFunc = (func != NULL ? func : DictDefault_IsValidValue); -//% if (count && rawValues && keys) { -//% for (NSUInteger i = 0; i < count; ++i) { -//%DICTIONARY_VALIDATE_KEY_##KHELPER(keys[i], ______) [_dictionary setObject:WRAPPED##VHELPER(rawValues[i]) forKey:WRAPPED##KHELPER(keys[i])]; -//% } -//% } -//% } -//% return self; -//%} -//% -//%- (instancetype)initWithDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)dictionary { -//% self = [self initWithValidationFunction:dictionary.validationFunc -//% rawValues:NULL -//% forKeys:NULL -//% count:0]; -//% if (self) { -//% if (dictionary) { -//% [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; -//% } -//% } -//% return self; -//%} -//% -//%- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func -//% capacity:(NSUInteger)numItems { -//% #pragma unused(numItems) -//% return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -//%} -//% -//%DICTIONARY_IMMUTABLE_CORE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, VHELPER, Value, value, Raw) -//% -//%- (BOOL)getEnum:(VALUE_TYPE *)value forKey:(KEY_TYPE##KisP$S##KisP)key { -//% NSNumber *wrapped = [_dictionary objectForKey:WRAPPED##KHELPER(key)]; -//% if (wrapped && value) { -//% VALUE_TYPE result = UNWRAP##VALUE_NAME(wrapped); -//% if (!_validationFunc(result)) { -//% result = kGPBUnrecognizedEnumeratorValue; -//% } -//% *value = result; -//% } -//% return (wrapped != NULL); -//%} -//% -//%- (BOOL)getRawValue:(VALUE_TYPE *)rawValue forKey:(KEY_TYPE##KisP$S##KisP)key { -//% NSNumber *wrapped = [_dictionary objectForKey:WRAPPED##KHELPER(key)]; -//% if (wrapped && rawValue) { -//% *rawValue = UNWRAP##VALUE_NAME(wrapped); -//% } -//% return (wrapped != NULL); -//%} -//% -//%- (void)enumerateKeysAndEnumsUsingBlock: -//% (void (^)(KEY_TYPE KisP##key, VALUE_TYPE value, BOOL *stop))block { -//% GPBEnumValidationFunc func = _validationFunc; -//% [_dictionary enumerateKeysAndObjectsUsingBlock:^(ENUM_TYPE##KHELPER(KEY_TYPE)##aKey, -//% ENUM_TYPE##VHELPER(VALUE_TYPE)##aValue, -//% BOOL *stop) { -//% VALUE_TYPE unwrapped = UNWRAP##VALUE_NAME(aValue); -//% if (!func(unwrapped)) { -//% unwrapped = kGPBUnrecognizedEnumeratorValue; -//% } -//% block(UNWRAP##KEY_NAME(aKey), unwrapped, stop); -//% }]; -//%} -//% -//%DICTIONARY_MUTABLE_CORE2(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, VHELPER, Value, Enum, value, Raw) -//% -//%- (void)setEnum:(VALUE_TYPE)value forKey:(KEY_TYPE##KisP$S##KisP)key { -//%DICTIONARY_VALIDATE_KEY_##KHELPER(key, ) if (!_validationFunc(value)) { -//% [NSException raise:NSInvalidArgumentException -//% format:@"GPB##KEY_NAME##VALUE_NAME##Dictionary: Attempt to set an unknown enum value (%d)", -//% value]; -//% } -//% -//% [_dictionary setObject:WRAPPED##VHELPER(value) forKey:WRAPPED##KHELPER(key)]; -//% if (_autocreator) { -//% GPBAutocreatedDictionaryModified(_autocreator, self); -//% } -//%} -//% -//%@end -//% - -//%PDDM-DEFINE DICTIONARY_IMMUTABLE_CORE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, VHELPER, VNAME, VNAME_VAR, ACCESSOR_NAME) -//%- (void)dealloc { -//% NSAssert(!_autocreator, -//% @"%@: Autocreator must be cleared before release, autocreator: %@", -//% [self class], _autocreator); -//% [_dictionary release]; -//% [super dealloc]; -//%} -//% -//%- (instancetype)copyWithZone:(NSZone *)zone { -//% return [[GPB##KEY_NAME##VALUE_NAME##Dictionary allocWithZone:zone] initWithDictionary:self]; -//%} -//% -//%- (BOOL)isEqual:(id)other { -//% if (self == other) { -//% return YES; -//% } -//% if (![other isKindOfClass:[GPB##KEY_NAME##VALUE_NAME##Dictionary class]]) { -//% return NO; -//% } -//% GPB##KEY_NAME##VALUE_NAME##Dictionary *otherDictionary = other; -//% return [_dictionary isEqual:otherDictionary->_dictionary]; -//%} -//% -//%- (NSUInteger)hash { -//% return _dictionary.count; -//%} -//% -//%- (NSString *)description { -//% return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -//%} -//% -//%- (NSUInteger)count { -//% return _dictionary.count; -//%} -//% -//%- (void)enumerateKeysAnd##ACCESSOR_NAME##VNAME##sUsingBlock: -//% (void (^)(KEY_TYPE KisP##key, VALUE_TYPE VNAME_VAR, BOOL *stop))block { -//% [_dictionary enumerateKeysAndObjectsUsingBlock:^(ENUM_TYPE##KHELPER(KEY_TYPE)##aKey, -//% ENUM_TYPE##VHELPER(VALUE_TYPE)##a##VNAME_VAR$u, -//% BOOL *stop) { -//% block(UNWRAP##KEY_NAME(aKey), UNWRAP##VALUE_NAME(a##VNAME_VAR$u), stop); -//% }]; -//%} -//% -//%EXTRA_METHODS_##VHELPER(KEY_NAME, VALUE_NAME)- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { -//% NSUInteger count = _dictionary.count; -//% if (count == 0) { -//% return 0; -//% } -//% -//% GPBDataType valueDataType = GPBGetFieldDataType(field); -//% GPBDataType keyDataType = field.mapKeyDataType; -//% __block size_t result = 0; -//% [_dictionary enumerateKeysAndObjectsUsingBlock:^(ENUM_TYPE##KHELPER(KEY_TYPE)##aKey, -//% ENUM_TYPE##VHELPER(VALUE_TYPE)##a##VNAME_VAR$u##, -//% BOOL *stop) { -//% #pragma unused(stop) -//% size_t msgSize = ComputeDict##KEY_NAME##FieldSize(UNWRAP##KEY_NAME(aKey), kMapKeyFieldNumber, keyDataType); -//% msgSize += ComputeDict##VALUE_NAME##FieldSize(UNWRAP##VALUE_NAME(a##VNAME_VAR$u), kMapValueFieldNumber, valueDataType); -//% result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; -//% }]; -//% size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); -//% result += tagSize * count; -//% return result; -//%} -//% -//%- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream -//% asField:(GPBFieldDescriptor *)field { -//% GPBDataType valueDataType = GPBGetFieldDataType(field); -//% GPBDataType keyDataType = field.mapKeyDataType; -//% uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); -//% [_dictionary enumerateKeysAndObjectsUsingBlock:^(ENUM_TYPE##KHELPER(KEY_TYPE)##aKey, -//% ENUM_TYPE##VHELPER(VALUE_TYPE)##a##VNAME_VAR$u, -//% BOOL *stop) { -//% #pragma unused(stop) -//% // Write the tag. -//% [outputStream writeInt32NoTag:tag]; -//% // Write the size of the message. -//% size_t msgSize = ComputeDict##KEY_NAME##FieldSize(UNWRAP##KEY_NAME(aKey), kMapKeyFieldNumber, keyDataType); -//% msgSize += ComputeDict##VALUE_NAME##FieldSize(UNWRAP##VALUE_NAME(a##VNAME_VAR$u), kMapValueFieldNumber, valueDataType); -//% [outputStream writeInt32NoTag:(int32_t)msgSize]; -//% // Write the fields. -//% WriteDict##KEY_NAME##Field(outputStream, UNWRAP##KEY_NAME(aKey), kMapKeyFieldNumber, keyDataType); -//% WriteDict##VALUE_NAME##Field(outputStream, UNWRAP##VALUE_NAME(a##VNAME_VAR$u), kMapValueFieldNumber, valueDataType); -//% }]; -//%} -//% -//%SERIAL_DATA_FOR_ENTRY_##VHELPER(KEY_NAME, VALUE_NAME)- (void)setGPBGenericValue:(GPBGenericValue *)value -//% forGPBGenericValueKey:(GPBGenericValue *)key { -//% [_dictionary setObject:WRAPPED##VHELPER(value->##GPBVALUE_##VHELPER(VALUE_NAME)##) forKey:WRAPPED##KHELPER(key->value##KEY_NAME)]; -//%} -//% -//%- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { -//% [self enumerateKeysAnd##ACCESSOR_NAME##VNAME##sUsingBlock:^(KEY_TYPE KisP##key, VALUE_TYPE VNAME_VAR, BOOL *stop) { -//% #pragma unused(stop) -//% block(TEXT_FORMAT_OBJ##KEY_NAME(key), TEXT_FORMAT_OBJ##VALUE_NAME(VNAME_VAR)); -//% }]; -//%} -//%PDDM-DEFINE DICTIONARY_MUTABLE_CORE(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, VHELPER, VNAME, VNAME_VAR, ACCESSOR_NAME) -//%DICTIONARY_MUTABLE_CORE2(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, VHELPER, VNAME, VNAME, VNAME_VAR, ACCESSOR_NAME) -//%PDDM-DEFINE DICTIONARY_MUTABLE_CORE2(KEY_NAME, KEY_TYPE, KisP, VALUE_NAME, VALUE_TYPE, KHELPER, VHELPER, VNAME, VNAME_REMOVE, VNAME_VAR, ACCESSOR_NAME) -//%- (void)add##ACCESSOR_NAME##EntriesFromDictionary:(GPB##KEY_NAME##VALUE_NAME##Dictionary *)otherDictionary { -//% if (otherDictionary) { -//% [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; -//% if (_autocreator) { -//% GPBAutocreatedDictionaryModified(_autocreator, self); -//% } -//% } -//%} -//% -//%- (void)set##ACCESSOR_NAME##VNAME##:(VALUE_TYPE)VNAME_VAR forKey:(KEY_TYPE##KisP$S##KisP)key { -//%DICTIONARY_VALIDATE_VALUE_##VHELPER(VNAME_VAR, )##DICTIONARY_VALIDATE_KEY_##KHELPER(key, ) [_dictionary setObject:WRAPPED##VHELPER(VNAME_VAR) forKey:WRAPPED##KHELPER(key)]; -//% if (_autocreator) { -//% GPBAutocreatedDictionaryModified(_autocreator, self); -//% } -//%} -//% -//%- (void)remove##VNAME_REMOVE##ForKey:(KEY_TYPE##KisP$S##KisP)aKey { -//% [_dictionary removeObjectForKey:WRAPPED##KHELPER(aKey)]; -//%} -//% -//%- (void)removeAll { -//% [_dictionary removeAllObjects]; -//%} - -// -// Custom Generation for Bool keys -// - -//%PDDM-DEFINE DICTIONARY_BOOL_KEY_TO_POD_IMPL(VALUE_NAME, VALUE_TYPE) -//%DICTIONARY_BOOL_KEY_TO_VALUE_IMPL(VALUE_NAME, VALUE_TYPE, POD, VALUE_NAME, value) -//%PDDM-DEFINE DICTIONARY_BOOL_KEY_TO_OBJECT_IMPL(VALUE_NAME, VALUE_TYPE) -//%DICTIONARY_BOOL_KEY_TO_VALUE_IMPL(VALUE_NAME, VALUE_TYPE, OBJECT, Object, object) - -//%PDDM-DEFINE DICTIONARY_BOOL_KEY_TO_VALUE_IMPL(VALUE_NAME, VALUE_TYPE, HELPER, VNAME, VNAME_VAR) -//%#pragma mark - Bool -> VALUE_NAME -//% -//%@implementation GPBBool##VALUE_NAME##Dictionary { -//% @package -//% VALUE_TYPE _values[2]; -//%BOOL_DICT_HAS_STORAGE_##HELPER()} -//% -//%+ (instancetype)dictionary { -//% return [[[self alloc] initWith##VNAME##s:NULL forKeys:NULL count:0] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWith##VNAME##:(VALUE_TYPE)VNAME_VAR -//% ##VNAME$S## forKey:(BOOL)key { -//% // Cast is needed so the compiler knows what class we are invoking initWith##VNAME##s:forKeys:count: -//% // on to get the type correct. -//% return [[(GPBBool##VALUE_NAME##Dictionary*)[self alloc] initWith##VNAME##s:&##VNAME_VAR -//% VALUE_NAME$S ##VNAME$S## forKeys:&key -//% VALUE_NAME$S ##VNAME$S## count:1] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWith##VNAME##s:(const VALUE_TYPE [])##VNAME_VAR##s -//% ##VNAME$S## forKeys:(const BOOL [])keys -//% ##VNAME$S## count:(NSUInteger)count { -//% // Cast is needed so the compiler knows what class we are invoking initWith##VNAME##s:forKeys:count: -//% // on to get the type correct. -//% return [[(GPBBool##VALUE_NAME##Dictionary*)[self alloc] initWith##VNAME##s:##VNAME_VAR##s -//% VALUE_NAME$S ##VNAME$S## forKeys:keys -//% VALUE_NAME$S ##VNAME$S## count:count] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWithDictionary:(GPBBool##VALUE_NAME##Dictionary *)dictionary { -//% // Cast is needed so the compiler knows what class we are invoking initWithDictionary: -//% // on to get the type correct. -//% return [[(GPBBool##VALUE_NAME##Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -//%} -//% -//%+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { -//% return [[[self alloc] initWithCapacity:numItems] autorelease]; -//%} -//% -//%- (instancetype)init { -//% return [self initWith##VNAME##s:NULL forKeys:NULL count:0]; -//%} -//% -//%BOOL_DICT_INITS_##HELPER(VALUE_NAME, VALUE_TYPE) -//% -//%- (instancetype)initWithCapacity:(NSUInteger)numItems { -//% #pragma unused(numItems) -//% return [self initWith##VNAME##s:NULL forKeys:NULL count:0]; -//%} -//% -//%BOOL_DICT_DEALLOC##HELPER() -//% -//%- (instancetype)copyWithZone:(NSZone *)zone { -//% return [[GPBBool##VALUE_NAME##Dictionary allocWithZone:zone] initWithDictionary:self]; -//%} -//% -//%- (BOOL)isEqual:(id)other { -//% if (self == other) { -//% return YES; -//% } -//% if (![other isKindOfClass:[GPBBool##VALUE_NAME##Dictionary class]]) { -//% return NO; -//% } -//% GPBBool##VALUE_NAME##Dictionary *otherDictionary = other; -//% if ((BOOL_DICT_W_HAS##HELPER(0, ) != BOOL_DICT_W_HAS##HELPER(0, otherDictionary->)) || -//% (BOOL_DICT_W_HAS##HELPER(1, ) != BOOL_DICT_W_HAS##HELPER(1, otherDictionary->))) { -//% return NO; -//% } -//% if ((BOOL_DICT_W_HAS##HELPER(0, ) && (NEQ_##HELPER(_values[0], otherDictionary->_values[0]))) || -//% (BOOL_DICT_W_HAS##HELPER(1, ) && (NEQ_##HELPER(_values[1], otherDictionary->_values[1])))) { -//% return NO; -//% } -//% return YES; -//%} -//% -//%- (NSUInteger)hash { -//% return (BOOL_DICT_W_HAS##HELPER(0, ) ? 1 : 0) + (BOOL_DICT_W_HAS##HELPER(1, ) ? 1 : 0); -//%} -//% -//%- (NSString *)description { -//% NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> {", [self class], self]; -//% if (BOOL_DICT_W_HAS##HELPER(0, )) { -//% [result appendFormat:@"NO: STR_FORMAT_##HELPER(VALUE_NAME)", _values[0]]; -//% } -//% if (BOOL_DICT_W_HAS##HELPER(1, )) { -//% [result appendFormat:@"YES: STR_FORMAT_##HELPER(VALUE_NAME)", _values[1]]; -//% } -//% [result appendString:@" }"]; -//% return result; -//%} -//% -//%- (NSUInteger)count { -//% return (BOOL_DICT_W_HAS##HELPER(0, ) ? 1 : 0) + (BOOL_DICT_W_HAS##HELPER(1, ) ? 1 : 0); -//%} -//% -//%BOOL_VALUE_FOR_KEY_##HELPER(VALUE_NAME, VALUE_TYPE) -//% -//%BOOL_SET_GPBVALUE_FOR_KEY_##HELPER(VALUE_NAME, VALUE_TYPE, VisP) -//% -//%- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { -//% if (BOOL_DICT_HAS##HELPER(0, )) { -//% block(@"false", TEXT_FORMAT_OBJ##VALUE_NAME(_values[0])); -//% } -//% if (BOOL_DICT_W_HAS##HELPER(1, )) { -//% block(@"true", TEXT_FORMAT_OBJ##VALUE_NAME(_values[1])); -//% } -//%} -//% -//%- (void)enumerateKeysAnd##VNAME##sUsingBlock: -//% (void (^)(BOOL key, VALUE_TYPE VNAME_VAR, BOOL *stop))block { -//% BOOL stop = NO; -//% if (BOOL_DICT_HAS##HELPER(0, )) { -//% block(NO, _values[0], &stop); -//% } -//% if (!stop && BOOL_DICT_W_HAS##HELPER(1, )) { -//% block(YES, _values[1], &stop); -//% } -//%} -//% -//%BOOL_EXTRA_METHODS_##HELPER(Bool, VALUE_NAME)- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { -//% GPBDataType valueDataType = GPBGetFieldDataType(field); -//% NSUInteger count = 0; -//% size_t result = 0; -//% for (int i = 0; i < 2; ++i) { -//% if (BOOL_DICT_HAS##HELPER(i, )) { -//% ++count; -//% size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); -//% msgSize += ComputeDict##VALUE_NAME##FieldSize(_values[i], kMapValueFieldNumber, valueDataType); -//% result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; -//% } -//% } -//% size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); -//% result += tagSize * count; -//% return result; -//%} -//% -//%- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream -//% asField:(GPBFieldDescriptor *)field { -//% GPBDataType valueDataType = GPBGetFieldDataType(field); -//% uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); -//% for (int i = 0; i < 2; ++i) { -//% if (BOOL_DICT_HAS##HELPER(i, )) { -//% // Write the tag. -//% [outputStream writeInt32NoTag:tag]; -//% // Write the size of the message. -//% size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); -//% msgSize += ComputeDict##VALUE_NAME##FieldSize(_values[i], kMapValueFieldNumber, valueDataType); -//% [outputStream writeInt32NoTag:(int32_t)msgSize]; -//% // Write the fields. -//% WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool); -//% WriteDict##VALUE_NAME##Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType); -//% } -//% } -//%} -//% -//%BOOL_DICT_MUTATIONS_##HELPER(VALUE_NAME, VALUE_TYPE) -//% -//%@end -//% - - -// -// Helpers for PODs -// - -//%PDDM-DEFINE VALUE_FOR_KEY_POD(KEY_TYPE, VALUE_NAME, VALUE_TYPE, KHELPER) -//%- (BOOL)get##VALUE_NAME##:(nullable VALUE_TYPE *)value forKey:(KEY_TYPE)key { -//% NSNumber *wrapped = [_dictionary objectForKey:WRAPPED##KHELPER(key)]; -//% if (wrapped && value) { -//% *value = UNWRAP##VALUE_NAME(wrapped); -//% } -//% return (wrapped != NULL); -//%} -//%PDDM-DEFINE WRAPPEDPOD(VALUE) -//%@(VALUE) -//%PDDM-DEFINE UNWRAPUInt32(VALUE) -//%[VALUE unsignedIntValue] -//%PDDM-DEFINE UNWRAPInt32(VALUE) -//%[VALUE intValue] -//%PDDM-DEFINE UNWRAPUInt64(VALUE) -//%[VALUE unsignedLongLongValue] -//%PDDM-DEFINE UNWRAPInt64(VALUE) -//%[VALUE longLongValue] -//%PDDM-DEFINE UNWRAPBool(VALUE) -//%[VALUE boolValue] -//%PDDM-DEFINE UNWRAPFloat(VALUE) -//%[VALUE floatValue] -//%PDDM-DEFINE UNWRAPDouble(VALUE) -//%[VALUE doubleValue] -//%PDDM-DEFINE UNWRAPEnum(VALUE) -//%[VALUE intValue] -//%PDDM-DEFINE TEXT_FORMAT_OBJUInt32(VALUE) -//%[NSString stringWithFormat:@"%u", VALUE] -//%PDDM-DEFINE TEXT_FORMAT_OBJInt32(VALUE) -//%[NSString stringWithFormat:@"%d", VALUE] -//%PDDM-DEFINE TEXT_FORMAT_OBJUInt64(VALUE) -//%[NSString stringWithFormat:@"%llu", VALUE] -//%PDDM-DEFINE TEXT_FORMAT_OBJInt64(VALUE) -//%[NSString stringWithFormat:@"%lld", VALUE] -//%PDDM-DEFINE TEXT_FORMAT_OBJBool(VALUE) -//%(VALUE ? @"true" : @"false") -//%PDDM-DEFINE TEXT_FORMAT_OBJFloat(VALUE) -//%[NSString stringWithFormat:@"%.*g", FLT_DIG, VALUE] -//%PDDM-DEFINE TEXT_FORMAT_OBJDouble(VALUE) -//%[NSString stringWithFormat:@"%.*lg", DBL_DIG, VALUE] -//%PDDM-DEFINE TEXT_FORMAT_OBJEnum(VALUE) -//%@(VALUE) -//%PDDM-DEFINE ENUM_TYPEPOD(TYPE) -//%NSNumber * -//%PDDM-DEFINE NEQ_POD(VAL1, VAL2) -//%VAL1 != VAL2 -//%PDDM-DEFINE EXTRA_METHODS_POD(KEY_NAME, VALUE_NAME) -// Empty -//%PDDM-DEFINE BOOL_EXTRA_METHODS_POD(KEY_NAME, VALUE_NAME) -// Empty -//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_POD(KEY_NAME, VALUE_NAME) -//%SERIAL_DATA_FOR_ENTRY_POD_##VALUE_NAME(KEY_NAME) -//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_POD_UInt32(KEY_NAME) -// Empty -//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_POD_Int32(KEY_NAME) -// Empty -//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_POD_UInt64(KEY_NAME) -// Empty -//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_POD_Int64(KEY_NAME) -// Empty -//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_POD_Bool(KEY_NAME) -// Empty -//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_POD_Float(KEY_NAME) -// Empty -//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_POD_Double(KEY_NAME) -// Empty -//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_POD_Enum(KEY_NAME) -//%- (NSData *)serializedDataForUnknownValue:(int32_t)value -//% forKey:(GPBGenericValue *)key -//% keyDataType:(GPBDataType)keyDataType { -//% size_t msgSize = ComputeDict##KEY_NAME##FieldSize(key->value##KEY_NAME, kMapKeyFieldNumber, keyDataType); -//% msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum); -//% NSMutableData *data = [NSMutableData dataWithLength:msgSize]; -//% GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data]; -//% WriteDict##KEY_NAME##Field(outputStream, key->value##KEY_NAME, kMapKeyFieldNumber, keyDataType); -//% WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum); -//% [outputStream release]; -//% return data; -//%} -//% -//%PDDM-DEFINE GPBVALUE_POD(VALUE_NAME) -//%value##VALUE_NAME -//%PDDM-DEFINE DICTIONARY_VALIDATE_VALUE_POD(VALUE_NAME, EXTRA_INDENT) -// Empty -//%PDDM-DEFINE DICTIONARY_VALIDATE_KEY_POD(KEY_NAME, EXTRA_INDENT) -// Empty - -//%PDDM-DEFINE BOOL_DICT_HAS_STORAGE_POD() -//% BOOL _valueSet[2]; -//% -//%PDDM-DEFINE BOOL_DICT_INITS_POD(VALUE_NAME, VALUE_TYPE) -//%- (instancetype)initWith##VALUE_NAME##s:(const VALUE_TYPE [])values -//% ##VALUE_NAME$S## forKeys:(const BOOL [])keys -//% ##VALUE_NAME$S## count:(NSUInteger)count { -//% self = [super init]; -//% if (self) { -//% for (NSUInteger i = 0; i < count; ++i) { -//% int idx = keys[i] ? 1 : 0; -//% _values[idx] = values[i]; -//% _valueSet[idx] = YES; -//% } -//% } -//% return self; -//%} -//% -//%- (instancetype)initWithDictionary:(GPBBool##VALUE_NAME##Dictionary *)dictionary { -//% self = [self initWith##VALUE_NAME##s:NULL forKeys:NULL count:0]; -//% if (self) { -//% if (dictionary) { -//% for (int i = 0; i < 2; ++i) { -//% if (dictionary->_valueSet[i]) { -//% _values[i] = dictionary->_values[i]; -//% _valueSet[i] = YES; -//% } -//% } -//% } -//% } -//% return self; -//%} -//%PDDM-DEFINE BOOL_DICT_DEALLOCPOD() -//%#if !defined(NS_BLOCK_ASSERTIONS) -//%- (void)dealloc { -//% NSAssert(!_autocreator, -//% @"%@: Autocreator must be cleared before release, autocreator: %@", -//% [self class], _autocreator); -//% [super dealloc]; -//%} -//%#endif // !defined(NS_BLOCK_ASSERTIONS) -//%PDDM-DEFINE BOOL_DICT_W_HASPOD(IDX, REF) -//%BOOL_DICT_HASPOD(IDX, REF) -//%PDDM-DEFINE BOOL_DICT_HASPOD(IDX, REF) -//%REF##_valueSet[IDX] -//%PDDM-DEFINE BOOL_VALUE_FOR_KEY_POD(VALUE_NAME, VALUE_TYPE) -//%- (BOOL)get##VALUE_NAME##:(VALUE_TYPE *)value forKey:(BOOL)key { -//% int idx = (key ? 1 : 0); -//% if (_valueSet[idx]) { -//% if (value) { -//% *value = _values[idx]; -//% } -//% return YES; -//% } -//% return NO; -//%} -//%PDDM-DEFINE BOOL_SET_GPBVALUE_FOR_KEY_POD(VALUE_NAME, VALUE_TYPE, VisP) -//%- (void)setGPBGenericValue:(GPBGenericValue *)value -//% forGPBGenericValueKey:(GPBGenericValue *)key { -//% int idx = (key->valueBool ? 1 : 0); -//% _values[idx] = value->value##VALUE_NAME; -//% _valueSet[idx] = YES; -//%} -//%PDDM-DEFINE BOOL_DICT_MUTATIONS_POD(VALUE_NAME, VALUE_TYPE) -//%- (void)addEntriesFromDictionary:(GPBBool##VALUE_NAME##Dictionary *)otherDictionary { -//% if (otherDictionary) { -//% for (int i = 0; i < 2; ++i) { -//% if (otherDictionary->_valueSet[i]) { -//% _valueSet[i] = YES; -//% _values[i] = otherDictionary->_values[i]; -//% } -//% } -//% if (_autocreator) { -//% GPBAutocreatedDictionaryModified(_autocreator, self); -//% } -//% } -//%} -//% -//%- (void)set##VALUE_NAME:(VALUE_TYPE)value forKey:(BOOL)key { -//% int idx = (key ? 1 : 0); -//% _values[idx] = value; -//% _valueSet[idx] = YES; -//% if (_autocreator) { -//% GPBAutocreatedDictionaryModified(_autocreator, self); -//% } -//%} -//% -//%- (void)remove##VALUE_NAME##ForKey:(BOOL)aKey { -//% _valueSet[aKey ? 1 : 0] = NO; -//%} -//% -//%- (void)removeAll { -//% _valueSet[0] = NO; -//% _valueSet[1] = NO; -//%} -//%PDDM-DEFINE STR_FORMAT_POD(VALUE_NAME) -//%STR_FORMAT_##VALUE_NAME() -//%PDDM-DEFINE STR_FORMAT_UInt32() -//%%u -//%PDDM-DEFINE STR_FORMAT_Int32() -//%%d -//%PDDM-DEFINE STR_FORMAT_UInt64() -//%%llu -//%PDDM-DEFINE STR_FORMAT_Int64() -//%%lld -//%PDDM-DEFINE STR_FORMAT_Bool() -//%%d -//%PDDM-DEFINE STR_FORMAT_Float() -//%%f -//%PDDM-DEFINE STR_FORMAT_Double() -//%%lf - -// -// Helpers for Objects -// - -//%PDDM-DEFINE VALUE_FOR_KEY_OBJECT(KEY_TYPE, VALUE_NAME, VALUE_TYPE, KHELPER) -//%- (VALUE_TYPE)objectForKey:(KEY_TYPE)key { -//% VALUE_TYPE result = [_dictionary objectForKey:WRAPPED##KHELPER(key)]; -//% return result; -//%} -//%PDDM-DEFINE WRAPPEDOBJECT(VALUE) -//%VALUE -//%PDDM-DEFINE UNWRAPString(VALUE) -//%VALUE -//%PDDM-DEFINE UNWRAPObject(VALUE) -//%VALUE -//%PDDM-DEFINE TEXT_FORMAT_OBJString(VALUE) -//%VALUE -//%PDDM-DEFINE TEXT_FORMAT_OBJObject(VALUE) -//%VALUE -//%PDDM-DEFINE ENUM_TYPEOBJECT(TYPE) -//%ENUM_TYPEOBJECT_##TYPE() -//%PDDM-DEFINE ENUM_TYPEOBJECT_NSString() -//%NSString * -//%PDDM-DEFINE ENUM_TYPEOBJECT_id() -//%id ## -//%PDDM-DEFINE NEQ_OBJECT(VAL1, VAL2) -//%![VAL1 isEqual:VAL2] -//%PDDM-DEFINE EXTRA_METHODS_OBJECT(KEY_NAME, VALUE_NAME) -//%- (BOOL)isInitialized { -//% for (GPBMessage *msg in [_dictionary objectEnumerator]) { -//% if (!msg.initialized) { -//% return NO; -//% } -//% } -//% return YES; -//%} -//% -//%- (instancetype)deepCopyWithZone:(NSZone *)zone { -//% GPB##KEY_NAME##VALUE_NAME##Dictionary *newDict = -//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] init]; -//% [_dictionary enumerateKeysAndObjectsUsingBlock:^(id aKey, -//% GPBMessage *msg, -//% BOOL *stop) { -//% #pragma unused(stop) -//% GPBMessage *copiedMsg = [msg copyWithZone:zone]; -//% [newDict->_dictionary setObject:copiedMsg forKey:aKey]; -//% [copiedMsg release]; -//% }]; -//% return newDict; -//%} -//% -//% -//%PDDM-DEFINE BOOL_EXTRA_METHODS_OBJECT(KEY_NAME, VALUE_NAME) -//%- (BOOL)isInitialized { -//% if (_values[0] && ![_values[0] isInitialized]) { -//% return NO; -//% } -//% if (_values[1] && ![_values[1] isInitialized]) { -//% return NO; -//% } -//% return YES; -//%} -//% -//%- (instancetype)deepCopyWithZone:(NSZone *)zone { -//% GPB##KEY_NAME##VALUE_NAME##Dictionary *newDict = -//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] init]; -//% for (int i = 0; i < 2; ++i) { -//% if (_values[i] != nil) { -//% newDict->_values[i] = [_values[i] copyWithZone:zone]; -//% } -//% } -//% return newDict; -//%} -//% -//% -//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_OBJECT(KEY_NAME, VALUE_NAME) -// Empty -//%PDDM-DEFINE GPBVALUE_OBJECT(VALUE_NAME) -//%valueString -//%PDDM-DEFINE DICTIONARY_VALIDATE_VALUE_OBJECT(VALUE_NAME, EXTRA_INDENT) -//%##EXTRA_INDENT$S## if (!##VALUE_NAME) { -//%##EXTRA_INDENT$S## [NSException raise:NSInvalidArgumentException -//%##EXTRA_INDENT$S## format:@"Attempting to add nil object to a Dictionary"]; -//%##EXTRA_INDENT$S## } -//% -//%PDDM-DEFINE DICTIONARY_VALIDATE_KEY_OBJECT(KEY_NAME, EXTRA_INDENT) -//%##EXTRA_INDENT$S## if (!##KEY_NAME) { -//%##EXTRA_INDENT$S## [NSException raise:NSInvalidArgumentException -//%##EXTRA_INDENT$S## format:@"Attempting to add nil key to a Dictionary"]; -//%##EXTRA_INDENT$S## } -//% - -//%PDDM-DEFINE BOOL_DICT_HAS_STORAGE_OBJECT() -// Empty -//%PDDM-DEFINE BOOL_DICT_INITS_OBJECT(VALUE_NAME, VALUE_TYPE) -//%- (instancetype)initWithObjects:(const VALUE_TYPE [])objects -//% forKeys:(const BOOL [])keys -//% count:(NSUInteger)count { -//% self = [super init]; -//% if (self) { -//% for (NSUInteger i = 0; i < count; ++i) { -//% if (!objects[i]) { -//% [NSException raise:NSInvalidArgumentException -//% format:@"Attempting to add nil object to a Dictionary"]; -//% } -//% int idx = keys[i] ? 1 : 0; -//% [_values[idx] release]; -//% _values[idx] = (VALUE_TYPE)[objects[i] retain]; -//% } -//% } -//% return self; -//%} -//% -//%- (instancetype)initWithDictionary:(GPBBool##VALUE_NAME##Dictionary *)dictionary { -//% self = [self initWithObjects:NULL forKeys:NULL count:0]; -//% if (self) { -//% if (dictionary) { -//% _values[0] = [dictionary->_values[0] retain]; -//% _values[1] = [dictionary->_values[1] retain]; -//% } -//% } -//% return self; -//%} -//%PDDM-DEFINE BOOL_DICT_DEALLOCOBJECT() -//%- (void)dealloc { -//% NSAssert(!_autocreator, -//% @"%@: Autocreator must be cleared before release, autocreator: %@", -//% [self class], _autocreator); -//% [_values[0] release]; -//% [_values[1] release]; -//% [super dealloc]; -//%} -//%PDDM-DEFINE BOOL_DICT_W_HASOBJECT(IDX, REF) -//%(BOOL_DICT_HASOBJECT(IDX, REF)) -//%PDDM-DEFINE BOOL_DICT_HASOBJECT(IDX, REF) -//%REF##_values[IDX] != nil -//%PDDM-DEFINE BOOL_VALUE_FOR_KEY_OBJECT(VALUE_NAME, VALUE_TYPE) -//%- (VALUE_TYPE)objectForKey:(BOOL)key { -//% return _values[key ? 1 : 0]; -//%} -//%PDDM-DEFINE BOOL_SET_GPBVALUE_FOR_KEY_OBJECT(VALUE_NAME, VALUE_TYPE, VisP) -//%- (void)setGPBGenericValue:(GPBGenericValue *)value -//% forGPBGenericValueKey:(GPBGenericValue *)key { -//% int idx = (key->valueBool ? 1 : 0); -//% [_values[idx] release]; -//% _values[idx] = [value->valueString retain]; -//%} - -//%PDDM-DEFINE BOOL_DICT_MUTATIONS_OBJECT(VALUE_NAME, VALUE_TYPE) -//%- (void)addEntriesFromDictionary:(GPBBool##VALUE_NAME##Dictionary *)otherDictionary { -//% if (otherDictionary) { -//% for (int i = 0; i < 2; ++i) { -//% if (otherDictionary->_values[i] != nil) { -//% [_values[i] release]; -//% _values[i] = [otherDictionary->_values[i] retain]; -//% } -//% } -//% if (_autocreator) { -//% GPBAutocreatedDictionaryModified(_autocreator, self); -//% } -//% } -//%} -//% -//%- (void)setObject:(VALUE_TYPE)object forKey:(BOOL)key { -//% if (!object) { -//% [NSException raise:NSInvalidArgumentException -//% format:@"Attempting to add nil object to a Dictionary"]; -//% } -//% int idx = (key ? 1 : 0); -//% [_values[idx] release]; -//% _values[idx] = [object retain]; -//% if (_autocreator) { -//% GPBAutocreatedDictionaryModified(_autocreator, self); -//% } -//%} -//% -//%- (void)removeObjectForKey:(BOOL)aKey { -//% int idx = (aKey ? 1 : 0); -//% [_values[idx] release]; -//% _values[idx] = nil; -//%} -//% -//%- (void)removeAll { -//% for (int i = 0; i < 2; ++i) { -//% [_values[i] release]; -//% _values[i] = nil; -//% } -//%} -//%PDDM-DEFINE STR_FORMAT_OBJECT(VALUE_NAME) -//%%@ - - -//%PDDM-EXPAND DICTIONARY_IMPL_FOR_POD_KEY(UInt32, uint32_t) -// This block of code is generated, do not edit it directly. - -#pragma mark - UInt32 -> UInt32 - -@implementation GPBUInt32UInt32Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(uint32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32UInt32Dictionary*)[self alloc] initWithUInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32UInt32Dictionary*)[self alloc] initWithUInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt32UInt32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt32UInt32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt32s:(const uint32_t [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt32UInt32Dictionary *)dictionary { - self = [self initWithUInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32UInt32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32UInt32Dictionary class]]) { - return NO; - } - GPBUInt32UInt32Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(uint32_t key, uint32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedIntValue], [aValue unsignedIntValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueUInt32) forKey:@(key->valueUInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndUInt32sUsingBlock:^(uint32_t key, uint32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%u", key], [NSString stringWithFormat:@"%u", value]); - }]; -} - -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(uint32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped unsignedIntValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt32UInt32Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt32:(uint32_t)value forKey:(uint32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt32ForKey:(uint32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt32 -> Int32 - -@implementation GPBUInt32Int32Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(uint32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32Int32Dictionary*)[self alloc] initWithInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt32s:(const int32_t [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32Int32Dictionary*)[self alloc] initWithInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt32Int32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt32Int32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt32s:(const int32_t [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt32Int32Dictionary *)dictionary { - self = [self initWithInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32Int32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32Int32Dictionary class]]) { - return NO; - } - GPBUInt32Int32Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(uint32_t key, int32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedIntValue], [aValue intValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueInt32) forKey:@(key->valueUInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndInt32sUsingBlock:^(uint32_t key, int32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%u", key], [NSString stringWithFormat:@"%d", value]); - }]; -} - -- (BOOL)getInt32:(nullable int32_t *)value forKey:(uint32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped intValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt32Int32Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt32:(int32_t)value forKey:(uint32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt32ForKey:(uint32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt32 -> UInt64 - -@implementation GPBUInt32UInt64Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(uint32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32UInt64Dictionary*)[self alloc] initWithUInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32UInt64Dictionary*)[self alloc] initWithUInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt32UInt64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt32UInt64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt64s:(const uint64_t [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt32UInt64Dictionary *)dictionary { - self = [self initWithUInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32UInt64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32UInt64Dictionary class]]) { - return NO; - } - GPBUInt32UInt64Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(uint32_t key, uint64_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedIntValue], [aValue unsignedLongLongValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueUInt64) forKey:@(key->valueUInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndUInt64sUsingBlock:^(uint32_t key, uint64_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%u", key], [NSString stringWithFormat:@"%llu", value]); - }]; -} - -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(uint32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped unsignedLongLongValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt32UInt64Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt64:(uint64_t)value forKey:(uint32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt64ForKey:(uint32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt32 -> Int64 - -@implementation GPBUInt32Int64Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(uint32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32Int64Dictionary*)[self alloc] initWithInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt64s:(const int64_t [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32Int64Dictionary*)[self alloc] initWithInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt32Int64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt32Int64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt64s:(const int64_t [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt32Int64Dictionary *)dictionary { - self = [self initWithInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32Int64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32Int64Dictionary class]]) { - return NO; - } - GPBUInt32Int64Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(uint32_t key, int64_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedIntValue], [aValue longLongValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueInt64) forKey:@(key->valueUInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndInt64sUsingBlock:^(uint32_t key, int64_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%u", key], [NSString stringWithFormat:@"%lld", value]); - }]; -} - -- (BOOL)getInt64:(nullable int64_t *)value forKey:(uint32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped longLongValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt32Int64Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt64:(int64_t)value forKey:(uint32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt64ForKey:(uint32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt32 -> Bool - -@implementation GPBUInt32BoolDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithBools:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(uint32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32BoolDictionary*)[self alloc] initWithBools:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithBools:(const BOOL [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32BoolDictionary*)[self alloc] initWithBools:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt32BoolDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt32BoolDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithBools:(const BOOL [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt32BoolDictionary *)dictionary { - self = [self initWithBools:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32BoolDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32BoolDictionary class]]) { - return NO; - } - GPBUInt32BoolDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(uint32_t key, BOOL value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedIntValue], [aValue boolValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueBool) forKey:@(key->valueUInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndBoolsUsingBlock:^(uint32_t key, BOOL value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%u", key], (value ? @"true" : @"false")); - }]; -} - -- (BOOL)getBool:(nullable BOOL *)value forKey:(uint32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped boolValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt32BoolDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setBool:(BOOL)value forKey:(uint32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeBoolForKey:(uint32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt32 -> Float - -@implementation GPBUInt32FloatDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithFloats:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(uint32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32FloatDictionary*)[self alloc] initWithFloats:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithFloats:(const float [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32FloatDictionary*)[self alloc] initWithFloats:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt32FloatDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt32FloatDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithFloats:(const float [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt32FloatDictionary *)dictionary { - self = [self initWithFloats:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32FloatDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32FloatDictionary class]]) { - return NO; - } - GPBUInt32FloatDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(uint32_t key, float value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedIntValue], [aValue floatValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueFloat) forKey:@(key->valueUInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndFloatsUsingBlock:^(uint32_t key, float value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%u", key], [NSString stringWithFormat:@"%.*g", FLT_DIG, value]); - }]; -} - -- (BOOL)getFloat:(nullable float *)value forKey:(uint32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped floatValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt32FloatDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setFloat:(float)value forKey:(uint32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeFloatForKey:(uint32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt32 -> Double - -@implementation GPBUInt32DoubleDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithDoubles:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(uint32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32DoubleDictionary*)[self alloc] initWithDoubles:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithDoubles:(const double [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32DoubleDictionary*)[self alloc] initWithDoubles:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt32DoubleDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt32DoubleDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithDoubles:(const double [])values - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt32DoubleDictionary *)dictionary { - self = [self initWithDoubles:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32DoubleDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32DoubleDictionary class]]) { - return NO; - } - GPBUInt32DoubleDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(uint32_t key, double value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedIntValue], [aValue doubleValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueDouble) forKey:@(key->valueUInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndDoublesUsingBlock:^(uint32_t key, double value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%u", key], [NSString stringWithFormat:@"%.*lg", DBL_DIG, value]); - }]; -} - -- (BOOL)getDouble:(nullable double *)value forKey:(uint32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped doubleValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt32DoubleDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setDouble:(double)value forKey:(uint32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeDoubleForKey:(uint32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt32 -> Enum - -@implementation GPBUInt32EnumDictionary { - @package - NSMutableDictionary *_dictionary; - GPBEnumValidationFunc _validationFunc; -} - -@synthesize validationFunc = _validationFunc; - -+ (instancetype)dictionary { - return [[[self alloc] initWithValidationFunction:NULL - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func { - return [[[self alloc] initWithValidationFunction:func - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(uint32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32EnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:&rawValue - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32EnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:rawValues - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt32EnumDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32EnumDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - return [[[self alloc] initWithValidationFunction:func capacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithValidationFunction:NULL rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func { - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - _validationFunc = (func != NULL ? func : DictDefault_IsValidValue); - if (count && rawValues && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(rawValues[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt32EnumDictionary *)dictionary { - self = [self initWithValidationFunction:dictionary.validationFunc - rawValues:NULL - forKeys:NULL - count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32EnumDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32EnumDictionary class]]) { - return NO; - } - GPBUInt32EnumDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(uint32_t key, int32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedIntValue], [aValue intValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType { - size_t msgSize = ComputeDictUInt32FieldSize(key->valueUInt32, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum); - NSMutableData *data = [NSMutableData dataWithLength:msgSize]; - GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data]; - WriteDictUInt32Field(outputStream, key->valueUInt32, kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum); - [outputStream release]; - return data; -} -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueEnum) forKey:@(key->valueUInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndRawValuesUsingBlock:^(uint32_t key, int32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%u", key], @(value)); - }]; -} - -- (BOOL)getEnum:(int32_t *)value forKey:(uint32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - int32_t result = [wrapped intValue]; - if (!_validationFunc(result)) { - result = kGPBUnrecognizedEnumeratorValue; - } - *value = result; - } - return (wrapped != NULL); -} - -- (BOOL)getRawValue:(int32_t *)rawValue forKey:(uint32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && rawValue) { - *rawValue = [wrapped intValue]; - } - return (wrapped != NULL); -} - -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(uint32_t key, int32_t value, BOOL *stop))block { - GPBEnumValidationFunc func = _validationFunc; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - int32_t unwrapped = [aValue intValue]; - if (!func(unwrapped)) { - unwrapped = kGPBUnrecognizedEnumeratorValue; - } - block([aKey unsignedIntValue], unwrapped, stop); - }]; -} - -- (void)addRawEntriesFromDictionary:(GPBUInt32EnumDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setRawValue:(int32_t)value forKey:(uint32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeEnumForKey:(uint32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -- (void)setEnum:(int32_t)value forKey:(uint32_t)key { - if (!_validationFunc(value)) { - [NSException raise:NSInvalidArgumentException - format:@"GPBUInt32EnumDictionary: Attempt to set an unknown enum value (%d)", - value]; - } - - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -@end - -#pragma mark - UInt32 -> Object - -@implementation GPBUInt32ObjectDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithObjects:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithObject:(id)object - forKey:(uint32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithObjects:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32ObjectDictionary*)[self alloc] initWithObjects:&object - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithObjects:(const id [])objects - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithObjects:forKeys:count: - // on to get the type correct. - return [[(GPBUInt32ObjectDictionary*)[self alloc] initWithObjects:objects - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt32ObjectDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt32ObjectDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithObjects:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithObjects:(const id [])objects - forKeys:(const uint32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && objects && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!objects[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil object to a Dictionary"]; - } - [_dictionary setObject:objects[i] forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt32ObjectDictionary *)dictionary { - self = [self initWithObjects:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithObjects:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32ObjectDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32ObjectDictionary class]]) { - return NO; - } - GPBUInt32ObjectDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndObjectsUsingBlock: - (void (^)(uint32_t key, id object, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - block([aKey unsignedIntValue], aObject, stop); - }]; -} - -- (BOOL)isInitialized { - for (GPBMessage *msg in [_dictionary objectEnumerator]) { - if (!msg.initialized) { - return NO; - } - } - return YES; -} - -- (instancetype)deepCopyWithZone:(NSZone *)zone { - GPBUInt32ObjectDictionary *newDict = - [[GPBUInt32ObjectDictionary alloc] init]; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(id aKey, - GPBMessage *msg, - BOOL *stop) { - #pragma unused(stop) - GPBMessage *copiedMsg = [msg copyWithZone:zone]; - [newDict->_dictionary setObject:copiedMsg forKey:aKey]; - [copiedMsg release]; - }]; - return newDict; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictObjectFieldSize(aObject, kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictObjectFieldSize(aObject, kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType); - WriteDictObjectField(outputStream, aObject, kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:value->valueString forKey:@(key->valueUInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndObjectsUsingBlock:^(uint32_t key, id object, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%u", key], object); - }]; -} - -- (id)objectForKey:(uint32_t)key { - id result = [_dictionary objectForKey:@(key)]; - return result; -} - -- (void)addEntriesFromDictionary:(GPBUInt32ObjectDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setObject:(id)object forKey:(uint32_t)key { - if (!object) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil object to a Dictionary"]; - } - [_dictionary setObject:object forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeObjectForKey:(uint32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -//%PDDM-EXPAND DICTIONARY_IMPL_FOR_POD_KEY(Int32, int32_t) -// This block of code is generated, do not edit it directly. - -#pragma mark - Int32 -> UInt32 - -@implementation GPBInt32UInt32Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(int32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBInt32UInt32Dictionary*)[self alloc] initWithUInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBInt32UInt32Dictionary*)[self alloc] initWithUInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt32UInt32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt32UInt32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt32s:(const uint32_t [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt32UInt32Dictionary *)dictionary { - self = [self initWithUInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32UInt32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32UInt32Dictionary class]]) { - return NO; - } - GPBInt32UInt32Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(int32_t key, uint32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey intValue], [aValue unsignedIntValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType); - WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueUInt32) forKey:@(key->valueInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndUInt32sUsingBlock:^(int32_t key, uint32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%d", key], [NSString stringWithFormat:@"%u", value]); - }]; -} - -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(int32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped unsignedIntValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt32UInt32Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt32:(uint32_t)value forKey:(int32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt32ForKey:(int32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int32 -> Int32 - -@implementation GPBInt32Int32Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(int32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBInt32Int32Dictionary*)[self alloc] initWithInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt32s:(const int32_t [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBInt32Int32Dictionary*)[self alloc] initWithInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt32Int32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt32Int32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt32s:(const int32_t [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt32Int32Dictionary *)dictionary { - self = [self initWithInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32Int32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32Int32Dictionary class]]) { - return NO; - } - GPBInt32Int32Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(int32_t key, int32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey intValue], [aValue intValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType); - WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueInt32) forKey:@(key->valueInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndInt32sUsingBlock:^(int32_t key, int32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%d", key], [NSString stringWithFormat:@"%d", value]); - }]; -} - -- (BOOL)getInt32:(nullable int32_t *)value forKey:(int32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped intValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt32Int32Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt32:(int32_t)value forKey:(int32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt32ForKey:(int32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int32 -> UInt64 - -@implementation GPBInt32UInt64Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(int32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBInt32UInt64Dictionary*)[self alloc] initWithUInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBInt32UInt64Dictionary*)[self alloc] initWithUInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt32UInt64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt32UInt64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt64s:(const uint64_t [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt32UInt64Dictionary *)dictionary { - self = [self initWithUInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32UInt64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32UInt64Dictionary class]]) { - return NO; - } - GPBInt32UInt64Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(int32_t key, uint64_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey intValue], [aValue unsignedLongLongValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType); - WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueUInt64) forKey:@(key->valueInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndUInt64sUsingBlock:^(int32_t key, uint64_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%d", key], [NSString stringWithFormat:@"%llu", value]); - }]; -} - -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(int32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped unsignedLongLongValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt32UInt64Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt64:(uint64_t)value forKey:(int32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt64ForKey:(int32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int32 -> Int64 - -@implementation GPBInt32Int64Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(int32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBInt32Int64Dictionary*)[self alloc] initWithInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt64s:(const int64_t [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBInt32Int64Dictionary*)[self alloc] initWithInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt32Int64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt32Int64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt64s:(const int64_t [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt32Int64Dictionary *)dictionary { - self = [self initWithInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32Int64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32Int64Dictionary class]]) { - return NO; - } - GPBInt32Int64Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(int32_t key, int64_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey intValue], [aValue longLongValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType); - WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueInt64) forKey:@(key->valueInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndInt64sUsingBlock:^(int32_t key, int64_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%d", key], [NSString stringWithFormat:@"%lld", value]); - }]; -} - -- (BOOL)getInt64:(nullable int64_t *)value forKey:(int32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped longLongValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt32Int64Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt64:(int64_t)value forKey:(int32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt64ForKey:(int32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int32 -> Bool - -@implementation GPBInt32BoolDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithBools:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(int32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBInt32BoolDictionary*)[self alloc] initWithBools:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithBools:(const BOOL [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBInt32BoolDictionary*)[self alloc] initWithBools:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt32BoolDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt32BoolDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithBools:(const BOOL [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt32BoolDictionary *)dictionary { - self = [self initWithBools:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32BoolDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32BoolDictionary class]]) { - return NO; - } - GPBInt32BoolDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(int32_t key, BOOL value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey intValue], [aValue boolValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType); - WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueBool) forKey:@(key->valueInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndBoolsUsingBlock:^(int32_t key, BOOL value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%d", key], (value ? @"true" : @"false")); - }]; -} - -- (BOOL)getBool:(nullable BOOL *)value forKey:(int32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped boolValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt32BoolDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setBool:(BOOL)value forKey:(int32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeBoolForKey:(int32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int32 -> Float - -@implementation GPBInt32FloatDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithFloats:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(int32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBInt32FloatDictionary*)[self alloc] initWithFloats:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithFloats:(const float [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBInt32FloatDictionary*)[self alloc] initWithFloats:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt32FloatDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt32FloatDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithFloats:(const float [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt32FloatDictionary *)dictionary { - self = [self initWithFloats:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32FloatDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32FloatDictionary class]]) { - return NO; - } - GPBInt32FloatDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(int32_t key, float value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey intValue], [aValue floatValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType); - WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueFloat) forKey:@(key->valueInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndFloatsUsingBlock:^(int32_t key, float value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%d", key], [NSString stringWithFormat:@"%.*g", FLT_DIG, value]); - }]; -} - -- (BOOL)getFloat:(nullable float *)value forKey:(int32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped floatValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt32FloatDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setFloat:(float)value forKey:(int32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeFloatForKey:(int32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int32 -> Double - -@implementation GPBInt32DoubleDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithDoubles:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(int32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBInt32DoubleDictionary*)[self alloc] initWithDoubles:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithDoubles:(const double [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBInt32DoubleDictionary*)[self alloc] initWithDoubles:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt32DoubleDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt32DoubleDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithDoubles:(const double [])values - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt32DoubleDictionary *)dictionary { - self = [self initWithDoubles:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32DoubleDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32DoubleDictionary class]]) { - return NO; - } - GPBInt32DoubleDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(int32_t key, double value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey intValue], [aValue doubleValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType); - WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueDouble) forKey:@(key->valueInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndDoublesUsingBlock:^(int32_t key, double value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%d", key], [NSString stringWithFormat:@"%.*lg", DBL_DIG, value]); - }]; -} - -- (BOOL)getDouble:(nullable double *)value forKey:(int32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped doubleValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt32DoubleDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setDouble:(double)value forKey:(int32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeDoubleForKey:(int32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int32 -> Enum - -@implementation GPBInt32EnumDictionary { - @package - NSMutableDictionary *_dictionary; - GPBEnumValidationFunc _validationFunc; -} - -@synthesize validationFunc = _validationFunc; - -+ (instancetype)dictionary { - return [[[self alloc] initWithValidationFunction:NULL - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func { - return [[[self alloc] initWithValidationFunction:func - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(int32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBInt32EnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:&rawValue - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBInt32EnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:rawValues - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt32EnumDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBInt32EnumDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - return [[[self alloc] initWithValidationFunction:func capacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithValidationFunction:NULL rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func { - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - _validationFunc = (func != NULL ? func : DictDefault_IsValidValue); - if (count && rawValues && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(rawValues[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt32EnumDictionary *)dictionary { - self = [self initWithValidationFunction:dictionary.validationFunc - rawValues:NULL - forKeys:NULL - count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32EnumDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32EnumDictionary class]]) { - return NO; - } - GPBInt32EnumDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(int32_t key, int32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey intValue], [aValue intValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType { - size_t msgSize = ComputeDictInt32FieldSize(key->valueInt32, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum); - NSMutableData *data = [NSMutableData dataWithLength:msgSize]; - GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data]; - WriteDictInt32Field(outputStream, key->valueInt32, kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum); - [outputStream release]; - return data; -} -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueEnum) forKey:@(key->valueInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndRawValuesUsingBlock:^(int32_t key, int32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%d", key], @(value)); - }]; -} - -- (BOOL)getEnum:(int32_t *)value forKey:(int32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - int32_t result = [wrapped intValue]; - if (!_validationFunc(result)) { - result = kGPBUnrecognizedEnumeratorValue; - } - *value = result; - } - return (wrapped != NULL); -} - -- (BOOL)getRawValue:(int32_t *)rawValue forKey:(int32_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && rawValue) { - *rawValue = [wrapped intValue]; - } - return (wrapped != NULL); -} - -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(int32_t key, int32_t value, BOOL *stop))block { - GPBEnumValidationFunc func = _validationFunc; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - int32_t unwrapped = [aValue intValue]; - if (!func(unwrapped)) { - unwrapped = kGPBUnrecognizedEnumeratorValue; - } - block([aKey intValue], unwrapped, stop); - }]; -} - -- (void)addRawEntriesFromDictionary:(GPBInt32EnumDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setRawValue:(int32_t)value forKey:(int32_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeEnumForKey:(int32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -- (void)setEnum:(int32_t)value forKey:(int32_t)key { - if (!_validationFunc(value)) { - [NSException raise:NSInvalidArgumentException - format:@"GPBInt32EnumDictionary: Attempt to set an unknown enum value (%d)", - value]; - } - - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -@end - -#pragma mark - Int32 -> Object - -@implementation GPBInt32ObjectDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithObjects:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithObject:(id)object - forKey:(int32_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithObjects:forKeys:count: - // on to get the type correct. - return [[(GPBInt32ObjectDictionary*)[self alloc] initWithObjects:&object - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithObjects:(const id [])objects - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithObjects:forKeys:count: - // on to get the type correct. - return [[(GPBInt32ObjectDictionary*)[self alloc] initWithObjects:objects - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt32ObjectDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt32ObjectDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithObjects:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithObjects:(const id [])objects - forKeys:(const int32_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && objects && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!objects[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil object to a Dictionary"]; - } - [_dictionary setObject:objects[i] forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt32ObjectDictionary *)dictionary { - self = [self initWithObjects:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithObjects:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32ObjectDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32ObjectDictionary class]]) { - return NO; - } - GPBInt32ObjectDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndObjectsUsingBlock: - (void (^)(int32_t key, id object, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - block([aKey intValue], aObject, stop); - }]; -} - -- (BOOL)isInitialized { - for (GPBMessage *msg in [_dictionary objectEnumerator]) { - if (!msg.initialized) { - return NO; - } - } - return YES; -} - -- (instancetype)deepCopyWithZone:(NSZone *)zone { - GPBInt32ObjectDictionary *newDict = - [[GPBInt32ObjectDictionary alloc] init]; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(id aKey, - GPBMessage *msg, - BOOL *stop) { - #pragma unused(stop) - GPBMessage *copiedMsg = [msg copyWithZone:zone]; - [newDict->_dictionary setObject:copiedMsg forKey:aKey]; - [copiedMsg release]; - }]; - return newDict; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictObjectFieldSize(aObject, kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictObjectFieldSize(aObject, kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType); - WriteDictObjectField(outputStream, aObject, kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:value->valueString forKey:@(key->valueInt32)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndObjectsUsingBlock:^(int32_t key, id object, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%d", key], object); - }]; -} - -- (id)objectForKey:(int32_t)key { - id result = [_dictionary objectForKey:@(key)]; - return result; -} - -- (void)addEntriesFromDictionary:(GPBInt32ObjectDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setObject:(id)object forKey:(int32_t)key { - if (!object) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil object to a Dictionary"]; - } - [_dictionary setObject:object forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeObjectForKey:(int32_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -//%PDDM-EXPAND DICTIONARY_IMPL_FOR_POD_KEY(UInt64, uint64_t) -// This block of code is generated, do not edit it directly. - -#pragma mark - UInt64 -> UInt32 - -@implementation GPBUInt64UInt32Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(uint64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64UInt32Dictionary*)[self alloc] initWithUInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64UInt32Dictionary*)[self alloc] initWithUInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt64UInt32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt64UInt32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt32s:(const uint32_t [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt64UInt32Dictionary *)dictionary { - self = [self initWithUInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64UInt32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64UInt32Dictionary class]]) { - return NO; - } - GPBUInt64UInt32Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(uint64_t key, uint32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedLongLongValue], [aValue unsignedIntValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueUInt32) forKey:@(key->valueUInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndUInt32sUsingBlock:^(uint64_t key, uint32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%llu", key], [NSString stringWithFormat:@"%u", value]); - }]; -} - -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(uint64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped unsignedIntValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt64UInt32Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt32:(uint32_t)value forKey:(uint64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt32ForKey:(uint64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt64 -> Int32 - -@implementation GPBUInt64Int32Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(uint64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64Int32Dictionary*)[self alloc] initWithInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt32s:(const int32_t [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64Int32Dictionary*)[self alloc] initWithInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt64Int32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt64Int32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt32s:(const int32_t [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt64Int32Dictionary *)dictionary { - self = [self initWithInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64Int32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64Int32Dictionary class]]) { - return NO; - } - GPBUInt64Int32Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(uint64_t key, int32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedLongLongValue], [aValue intValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueInt32) forKey:@(key->valueUInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndInt32sUsingBlock:^(uint64_t key, int32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%llu", key], [NSString stringWithFormat:@"%d", value]); - }]; -} - -- (BOOL)getInt32:(nullable int32_t *)value forKey:(uint64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped intValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt64Int32Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt32:(int32_t)value forKey:(uint64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt32ForKey:(uint64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt64 -> UInt64 - -@implementation GPBUInt64UInt64Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(uint64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64UInt64Dictionary*)[self alloc] initWithUInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64UInt64Dictionary*)[self alloc] initWithUInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt64UInt64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt64UInt64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt64s:(const uint64_t [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt64UInt64Dictionary *)dictionary { - self = [self initWithUInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64UInt64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64UInt64Dictionary class]]) { - return NO; - } - GPBUInt64UInt64Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(uint64_t key, uint64_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedLongLongValue], [aValue unsignedLongLongValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueUInt64) forKey:@(key->valueUInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndUInt64sUsingBlock:^(uint64_t key, uint64_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%llu", key], [NSString stringWithFormat:@"%llu", value]); - }]; -} - -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(uint64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped unsignedLongLongValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt64UInt64Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt64:(uint64_t)value forKey:(uint64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt64ForKey:(uint64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt64 -> Int64 - -@implementation GPBUInt64Int64Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(uint64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64Int64Dictionary*)[self alloc] initWithInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt64s:(const int64_t [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64Int64Dictionary*)[self alloc] initWithInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt64Int64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt64Int64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt64s:(const int64_t [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt64Int64Dictionary *)dictionary { - self = [self initWithInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64Int64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64Int64Dictionary class]]) { - return NO; - } - GPBUInt64Int64Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(uint64_t key, int64_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedLongLongValue], [aValue longLongValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueInt64) forKey:@(key->valueUInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndInt64sUsingBlock:^(uint64_t key, int64_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%llu", key], [NSString stringWithFormat:@"%lld", value]); - }]; -} - -- (BOOL)getInt64:(nullable int64_t *)value forKey:(uint64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped longLongValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt64Int64Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt64:(int64_t)value forKey:(uint64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt64ForKey:(uint64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt64 -> Bool - -@implementation GPBUInt64BoolDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithBools:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(uint64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64BoolDictionary*)[self alloc] initWithBools:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithBools:(const BOOL [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64BoolDictionary*)[self alloc] initWithBools:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt64BoolDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt64BoolDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithBools:(const BOOL [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt64BoolDictionary *)dictionary { - self = [self initWithBools:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64BoolDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64BoolDictionary class]]) { - return NO; - } - GPBUInt64BoolDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(uint64_t key, BOOL value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedLongLongValue], [aValue boolValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueBool) forKey:@(key->valueUInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndBoolsUsingBlock:^(uint64_t key, BOOL value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%llu", key], (value ? @"true" : @"false")); - }]; -} - -- (BOOL)getBool:(nullable BOOL *)value forKey:(uint64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped boolValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt64BoolDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setBool:(BOOL)value forKey:(uint64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeBoolForKey:(uint64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt64 -> Float - -@implementation GPBUInt64FloatDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithFloats:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(uint64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64FloatDictionary*)[self alloc] initWithFloats:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithFloats:(const float [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64FloatDictionary*)[self alloc] initWithFloats:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt64FloatDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt64FloatDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithFloats:(const float [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt64FloatDictionary *)dictionary { - self = [self initWithFloats:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64FloatDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64FloatDictionary class]]) { - return NO; - } - GPBUInt64FloatDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(uint64_t key, float value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedLongLongValue], [aValue floatValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueFloat) forKey:@(key->valueUInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndFloatsUsingBlock:^(uint64_t key, float value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%llu", key], [NSString stringWithFormat:@"%.*g", FLT_DIG, value]); - }]; -} - -- (BOOL)getFloat:(nullable float *)value forKey:(uint64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped floatValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt64FloatDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setFloat:(float)value forKey:(uint64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeFloatForKey:(uint64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt64 -> Double - -@implementation GPBUInt64DoubleDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithDoubles:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(uint64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64DoubleDictionary*)[self alloc] initWithDoubles:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithDoubles:(const double [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64DoubleDictionary*)[self alloc] initWithDoubles:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt64DoubleDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt64DoubleDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithDoubles:(const double [])values - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt64DoubleDictionary *)dictionary { - self = [self initWithDoubles:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64DoubleDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64DoubleDictionary class]]) { - return NO; - } - GPBUInt64DoubleDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(uint64_t key, double value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedLongLongValue], [aValue doubleValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueDouble) forKey:@(key->valueUInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndDoublesUsingBlock:^(uint64_t key, double value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%llu", key], [NSString stringWithFormat:@"%.*lg", DBL_DIG, value]); - }]; -} - -- (BOOL)getDouble:(nullable double *)value forKey:(uint64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped doubleValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBUInt64DoubleDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setDouble:(double)value forKey:(uint64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeDoubleForKey:(uint64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - UInt64 -> Enum - -@implementation GPBUInt64EnumDictionary { - @package - NSMutableDictionary *_dictionary; - GPBEnumValidationFunc _validationFunc; -} - -@synthesize validationFunc = _validationFunc; - -+ (instancetype)dictionary { - return [[[self alloc] initWithValidationFunction:NULL - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func { - return [[[self alloc] initWithValidationFunction:func - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(uint64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64EnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:&rawValue - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64EnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:rawValues - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt64EnumDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64EnumDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - return [[[self alloc] initWithValidationFunction:func capacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithValidationFunction:NULL rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func { - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - _validationFunc = (func != NULL ? func : DictDefault_IsValidValue); - if (count && rawValues && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(rawValues[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt64EnumDictionary *)dictionary { - self = [self initWithValidationFunction:dictionary.validationFunc - rawValues:NULL - forKeys:NULL - count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64EnumDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64EnumDictionary class]]) { - return NO; - } - GPBUInt64EnumDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(uint64_t key, int32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey unsignedLongLongValue], [aValue intValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType { - size_t msgSize = ComputeDictUInt64FieldSize(key->valueUInt64, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum); - NSMutableData *data = [NSMutableData dataWithLength:msgSize]; - GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data]; - WriteDictUInt64Field(outputStream, key->valueUInt64, kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum); - [outputStream release]; - return data; -} -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueEnum) forKey:@(key->valueUInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndRawValuesUsingBlock:^(uint64_t key, int32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%llu", key], @(value)); - }]; -} - -- (BOOL)getEnum:(int32_t *)value forKey:(uint64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - int32_t result = [wrapped intValue]; - if (!_validationFunc(result)) { - result = kGPBUnrecognizedEnumeratorValue; - } - *value = result; - } - return (wrapped != NULL); -} - -- (BOOL)getRawValue:(int32_t *)rawValue forKey:(uint64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && rawValue) { - *rawValue = [wrapped intValue]; - } - return (wrapped != NULL); -} - -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(uint64_t key, int32_t value, BOOL *stop))block { - GPBEnumValidationFunc func = _validationFunc; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - int32_t unwrapped = [aValue intValue]; - if (!func(unwrapped)) { - unwrapped = kGPBUnrecognizedEnumeratorValue; - } - block([aKey unsignedLongLongValue], unwrapped, stop); - }]; -} - -- (void)addRawEntriesFromDictionary:(GPBUInt64EnumDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setRawValue:(int32_t)value forKey:(uint64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeEnumForKey:(uint64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -- (void)setEnum:(int32_t)value forKey:(uint64_t)key { - if (!_validationFunc(value)) { - [NSException raise:NSInvalidArgumentException - format:@"GPBUInt64EnumDictionary: Attempt to set an unknown enum value (%d)", - value]; - } - - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -@end - -#pragma mark - UInt64 -> Object - -@implementation GPBUInt64ObjectDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithObjects:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithObject:(id)object - forKey:(uint64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithObjects:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64ObjectDictionary*)[self alloc] initWithObjects:&object - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithObjects:(const id [])objects - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithObjects:forKeys:count: - // on to get the type correct. - return [[(GPBUInt64ObjectDictionary*)[self alloc] initWithObjects:objects - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBUInt64ObjectDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBUInt64ObjectDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithObjects:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithObjects:(const id [])objects - forKeys:(const uint64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && objects && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!objects[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil object to a Dictionary"]; - } - [_dictionary setObject:objects[i] forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBUInt64ObjectDictionary *)dictionary { - self = [self initWithObjects:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithObjects:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64ObjectDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64ObjectDictionary class]]) { - return NO; - } - GPBUInt64ObjectDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndObjectsUsingBlock: - (void (^)(uint64_t key, id object, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - block([aKey unsignedLongLongValue], aObject, stop); - }]; -} - -- (BOOL)isInitialized { - for (GPBMessage *msg in [_dictionary objectEnumerator]) { - if (!msg.initialized) { - return NO; - } - } - return YES; -} - -- (instancetype)deepCopyWithZone:(NSZone *)zone { - GPBUInt64ObjectDictionary *newDict = - [[GPBUInt64ObjectDictionary alloc] init]; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(id aKey, - GPBMessage *msg, - BOOL *stop) { - #pragma unused(stop) - GPBMessage *copiedMsg = [msg copyWithZone:zone]; - [newDict->_dictionary setObject:copiedMsg forKey:aKey]; - [copiedMsg release]; - }]; - return newDict; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictObjectFieldSize(aObject, kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictObjectFieldSize(aObject, kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictObjectField(outputStream, aObject, kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:value->valueString forKey:@(key->valueUInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndObjectsUsingBlock:^(uint64_t key, id object, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%llu", key], object); - }]; -} - -- (id)objectForKey:(uint64_t)key { - id result = [_dictionary objectForKey:@(key)]; - return result; -} - -- (void)addEntriesFromDictionary:(GPBUInt64ObjectDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setObject:(id)object forKey:(uint64_t)key { - if (!object) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil object to a Dictionary"]; - } - [_dictionary setObject:object forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeObjectForKey:(uint64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -//%PDDM-EXPAND DICTIONARY_IMPL_FOR_POD_KEY(Int64, int64_t) -// This block of code is generated, do not edit it directly. - -#pragma mark - Int64 -> UInt32 - -@implementation GPBInt64UInt32Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(int64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBInt64UInt32Dictionary*)[self alloc] initWithUInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBInt64UInt32Dictionary*)[self alloc] initWithUInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt64UInt32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt64UInt32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt32s:(const uint32_t [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt64UInt32Dictionary *)dictionary { - self = [self initWithUInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64UInt32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64UInt32Dictionary class]]) { - return NO; - } - GPBInt64UInt32Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(int64_t key, uint32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey longLongValue], [aValue unsignedIntValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueUInt32) forKey:@(key->valueInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndUInt32sUsingBlock:^(int64_t key, uint32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%lld", key], [NSString stringWithFormat:@"%u", value]); - }]; -} - -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(int64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped unsignedIntValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt64UInt32Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt32:(uint32_t)value forKey:(int64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt32ForKey:(int64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int64 -> Int32 - -@implementation GPBInt64Int32Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(int64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBInt64Int32Dictionary*)[self alloc] initWithInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt32s:(const int32_t [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBInt64Int32Dictionary*)[self alloc] initWithInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt64Int32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt64Int32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt32s:(const int32_t [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt64Int32Dictionary *)dictionary { - self = [self initWithInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64Int32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64Int32Dictionary class]]) { - return NO; - } - GPBInt64Int32Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(int64_t key, int32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey longLongValue], [aValue intValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueInt32) forKey:@(key->valueInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndInt32sUsingBlock:^(int64_t key, int32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%lld", key], [NSString stringWithFormat:@"%d", value]); - }]; -} - -- (BOOL)getInt32:(nullable int32_t *)value forKey:(int64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped intValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt64Int32Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt32:(int32_t)value forKey:(int64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt32ForKey:(int64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int64 -> UInt64 - -@implementation GPBInt64UInt64Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(int64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBInt64UInt64Dictionary*)[self alloc] initWithUInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBInt64UInt64Dictionary*)[self alloc] initWithUInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt64UInt64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt64UInt64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt64s:(const uint64_t [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt64UInt64Dictionary *)dictionary { - self = [self initWithUInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64UInt64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64UInt64Dictionary class]]) { - return NO; - } - GPBInt64UInt64Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(int64_t key, uint64_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey longLongValue], [aValue unsignedLongLongValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueUInt64) forKey:@(key->valueInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndUInt64sUsingBlock:^(int64_t key, uint64_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%lld", key], [NSString stringWithFormat:@"%llu", value]); - }]; -} - -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(int64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped unsignedLongLongValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt64UInt64Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt64:(uint64_t)value forKey:(int64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt64ForKey:(int64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int64 -> Int64 - -@implementation GPBInt64Int64Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(int64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBInt64Int64Dictionary*)[self alloc] initWithInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt64s:(const int64_t [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBInt64Int64Dictionary*)[self alloc] initWithInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt64Int64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt64Int64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt64s:(const int64_t [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt64Int64Dictionary *)dictionary { - self = [self initWithInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64Int64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64Int64Dictionary class]]) { - return NO; - } - GPBInt64Int64Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(int64_t key, int64_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey longLongValue], [aValue longLongValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueInt64) forKey:@(key->valueInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndInt64sUsingBlock:^(int64_t key, int64_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%lld", key], [NSString stringWithFormat:@"%lld", value]); - }]; -} - -- (BOOL)getInt64:(nullable int64_t *)value forKey:(int64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped longLongValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt64Int64Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt64:(int64_t)value forKey:(int64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt64ForKey:(int64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int64 -> Bool - -@implementation GPBInt64BoolDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithBools:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(int64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBInt64BoolDictionary*)[self alloc] initWithBools:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithBools:(const BOOL [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBInt64BoolDictionary*)[self alloc] initWithBools:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt64BoolDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt64BoolDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithBools:(const BOOL [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt64BoolDictionary *)dictionary { - self = [self initWithBools:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64BoolDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64BoolDictionary class]]) { - return NO; - } - GPBInt64BoolDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(int64_t key, BOOL value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey longLongValue], [aValue boolValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueBool) forKey:@(key->valueInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndBoolsUsingBlock:^(int64_t key, BOOL value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%lld", key], (value ? @"true" : @"false")); - }]; -} - -- (BOOL)getBool:(nullable BOOL *)value forKey:(int64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped boolValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt64BoolDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setBool:(BOOL)value forKey:(int64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeBoolForKey:(int64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int64 -> Float - -@implementation GPBInt64FloatDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithFloats:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(int64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBInt64FloatDictionary*)[self alloc] initWithFloats:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithFloats:(const float [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBInt64FloatDictionary*)[self alloc] initWithFloats:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt64FloatDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt64FloatDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithFloats:(const float [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt64FloatDictionary *)dictionary { - self = [self initWithFloats:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64FloatDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64FloatDictionary class]]) { - return NO; - } - GPBInt64FloatDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(int64_t key, float value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey longLongValue], [aValue floatValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueFloat) forKey:@(key->valueInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndFloatsUsingBlock:^(int64_t key, float value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%lld", key], [NSString stringWithFormat:@"%.*g", FLT_DIG, value]); - }]; -} - -- (BOOL)getFloat:(nullable float *)value forKey:(int64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped floatValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt64FloatDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setFloat:(float)value forKey:(int64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeFloatForKey:(int64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int64 -> Double - -@implementation GPBInt64DoubleDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithDoubles:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(int64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBInt64DoubleDictionary*)[self alloc] initWithDoubles:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithDoubles:(const double [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBInt64DoubleDictionary*)[self alloc] initWithDoubles:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt64DoubleDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt64DoubleDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithDoubles:(const double [])values - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(values[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt64DoubleDictionary *)dictionary { - self = [self initWithDoubles:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64DoubleDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64DoubleDictionary class]]) { - return NO; - } - GPBInt64DoubleDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(int64_t key, double value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey longLongValue], [aValue doubleValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueDouble) forKey:@(key->valueInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndDoublesUsingBlock:^(int64_t key, double value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%lld", key], [NSString stringWithFormat:@"%.*lg", DBL_DIG, value]); - }]; -} - -- (BOOL)getDouble:(nullable double *)value forKey:(int64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - *value = [wrapped doubleValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBInt64DoubleDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setDouble:(double)value forKey:(int64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeDoubleForKey:(int64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - Int64 -> Enum - -@implementation GPBInt64EnumDictionary { - @package - NSMutableDictionary *_dictionary; - GPBEnumValidationFunc _validationFunc; -} - -@synthesize validationFunc = _validationFunc; - -+ (instancetype)dictionary { - return [[[self alloc] initWithValidationFunction:NULL - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func { - return [[[self alloc] initWithValidationFunction:func - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(int64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBInt64EnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:&rawValue - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBInt64EnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:rawValues - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt64EnumDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBInt64EnumDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - return [[[self alloc] initWithValidationFunction:func capacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithValidationFunction:NULL rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func { - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - _validationFunc = (func != NULL ? func : DictDefault_IsValidValue); - if (count && rawValues && keys) { - for (NSUInteger i = 0; i < count; ++i) { - [_dictionary setObject:@(rawValues[i]) forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt64EnumDictionary *)dictionary { - self = [self initWithValidationFunction:dictionary.validationFunc - rawValues:NULL - forKeys:NULL - count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64EnumDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64EnumDictionary class]]) { - return NO; - } - GPBInt64EnumDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(int64_t key, int32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - block([aKey longLongValue], [aValue intValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType { - size_t msgSize = ComputeDictInt64FieldSize(key->valueInt64, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum); - NSMutableData *data = [NSMutableData dataWithLength:msgSize]; - GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data]; - WriteDictInt64Field(outputStream, key->valueInt64, kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum); - [outputStream release]; - return data; -} -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueEnum) forKey:@(key->valueInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndRawValuesUsingBlock:^(int64_t key, int32_t value, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%lld", key], @(value)); - }]; -} - -- (BOOL)getEnum:(int32_t *)value forKey:(int64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && value) { - int32_t result = [wrapped intValue]; - if (!_validationFunc(result)) { - result = kGPBUnrecognizedEnumeratorValue; - } - *value = result; - } - return (wrapped != NULL); -} - -- (BOOL)getRawValue:(int32_t *)rawValue forKey:(int64_t)key { - NSNumber *wrapped = [_dictionary objectForKey:@(key)]; - if (wrapped && rawValue) { - *rawValue = [wrapped intValue]; - } - return (wrapped != NULL); -} - -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(int64_t key, int32_t value, BOOL *stop))block { - GPBEnumValidationFunc func = _validationFunc; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - NSNumber *aValue, - BOOL *stop) { - int32_t unwrapped = [aValue intValue]; - if (!func(unwrapped)) { - unwrapped = kGPBUnrecognizedEnumeratorValue; - } - block([aKey longLongValue], unwrapped, stop); - }]; -} - -- (void)addRawEntriesFromDictionary:(GPBInt64EnumDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setRawValue:(int32_t)value forKey:(int64_t)key { - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeEnumForKey:(int64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -- (void)setEnum:(int32_t)value forKey:(int64_t)key { - if (!_validationFunc(value)) { - [NSException raise:NSInvalidArgumentException - format:@"GPBInt64EnumDictionary: Attempt to set an unknown enum value (%d)", - value]; - } - - [_dictionary setObject:@(value) forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -@end - -#pragma mark - Int64 -> Object - -@implementation GPBInt64ObjectDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithObjects:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithObject:(id)object - forKey:(int64_t)key { - // Cast is needed so the compiler knows what class we are invoking initWithObjects:forKeys:count: - // on to get the type correct. - return [[(GPBInt64ObjectDictionary*)[self alloc] initWithObjects:&object - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithObjects:(const id [])objects - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithObjects:forKeys:count: - // on to get the type correct. - return [[(GPBInt64ObjectDictionary*)[self alloc] initWithObjects:objects - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBInt64ObjectDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBInt64ObjectDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithObjects:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithObjects:(const id [])objects - forKeys:(const int64_t [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && objects && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!objects[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil object to a Dictionary"]; - } - [_dictionary setObject:objects[i] forKey:@(keys[i])]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBInt64ObjectDictionary *)dictionary { - self = [self initWithObjects:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithObjects:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64ObjectDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64ObjectDictionary class]]) { - return NO; - } - GPBInt64ObjectDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndObjectsUsingBlock: - (void (^)(int64_t key, id object, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - block([aKey longLongValue], aObject, stop); - }]; -} - -- (BOOL)isInitialized { - for (GPBMessage *msg in [_dictionary objectEnumerator]) { - if (!msg.initialized) { - return NO; - } - } - return YES; -} - -- (instancetype)deepCopyWithZone:(NSZone *)zone { - GPBInt64ObjectDictionary *newDict = - [[GPBInt64ObjectDictionary alloc] init]; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(id aKey, - GPBMessage *msg, - BOOL *stop) { - #pragma unused(stop) - GPBMessage *copiedMsg = [msg copyWithZone:zone]; - [newDict->_dictionary setObject:copiedMsg forKey:aKey]; - [copiedMsg release]; - }]; - return newDict; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictObjectFieldSize(aObject, kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey, - id aObject, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictObjectFieldSize(aObject, kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType); - WriteDictObjectField(outputStream, aObject, kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:value->valueString forKey:@(key->valueInt64)]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndObjectsUsingBlock:^(int64_t key, id object, BOOL *stop) { - #pragma unused(stop) - block([NSString stringWithFormat:@"%lld", key], object); - }]; -} - -- (id)objectForKey:(int64_t)key { - id result = [_dictionary objectForKey:@(key)]; - return result; -} - -- (void)addEntriesFromDictionary:(GPBInt64ObjectDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setObject:(id)object forKey:(int64_t)key { - if (!object) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil object to a Dictionary"]; - } - [_dictionary setObject:object forKey:@(key)]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeObjectForKey:(int64_t)aKey { - [_dictionary removeObjectForKey:@(aKey)]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -//%PDDM-EXPAND DICTIONARY_POD_IMPL_FOR_KEY(String, NSString, *, OBJECT) -// This block of code is generated, do not edit it directly. - -#pragma mark - String -> UInt32 - -@implementation GPBStringUInt32Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(NSString *)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBStringUInt32Dictionary*)[self alloc] initWithUInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBStringUInt32Dictionary*)[self alloc] initWithUInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBStringUInt32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBStringUInt32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt32s:(const uint32_t [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!keys[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(values[i]) forKey:keys[i]]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBStringUInt32Dictionary *)dictionary { - self = [self initWithUInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBStringUInt32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBStringUInt32Dictionary class]]) { - return NO; - } - GPBStringUInt32Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(NSString *key, uint32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - block(aKey, [aValue unsignedIntValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType); - WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueUInt32) forKey:key->valueString]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndUInt32sUsingBlock:^(NSString *key, uint32_t value, BOOL *stop) { - #pragma unused(stop) - block(key, [NSString stringWithFormat:@"%u", value]); - }]; -} - -- (BOOL)getUInt32:(nullable uint32_t *)value forKey:(NSString *)key { - NSNumber *wrapped = [_dictionary objectForKey:key]; - if (wrapped && value) { - *value = [wrapped unsignedIntValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBStringUInt32Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt32:(uint32_t)value forKey:(NSString *)key { - if (!key) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(value) forKey:key]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt32ForKey:(NSString *)aKey { - [_dictionary removeObjectForKey:aKey]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - String -> Int32 - -@implementation GPBStringInt32Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(NSString *)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBStringInt32Dictionary*)[self alloc] initWithInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt32s:(const int32_t [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBStringInt32Dictionary*)[self alloc] initWithInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBStringInt32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBStringInt32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt32s:(const int32_t [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!keys[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(values[i]) forKey:keys[i]]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBStringInt32Dictionary *)dictionary { - self = [self initWithInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBStringInt32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBStringInt32Dictionary class]]) { - return NO; - } - GPBStringInt32Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(NSString *key, int32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - block(aKey, [aValue intValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType); - WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueInt32) forKey:key->valueString]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndInt32sUsingBlock:^(NSString *key, int32_t value, BOOL *stop) { - #pragma unused(stop) - block(key, [NSString stringWithFormat:@"%d", value]); - }]; -} - -- (BOOL)getInt32:(nullable int32_t *)value forKey:(NSString *)key { - NSNumber *wrapped = [_dictionary objectForKey:key]; - if (wrapped && value) { - *value = [wrapped intValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBStringInt32Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt32:(int32_t)value forKey:(NSString *)key { - if (!key) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(value) forKey:key]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt32ForKey:(NSString *)aKey { - [_dictionary removeObjectForKey:aKey]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - String -> UInt64 - -@implementation GPBStringUInt64Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(NSString *)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBStringUInt64Dictionary*)[self alloc] initWithUInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBStringUInt64Dictionary*)[self alloc] initWithUInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBStringUInt64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBStringUInt64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt64s:(const uint64_t [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!keys[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(values[i]) forKey:keys[i]]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBStringUInt64Dictionary *)dictionary { - self = [self initWithUInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBStringUInt64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBStringUInt64Dictionary class]]) { - return NO; - } - GPBStringUInt64Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(NSString *key, uint64_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - block(aKey, [aValue unsignedLongLongValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType); - WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueUInt64) forKey:key->valueString]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndUInt64sUsingBlock:^(NSString *key, uint64_t value, BOOL *stop) { - #pragma unused(stop) - block(key, [NSString stringWithFormat:@"%llu", value]); - }]; -} - -- (BOOL)getUInt64:(nullable uint64_t *)value forKey:(NSString *)key { - NSNumber *wrapped = [_dictionary objectForKey:key]; - if (wrapped && value) { - *value = [wrapped unsignedLongLongValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBStringUInt64Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt64:(uint64_t)value forKey:(NSString *)key { - if (!key) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(value) forKey:key]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt64ForKey:(NSString *)aKey { - [_dictionary removeObjectForKey:aKey]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - String -> Int64 - -@implementation GPBStringInt64Dictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(NSString *)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBStringInt64Dictionary*)[self alloc] initWithInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt64s:(const int64_t [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBStringInt64Dictionary*)[self alloc] initWithInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBStringInt64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBStringInt64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt64s:(const int64_t [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!keys[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(values[i]) forKey:keys[i]]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBStringInt64Dictionary *)dictionary { - self = [self initWithInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBStringInt64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBStringInt64Dictionary class]]) { - return NO; - } - GPBStringInt64Dictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(NSString *key, int64_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - block(aKey, [aValue longLongValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType); - WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueInt64) forKey:key->valueString]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndInt64sUsingBlock:^(NSString *key, int64_t value, BOOL *stop) { - #pragma unused(stop) - block(key, [NSString stringWithFormat:@"%lld", value]); - }]; -} - -- (BOOL)getInt64:(nullable int64_t *)value forKey:(NSString *)key { - NSNumber *wrapped = [_dictionary objectForKey:key]; - if (wrapped && value) { - *value = [wrapped longLongValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBStringInt64Dictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt64:(int64_t)value forKey:(NSString *)key { - if (!key) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(value) forKey:key]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt64ForKey:(NSString *)aKey { - [_dictionary removeObjectForKey:aKey]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - String -> Bool - -@implementation GPBStringBoolDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithBools:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(NSString *)key { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBStringBoolDictionary*)[self alloc] initWithBools:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithBools:(const BOOL [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBStringBoolDictionary*)[self alloc] initWithBools:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBStringBoolDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBStringBoolDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithBools:(const BOOL [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!keys[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(values[i]) forKey:keys[i]]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBStringBoolDictionary *)dictionary { - self = [self initWithBools:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBStringBoolDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBStringBoolDictionary class]]) { - return NO; - } - GPBStringBoolDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(NSString *key, BOOL value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - block(aKey, [aValue boolValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType); - WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueBool) forKey:key->valueString]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndBoolsUsingBlock:^(NSString *key, BOOL value, BOOL *stop) { - #pragma unused(stop) - block(key, (value ? @"true" : @"false")); - }]; -} - -- (BOOL)getBool:(nullable BOOL *)value forKey:(NSString *)key { - NSNumber *wrapped = [_dictionary objectForKey:key]; - if (wrapped && value) { - *value = [wrapped boolValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBStringBoolDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setBool:(BOOL)value forKey:(NSString *)key { - if (!key) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(value) forKey:key]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeBoolForKey:(NSString *)aKey { - [_dictionary removeObjectForKey:aKey]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - String -> Float - -@implementation GPBStringFloatDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithFloats:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(NSString *)key { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBStringFloatDictionary*)[self alloc] initWithFloats:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithFloats:(const float [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBStringFloatDictionary*)[self alloc] initWithFloats:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBStringFloatDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBStringFloatDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithFloats:(const float [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!keys[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(values[i]) forKey:keys[i]]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBStringFloatDictionary *)dictionary { - self = [self initWithFloats:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBStringFloatDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBStringFloatDictionary class]]) { - return NO; - } - GPBStringFloatDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(NSString *key, float value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - block(aKey, [aValue floatValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType); - WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueFloat) forKey:key->valueString]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndFloatsUsingBlock:^(NSString *key, float value, BOOL *stop) { - #pragma unused(stop) - block(key, [NSString stringWithFormat:@"%.*g", FLT_DIG, value]); - }]; -} - -- (BOOL)getFloat:(nullable float *)value forKey:(NSString *)key { - NSNumber *wrapped = [_dictionary objectForKey:key]; - if (wrapped && value) { - *value = [wrapped floatValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBStringFloatDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setFloat:(float)value forKey:(NSString *)key { - if (!key) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(value) forKey:key]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeFloatForKey:(NSString *)aKey { - [_dictionary removeObjectForKey:aKey]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - String -> Double - -@implementation GPBStringDoubleDictionary { - @package - NSMutableDictionary *_dictionary; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithDoubles:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(NSString *)key { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBStringDoubleDictionary*)[self alloc] initWithDoubles:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithDoubles:(const double [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBStringDoubleDictionary*)[self alloc] initWithDoubles:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBStringDoubleDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBStringDoubleDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithDoubles:(const double [])values - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - if (count && values && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!keys[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(values[i]) forKey:keys[i]]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBStringDoubleDictionary *)dictionary { - self = [self initWithDoubles:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBStringDoubleDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBStringDoubleDictionary class]]) { - return NO; - } - GPBStringDoubleDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(NSString *key, double value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - block(aKey, [aValue doubleValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType); - WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueDouble) forKey:key->valueString]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndDoublesUsingBlock:^(NSString *key, double value, BOOL *stop) { - #pragma unused(stop) - block(key, [NSString stringWithFormat:@"%.*lg", DBL_DIG, value]); - }]; -} - -- (BOOL)getDouble:(nullable double *)value forKey:(NSString *)key { - NSNumber *wrapped = [_dictionary objectForKey:key]; - if (wrapped && value) { - *value = [wrapped doubleValue]; - } - return (wrapped != NULL); -} - -- (void)addEntriesFromDictionary:(GPBStringDoubleDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setDouble:(double)value forKey:(NSString *)key { - if (!key) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(value) forKey:key]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeDoubleForKey:(NSString *)aKey { - [_dictionary removeObjectForKey:aKey]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -@end - -#pragma mark - String -> Enum - -@implementation GPBStringEnumDictionary { - @package - NSMutableDictionary *_dictionary; - GPBEnumValidationFunc _validationFunc; -} - -@synthesize validationFunc = _validationFunc; - -+ (instancetype)dictionary { - return [[[self alloc] initWithValidationFunction:NULL - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func { - return [[[self alloc] initWithValidationFunction:func - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(NSString *)key { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBStringEnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:&rawValue - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBStringEnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:rawValues - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBStringEnumDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBStringEnumDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - return [[[self alloc] initWithValidationFunction:func capacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithValidationFunction:NULL rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func { - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const NSString * [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] init]; - _validationFunc = (func != NULL ? func : DictDefault_IsValidValue); - if (count && rawValues && keys) { - for (NSUInteger i = 0; i < count; ++i) { - if (!keys[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(rawValues[i]) forKey:keys[i]]; - } - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBStringEnumDictionary *)dictionary { - self = [self initWithValidationFunction:dictionary.validationFunc - rawValues:NULL - forKeys:NULL - count:0]; - if (self) { - if (dictionary) { - [_dictionary addEntriesFromDictionary:dictionary->_dictionary]; - } - } - return self; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBStringEnumDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBStringEnumDictionary class]]) { - return NO; - } - GPBStringEnumDictionary *otherDictionary = other; - return [_dictionary isEqual:otherDictionary->_dictionary]; -} - -- (NSUInteger)hash { - return _dictionary.count; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> { %@ }", [self class], self, _dictionary]; -} - -- (NSUInteger)count { - return _dictionary.count; -} - -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(NSString *key, int32_t value, BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - block(aKey, [aValue intValue], stop); - }]; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - NSUInteger count = _dictionary.count; - if (count == 0) { - return 0; - } - - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - __block size_t result = 0; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - }]; - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - GPBDataType keyDataType = field.mapKeyDataType; - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - #pragma unused(stop) - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType); - }]; -} - -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType { - size_t msgSize = ComputeDictStringFieldSize(key->valueString, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum); - NSMutableData *data = [NSMutableData dataWithLength:msgSize]; - GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data]; - WriteDictStringField(outputStream, key->valueString, kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum); - [outputStream release]; - return data; -} -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - [_dictionary setObject:@(value->valueEnum) forKey:key->valueString]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - [self enumerateKeysAndRawValuesUsingBlock:^(NSString *key, int32_t value, BOOL *stop) { - #pragma unused(stop) - block(key, @(value)); - }]; -} - -- (BOOL)getEnum:(int32_t *)value forKey:(NSString *)key { - NSNumber *wrapped = [_dictionary objectForKey:key]; - if (wrapped && value) { - int32_t result = [wrapped intValue]; - if (!_validationFunc(result)) { - result = kGPBUnrecognizedEnumeratorValue; - } - *value = result; - } - return (wrapped != NULL); -} - -- (BOOL)getRawValue:(int32_t *)rawValue forKey:(NSString *)key { - NSNumber *wrapped = [_dictionary objectForKey:key]; - if (wrapped && rawValue) { - *rawValue = [wrapped intValue]; - } - return (wrapped != NULL); -} - -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(NSString *key, int32_t value, BOOL *stop))block { - GPBEnumValidationFunc func = _validationFunc; - [_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey, - NSNumber *aValue, - BOOL *stop) { - int32_t unwrapped = [aValue intValue]; - if (!func(unwrapped)) { - unwrapped = kGPBUnrecognizedEnumeratorValue; - } - block(aKey, unwrapped, stop); - }]; -} - -- (void)addRawEntriesFromDictionary:(GPBStringEnumDictionary *)otherDictionary { - if (otherDictionary) { - [_dictionary addEntriesFromDictionary:otherDictionary->_dictionary]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setRawValue:(int32_t)value forKey:(NSString *)key { - if (!key) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - [_dictionary setObject:@(value) forKey:key]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeEnumForKey:(NSString *)aKey { - [_dictionary removeObjectForKey:aKey]; -} - -- (void)removeAll { - [_dictionary removeAllObjects]; -} - -- (void)setEnum:(int32_t)value forKey:(NSString *)key { - if (!key) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil key to a Dictionary"]; - } - if (!_validationFunc(value)) { - [NSException raise:NSInvalidArgumentException - format:@"GPBStringEnumDictionary: Attempt to set an unknown enum value (%d)", - value]; - } - - [_dictionary setObject:@(value) forKey:key]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -@end - -//%PDDM-EXPAND-END (5 expansions) - - -//%PDDM-EXPAND DICTIONARY_BOOL_KEY_TO_POD_IMPL(UInt32, uint32_t) -// This block of code is generated, do not edit it directly. - -#pragma mark - Bool -> UInt32 - -@implementation GPBBoolUInt32Dictionary { - @package - uint32_t _values[2]; - BOOL _valueSet[2]; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32:(uint32_t)value - forKey:(BOOL)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBBoolUInt32Dictionary*)[self alloc] initWithUInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt32s:(const uint32_t [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBBoolUInt32Dictionary*)[self alloc] initWithUInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBBoolUInt32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBBoolUInt32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt32s:(const uint32_t [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - for (NSUInteger i = 0; i < count; ++i) { - int idx = keys[i] ? 1 : 0; - _values[idx] = values[i]; - _valueSet[idx] = YES; - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBBoolUInt32Dictionary *)dictionary { - self = [self initWithUInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - for (int i = 0; i < 2; ++i) { - if (dictionary->_valueSet[i]) { - _values[i] = dictionary->_values[i]; - _valueSet[i] = YES; - } - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt32s:NULL forKeys:NULL count:0]; -} - -#if !defined(NS_BLOCK_ASSERTIONS) -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [super dealloc]; -} -#endif // !defined(NS_BLOCK_ASSERTIONS) - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolUInt32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolUInt32Dictionary class]]) { - return NO; - } - GPBBoolUInt32Dictionary *otherDictionary = other; - if ((_valueSet[0] != otherDictionary->_valueSet[0]) || - (_valueSet[1] != otherDictionary->_valueSet[1])) { - return NO; - } - if ((_valueSet[0] && (_values[0] != otherDictionary->_values[0])) || - (_valueSet[1] && (_values[1] != otherDictionary->_values[1]))) { - return NO; - } - return YES; -} - -- (NSUInteger)hash { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> {", [self class], self]; - if (_valueSet[0]) { - [result appendFormat:@"NO: %u", _values[0]]; - } - if (_valueSet[1]) { - [result appendFormat:@"YES: %u", _values[1]]; - } - [result appendString:@" }"]; - return result; -} - -- (NSUInteger)count { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (BOOL)getUInt32:(uint32_t *)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - if (_valueSet[idx]) { - if (value) { - *value = _values[idx]; - } - return YES; - } - return NO; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - int idx = (key->valueBool ? 1 : 0); - _values[idx] = value->valueUInt32; - _valueSet[idx] = YES; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - if (_valueSet[0]) { - block(@"false", [NSString stringWithFormat:@"%u", _values[0]]); - } - if (_valueSet[1]) { - block(@"true", [NSString stringWithFormat:@"%u", _values[1]]); - } -} - -- (void)enumerateKeysAndUInt32sUsingBlock: - (void (^)(BOOL key, uint32_t value, BOOL *stop))block { - BOOL stop = NO; - if (_valueSet[0]) { - block(NO, _values[0], &stop); - } - if (!stop && _valueSet[1]) { - block(YES, _values[1], &stop); - } -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - NSUInteger count = 0; - size_t result = 0; - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - ++count; - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictUInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - } - } - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictUInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - WriteDictUInt32Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType); - } - } -} - -- (void)addEntriesFromDictionary:(GPBBoolUInt32Dictionary *)otherDictionary { - if (otherDictionary) { - for (int i = 0; i < 2; ++i) { - if (otherDictionary->_valueSet[i]) { - _valueSet[i] = YES; - _values[i] = otherDictionary->_values[i]; - } - } - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt32:(uint32_t)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - _values[idx] = value; - _valueSet[idx] = YES; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt32ForKey:(BOOL)aKey { - _valueSet[aKey ? 1 : 0] = NO; -} - -- (void)removeAll { - _valueSet[0] = NO; - _valueSet[1] = NO; -} - -@end - -//%PDDM-EXPAND DICTIONARY_BOOL_KEY_TO_POD_IMPL(Int32, int32_t) -// This block of code is generated, do not edit it directly. - -#pragma mark - Bool -> Int32 - -@implementation GPBBoolInt32Dictionary { - @package - int32_t _values[2]; - BOOL _valueSet[2]; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt32s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt32:(int32_t)value - forKey:(BOOL)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBBoolInt32Dictionary*)[self alloc] initWithInt32s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt32s:(const int32_t [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt32s:forKeys:count: - // on to get the type correct. - return [[(GPBBoolInt32Dictionary*)[self alloc] initWithInt32s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBBoolInt32Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBBoolInt32Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt32s:(const int32_t [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - for (NSUInteger i = 0; i < count; ++i) { - int idx = keys[i] ? 1 : 0; - _values[idx] = values[i]; - _valueSet[idx] = YES; - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBBoolInt32Dictionary *)dictionary { - self = [self initWithInt32s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - for (int i = 0; i < 2; ++i) { - if (dictionary->_valueSet[i]) { - _values[i] = dictionary->_values[i]; - _valueSet[i] = YES; - } - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt32s:NULL forKeys:NULL count:0]; -} - -#if !defined(NS_BLOCK_ASSERTIONS) -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [super dealloc]; -} -#endif // !defined(NS_BLOCK_ASSERTIONS) - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolInt32Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolInt32Dictionary class]]) { - return NO; - } - GPBBoolInt32Dictionary *otherDictionary = other; - if ((_valueSet[0] != otherDictionary->_valueSet[0]) || - (_valueSet[1] != otherDictionary->_valueSet[1])) { - return NO; - } - if ((_valueSet[0] && (_values[0] != otherDictionary->_values[0])) || - (_valueSet[1] && (_values[1] != otherDictionary->_values[1]))) { - return NO; - } - return YES; -} - -- (NSUInteger)hash { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> {", [self class], self]; - if (_valueSet[0]) { - [result appendFormat:@"NO: %d", _values[0]]; - } - if (_valueSet[1]) { - [result appendFormat:@"YES: %d", _values[1]]; - } - [result appendString:@" }"]; - return result; -} - -- (NSUInteger)count { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (BOOL)getInt32:(int32_t *)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - if (_valueSet[idx]) { - if (value) { - *value = _values[idx]; - } - return YES; - } - return NO; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - int idx = (key->valueBool ? 1 : 0); - _values[idx] = value->valueInt32; - _valueSet[idx] = YES; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - if (_valueSet[0]) { - block(@"false", [NSString stringWithFormat:@"%d", _values[0]]); - } - if (_valueSet[1]) { - block(@"true", [NSString stringWithFormat:@"%d", _values[1]]); - } -} - -- (void)enumerateKeysAndInt32sUsingBlock: - (void (^)(BOOL key, int32_t value, BOOL *stop))block { - BOOL stop = NO; - if (_valueSet[0]) { - block(NO, _values[0], &stop); - } - if (!stop && _valueSet[1]) { - block(YES, _values[1], &stop); - } -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - NSUInteger count = 0; - size_t result = 0; - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - ++count; - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - } - } - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - WriteDictInt32Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType); - } - } -} - -- (void)addEntriesFromDictionary:(GPBBoolInt32Dictionary *)otherDictionary { - if (otherDictionary) { - for (int i = 0; i < 2; ++i) { - if (otherDictionary->_valueSet[i]) { - _valueSet[i] = YES; - _values[i] = otherDictionary->_values[i]; - } - } - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt32:(int32_t)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - _values[idx] = value; - _valueSet[idx] = YES; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt32ForKey:(BOOL)aKey { - _valueSet[aKey ? 1 : 0] = NO; -} - -- (void)removeAll { - _valueSet[0] = NO; - _valueSet[1] = NO; -} - -@end - -//%PDDM-EXPAND DICTIONARY_BOOL_KEY_TO_POD_IMPL(UInt64, uint64_t) -// This block of code is generated, do not edit it directly. - -#pragma mark - Bool -> UInt64 - -@implementation GPBBoolUInt64Dictionary { - @package - uint64_t _values[2]; - BOOL _valueSet[2]; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithUInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64:(uint64_t)value - forKey:(BOOL)key { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBBoolUInt64Dictionary*)[self alloc] initWithUInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithUInt64s:(const uint64_t [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithUInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBBoolUInt64Dictionary*)[self alloc] initWithUInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBBoolUInt64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBBoolUInt64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithUInt64s:(const uint64_t [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - for (NSUInteger i = 0; i < count; ++i) { - int idx = keys[i] ? 1 : 0; - _values[idx] = values[i]; - _valueSet[idx] = YES; - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBBoolUInt64Dictionary *)dictionary { - self = [self initWithUInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - for (int i = 0; i < 2; ++i) { - if (dictionary->_valueSet[i]) { - _values[i] = dictionary->_values[i]; - _valueSet[i] = YES; - } - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithUInt64s:NULL forKeys:NULL count:0]; -} - -#if !defined(NS_BLOCK_ASSERTIONS) -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [super dealloc]; -} -#endif // !defined(NS_BLOCK_ASSERTIONS) - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolUInt64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolUInt64Dictionary class]]) { - return NO; - } - GPBBoolUInt64Dictionary *otherDictionary = other; - if ((_valueSet[0] != otherDictionary->_valueSet[0]) || - (_valueSet[1] != otherDictionary->_valueSet[1])) { - return NO; - } - if ((_valueSet[0] && (_values[0] != otherDictionary->_values[0])) || - (_valueSet[1] && (_values[1] != otherDictionary->_values[1]))) { - return NO; - } - return YES; -} - -- (NSUInteger)hash { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> {", [self class], self]; - if (_valueSet[0]) { - [result appendFormat:@"NO: %llu", _values[0]]; - } - if (_valueSet[1]) { - [result appendFormat:@"YES: %llu", _values[1]]; - } - [result appendString:@" }"]; - return result; -} - -- (NSUInteger)count { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (BOOL)getUInt64:(uint64_t *)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - if (_valueSet[idx]) { - if (value) { - *value = _values[idx]; - } - return YES; - } - return NO; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - int idx = (key->valueBool ? 1 : 0); - _values[idx] = value->valueUInt64; - _valueSet[idx] = YES; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - if (_valueSet[0]) { - block(@"false", [NSString stringWithFormat:@"%llu", _values[0]]); - } - if (_valueSet[1]) { - block(@"true", [NSString stringWithFormat:@"%llu", _values[1]]); - } -} - -- (void)enumerateKeysAndUInt64sUsingBlock: - (void (^)(BOOL key, uint64_t value, BOOL *stop))block { - BOOL stop = NO; - if (_valueSet[0]) { - block(NO, _values[0], &stop); - } - if (!stop && _valueSet[1]) { - block(YES, _values[1], &stop); - } -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - NSUInteger count = 0; - size_t result = 0; - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - ++count; - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictUInt64FieldSize(_values[i], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - } - } - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictUInt64FieldSize(_values[i], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - WriteDictUInt64Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType); - } - } -} - -- (void)addEntriesFromDictionary:(GPBBoolUInt64Dictionary *)otherDictionary { - if (otherDictionary) { - for (int i = 0; i < 2; ++i) { - if (otherDictionary->_valueSet[i]) { - _valueSet[i] = YES; - _values[i] = otherDictionary->_values[i]; - } - } - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setUInt64:(uint64_t)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - _values[idx] = value; - _valueSet[idx] = YES; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeUInt64ForKey:(BOOL)aKey { - _valueSet[aKey ? 1 : 0] = NO; -} - -- (void)removeAll { - _valueSet[0] = NO; - _valueSet[1] = NO; -} - -@end - -//%PDDM-EXPAND DICTIONARY_BOOL_KEY_TO_POD_IMPL(Int64, int64_t) -// This block of code is generated, do not edit it directly. - -#pragma mark - Bool -> Int64 - -@implementation GPBBoolInt64Dictionary { - @package - int64_t _values[2]; - BOOL _valueSet[2]; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithInt64s:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithInt64:(int64_t)value - forKey:(BOOL)key { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBBoolInt64Dictionary*)[self alloc] initWithInt64s:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithInt64s:(const int64_t [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithInt64s:forKeys:count: - // on to get the type correct. - return [[(GPBBoolInt64Dictionary*)[self alloc] initWithInt64s:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBBoolInt64Dictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBBoolInt64Dictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithInt64s:(const int64_t [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - for (NSUInteger i = 0; i < count; ++i) { - int idx = keys[i] ? 1 : 0; - _values[idx] = values[i]; - _valueSet[idx] = YES; - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBBoolInt64Dictionary *)dictionary { - self = [self initWithInt64s:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - for (int i = 0; i < 2; ++i) { - if (dictionary->_valueSet[i]) { - _values[i] = dictionary->_values[i]; - _valueSet[i] = YES; - } - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithInt64s:NULL forKeys:NULL count:0]; -} - -#if !defined(NS_BLOCK_ASSERTIONS) -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [super dealloc]; -} -#endif // !defined(NS_BLOCK_ASSERTIONS) - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolInt64Dictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolInt64Dictionary class]]) { - return NO; - } - GPBBoolInt64Dictionary *otherDictionary = other; - if ((_valueSet[0] != otherDictionary->_valueSet[0]) || - (_valueSet[1] != otherDictionary->_valueSet[1])) { - return NO; - } - if ((_valueSet[0] && (_values[0] != otherDictionary->_values[0])) || - (_valueSet[1] && (_values[1] != otherDictionary->_values[1]))) { - return NO; - } - return YES; -} - -- (NSUInteger)hash { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> {", [self class], self]; - if (_valueSet[0]) { - [result appendFormat:@"NO: %lld", _values[0]]; - } - if (_valueSet[1]) { - [result appendFormat:@"YES: %lld", _values[1]]; - } - [result appendString:@" }"]; - return result; -} - -- (NSUInteger)count { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (BOOL)getInt64:(int64_t *)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - if (_valueSet[idx]) { - if (value) { - *value = _values[idx]; - } - return YES; - } - return NO; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - int idx = (key->valueBool ? 1 : 0); - _values[idx] = value->valueInt64; - _valueSet[idx] = YES; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - if (_valueSet[0]) { - block(@"false", [NSString stringWithFormat:@"%lld", _values[0]]); - } - if (_valueSet[1]) { - block(@"true", [NSString stringWithFormat:@"%lld", _values[1]]); - } -} - -- (void)enumerateKeysAndInt64sUsingBlock: - (void (^)(BOOL key, int64_t value, BOOL *stop))block { - BOOL stop = NO; - if (_valueSet[0]) { - block(NO, _values[0], &stop); - } - if (!stop && _valueSet[1]) { - block(YES, _values[1], &stop); - } -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - NSUInteger count = 0; - size_t result = 0; - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - ++count; - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictInt64FieldSize(_values[i], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - } - } - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictInt64FieldSize(_values[i], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - WriteDictInt64Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType); - } - } -} - -- (void)addEntriesFromDictionary:(GPBBoolInt64Dictionary *)otherDictionary { - if (otherDictionary) { - for (int i = 0; i < 2; ++i) { - if (otherDictionary->_valueSet[i]) { - _valueSet[i] = YES; - _values[i] = otherDictionary->_values[i]; - } - } - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setInt64:(int64_t)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - _values[idx] = value; - _valueSet[idx] = YES; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeInt64ForKey:(BOOL)aKey { - _valueSet[aKey ? 1 : 0] = NO; -} - -- (void)removeAll { - _valueSet[0] = NO; - _valueSet[1] = NO; -} - -@end - -//%PDDM-EXPAND DICTIONARY_BOOL_KEY_TO_POD_IMPL(Bool, BOOL) -// This block of code is generated, do not edit it directly. - -#pragma mark - Bool -> Bool - -@implementation GPBBoolBoolDictionary { - @package - BOOL _values[2]; - BOOL _valueSet[2]; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithBools:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithBool:(BOOL)value - forKey:(BOOL)key { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBBoolBoolDictionary*)[self alloc] initWithBools:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithBools:(const BOOL [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithBools:forKeys:count: - // on to get the type correct. - return [[(GPBBoolBoolDictionary*)[self alloc] initWithBools:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBBoolBoolDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBBoolBoolDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithBools:(const BOOL [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - for (NSUInteger i = 0; i < count; ++i) { - int idx = keys[i] ? 1 : 0; - _values[idx] = values[i]; - _valueSet[idx] = YES; - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBBoolBoolDictionary *)dictionary { - self = [self initWithBools:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - for (int i = 0; i < 2; ++i) { - if (dictionary->_valueSet[i]) { - _values[i] = dictionary->_values[i]; - _valueSet[i] = YES; - } - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithBools:NULL forKeys:NULL count:0]; -} - -#if !defined(NS_BLOCK_ASSERTIONS) -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [super dealloc]; -} -#endif // !defined(NS_BLOCK_ASSERTIONS) - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolBoolDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolBoolDictionary class]]) { - return NO; - } - GPBBoolBoolDictionary *otherDictionary = other; - if ((_valueSet[0] != otherDictionary->_valueSet[0]) || - (_valueSet[1] != otherDictionary->_valueSet[1])) { - return NO; - } - if ((_valueSet[0] && (_values[0] != otherDictionary->_values[0])) || - (_valueSet[1] && (_values[1] != otherDictionary->_values[1]))) { - return NO; - } - return YES; -} - -- (NSUInteger)hash { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> {", [self class], self]; - if (_valueSet[0]) { - [result appendFormat:@"NO: %d", _values[0]]; - } - if (_valueSet[1]) { - [result appendFormat:@"YES: %d", _values[1]]; - } - [result appendString:@" }"]; - return result; -} - -- (NSUInteger)count { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (BOOL)getBool:(BOOL *)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - if (_valueSet[idx]) { - if (value) { - *value = _values[idx]; - } - return YES; - } - return NO; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - int idx = (key->valueBool ? 1 : 0); - _values[idx] = value->valueBool; - _valueSet[idx] = YES; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - if (_valueSet[0]) { - block(@"false", (_values[0] ? @"true" : @"false")); - } - if (_valueSet[1]) { - block(@"true", (_values[1] ? @"true" : @"false")); - } -} - -- (void)enumerateKeysAndBoolsUsingBlock: - (void (^)(BOOL key, BOOL value, BOOL *stop))block { - BOOL stop = NO; - if (_valueSet[0]) { - block(NO, _values[0], &stop); - } - if (!stop && _valueSet[1]) { - block(YES, _values[1], &stop); - } -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - NSUInteger count = 0; - size_t result = 0; - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - ++count; - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictBoolFieldSize(_values[i], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - } - } - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictBoolFieldSize(_values[i], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - WriteDictBoolField(outputStream, _values[i], kMapValueFieldNumber, valueDataType); - } - } -} - -- (void)addEntriesFromDictionary:(GPBBoolBoolDictionary *)otherDictionary { - if (otherDictionary) { - for (int i = 0; i < 2; ++i) { - if (otherDictionary->_valueSet[i]) { - _valueSet[i] = YES; - _values[i] = otherDictionary->_values[i]; - } - } - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setBool:(BOOL)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - _values[idx] = value; - _valueSet[idx] = YES; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeBoolForKey:(BOOL)aKey { - _valueSet[aKey ? 1 : 0] = NO; -} - -- (void)removeAll { - _valueSet[0] = NO; - _valueSet[1] = NO; -} - -@end - -//%PDDM-EXPAND DICTIONARY_BOOL_KEY_TO_POD_IMPL(Float, float) -// This block of code is generated, do not edit it directly. - -#pragma mark - Bool -> Float - -@implementation GPBBoolFloatDictionary { - @package - float _values[2]; - BOOL _valueSet[2]; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithFloats:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithFloat:(float)value - forKey:(BOOL)key { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBBoolFloatDictionary*)[self alloc] initWithFloats:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithFloats:(const float [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithFloats:forKeys:count: - // on to get the type correct. - return [[(GPBBoolFloatDictionary*)[self alloc] initWithFloats:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBBoolFloatDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBBoolFloatDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithFloats:(const float [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - for (NSUInteger i = 0; i < count; ++i) { - int idx = keys[i] ? 1 : 0; - _values[idx] = values[i]; - _valueSet[idx] = YES; - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBBoolFloatDictionary *)dictionary { - self = [self initWithFloats:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - for (int i = 0; i < 2; ++i) { - if (dictionary->_valueSet[i]) { - _values[i] = dictionary->_values[i]; - _valueSet[i] = YES; - } - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithFloats:NULL forKeys:NULL count:0]; -} - -#if !defined(NS_BLOCK_ASSERTIONS) -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [super dealloc]; -} -#endif // !defined(NS_BLOCK_ASSERTIONS) - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolFloatDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolFloatDictionary class]]) { - return NO; - } - GPBBoolFloatDictionary *otherDictionary = other; - if ((_valueSet[0] != otherDictionary->_valueSet[0]) || - (_valueSet[1] != otherDictionary->_valueSet[1])) { - return NO; - } - if ((_valueSet[0] && (_values[0] != otherDictionary->_values[0])) || - (_valueSet[1] && (_values[1] != otherDictionary->_values[1]))) { - return NO; - } - return YES; -} - -- (NSUInteger)hash { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> {", [self class], self]; - if (_valueSet[0]) { - [result appendFormat:@"NO: %f", _values[0]]; - } - if (_valueSet[1]) { - [result appendFormat:@"YES: %f", _values[1]]; - } - [result appendString:@" }"]; - return result; -} - -- (NSUInteger)count { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (BOOL)getFloat:(float *)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - if (_valueSet[idx]) { - if (value) { - *value = _values[idx]; - } - return YES; - } - return NO; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - int idx = (key->valueBool ? 1 : 0); - _values[idx] = value->valueFloat; - _valueSet[idx] = YES; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - if (_valueSet[0]) { - block(@"false", [NSString stringWithFormat:@"%.*g", FLT_DIG, _values[0]]); - } - if (_valueSet[1]) { - block(@"true", [NSString stringWithFormat:@"%.*g", FLT_DIG, _values[1]]); - } -} - -- (void)enumerateKeysAndFloatsUsingBlock: - (void (^)(BOOL key, float value, BOOL *stop))block { - BOOL stop = NO; - if (_valueSet[0]) { - block(NO, _values[0], &stop); - } - if (!stop && _valueSet[1]) { - block(YES, _values[1], &stop); - } -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - NSUInteger count = 0; - size_t result = 0; - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - ++count; - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictFloatFieldSize(_values[i], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - } - } - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictFloatFieldSize(_values[i], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - WriteDictFloatField(outputStream, _values[i], kMapValueFieldNumber, valueDataType); - } - } -} - -- (void)addEntriesFromDictionary:(GPBBoolFloatDictionary *)otherDictionary { - if (otherDictionary) { - for (int i = 0; i < 2; ++i) { - if (otherDictionary->_valueSet[i]) { - _valueSet[i] = YES; - _values[i] = otherDictionary->_values[i]; - } - } - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setFloat:(float)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - _values[idx] = value; - _valueSet[idx] = YES; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeFloatForKey:(BOOL)aKey { - _valueSet[aKey ? 1 : 0] = NO; -} - -- (void)removeAll { - _valueSet[0] = NO; - _valueSet[1] = NO; -} - -@end - -//%PDDM-EXPAND DICTIONARY_BOOL_KEY_TO_POD_IMPL(Double, double) -// This block of code is generated, do not edit it directly. - -#pragma mark - Bool -> Double - -@implementation GPBBoolDoubleDictionary { - @package - double _values[2]; - BOOL _valueSet[2]; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithDoubles:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithDouble:(double)value - forKey:(BOOL)key { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBBoolDoubleDictionary*)[self alloc] initWithDoubles:&value - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithDoubles:(const double [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithDoubles:forKeys:count: - // on to get the type correct. - return [[(GPBBoolDoubleDictionary*)[self alloc] initWithDoubles:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBBoolDoubleDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBBoolDoubleDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithDoubles:(const double [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - for (NSUInteger i = 0; i < count; ++i) { - int idx = keys[i] ? 1 : 0; - _values[idx] = values[i]; - _valueSet[idx] = YES; - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBBoolDoubleDictionary *)dictionary { - self = [self initWithDoubles:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - for (int i = 0; i < 2; ++i) { - if (dictionary->_valueSet[i]) { - _values[i] = dictionary->_values[i]; - _valueSet[i] = YES; - } - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithDoubles:NULL forKeys:NULL count:0]; -} - -#if !defined(NS_BLOCK_ASSERTIONS) -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [super dealloc]; -} -#endif // !defined(NS_BLOCK_ASSERTIONS) - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolDoubleDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolDoubleDictionary class]]) { - return NO; - } - GPBBoolDoubleDictionary *otherDictionary = other; - if ((_valueSet[0] != otherDictionary->_valueSet[0]) || - (_valueSet[1] != otherDictionary->_valueSet[1])) { - return NO; - } - if ((_valueSet[0] && (_values[0] != otherDictionary->_values[0])) || - (_valueSet[1] && (_values[1] != otherDictionary->_values[1]))) { - return NO; - } - return YES; -} - -- (NSUInteger)hash { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> {", [self class], self]; - if (_valueSet[0]) { - [result appendFormat:@"NO: %lf", _values[0]]; - } - if (_valueSet[1]) { - [result appendFormat:@"YES: %lf", _values[1]]; - } - [result appendString:@" }"]; - return result; -} - -- (NSUInteger)count { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (BOOL)getDouble:(double *)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - if (_valueSet[idx]) { - if (value) { - *value = _values[idx]; - } - return YES; - } - return NO; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - int idx = (key->valueBool ? 1 : 0); - _values[idx] = value->valueDouble; - _valueSet[idx] = YES; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - if (_valueSet[0]) { - block(@"false", [NSString stringWithFormat:@"%.*lg", DBL_DIG, _values[0]]); - } - if (_valueSet[1]) { - block(@"true", [NSString stringWithFormat:@"%.*lg", DBL_DIG, _values[1]]); - } -} - -- (void)enumerateKeysAndDoublesUsingBlock: - (void (^)(BOOL key, double value, BOOL *stop))block { - BOOL stop = NO; - if (_valueSet[0]) { - block(NO, _values[0], &stop); - } - if (!stop && _valueSet[1]) { - block(YES, _values[1], &stop); - } -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - NSUInteger count = 0; - size_t result = 0; - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - ++count; - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictDoubleFieldSize(_values[i], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - } - } - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictDoubleFieldSize(_values[i], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - WriteDictDoubleField(outputStream, _values[i], kMapValueFieldNumber, valueDataType); - } - } -} - -- (void)addEntriesFromDictionary:(GPBBoolDoubleDictionary *)otherDictionary { - if (otherDictionary) { - for (int i = 0; i < 2; ++i) { - if (otherDictionary->_valueSet[i]) { - _valueSet[i] = YES; - _values[i] = otherDictionary->_values[i]; - } - } - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setDouble:(double)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - _values[idx] = value; - _valueSet[idx] = YES; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeDoubleForKey:(BOOL)aKey { - _valueSet[aKey ? 1 : 0] = NO; -} - -- (void)removeAll { - _valueSet[0] = NO; - _valueSet[1] = NO; -} - -@end - -//%PDDM-EXPAND DICTIONARY_BOOL_KEY_TO_OBJECT_IMPL(Object, id) -// This block of code is generated, do not edit it directly. - -#pragma mark - Bool -> Object - -@implementation GPBBoolObjectDictionary { - @package - id _values[2]; -} - -+ (instancetype)dictionary { - return [[[self alloc] initWithObjects:NULL forKeys:NULL count:0] autorelease]; -} - -+ (instancetype)dictionaryWithObject:(id)object - forKey:(BOOL)key { - // Cast is needed so the compiler knows what class we are invoking initWithObjects:forKeys:count: - // on to get the type correct. - return [[(GPBBoolObjectDictionary*)[self alloc] initWithObjects:&object - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithObjects:(const id [])objects - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithObjects:forKeys:count: - // on to get the type correct. - return [[(GPBBoolObjectDictionary*)[self alloc] initWithObjects:objects - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBBoolObjectDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithDictionary: - // on to get the type correct. - return [[(GPBBoolObjectDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems { - return [[[self alloc] initWithCapacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithObjects:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithObjects:(const id [])objects - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - for (NSUInteger i = 0; i < count; ++i) { - if (!objects[i]) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil object to a Dictionary"]; - } - int idx = keys[i] ? 1 : 0; - [_values[idx] release]; - _values[idx] = (id)[objects[i] retain]; - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBBoolObjectDictionary *)dictionary { - self = [self initWithObjects:NULL forKeys:NULL count:0]; - if (self) { - if (dictionary) { - _values[0] = [dictionary->_values[0] retain]; - _values[1] = [dictionary->_values[1] retain]; - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)numItems { - #pragma unused(numItems) - return [self initWithObjects:NULL forKeys:NULL count:0]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_values[0] release]; - [_values[1] release]; - [super dealloc]; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolObjectDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolObjectDictionary class]]) { - return NO; - } - GPBBoolObjectDictionary *otherDictionary = other; - if (((_values[0] != nil) != (otherDictionary->_values[0] != nil)) || - ((_values[1] != nil) != (otherDictionary->_values[1] != nil))) { - return NO; - } - if (((_values[0] != nil) && (![_values[0] isEqual:otherDictionary->_values[0]])) || - ((_values[1] != nil) && (![_values[1] isEqual:otherDictionary->_values[1]]))) { - return NO; - } - return YES; -} - -- (NSUInteger)hash { - return ((_values[0] != nil) ? 1 : 0) + ((_values[1] != nil) ? 1 : 0); -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> {", [self class], self]; - if ((_values[0] != nil)) { - [result appendFormat:@"NO: %@", _values[0]]; - } - if ((_values[1] != nil)) { - [result appendFormat:@"YES: %@", _values[1]]; - } - [result appendString:@" }"]; - return result; -} - -- (NSUInteger)count { - return ((_values[0] != nil) ? 1 : 0) + ((_values[1] != nil) ? 1 : 0); -} - -- (id)objectForKey:(BOOL)key { - return _values[key ? 1 : 0]; -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - int idx = (key->valueBool ? 1 : 0); - [_values[idx] release]; - _values[idx] = [value->valueString retain]; -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - if (_values[0] != nil) { - block(@"false", _values[0]); - } - if ((_values[1] != nil)) { - block(@"true", _values[1]); - } -} - -- (void)enumerateKeysAndObjectsUsingBlock: - (void (^)(BOOL key, id object, BOOL *stop))block { - BOOL stop = NO; - if (_values[0] != nil) { - block(NO, _values[0], &stop); - } - if (!stop && (_values[1] != nil)) { - block(YES, _values[1], &stop); - } -} - -- (BOOL)isInitialized { - if (_values[0] && ![_values[0] isInitialized]) { - return NO; - } - if (_values[1] && ![_values[1] isInitialized]) { - return NO; - } - return YES; -} - -- (instancetype)deepCopyWithZone:(NSZone *)zone { - GPBBoolObjectDictionary *newDict = - [[GPBBoolObjectDictionary alloc] init]; - for (int i = 0; i < 2; ++i) { - if (_values[i] != nil) { - newDict->_values[i] = [_values[i] copyWithZone:zone]; - } - } - return newDict; -} - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - NSUInteger count = 0; - size_t result = 0; - for (int i = 0; i < 2; ++i) { - if (_values[i] != nil) { - ++count; - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictObjectFieldSize(_values[i], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - } - } - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - for (int i = 0; i < 2; ++i) { - if (_values[i] != nil) { - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictObjectFieldSize(_values[i], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - WriteDictObjectField(outputStream, _values[i], kMapValueFieldNumber, valueDataType); - } - } -} - -- (void)addEntriesFromDictionary:(GPBBoolObjectDictionary *)otherDictionary { - if (otherDictionary) { - for (int i = 0; i < 2; ++i) { - if (otherDictionary->_values[i] != nil) { - [_values[i] release]; - _values[i] = [otherDictionary->_values[i] retain]; - } - } - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setObject:(id)object forKey:(BOOL)key { - if (!object) { - [NSException raise:NSInvalidArgumentException - format:@"Attempting to add nil object to a Dictionary"]; - } - int idx = (key ? 1 : 0); - [_values[idx] release]; - _values[idx] = [object retain]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeObjectForKey:(BOOL)aKey { - int idx = (aKey ? 1 : 0); - [_values[idx] release]; - _values[idx] = nil; -} - -- (void)removeAll { - for (int i = 0; i < 2; ++i) { - [_values[i] release]; - _values[i] = nil; - } -} - -@end - -//%PDDM-EXPAND-END (8 expansions) - -#pragma mark - Bool -> Enum - -@implementation GPBBoolEnumDictionary { - @package - GPBEnumValidationFunc _validationFunc; - int32_t _values[2]; - BOOL _valueSet[2]; -} - -@synthesize validationFunc = _validationFunc; - -+ (instancetype)dictionary { - return [[[self alloc] initWithValidationFunction:NULL - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func { - return [[[self alloc] initWithValidationFunction:func - rawValues:NULL - forKeys:NULL - count:0] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValue:(int32_t)rawValue - forKey:(BOOL)key { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBBoolEnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:&rawValue - forKeys:&key - count:1] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])values - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBBoolEnumDictionary*)[self alloc] initWithValidationFunction:func - rawValues:values - forKeys:keys - count:count] autorelease]; -} - -+ (instancetype)dictionaryWithDictionary:(GPBBoolEnumDictionary *)dictionary { - // Cast is needed so the compiler knows what class we are invoking initWithValues:forKeys:count: - // on to get the type correct. - return [[(GPBBoolEnumDictionary*)[self alloc] initWithDictionary:dictionary] autorelease]; -} - -+ (instancetype)dictionaryWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { - return [[[self alloc] initWithValidationFunction:func capacity:numItems] autorelease]; -} - -- (instancetype)init { - return [self initWithValidationFunction:NULL rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func { - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])rawValues - forKeys:(const BOOL [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _validationFunc = (func != NULL ? func : DictDefault_IsValidValue); - for (NSUInteger i = 0; i < count; ++i) { - int idx = keys[i] ? 1 : 0; - _values[idx] = rawValues[i]; - _valueSet[idx] = YES; - } - } - return self; -} - -- (instancetype)initWithDictionary:(GPBBoolEnumDictionary *)dictionary { - self = [self initWithValidationFunction:dictionary.validationFunc - rawValues:NULL - forKeys:NULL - count:0]; - if (self) { - if (dictionary) { - for (int i = 0; i < 2; ++i) { - if (dictionary->_valueSet[i]) { - _values[i] = dictionary->_values[i]; - _valueSet[i] = YES; - } - } - } - } - return self; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)numItems { -#pragma unused(numItems) - return [self initWithValidationFunction:func rawValues:NULL forKeys:NULL count:0]; -} - -#if !defined(NS_BLOCK_ASSERTIONS) -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [super dealloc]; -} -#endif // !defined(NS_BLOCK_ASSERTIONS) - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolEnumDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolEnumDictionary class]]) { - return NO; - } - GPBBoolEnumDictionary *otherDictionary = other; - if ((_valueSet[0] != otherDictionary->_valueSet[0]) || - (_valueSet[1] != otherDictionary->_valueSet[1])) { - return NO; - } - if ((_valueSet[0] && (_values[0] != otherDictionary->_values[0])) || - (_valueSet[1] && (_values[1] != otherDictionary->_values[1]))) { - return NO; - } - return YES; -} - -- (NSUInteger)hash { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> {", [self class], self]; - if (_valueSet[0]) { - [result appendFormat:@"NO: %d", _values[0]]; - } - if (_valueSet[1]) { - [result appendFormat:@"YES: %d", _values[1]]; - } - [result appendString:@" }"]; - return result; -} - -- (NSUInteger)count { - return (_valueSet[0] ? 1 : 0) + (_valueSet[1] ? 1 : 0); -} - -- (BOOL)getEnum:(int32_t*)value forKey:(BOOL)key { - int idx = (key ? 1 : 0); - if (_valueSet[idx]) { - if (value) { - int32_t result = _values[idx]; - if (!_validationFunc(result)) { - result = kGPBUnrecognizedEnumeratorValue; - } - *value = result; - } - return YES; - } - return NO; -} - -- (BOOL)getRawValue:(int32_t*)rawValue forKey:(BOOL)key { - int idx = (key ? 1 : 0); - if (_valueSet[idx]) { - if (rawValue) { - *rawValue = _values[idx]; - } - return YES; - } - return NO; -} - -- (void)enumerateKeysAndRawValuesUsingBlock: - (void (^)(BOOL key, int32_t value, BOOL *stop))block { - BOOL stop = NO; - if (_valueSet[0]) { - block(NO, _values[0], &stop); - } - if (!stop && _valueSet[1]) { - block(YES, _values[1], &stop); - } -} - -- (void)enumerateKeysAndEnumsUsingBlock: - (void (^)(BOOL key, int32_t rawValue, BOOL *stop))block { - BOOL stop = NO; - GPBEnumValidationFunc func = _validationFunc; - int32_t validatedValue; - if (_valueSet[0]) { - validatedValue = _values[0]; - if (!func(validatedValue)) { - validatedValue = kGPBUnrecognizedEnumeratorValue; - } - block(NO, validatedValue, &stop); - } - if (!stop && _valueSet[1]) { - validatedValue = _values[1]; - if (!func(validatedValue)) { - validatedValue = kGPBUnrecognizedEnumeratorValue; - } - block(YES, validatedValue, &stop); - } -} - -//%PDDM-EXPAND SERIAL_DATA_FOR_ENTRY_POD_Enum(Bool) -// This block of code is generated, do not edit it directly. - -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType { - size_t msgSize = ComputeDictBoolFieldSize(key->valueBool, kMapKeyFieldNumber, keyDataType); - msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum); - NSMutableData *data = [NSMutableData dataWithLength:msgSize]; - GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data]; - WriteDictBoolField(outputStream, key->valueBool, kMapKeyFieldNumber, keyDataType); - WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum); - [outputStream release]; - return data; -} - -//%PDDM-EXPAND-END SERIAL_DATA_FOR_ENTRY_POD_Enum(Bool) - -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - NSUInteger count = 0; - size_t result = 0; - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - ++count; - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType); - result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize; - } - } - size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage); - result += tagSize * count; - return result; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field { - GPBDataType valueDataType = GPBGetFieldDataType(field); - uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited); - for (int i = 0; i < 2; ++i) { - if (_valueSet[i]) { - // Write the tag. - [outputStream writeInt32NoTag:tag]; - // Write the size of the message. - size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType); - [outputStream writeInt32NoTag:(int32_t)msgSize]; - // Write the fields. - WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool); - WriteDictInt32Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType); - } - } -} - -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block { - if (_valueSet[0]) { - block(@"false", @(_values[0])); - } - if (_valueSet[1]) { - block(@"true", @(_values[1])); - } -} - -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key { - int idx = (key->valueBool ? 1 : 0); - _values[idx] = value->valueInt32; - _valueSet[idx] = YES; -} - -- (void)addRawEntriesFromDictionary:(GPBBoolEnumDictionary *)otherDictionary { - if (otherDictionary) { - for (int i = 0; i < 2; ++i) { - if (otherDictionary->_valueSet[i]) { - _valueSet[i] = YES; - _values[i] = otherDictionary->_values[i]; - } - } - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } - } -} - -- (void)setEnum:(int32_t)value forKey:(BOOL)key { - if (!_validationFunc(value)) { - [NSException raise:NSInvalidArgumentException - format:@"GPBBoolEnumDictionary: Attempt to set an unknown enum value (%d)", - value]; - } - int idx = (key ? 1 : 0); - _values[idx] = value; - _valueSet[idx] = YES; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)setRawValue:(int32_t)rawValue forKey:(BOOL)key { - int idx = (key ? 1 : 0); - _values[idx] = rawValue; - _valueSet[idx] = YES; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeEnumForKey:(BOOL)aKey { - _valueSet[aKey ? 1 : 0] = NO; -} - -- (void)removeAll { - _valueSet[0] = NO; - _valueSet[1] = NO; -} - -@end - -#pragma mark - NSDictionary Subclass - -@implementation GPBAutocreatedDictionary { - NSMutableDictionary *_dictionary; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_dictionary release]; - [super dealloc]; -} - -#pragma mark Required NSDictionary overrides - -- (instancetype)initWithObjects:(const id [])objects - forKeys:(const id<NSCopying> [])keys - count:(NSUInteger)count { - self = [super init]; - if (self) { - _dictionary = [[NSMutableDictionary alloc] initWithObjects:objects - forKeys:keys - count:count]; - } - return self; -} - -- (NSUInteger)count { - return [_dictionary count]; -} - -- (id)objectForKey:(id)aKey { - return [_dictionary objectForKey:aKey]; -} - -- (NSEnumerator *)keyEnumerator { - if (_dictionary == nil) { - _dictionary = [[NSMutableDictionary alloc] init]; - } - return [_dictionary keyEnumerator]; -} - -#pragma mark Required NSMutableDictionary overrides - -// Only need to call GPBAutocreatedDictionaryModified() when adding things -// since we only autocreate empty dictionaries. - -- (void)setObject:(id)anObject forKey:(id<NSCopying>)aKey { - if (_dictionary == nil) { - _dictionary = [[NSMutableDictionary alloc] init]; - } - [_dictionary setObject:anObject forKey:aKey]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)removeObjectForKey:(id)aKey { - [_dictionary removeObjectForKey:aKey]; -} - -#pragma mark Extra things hooked - -- (id)copyWithZone:(NSZone *)zone { - if (_dictionary == nil) { - return [[NSMutableDictionary allocWithZone:zone] init]; - } - return [_dictionary copyWithZone:zone]; -} - -- (id)mutableCopyWithZone:(NSZone *)zone { - if (_dictionary == nil) { - return [[NSMutableDictionary allocWithZone:zone] init]; - } - return [_dictionary mutableCopyWithZone:zone]; -} - -// Not really needed, but subscripting is likely common enough it doesn't hurt -// to ensure it goes directly to the real NSMutableDictionary. -- (id)objectForKeyedSubscript:(id)key { - return [_dictionary objectForKeyedSubscript:key]; -} - -// Not really needed, but subscripting is likely common enough it doesn't hurt -// to ensure it goes directly to the real NSMutableDictionary. -- (void)setObject:(id)obj forKeyedSubscript:(id<NSCopying>)key { - if (_dictionary == nil) { - _dictionary = [[NSMutableDictionary alloc] init]; - } - [_dictionary setObject:obj forKeyedSubscript:key]; - if (_autocreator) { - GPBAutocreatedDictionaryModified(_autocreator, self); - } -} - -- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(id key, - id obj, - BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsUsingBlock:block]; -} - -- (void)enumerateKeysAndObjectsWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(id key, - id obj, - BOOL *stop))block { - [_dictionary enumerateKeysAndObjectsWithOptions:opts usingBlock:block]; -} - -@end - -#pragma clang diagnostic pop diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDictionary_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDictionary_PackagePrivate.h deleted file mode 100644 index 7b921e8e..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBDictionary_PackagePrivate.h +++ /dev/null @@ -1,488 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBDictionary.h" - -@class GPBCodedInputStream; -@class GPBCodedOutputStream; -@class GPBExtensionRegistry; -@class GPBFieldDescriptor; - -@protocol GPBDictionaryInternalsProtocol -- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field; -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream - asField:(GPBFieldDescriptor *)field; -- (void)setGPBGenericValue:(GPBGenericValue *)value - forGPBGenericValueKey:(GPBGenericValue *)key; -- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block; -@end - -//%PDDM-DEFINE DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(KEY_NAME) -//%DICTIONARY_POD_PRIV_INTERFACES_FOR_KEY(KEY_NAME) -//%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Object, Object) -//%PDDM-DEFINE DICTIONARY_POD_PRIV_INTERFACES_FOR_KEY(KEY_NAME) -//%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, UInt32, Basic) -//%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Int32, Basic) -//%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, UInt64, Basic) -//%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Int64, Basic) -//%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Bool, Basic) -//%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Float, Basic) -//%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Double, Basic) -//%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Enum, Enum) - -//%PDDM-DEFINE DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, VALUE_NAME, HELPER) -//%@interface GPB##KEY_NAME##VALUE_NAME##Dictionary () <GPBDictionaryInternalsProtocol> { -//% @package -//% GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -//%} -//%EXTRA_DICTIONARY_PRIVATE_INTERFACES_##HELPER()@end -//% - -//%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Basic() -// Empty -//%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Object() -//%- (BOOL)isInitialized; -//%- (instancetype)deepCopyWithZone:(NSZone *)zone -//% __attribute__((ns_returns_retained)); -//% -//%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Enum() -//%- (NSData *)serializedDataForUnknownValue:(int32_t)value -//% forKey:(GPBGenericValue *)key -//% keyDataType:(GPBDataType)keyDataType; -//% - -//%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(UInt32) -// This block of code is generated, do not edit it directly. - -@interface GPBUInt32UInt32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt32Int32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt32UInt64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt32Int64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt32BoolDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt32FloatDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt32DoubleDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt32EnumDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType; -@end - -@interface GPBUInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (BOOL)isInitialized; -- (instancetype)deepCopyWithZone:(NSZone *)zone - __attribute__((ns_returns_retained)); -@end - -//%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Int32) -// This block of code is generated, do not edit it directly. - -@interface GPBInt32UInt32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt32Int32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt32UInt64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt32Int64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt32BoolDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt32FloatDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt32DoubleDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt32EnumDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType; -@end - -@interface GPBInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (BOOL)isInitialized; -- (instancetype)deepCopyWithZone:(NSZone *)zone - __attribute__((ns_returns_retained)); -@end - -//%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(UInt64) -// This block of code is generated, do not edit it directly. - -@interface GPBUInt64UInt32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt64Int32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt64UInt64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt64Int64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt64BoolDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt64FloatDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt64DoubleDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBUInt64EnumDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType; -@end - -@interface GPBUInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (BOOL)isInitialized; -- (instancetype)deepCopyWithZone:(NSZone *)zone - __attribute__((ns_returns_retained)); -@end - -//%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Int64) -// This block of code is generated, do not edit it directly. - -@interface GPBInt64UInt32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt64Int32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt64UInt64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt64Int64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt64BoolDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt64FloatDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt64DoubleDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBInt64EnumDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType; -@end - -@interface GPBInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (BOOL)isInitialized; -- (instancetype)deepCopyWithZone:(NSZone *)zone - __attribute__((ns_returns_retained)); -@end - -//%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Bool) -// This block of code is generated, do not edit it directly. - -@interface GPBBoolUInt32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBBoolInt32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBBoolUInt64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBBoolInt64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBBoolBoolDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBBoolFloatDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBBoolDoubleDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBBoolEnumDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType; -@end - -@interface GPBBoolObjectDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (BOOL)isInitialized; -- (instancetype)deepCopyWithZone:(NSZone *)zone - __attribute__((ns_returns_retained)); -@end - -//%PDDM-EXPAND DICTIONARY_POD_PRIV_INTERFACES_FOR_KEY(String) -// This block of code is generated, do not edit it directly. - -@interface GPBStringUInt32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBStringInt32Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBStringUInt64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBStringInt64Dictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBStringBoolDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBStringFloatDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBStringDoubleDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -@interface GPBStringEnumDictionary () <GPBDictionaryInternalsProtocol> { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -- (NSData *)serializedDataForUnknownValue:(int32_t)value - forKey:(GPBGenericValue *)key - keyDataType:(GPBDataType)keyDataType; -@end - -//%PDDM-EXPAND-END (6 expansions) - -#pragma mark - NSDictionary Subclass - -@interface GPBAutocreatedDictionary : NSMutableDictionary { - @package - GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; -} -@end - -#pragma mark - Helpers - -CF_EXTERN_C_BEGIN - -// Helper to compute size when an NSDictionary is used for the map instead -// of a custom type. -size_t GPBDictionaryComputeSizeInternalHelper(NSDictionary *dict, - GPBFieldDescriptor *field); - -// Helper to write out when an NSDictionary is used for the map instead -// of a custom type. -void GPBDictionaryWriteToStreamInternalHelper( - GPBCodedOutputStream *outputStream, NSDictionary *dict, - GPBFieldDescriptor *field); - -// Helper to check message initialization when an NSDictionary is used for -// the map instead of a custom type. -BOOL GPBDictionaryIsInitializedInternalHelper(NSDictionary *dict, - GPBFieldDescriptor *field); - -// Helper to read a map instead. -void GPBDictionaryReadEntry(id mapDictionary, GPBCodedInputStream *stream, - GPBExtensionRegistry *registry, - GPBFieldDescriptor *field, - GPBMessage *parentMessage); - -CF_EXTERN_C_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionInternals.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionInternals.h deleted file mode 100644 index 2b980aef..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionInternals.h +++ /dev/null @@ -1,50 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBDescriptor.h" - -@class GPBCodedInputStream; -@class GPBCodedOutputStream; -@class GPBExtensionRegistry; - -void GPBExtensionMergeFromInputStream(GPBExtensionDescriptor *extension, - BOOL isPackedOnStream, - GPBCodedInputStream *input, - GPBExtensionRegistry *extensionRegistry, - GPBMessage *message); - -size_t GPBComputeExtensionSerializedSizeIncludingTag( - GPBExtensionDescriptor *extension, id value); - -void GPBWriteExtensionValueToOutputStream(GPBExtensionDescriptor *extension, - id value, - GPBCodedOutputStream *output); diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionInternals.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionInternals.m deleted file mode 100644 index 290c82a1..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionInternals.m +++ /dev/null @@ -1,391 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBExtensionInternals.h" - -#import <objc/runtime.h> - -#import "GPBCodedInputStream_PackagePrivate.h" -#import "GPBCodedOutputStream_PackagePrivate.h" -#import "GPBDescriptor_PackagePrivate.h" -#import "GPBMessage_PackagePrivate.h" -#import "GPBUtilities_PackagePrivate.h" - -static id NewSingleValueFromInputStream(GPBExtensionDescriptor *extension, - GPBCodedInputStream *input, - GPBExtensionRegistry *extensionRegistry, - GPBMessage *existingValue) - __attribute__((ns_returns_retained)); - -GPB_INLINE size_t DataTypeSize(GPBDataType dataType) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wswitch-enum" - switch (dataType) { - case GPBDataTypeBool: - return 1; - case GPBDataTypeFixed32: - case GPBDataTypeSFixed32: - case GPBDataTypeFloat: - return 4; - case GPBDataTypeFixed64: - case GPBDataTypeSFixed64: - case GPBDataTypeDouble: - return 8; - default: - return 0; - } -#pragma clang diagnostic pop -} - -static size_t ComputePBSerializedSizeNoTagOfObject(GPBDataType dataType, id object) { -#define FIELD_CASE(TYPE, ACCESSOR) \ - case GPBDataType##TYPE: \ - return GPBCompute##TYPE##SizeNoTag([(NSNumber *)object ACCESSOR]); -#define FIELD_CASE2(TYPE) \ - case GPBDataType##TYPE: \ - return GPBCompute##TYPE##SizeNoTag(object); - switch (dataType) { - FIELD_CASE(Bool, boolValue) - FIELD_CASE(Float, floatValue) - FIELD_CASE(Double, doubleValue) - FIELD_CASE(Int32, intValue) - FIELD_CASE(SFixed32, intValue) - FIELD_CASE(SInt32, intValue) - FIELD_CASE(Enum, intValue) - FIELD_CASE(Int64, longLongValue) - FIELD_CASE(SInt64, longLongValue) - FIELD_CASE(SFixed64, longLongValue) - FIELD_CASE(UInt32, unsignedIntValue) - FIELD_CASE(Fixed32, unsignedIntValue) - FIELD_CASE(UInt64, unsignedLongLongValue) - FIELD_CASE(Fixed64, unsignedLongLongValue) - FIELD_CASE2(Bytes) - FIELD_CASE2(String) - FIELD_CASE2(Message) - FIELD_CASE2(Group) - } -#undef FIELD_CASE -#undef FIELD_CASE2 -} - -static size_t ComputeSerializedSizeIncludingTagOfObject( - GPBExtensionDescription *description, id object) { -#define FIELD_CASE(TYPE, ACCESSOR) \ - case GPBDataType##TYPE: \ - return GPBCompute##TYPE##Size(description->fieldNumber, \ - [(NSNumber *)object ACCESSOR]); -#define FIELD_CASE2(TYPE) \ - case GPBDataType##TYPE: \ - return GPBCompute##TYPE##Size(description->fieldNumber, object); - switch (description->dataType) { - FIELD_CASE(Bool, boolValue) - FIELD_CASE(Float, floatValue) - FIELD_CASE(Double, doubleValue) - FIELD_CASE(Int32, intValue) - FIELD_CASE(SFixed32, intValue) - FIELD_CASE(SInt32, intValue) - FIELD_CASE(Enum, intValue) - FIELD_CASE(Int64, longLongValue) - FIELD_CASE(SInt64, longLongValue) - FIELD_CASE(SFixed64, longLongValue) - FIELD_CASE(UInt32, unsignedIntValue) - FIELD_CASE(Fixed32, unsignedIntValue) - FIELD_CASE(UInt64, unsignedLongLongValue) - FIELD_CASE(Fixed64, unsignedLongLongValue) - FIELD_CASE2(Bytes) - FIELD_CASE2(String) - FIELD_CASE2(Group) - case GPBDataTypeMessage: - if (GPBExtensionIsWireFormat(description)) { - return GPBComputeMessageSetExtensionSize(description->fieldNumber, - object); - } else { - return GPBComputeMessageSize(description->fieldNumber, object); - } - } -#undef FIELD_CASE -#undef FIELD_CASE2 -} - -static size_t ComputeSerializedSizeIncludingTagOfArray( - GPBExtensionDescription *description, NSArray *values) { - if (GPBExtensionIsPacked(description)) { - size_t size = 0; - size_t typeSize = DataTypeSize(description->dataType); - if (typeSize != 0) { - size = values.count * typeSize; - } else { - for (id value in values) { - size += - ComputePBSerializedSizeNoTagOfObject(description->dataType, value); - } - } - return size + GPBComputeTagSize(description->fieldNumber) + - GPBComputeRawVarint32SizeForInteger(size); - } else { - size_t size = 0; - for (id value in values) { - size += ComputeSerializedSizeIncludingTagOfObject(description, value); - } - return size; - } -} - -static void WriteObjectIncludingTagToCodedOutputStream( - id object, GPBExtensionDescription *description, - GPBCodedOutputStream *output) { -#define FIELD_CASE(TYPE, ACCESSOR) \ - case GPBDataType##TYPE: \ - [output write##TYPE:description->fieldNumber \ - value:[(NSNumber *)object ACCESSOR]]; \ - return; -#define FIELD_CASE2(TYPE) \ - case GPBDataType##TYPE: \ - [output write##TYPE:description->fieldNumber value:object]; \ - return; - switch (description->dataType) { - FIELD_CASE(Bool, boolValue) - FIELD_CASE(Float, floatValue) - FIELD_CASE(Double, doubleValue) - FIELD_CASE(Int32, intValue) - FIELD_CASE(SFixed32, intValue) - FIELD_CASE(SInt32, intValue) - FIELD_CASE(Enum, intValue) - FIELD_CASE(Int64, longLongValue) - FIELD_CASE(SInt64, longLongValue) - FIELD_CASE(SFixed64, longLongValue) - FIELD_CASE(UInt32, unsignedIntValue) - FIELD_CASE(Fixed32, unsignedIntValue) - FIELD_CASE(UInt64, unsignedLongLongValue) - FIELD_CASE(Fixed64, unsignedLongLongValue) - FIELD_CASE2(Bytes) - FIELD_CASE2(String) - FIELD_CASE2(Group) - case GPBDataTypeMessage: - if (GPBExtensionIsWireFormat(description)) { - [output writeMessageSetExtension:description->fieldNumber value:object]; - } else { - [output writeMessage:description->fieldNumber value:object]; - } - return; - } -#undef FIELD_CASE -#undef FIELD_CASE2 -} - -static void WriteObjectNoTagToCodedOutputStream( - id object, GPBExtensionDescription *description, - GPBCodedOutputStream *output) { -#define FIELD_CASE(TYPE, ACCESSOR) \ - case GPBDataType##TYPE: \ - [output write##TYPE##NoTag:[(NSNumber *)object ACCESSOR]]; \ - return; -#define FIELD_CASE2(TYPE) \ - case GPBDataType##TYPE: \ - [output write##TYPE##NoTag:object]; \ - return; - switch (description->dataType) { - FIELD_CASE(Bool, boolValue) - FIELD_CASE(Float, floatValue) - FIELD_CASE(Double, doubleValue) - FIELD_CASE(Int32, intValue) - FIELD_CASE(SFixed32, intValue) - FIELD_CASE(SInt32, intValue) - FIELD_CASE(Enum, intValue) - FIELD_CASE(Int64, longLongValue) - FIELD_CASE(SInt64, longLongValue) - FIELD_CASE(SFixed64, longLongValue) - FIELD_CASE(UInt32, unsignedIntValue) - FIELD_CASE(Fixed32, unsignedIntValue) - FIELD_CASE(UInt64, unsignedLongLongValue) - FIELD_CASE(Fixed64, unsignedLongLongValue) - FIELD_CASE2(Bytes) - FIELD_CASE2(String) - FIELD_CASE2(Message) - case GPBDataTypeGroup: - [output writeGroupNoTag:description->fieldNumber value:object]; - return; - } -#undef FIELD_CASE -#undef FIELD_CASE2 -} - -static void WriteArrayIncludingTagsToCodedOutputStream( - NSArray *values, GPBExtensionDescription *description, - GPBCodedOutputStream *output) { - if (GPBExtensionIsPacked(description)) { - [output writeTag:description->fieldNumber - format:GPBWireFormatLengthDelimited]; - size_t dataSize = 0; - size_t typeSize = DataTypeSize(description->dataType); - if (typeSize != 0) { - dataSize = values.count * typeSize; - } else { - for (id value in values) { - dataSize += - ComputePBSerializedSizeNoTagOfObject(description->dataType, value); - } - } - [output writeRawVarintSizeTAs32:dataSize]; - for (id value in values) { - WriteObjectNoTagToCodedOutputStream(value, description, output); - } - } else { - for (id value in values) { - WriteObjectIncludingTagToCodedOutputStream(value, description, output); - } - } -} - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -void GPBExtensionMergeFromInputStream(GPBExtensionDescriptor *extension, - BOOL isPackedOnStream, - GPBCodedInputStream *input, - GPBExtensionRegistry *extensionRegistry, - GPBMessage *message) { - GPBExtensionDescription *description = extension->description_; - GPBCodedInputStreamState *state = &input->state_; - if (isPackedOnStream) { - NSCAssert(GPBExtensionIsRepeated(description), - @"How was it packed if it isn't repeated?"); - int32_t length = GPBCodedInputStreamReadInt32(state); - size_t limit = GPBCodedInputStreamPushLimit(state, length); - while (GPBCodedInputStreamBytesUntilLimit(state) > 0) { - id value = NewSingleValueFromInputStream(extension, - input, - extensionRegistry, - nil); - [message addExtension:extension value:value]; - [value release]; - } - GPBCodedInputStreamPopLimit(state, limit); - } else { - id existingValue = nil; - BOOL isRepeated = GPBExtensionIsRepeated(description); - if (!isRepeated && GPBDataTypeIsMessage(description->dataType)) { - existingValue = [message getExistingExtension:extension]; - } - id value = NewSingleValueFromInputStream(extension, - input, - extensionRegistry, - existingValue); - if (isRepeated) { - [message addExtension:extension value:value]; - } else { - [message setExtension:extension value:value]; - } - [value release]; - } -} - -void GPBWriteExtensionValueToOutputStream(GPBExtensionDescriptor *extension, - id value, - GPBCodedOutputStream *output) { - GPBExtensionDescription *description = extension->description_; - if (GPBExtensionIsRepeated(description)) { - WriteArrayIncludingTagsToCodedOutputStream(value, description, output); - } else { - WriteObjectIncludingTagToCodedOutputStream(value, description, output); - } -} - -size_t GPBComputeExtensionSerializedSizeIncludingTag( - GPBExtensionDescriptor *extension, id value) { - GPBExtensionDescription *description = extension->description_; - if (GPBExtensionIsRepeated(description)) { - return ComputeSerializedSizeIncludingTagOfArray(description, value); - } else { - return ComputeSerializedSizeIncludingTagOfObject(description, value); - } -} - -// Note that this returns a retained value intentionally. -static id NewSingleValueFromInputStream(GPBExtensionDescriptor *extension, - GPBCodedInputStream *input, - GPBExtensionRegistry *extensionRegistry, - GPBMessage *existingValue) { - GPBExtensionDescription *description = extension->description_; - GPBCodedInputStreamState *state = &input->state_; - switch (description->dataType) { - case GPBDataTypeBool: return [[NSNumber alloc] initWithBool:GPBCodedInputStreamReadBool(state)]; - case GPBDataTypeFixed32: return [[NSNumber alloc] initWithUnsignedInt:GPBCodedInputStreamReadFixed32(state)]; - case GPBDataTypeSFixed32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadSFixed32(state)]; - case GPBDataTypeFloat: return [[NSNumber alloc] initWithFloat:GPBCodedInputStreamReadFloat(state)]; - case GPBDataTypeFixed64: return [[NSNumber alloc] initWithUnsignedLongLong:GPBCodedInputStreamReadFixed64(state)]; - case GPBDataTypeSFixed64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadSFixed64(state)]; - case GPBDataTypeDouble: return [[NSNumber alloc] initWithDouble:GPBCodedInputStreamReadDouble(state)]; - case GPBDataTypeInt32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadInt32(state)]; - case GPBDataTypeInt64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadInt64(state)]; - case GPBDataTypeSInt32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadSInt32(state)]; - case GPBDataTypeSInt64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadSInt64(state)]; - case GPBDataTypeUInt32: return [[NSNumber alloc] initWithUnsignedInt:GPBCodedInputStreamReadUInt32(state)]; - case GPBDataTypeUInt64: return [[NSNumber alloc] initWithUnsignedLongLong:GPBCodedInputStreamReadUInt64(state)]; - case GPBDataTypeBytes: return GPBCodedInputStreamReadRetainedBytes(state); - case GPBDataTypeString: return GPBCodedInputStreamReadRetainedString(state); - case GPBDataTypeEnum: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadEnum(state)]; - case GPBDataTypeGroup: - case GPBDataTypeMessage: { - GPBMessage *message; - if (existingValue) { - message = [existingValue retain]; - } else { - GPBDescriptor *decriptor = [extension.msgClass descriptor]; - message = [[decriptor.messageClass alloc] init]; - } - - if (description->dataType == GPBDataTypeGroup) { - [input readGroup:description->fieldNumber - message:message - extensionRegistry:extensionRegistry]; - } else { - // description->dataType == GPBDataTypeMessage - if (GPBExtensionIsWireFormat(description)) { - // For MessageSet fields the message length will have already been - // read. - [message mergeFromCodedInputStream:input - extensionRegistry:extensionRegistry]; - } else { - [input readMessage:message extensionRegistry:extensionRegistry]; - } - } - - return message; - } - } - - return nil; -} - -#pragma clang diagnostic pop diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionRegistry.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionRegistry.h deleted file mode 100644 index d79632d2..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionRegistry.h +++ /dev/null @@ -1,87 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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> - -@class GPBDescriptor; -@class GPBExtensionDescriptor; - -NS_ASSUME_NONNULL_BEGIN - -/** - * A table of known extensions, searchable by name or field number. When - * parsing a protocol message that might have extensions, you must provide a - * GPBExtensionRegistry in which you have registered any extensions that you - * want to be able to parse. Otherwise, those extensions will just be treated - * like unknown fields. - * - * The *Root classes provide `+extensionRegistry` for the extensions defined - * in a given file *and* all files it imports. You can also create a - * GPBExtensionRegistry, and merge those registries to handle parsing - * extensions defined from non overlapping files. - * - * ``` - * GPBExtensionRegistry *registry = [[MyProtoFileRoot extensionRegistry] copy]; - * [registry addExtension:[OtherMessage neededExtension]]; // Not in MyProtoFile - * NSError *parseError; - * MyMessage *msg = [MyMessage parseData:data extensionRegistry:registry error:&parseError]; - * ``` - **/ -@interface GPBExtensionRegistry : NSObject<NSCopying> - -/** - * Adds the given GPBExtensionDescriptor to this registry. - * - * @param extension The extension description to add. - **/ -- (void)addExtension:(GPBExtensionDescriptor *)extension; - -/** - * Adds all the extensions from another registry to this registry. - * - * @param registry The registry to merge into this registry. - **/ -- (void)addExtensions:(GPBExtensionRegistry *)registry; - -/** - * Looks for the extension registered for the given field number on a given - * GPBDescriptor. - * - * @param descriptor The descriptor to look for a registered extension on. - * @param fieldNumber The field number of the extension to look for. - * - * @return The registered GPBExtensionDescriptor or nil if none was found. - **/ -- (nullable GPBExtensionDescriptor *)extensionForDescriptor:(GPBDescriptor *)descriptor - fieldNumber:(NSInteger)fieldNumber; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionRegistry.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionRegistry.m deleted file mode 100644 index 65534b67..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBExtensionRegistry.m +++ /dev/null @@ -1,131 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBExtensionRegistry.h" - -#import "GPBBootstrap.h" -#import "GPBDescriptor.h" - -@implementation GPBExtensionRegistry { - NSMutableDictionary *mutableClassMap_; -} - -- (instancetype)init { - if ((self = [super init])) { - mutableClassMap_ = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)dealloc { - [mutableClassMap_ release]; - [super dealloc]; -} - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -- (instancetype)copyWithZone:(NSZone *)zone { - GPBExtensionRegistry *result = [[[self class] allocWithZone:zone] init]; - if (result && mutableClassMap_.count) { - [result->mutableClassMap_ addEntriesFromDictionary:mutableClassMap_]; - } - return result; -} - -- (CFMutableDictionaryRef)extensionMapForContainingMessageClass: - (Class)containingMessageClass { - CFMutableDictionaryRef extensionMap = (CFMutableDictionaryRef) - [mutableClassMap_ objectForKey:containingMessageClass]; - if (extensionMap == nil) { - // Use a custom dictionary here because the keys are numbers and conversion - // back and forth from NSNumber isn't worth the cost. - extensionMap = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, NULL, - &kCFTypeDictionaryValueCallBacks); - [mutableClassMap_ setObject:(id)extensionMap - forKey:(id<NSCopying>)containingMessageClass]; - } - return extensionMap; -} - -- (void)addExtension:(GPBExtensionDescriptor *)extension { - if (extension == nil) { - return; - } - - Class containingMessageClass = extension.containingMessageClass; - CFMutableDictionaryRef extensionMap = - [self extensionMapForContainingMessageClass:containingMessageClass]; - ssize_t key = extension.fieldNumber; - CFDictionarySetValue(extensionMap, (const void *)key, extension); -} - -- (GPBExtensionDescriptor *)extensionForDescriptor:(GPBDescriptor *)descriptor - fieldNumber:(NSInteger)fieldNumber { - Class messageClass = descriptor.messageClass; - CFMutableDictionaryRef extensionMap = (CFMutableDictionaryRef) - [mutableClassMap_ objectForKey:messageClass]; - ssize_t key = fieldNumber; - GPBExtensionDescriptor *result = - (extensionMap - ? CFDictionaryGetValue(extensionMap, (const void *)key) - : nil); - return result; -} - -static void CopyKeyValue(const void *key, const void *value, void *context) { - CFMutableDictionaryRef extensionMap = (CFMutableDictionaryRef)context; - CFDictionarySetValue(extensionMap, key, value); -} - -- (void)addExtensions:(GPBExtensionRegistry *)registry { - if (registry == nil) { - // In the case where there are no extensions just ignore. - return; - } - NSMutableDictionary *otherClassMap = registry->mutableClassMap_; - [otherClassMap enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL * stop) { -#pragma unused(stop) - Class containingMessageClass = key; - CFMutableDictionaryRef otherExtensionMap = (CFMutableDictionaryRef)value; - - CFMutableDictionaryRef extensionMap = - [self extensionMapForContainingMessageClass:containingMessageClass]; - - CFDictionaryApplyFunction(otherExtensionMap, CopyKeyValue, extensionMap); - }]; -} - -#pragma clang diagnostic pop - -@end diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBMessage.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBMessage.h deleted file mode 100644 index 2c325ba8..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBMessage.h +++ /dev/null @@ -1,461 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBBootstrap.h" - -@class GPBDescriptor; -@class GPBCodedInputStream; -@class GPBCodedOutputStream; -@class GPBExtensionDescriptor; -@class GPBExtensionRegistry; -@class GPBFieldDescriptor; -@class GPBUnknownFieldSet; - -NS_ASSUME_NONNULL_BEGIN - -CF_EXTERN_C_BEGIN - -/** NSError domain used for errors. */ -extern NSString *const GPBMessageErrorDomain; - -/** Error codes for NSErrors originated in GPBMessage. */ -typedef NS_ENUM(NSInteger, GPBMessageErrorCode) { - /** Uncategorized error. */ - GPBMessageErrorCodeOther = -100, - /** Message couldn't be serialized because it is missing required fields. */ - GPBMessageErrorCodeMissingRequiredField = -101, -}; - -/** - * Key under which the GPBMessage error's reason is stored inside the userInfo - * dictionary. - **/ -extern NSString *const GPBErrorReasonKey; - -CF_EXTERN_C_END - -/** - * Base class that each generated message subclasses from. - * - * @note @c NSCopying support is a "deep copy", in that all sub objects are - * copied. Just like you wouldn't want a UIView/NSView trying to - * exist in two places, you don't want a sub message to be a property - * property of two other messages. - * - * @note While the class support NSSecureCoding, if the message has any - * extensions, they will end up reloaded in @c unknownFields as there is - * no way for the @c NSCoding plumbing to pass through a - * @c GPBExtensionRegistry. To support extensions, instead of passing the - * calls off to the Message, simple store the result of @c data, and then - * when loading, fetch the data and use - * @c +parseFromData:extensionRegistry:error: to provide an extension - * registry. - **/ -@interface GPBMessage : NSObject<NSSecureCoding, NSCopying> - -// If you add an instance method/property to this class that may conflict with -// fields declared in protos, you need to update objective_helpers.cc. The main -// cases are methods that take no arguments, or setFoo:/hasFoo: type methods. - -/** - * The set of unknown fields for this message. - * - * Only messages from proto files declared with "proto2" syntax support unknown - * fields. For "proto3" syntax, any unknown fields found while parsing are - * dropped. - **/ -@property(nonatomic, copy, nullable) GPBUnknownFieldSet *unknownFields; - -/** - * Whether the message, along with all submessages, have the required fields - * set. This is only applicable for files declared with "proto2" syntax, as - * there are no required fields for "proto3" syntax. - **/ -@property(nonatomic, readonly, getter=isInitialized) BOOL initialized; - -/** - * @return An autoreleased message with the default values set. - **/ -+ (instancetype)message; - -/** - * Creates a new instance by parsing the provided data. This method should be - * sent to the generated message class that the data should be interpreted as. - * If there is an error the method returns nil and the error is returned in - * errorPtr (when provided). - * - * @note In DEBUG builds, the parsed message is checked to be sure all required - * fields were provided, and the parse will fail if some are missing. - * - * @note The errors returned are likely coming from the domain and codes listed - * at the top of this file and GPBCodedInputStream.h. - * - * @param data The data to parse. - * @param errorPtr An optional error pointer to fill in with a failure reason if - * the data can not be parsed. - * - * @return A new instance of the generated class. - **/ -+ (nullable instancetype)parseFromData:(NSData *)data error:(NSError **)errorPtr; - -/** - * Creates a new instance by parsing the data. This method should be sent to - * the generated message class that the data should be interpreted as. If - * there is an error the method returns nil and the error is returned in - * errorPtr (when provided). - * - * @note In DEBUG builds, the parsed message is checked to be sure all required - * fields were provided, and the parse will fail if some are missing. - * - * @note The errors returned are likely coming from the domain and codes listed - * at the top of this file and GPBCodedInputStream.h. - * - * @param data The data to parse. - * @param extensionRegistry The extension registry to use to look up extensions. - * @param errorPtr An optional error pointer to fill in with a failure - * reason if the data can not be parsed. - * - * @return A new instance of the generated class. - **/ -+ (nullable instancetype)parseFromData:(NSData *)data - extensionRegistry:(nullable GPBExtensionRegistry *)extensionRegistry - error:(NSError **)errorPtr; - -/** - * Creates a new instance by parsing the data from the given input stream. This - * method should be sent to the generated message class that the data should - * be interpreted as. If there is an error the method returns nil and the error - * is returned in errorPtr (when provided). - * - * @note In DEBUG builds, the parsed message is checked to be sure all required - * fields were provided, and the parse will fail if some are missing. - * - * @note The errors returned are likely coming from the domain and codes listed - * at the top of this file and GPBCodedInputStream.h. - * - * @param input The stream to read data from. - * @param extensionRegistry The extension registry to use to look up extensions. - * @param errorPtr An optional error pointer to fill in with a failure - * reason if the data can not be parsed. - * - * @return A new instance of the generated class. - **/ -+ (nullable instancetype)parseFromCodedInputStream:(GPBCodedInputStream *)input - extensionRegistry: - (nullable GPBExtensionRegistry *)extensionRegistry - error:(NSError **)errorPtr; - -/** - * Creates a new instance by parsing the data from the given input stream. This - * method should be sent to the generated message class that the data should - * be interpreted as. If there is an error the method returns nil and the error - * is returned in errorPtr (when provided). - * - * @note Unlike the parseFrom... methods, this never checks to see if all of - * the required fields are set. So this method can be used to reload - * messages that may not be complete. - * - * @note The errors returned are likely coming from the domain and codes listed - * at the top of this file and GPBCodedInputStream.h. - * - * @param input The stream to read data from. - * @param extensionRegistry The extension registry to use to look up extensions. - * @param errorPtr An optional error pointer to fill in with a failure - * reason if the data can not be parsed. - * - * @return A new instance of the generated class. - **/ -+ (nullable instancetype)parseDelimitedFromCodedInputStream:(GPBCodedInputStream *)input - extensionRegistry: - (nullable GPBExtensionRegistry *)extensionRegistry - error:(NSError **)errorPtr; - -/** - * Initializes an instance by parsing the data. This method should be sent to - * the generated message class that the data should be interpreted as. If - * there is an error the method returns nil and the error is returned in - * errorPtr (when provided). - * - * @note In DEBUG builds, the parsed message is checked to be sure all required - * fields were provided, and the parse will fail if some are missing. - * - * @note The errors returned are likely coming from the domain and codes listed - * at the top of this file and GPBCodedInputStream.h. - * - * @param data The data to parse. - * @param errorPtr An optional error pointer to fill in with a failure reason if - * the data can not be parsed. - * - * @return An initialized instance of the generated class. - **/ -- (nullable instancetype)initWithData:(NSData *)data error:(NSError **)errorPtr; - -/** - * Initializes an instance by parsing the data. This method should be sent to - * the generated message class that the data should be interpreted as. If - * there is an error the method returns nil and the error is returned in - * errorPtr (when provided). - * - * @note In DEBUG builds, the parsed message is checked to be sure all required - * fields were provided, and the parse will fail if some are missing. - * - * @note The errors returned are likely coming from the domain and codes listed - * at the top of this file and GPBCodedInputStream.h. - * - * @param data The data to parse. - * @param extensionRegistry The extension registry to use to look up extensions. - * @param errorPtr An optional error pointer to fill in with a failure - * reason if the data can not be parsed. - * - * @return An initialized instance of the generated class. - **/ -- (nullable instancetype)initWithData:(NSData *)data - extensionRegistry:(nullable GPBExtensionRegistry *)extensionRegistry - error:(NSError **)errorPtr; - -/** - * Initializes an instance by parsing the data from the given input stream. This - * method should be sent to the generated message class that the data should - * be interpreted as. If there is an error the method returns nil and the error - * is returned in errorPtr (when provided). - * - * @note Unlike the parseFrom... methods, this never checks to see if all of - * the required fields are set. So this method can be used to reload - * messages that may not be complete. - * - * @note The errors returned are likely coming from the domain and codes listed - * at the top of this file and GPBCodedInputStream.h. - * - * @param input The stream to read data from. - * @param extensionRegistry The extension registry to use to look up extensions. - * @param errorPtr An optional error pointer to fill in with a failure - * reason if the data can not be parsed. - * - * @return An initialized instance of the generated class. - **/ -- (nullable instancetype)initWithCodedInputStream:(GPBCodedInputStream *)input - extensionRegistry: - (nullable GPBExtensionRegistry *)extensionRegistry - error:(NSError **)errorPtr; - -/** - * Parses the given data as this message's class, and merges those values into - * this message. - * - * @param data The binary representation of the message to merge. - * @param extensionRegistry The extension registry to use to look up extensions. - * - * @exception GPBCodedInputStreamException Exception thrown when parsing was - * unsuccessful. - **/ -- (void)mergeFromData:(NSData *)data - extensionRegistry:(nullable GPBExtensionRegistry *)extensionRegistry; - -/** - * Merges the fields from another message (of the same type) into this - * message. - * - * @param other Message to merge into this message. - **/ -- (void)mergeFrom:(GPBMessage *)other; - -/** - * Writes out the message to the given coded output stream. - * - * @param output The coded output stream into which to write the message. - **/ -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)output; - -/** - * Writes out the message to the given output stream. - * - * @param output The output stream into which to write the message. - **/ -- (void)writeToOutputStream:(NSOutputStream *)output; - -/** - * Writes out a varint for the message size followed by the the message to - * the given output stream. - * - * @param output The coded output stream into which to write the message. - **/ -- (void)writeDelimitedToCodedOutputStream:(GPBCodedOutputStream *)output; - -/** - * Writes out a varint for the message size followed by the the message to - * the given output stream. - * - * @param output The output stream into which to write the message. - **/ -- (void)writeDelimitedToOutputStream:(NSOutputStream *)output; - -/** - * Serializes the message to an NSData. - * - * If there is an error while generating the data, nil is returned. - * - * @note This value is not cached, so if you are using it repeatedly, cache - * it yourself. - * - * @note In DEBUG ONLY, the message is also checked for all required field, - * if one is missing, nil will be returned. - * - * @return The binary representation of the message. - **/ -- (nullable NSData *)data; - -/** - * Serializes a varint with the message size followed by the message data, - * returning that as an NSData. - * - * @note This value is not cached, so if you are using it repeatedly, it is - * recommended to keep a local copy. - * - * @return The binary representation of the size along with the message. - **/ -- (NSData *)delimitedData; - -/** - * Calculates the size of the object if it were serialized. - * - * This is not a cached value. If you are following a pattern like this: - * - * ``` - * size_t size = [aMsg serializedSize]; - * NSMutableData *foo = [NSMutableData dataWithCapacity:size + sizeof(size)]; - * [foo writeSize:size]; - * [foo appendData:[aMsg data]]; - * ``` - * - * you would be better doing: - * - * ``` - * NSData *data = [aMsg data]; - * NSUInteger size = [aMsg length]; - * NSMutableData *foo = [NSMutableData dataWithCapacity:size + sizeof(size)]; - * [foo writeSize:size]; - * [foo appendData:data]; - * ``` - * - * @return The size of the message in it's binary representation. - **/ -- (size_t)serializedSize; - -/** - * @return The descriptor for the message class. - **/ -+ (GPBDescriptor *)descriptor; - -/** - * Return the descriptor for the message. - **/ -- (GPBDescriptor *)descriptor; - -/** - * @return An array with the extension descriptors that are currently set on the - * message. - **/ -- (NSArray *)extensionsCurrentlySet; - -/** - * Checks whether there is an extension set on the message which matches the - * given extension descriptor. - * - * @param extension Extension descriptor to check if it's set on the message. - * - * @return Whether the extension is currently set on the message. - **/ -- (BOOL)hasExtension:(GPBExtensionDescriptor *)extension; - -/* - * Fetches the given extension's value for this message. - * - * Extensions use boxed values (NSNumbers) for PODs and NSMutableArrays for - * repeated fields. If the extension is a Message one will be auto created for - * you and returned similar to fields. - * - * @param extension The extension descriptor of the extension to fetch. - * - * @return The extension matching the given descriptor, or nil if none found. - **/ -- (nullable id)getExtension:(GPBExtensionDescriptor *)extension; - -/** - * Sets the given extension's value for this message. This only applies for - * single field extensions (i.e. - not repeated fields). - * - * Extensions use boxed values (NSNumbers). - * - * @param extension The extension descriptor under which to set the value. - * @param value The value to be set as the extension. - **/ -- (void)setExtension:(GPBExtensionDescriptor *)extension - value:(nullable id)value; - -/** - * Adds the given value to the extension for this message. This only applies - * to repeated field extensions. If the field is a repeated POD type, the value - * should be an NSNumber. - * - * @param extension The extension descriptor under which to add the value. - * @param value The value to be added to the repeated extension. - **/ -- (void)addExtension:(GPBExtensionDescriptor *)extension value:(id)value; - -/** - * Replaces the value at the given index with the given value for the extension - * on this message. This only applies to repeated field extensions. If the field - * is a repeated POD type, the value is should be an NSNumber. - * - * @param extension The extension descriptor under which to replace the value. - * @param index The index of the extension to be replaced. - * @param value The value to be replaced in the repeated extension. - **/ -- (void)setExtension:(GPBExtensionDescriptor *)extension - index:(NSUInteger)index - value:(id)value; - -/** - * Clears the given extension for this message. - * - * @param extension The extension descriptor to be cleared from this message. - **/ -- (void)clearExtension:(GPBExtensionDescriptor *)extension; - -/** - * Resets all of the fields of this message to their default values. - **/ -- (void)clear; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBMessage.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBMessage.m deleted file mode 100644 index 78935b19..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBMessage.m +++ /dev/null @@ -1,3262 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBMessage_PackagePrivate.h" - -#import <objc/runtime.h> -#import <objc/message.h> - -#import "GPBArray_PackagePrivate.h" -#import "GPBCodedInputStream_PackagePrivate.h" -#import "GPBCodedOutputStream_PackagePrivate.h" -#import "GPBDescriptor_PackagePrivate.h" -#import "GPBDictionary_PackagePrivate.h" -#import "GPBExtensionInternals.h" -#import "GPBExtensionRegistry.h" -#import "GPBRootObject_PackagePrivate.h" -#import "GPBUnknownFieldSet_PackagePrivate.h" -#import "GPBUtilities_PackagePrivate.h" - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -NSString *const GPBMessageErrorDomain = - GPBNSStringifySymbol(GPBMessageErrorDomain); - -NSString *const GPBErrorReasonKey = @"Reason"; - -static NSString *const kGPBDataCoderKey = @"GPBData"; - -// -// PLEASE REMEMBER: -// -// This is the base class for *all* messages generated, so any selector defined, -// *public* or *private* could end up colliding with a proto message field. So -// avoid using selectors that could match a property, use C functions to hide -// them, etc. -// - -@interface GPBMessage () { - @package - GPBUnknownFieldSet *unknownFields_; - NSMutableDictionary *extensionMap_; - NSMutableDictionary *autocreatedExtensionMap_; - - // If the object was autocreated, we remember the creator so that if we get - // mutated, we can inform the creator to make our field visible. - GPBMessage *autocreator_; - GPBFieldDescriptor *autocreatorField_; - GPBExtensionDescriptor *autocreatorExtension_; -} -@end - -static id CreateArrayForField(GPBFieldDescriptor *field, - GPBMessage *autocreator) - __attribute__((ns_returns_retained)); -static id GetOrCreateArrayIvarWithField(GPBMessage *self, - GPBFieldDescriptor *field, - GPBFileSyntax syntax); -static id GetArrayIvarWithField(GPBMessage *self, GPBFieldDescriptor *field); -static id CreateMapForField(GPBFieldDescriptor *field, - GPBMessage *autocreator) - __attribute__((ns_returns_retained)); -static id GetOrCreateMapIvarWithField(GPBMessage *self, - GPBFieldDescriptor *field, - GPBFileSyntax syntax); -static id GetMapIvarWithField(GPBMessage *self, GPBFieldDescriptor *field); -static NSMutableDictionary *CloneExtensionMap(NSDictionary *extensionMap, - NSZone *zone) - __attribute__((ns_returns_retained)); - -#ifdef DEBUG -static NSError *MessageError(NSInteger code, NSDictionary *userInfo) { - return [NSError errorWithDomain:GPBMessageErrorDomain - code:code - userInfo:userInfo]; -} -#endif - -static NSError *ErrorFromException(NSException *exception) { - NSError *error = nil; - - if ([exception.name isEqual:GPBCodedInputStreamException]) { - NSDictionary *exceptionInfo = exception.userInfo; - error = exceptionInfo[GPBCodedInputStreamUnderlyingErrorKey]; - } - - if (!error) { - NSString *reason = exception.reason; - NSDictionary *userInfo = nil; - if ([reason length]) { - userInfo = @{ GPBErrorReasonKey : reason }; - } - - error = [NSError errorWithDomain:GPBMessageErrorDomain - code:GPBMessageErrorCodeOther - userInfo:userInfo]; - } - return error; -} - -static void CheckExtension(GPBMessage *self, - GPBExtensionDescriptor *extension) { - if ([self class] != extension.containingMessageClass) { - [NSException - raise:NSInvalidArgumentException - format:@"Extension %@ used on wrong class (%@ instead of %@)", - extension.singletonName, - [self class], extension.containingMessageClass]; - } -} - -static NSMutableDictionary *CloneExtensionMap(NSDictionary *extensionMap, - NSZone *zone) { - if (extensionMap.count == 0) { - return nil; - } - NSMutableDictionary *result = [[NSMutableDictionary allocWithZone:zone] - initWithCapacity:extensionMap.count]; - - for (GPBExtensionDescriptor *extension in extensionMap) { - id value = [extensionMap objectForKey:extension]; - BOOL isMessageExtension = GPBExtensionIsMessage(extension); - - if (extension.repeated) { - if (isMessageExtension) { - NSMutableArray *list = - [[NSMutableArray alloc] initWithCapacity:[value count]]; - for (GPBMessage *listValue in value) { - GPBMessage *copiedValue = [listValue copyWithZone:zone]; - [list addObject:copiedValue]; - [copiedValue release]; - } - [result setObject:list forKey:extension]; - [list release]; - } else { - NSMutableArray *copiedValue = [value mutableCopyWithZone:zone]; - [result setObject:copiedValue forKey:extension]; - [copiedValue release]; - } - } else { - if (isMessageExtension) { - GPBMessage *copiedValue = [value copyWithZone:zone]; - [result setObject:copiedValue forKey:extension]; - [copiedValue release]; - } else { - [result setObject:value forKey:extension]; - } - } - } - - return result; -} - -static id CreateArrayForField(GPBFieldDescriptor *field, - GPBMessage *autocreator) { - id result; - GPBDataType fieldDataType = GPBGetFieldDataType(field); - switch (fieldDataType) { - case GPBDataTypeBool: - result = [[GPBBoolArray alloc] init]; - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - result = [[GPBUInt32Array alloc] init]; - break; - case GPBDataTypeInt32: - case GPBDataTypeSFixed32: - case GPBDataTypeSInt32: - result = [[GPBInt32Array alloc] init]; - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - result = [[GPBUInt64Array alloc] init]; - break; - case GPBDataTypeInt64: - case GPBDataTypeSFixed64: - case GPBDataTypeSInt64: - result = [[GPBInt64Array alloc] init]; - break; - case GPBDataTypeFloat: - result = [[GPBFloatArray alloc] init]; - break; - case GPBDataTypeDouble: - result = [[GPBDoubleArray alloc] init]; - break; - - case GPBDataTypeEnum: - result = [[GPBEnumArray alloc] - initWithValidationFunction:field.enumDescriptor.enumVerifier]; - break; - - case GPBDataTypeBytes: - case GPBDataTypeGroup: - case GPBDataTypeMessage: - case GPBDataTypeString: - if (autocreator) { - result = [[GPBAutocreatedArray alloc] init]; - } else { - result = [[NSMutableArray alloc] init]; - } - break; - } - - if (autocreator) { - if (GPBDataTypeIsObject(fieldDataType)) { - GPBAutocreatedArray *autoArray = result; - autoArray->_autocreator = autocreator; - } else { - GPBInt32Array *gpbArray = result; - gpbArray->_autocreator = autocreator; - } - } - - return result; -} - -static id CreateMapForField(GPBFieldDescriptor *field, - GPBMessage *autocreator) { - id result; - GPBDataType keyDataType = field.mapKeyDataType; - GPBDataType valueDataType = GPBGetFieldDataType(field); - switch (keyDataType) { - case GPBDataTypeBool: - switch (valueDataType) { - case GPBDataTypeBool: - result = [[GPBBoolBoolDictionary alloc] init]; - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - result = [[GPBBoolUInt32Dictionary alloc] init]; - break; - case GPBDataTypeInt32: - case GPBDataTypeSFixed32: - case GPBDataTypeSInt32: - result = [[GPBBoolInt32Dictionary alloc] init]; - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - result = [[GPBBoolUInt64Dictionary alloc] init]; - break; - case GPBDataTypeInt64: - case GPBDataTypeSFixed64: - case GPBDataTypeSInt64: - result = [[GPBBoolInt64Dictionary alloc] init]; - break; - case GPBDataTypeFloat: - result = [[GPBBoolFloatDictionary alloc] init]; - break; - case GPBDataTypeDouble: - result = [[GPBBoolDoubleDictionary alloc] init]; - break; - case GPBDataTypeEnum: - result = [[GPBBoolEnumDictionary alloc] - initWithValidationFunction:field.enumDescriptor.enumVerifier]; - break; - case GPBDataTypeBytes: - case GPBDataTypeMessage: - case GPBDataTypeString: - result = [[GPBBoolObjectDictionary alloc] init]; - break; - case GPBDataTypeGroup: - NSCAssert(NO, @"shouldn't happen"); - return nil; - } - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - switch (valueDataType) { - case GPBDataTypeBool: - result = [[GPBUInt32BoolDictionary alloc] init]; - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - result = [[GPBUInt32UInt32Dictionary alloc] init]; - break; - case GPBDataTypeInt32: - case GPBDataTypeSFixed32: - case GPBDataTypeSInt32: - result = [[GPBUInt32Int32Dictionary alloc] init]; - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - result = [[GPBUInt32UInt64Dictionary alloc] init]; - break; - case GPBDataTypeInt64: - case GPBDataTypeSFixed64: - case GPBDataTypeSInt64: - result = [[GPBUInt32Int64Dictionary alloc] init]; - break; - case GPBDataTypeFloat: - result = [[GPBUInt32FloatDictionary alloc] init]; - break; - case GPBDataTypeDouble: - result = [[GPBUInt32DoubleDictionary alloc] init]; - break; - case GPBDataTypeEnum: - result = [[GPBUInt32EnumDictionary alloc] - initWithValidationFunction:field.enumDescriptor.enumVerifier]; - break; - case GPBDataTypeBytes: - case GPBDataTypeMessage: - case GPBDataTypeString: - result = [[GPBUInt32ObjectDictionary alloc] init]; - break; - case GPBDataTypeGroup: - NSCAssert(NO, @"shouldn't happen"); - return nil; - } - break; - case GPBDataTypeInt32: - case GPBDataTypeSFixed32: - case GPBDataTypeSInt32: - switch (valueDataType) { - case GPBDataTypeBool: - result = [[GPBInt32BoolDictionary alloc] init]; - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - result = [[GPBInt32UInt32Dictionary alloc] init]; - break; - case GPBDataTypeInt32: - case GPBDataTypeSFixed32: - case GPBDataTypeSInt32: - result = [[GPBInt32Int32Dictionary alloc] init]; - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - result = [[GPBInt32UInt64Dictionary alloc] init]; - break; - case GPBDataTypeInt64: - case GPBDataTypeSFixed64: - case GPBDataTypeSInt64: - result = [[GPBInt32Int64Dictionary alloc] init]; - break; - case GPBDataTypeFloat: - result = [[GPBInt32FloatDictionary alloc] init]; - break; - case GPBDataTypeDouble: - result = [[GPBInt32DoubleDictionary alloc] init]; - break; - case GPBDataTypeEnum: - result = [[GPBInt32EnumDictionary alloc] - initWithValidationFunction:field.enumDescriptor.enumVerifier]; - break; - case GPBDataTypeBytes: - case GPBDataTypeMessage: - case GPBDataTypeString: - result = [[GPBInt32ObjectDictionary alloc] init]; - break; - case GPBDataTypeGroup: - NSCAssert(NO, @"shouldn't happen"); - return nil; - } - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - switch (valueDataType) { - case GPBDataTypeBool: - result = [[GPBUInt64BoolDictionary alloc] init]; - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - result = [[GPBUInt64UInt32Dictionary alloc] init]; - break; - case GPBDataTypeInt32: - case GPBDataTypeSFixed32: - case GPBDataTypeSInt32: - result = [[GPBUInt64Int32Dictionary alloc] init]; - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - result = [[GPBUInt64UInt64Dictionary alloc] init]; - break; - case GPBDataTypeInt64: - case GPBDataTypeSFixed64: - case GPBDataTypeSInt64: - result = [[GPBUInt64Int64Dictionary alloc] init]; - break; - case GPBDataTypeFloat: - result = [[GPBUInt64FloatDictionary alloc] init]; - break; - case GPBDataTypeDouble: - result = [[GPBUInt64DoubleDictionary alloc] init]; - break; - case GPBDataTypeEnum: - result = [[GPBUInt64EnumDictionary alloc] - initWithValidationFunction:field.enumDescriptor.enumVerifier]; - break; - case GPBDataTypeBytes: - case GPBDataTypeMessage: - case GPBDataTypeString: - result = [[GPBUInt64ObjectDictionary alloc] init]; - break; - case GPBDataTypeGroup: - NSCAssert(NO, @"shouldn't happen"); - return nil; - } - break; - case GPBDataTypeInt64: - case GPBDataTypeSFixed64: - case GPBDataTypeSInt64: - switch (valueDataType) { - case GPBDataTypeBool: - result = [[GPBInt64BoolDictionary alloc] init]; - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - result = [[GPBInt64UInt32Dictionary alloc] init]; - break; - case GPBDataTypeInt32: - case GPBDataTypeSFixed32: - case GPBDataTypeSInt32: - result = [[GPBInt64Int32Dictionary alloc] init]; - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - result = [[GPBInt64UInt64Dictionary alloc] init]; - break; - case GPBDataTypeInt64: - case GPBDataTypeSFixed64: - case GPBDataTypeSInt64: - result = [[GPBInt64Int64Dictionary alloc] init]; - break; - case GPBDataTypeFloat: - result = [[GPBInt64FloatDictionary alloc] init]; - break; - case GPBDataTypeDouble: - result = [[GPBInt64DoubleDictionary alloc] init]; - break; - case GPBDataTypeEnum: - result = [[GPBInt64EnumDictionary alloc] - initWithValidationFunction:field.enumDescriptor.enumVerifier]; - break; - case GPBDataTypeBytes: - case GPBDataTypeMessage: - case GPBDataTypeString: - result = [[GPBInt64ObjectDictionary alloc] init]; - break; - case GPBDataTypeGroup: - NSCAssert(NO, @"shouldn't happen"); - return nil; - } - break; - case GPBDataTypeString: - switch (valueDataType) { - case GPBDataTypeBool: - result = [[GPBStringBoolDictionary alloc] init]; - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - result = [[GPBStringUInt32Dictionary alloc] init]; - break; - case GPBDataTypeInt32: - case GPBDataTypeSFixed32: - case GPBDataTypeSInt32: - result = [[GPBStringInt32Dictionary alloc] init]; - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - result = [[GPBStringUInt64Dictionary alloc] init]; - break; - case GPBDataTypeInt64: - case GPBDataTypeSFixed64: - case GPBDataTypeSInt64: - result = [[GPBStringInt64Dictionary alloc] init]; - break; - case GPBDataTypeFloat: - result = [[GPBStringFloatDictionary alloc] init]; - break; - case GPBDataTypeDouble: - result = [[GPBStringDoubleDictionary alloc] init]; - break; - case GPBDataTypeEnum: - result = [[GPBStringEnumDictionary alloc] - initWithValidationFunction:field.enumDescriptor.enumVerifier]; - break; - case GPBDataTypeBytes: - case GPBDataTypeMessage: - case GPBDataTypeString: - if (autocreator) { - result = [[GPBAutocreatedDictionary alloc] init]; - } else { - result = [[NSMutableDictionary alloc] init]; - } - break; - case GPBDataTypeGroup: - NSCAssert(NO, @"shouldn't happen"); - return nil; - } - break; - - case GPBDataTypeFloat: - case GPBDataTypeDouble: - case GPBDataTypeEnum: - case GPBDataTypeBytes: - case GPBDataTypeGroup: - case GPBDataTypeMessage: - NSCAssert(NO, @"shouldn't happen"); - return nil; - } - - if (autocreator) { - if ((keyDataType == GPBDataTypeString) && - GPBDataTypeIsObject(valueDataType)) { - GPBAutocreatedDictionary *autoDict = result; - autoDict->_autocreator = autocreator; - } else { - GPBInt32Int32Dictionary *gpbDict = result; - gpbDict->_autocreator = autocreator; - } - } - - return result; -} - -#if !defined(__clang_analyzer__) -// These functions are blocked from the analyzer because the analyzer sees the -// GPBSetRetainedObjectIvarWithFieldInternal() call as consuming the array/map, -// so use of the array/map after the call returns is flagged as a use after -// free. -// But GPBSetRetainedObjectIvarWithFieldInternal() is "consuming" the retain -// count be holding onto the object (it is transfering it), the object is -// still valid after returning from the call. The other way to avoid this -// would be to add a -retain/-autorelease, but that would force every -// repeated/map field parsed into the autorelease pool which is both a memory -// and performance hit. - -static id GetOrCreateArrayIvarWithField(GPBMessage *self, - GPBFieldDescriptor *field, - GPBFileSyntax syntax) { - id array = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (!array) { - // No lock needed, this is called from places expecting to mutate - // so no threading protection is needed. - array = CreateArrayForField(field, nil); - GPBSetRetainedObjectIvarWithFieldInternal(self, field, array, syntax); - } - return array; -} - -// This is like GPBGetObjectIvarWithField(), but for arrays, it should -// only be used to wire the method into the class. -static id GetArrayIvarWithField(GPBMessage *self, GPBFieldDescriptor *field) { - id array = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (!array) { - // Check again after getting the lock. - GPBPrepareReadOnlySemaphore(self); - dispatch_semaphore_wait(self->readOnlySemaphore_, DISPATCH_TIME_FOREVER); - array = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (!array) { - array = CreateArrayForField(field, self); - GPBSetAutocreatedRetainedObjectIvarWithField(self, field, array); - } - dispatch_semaphore_signal(self->readOnlySemaphore_); - } - return array; -} - -static id GetOrCreateMapIvarWithField(GPBMessage *self, - GPBFieldDescriptor *field, - GPBFileSyntax syntax) { - id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (!dict) { - // No lock needed, this is called from places expecting to mutate - // so no threading protection is needed. - dict = CreateMapForField(field, nil); - GPBSetRetainedObjectIvarWithFieldInternal(self, field, dict, syntax); - } - return dict; -} - -// This is like GPBGetObjectIvarWithField(), but for maps, it should -// only be used to wire the method into the class. -static id GetMapIvarWithField(GPBMessage *self, GPBFieldDescriptor *field) { - id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (!dict) { - // Check again after getting the lock. - GPBPrepareReadOnlySemaphore(self); - dispatch_semaphore_wait(self->readOnlySemaphore_, DISPATCH_TIME_FOREVER); - dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (!dict) { - dict = CreateMapForField(field, self); - GPBSetAutocreatedRetainedObjectIvarWithField(self, field, dict); - } - dispatch_semaphore_signal(self->readOnlySemaphore_); - } - return dict; -} - -#endif // !defined(__clang_analyzer__) - -GPBMessage *GPBCreateMessageWithAutocreator(Class msgClass, - GPBMessage *autocreator, - GPBFieldDescriptor *field) { - GPBMessage *message = [[msgClass alloc] init]; - message->autocreator_ = autocreator; - message->autocreatorField_ = [field retain]; - return message; -} - -static GPBMessage *CreateMessageWithAutocreatorForExtension( - Class msgClass, GPBMessage *autocreator, GPBExtensionDescriptor *extension) - __attribute__((ns_returns_retained)); - -static GPBMessage *CreateMessageWithAutocreatorForExtension( - Class msgClass, GPBMessage *autocreator, - GPBExtensionDescriptor *extension) { - GPBMessage *message = [[msgClass alloc] init]; - message->autocreator_ = autocreator; - message->autocreatorExtension_ = [extension retain]; - return message; -} - -BOOL GPBWasMessageAutocreatedBy(GPBMessage *message, GPBMessage *parent) { - return (message->autocreator_ == parent); -} - -void GPBBecomeVisibleToAutocreator(GPBMessage *self) { - // Message objects that are implicitly created by accessing a message field - // are initially not visible via the hasX selector. This method makes them - // visible. - if (self->autocreator_) { - // This will recursively make all parent messages visible until it reaches a - // super-creator that's visible. - if (self->autocreatorField_) { - GPBFileSyntax syntax = [self->autocreator_ descriptor].file.syntax; - GPBSetObjectIvarWithFieldInternal(self->autocreator_, - self->autocreatorField_, self, syntax); - } else { - [self->autocreator_ setExtension:self->autocreatorExtension_ value:self]; - } - } -} - -void GPBAutocreatedArrayModified(GPBMessage *self, id array) { - // When one of our autocreated arrays adds elements, make it visible. - GPBDescriptor *descriptor = [[self class] descriptor]; - for (GPBFieldDescriptor *field in descriptor->fields_) { - if (field.fieldType == GPBFieldTypeRepeated) { - id curArray = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (curArray == array) { - if (GPBFieldDataTypeIsObject(field)) { - GPBAutocreatedArray *autoArray = array; - autoArray->_autocreator = nil; - } else { - GPBInt32Array *gpbArray = array; - gpbArray->_autocreator = nil; - } - GPBBecomeVisibleToAutocreator(self); - return; - } - } - } - NSCAssert(NO, @"Unknown autocreated %@ for %@.", [array class], self); -} - -void GPBAutocreatedDictionaryModified(GPBMessage *self, id dictionary) { - // When one of our autocreated dicts adds elements, make it visible. - GPBDescriptor *descriptor = [[self class] descriptor]; - for (GPBFieldDescriptor *field in descriptor->fields_) { - if (field.fieldType == GPBFieldTypeMap) { - id curDict = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (curDict == dictionary) { - if ((field.mapKeyDataType == GPBDataTypeString) && - GPBFieldDataTypeIsObject(field)) { - GPBAutocreatedDictionary *autoDict = dictionary; - autoDict->_autocreator = nil; - } else { - GPBInt32Int32Dictionary *gpbDict = dictionary; - gpbDict->_autocreator = nil; - } - GPBBecomeVisibleToAutocreator(self); - return; - } - } - } - NSCAssert(NO, @"Unknown autocreated %@ for %@.", [dictionary class], self); -} - -void GPBClearMessageAutocreator(GPBMessage *self) { - if ((self == nil) || !self->autocreator_) { - return; - } - -#if defined(DEBUG) && DEBUG && !defined(NS_BLOCK_ASSERTIONS) - // Either the autocreator must have its "has" flag set to YES, or it must be - // NO and not equal to ourselves. - BOOL autocreatorHas = - (self->autocreatorField_ - ? GPBGetHasIvarField(self->autocreator_, self->autocreatorField_) - : [self->autocreator_ hasExtension:self->autocreatorExtension_]); - GPBMessage *autocreatorFieldValue = - (self->autocreatorField_ - ? GPBGetObjectIvarWithFieldNoAutocreate(self->autocreator_, - self->autocreatorField_) - : [self->autocreator_->autocreatedExtensionMap_ - objectForKey:self->autocreatorExtension_]); - NSCAssert(autocreatorHas || autocreatorFieldValue != self, - @"Cannot clear autocreator because it still refers to self, self: %@.", - self); - -#endif // DEBUG && !defined(NS_BLOCK_ASSERTIONS) - - self->autocreator_ = nil; - [self->autocreatorField_ release]; - self->autocreatorField_ = nil; - [self->autocreatorExtension_ release]; - self->autocreatorExtension_ = nil; -} - -// Call this before using the readOnlySemaphore_. This ensures it is created only once. -void GPBPrepareReadOnlySemaphore(GPBMessage *self) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - - // Create the semaphore on demand (rather than init) as developers might not cause them - // to be needed, and the heap usage can add up. The atomic swap is used to avoid needing - // another lock around creating it. - if (self->readOnlySemaphore_ == nil) { - dispatch_semaphore_t worker = dispatch_semaphore_create(1); - if (!OSAtomicCompareAndSwapPtrBarrier(NULL, worker, (void * volatile *)&(self->readOnlySemaphore_))) { - dispatch_release(worker); - } - } - -#pragma clang diagnostic pop -} - -static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) { - if (!self->unknownFields_) { - self->unknownFields_ = [[GPBUnknownFieldSet alloc] init]; - GPBBecomeVisibleToAutocreator(self); - } - return self->unknownFields_; -} - -@implementation GPBMessage - -+ (void)initialize { - Class pbMessageClass = [GPBMessage class]; - if ([self class] == pbMessageClass) { - // This is here to start up the "base" class descriptor. - [self descriptor]; - // Message shares extension method resolving with GPBRootObject so insure - // it is started up at the same time. - (void)[GPBRootObject class]; - } else if ([self superclass] == pbMessageClass) { - // This is here to start up all the "message" subclasses. Just needs to be - // done for the messages, not any of the subclasses. - // This must be done in initialize to enforce thread safety of start up of - // the protocol buffer library. - // Note: The generated code for -descriptor calls - // +[GPBDescriptor allocDescriptorForClass:...], passing the GPBRootObject - // subclass for the file. That call chain is what ensures that *Root class - // is started up to support extension resolution off the message class - // (+resolveClassMethod: below) in a thread safe manner. - [self descriptor]; - } -} - -+ (instancetype)allocWithZone:(NSZone *)zone { - // Override alloc to allocate our classes with the additional storage - // required for the instance variables. - GPBDescriptor *descriptor = [self descriptor]; - return NSAllocateObject(self, descriptor->storageSize_, zone); -} - -+ (instancetype)alloc { - return [self allocWithZone:nil]; -} - -+ (GPBDescriptor *)descriptor { - // This is thread safe because it is called from +initialize. - static GPBDescriptor *descriptor = NULL; - static GPBFileDescriptor *fileDescriptor = NULL; - if (!descriptor) { - // Use a dummy file that marks it as proto2 syntax so when used generically - // it supports unknowns/etc. - fileDescriptor = - [[GPBFileDescriptor alloc] initWithPackage:@"internal" - syntax:GPBFileSyntaxProto2]; - - descriptor = [GPBDescriptor allocDescriptorForClass:[GPBMessage class] - rootClass:Nil - file:fileDescriptor - fields:NULL - fieldCount:0 - storageSize:0 - flags:0]; - } - return descriptor; -} - -+ (instancetype)message { - return [[[self alloc] init] autorelease]; -} - -- (instancetype)init { - if ((self = [super init])) { - messageStorage_ = (GPBMessage_StoragePtr)( - ((uint8_t *)self) + class_getInstanceSize([self class])); - } - - return self; -} - -- (instancetype)initWithData:(NSData *)data error:(NSError **)errorPtr { - return [self initWithData:data extensionRegistry:nil error:errorPtr]; -} - -- (instancetype)initWithData:(NSData *)data - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry - error:(NSError **)errorPtr { - if ((self = [self init])) { - @try { - [self mergeFromData:data extensionRegistry:extensionRegistry]; - if (errorPtr) { - *errorPtr = nil; - } - } - @catch (NSException *exception) { - [self release]; - self = nil; - if (errorPtr) { - *errorPtr = ErrorFromException(exception); - } - } -#ifdef DEBUG - if (self && !self.initialized) { - [self release]; - self = nil; - if (errorPtr) { - *errorPtr = MessageError(GPBMessageErrorCodeMissingRequiredField, nil); - } - } -#endif - } - return self; -} - -- (instancetype)initWithCodedInputStream:(GPBCodedInputStream *)input - extensionRegistry: - (GPBExtensionRegistry *)extensionRegistry - error:(NSError **)errorPtr { - if ((self = [self init])) { - @try { - [self mergeFromCodedInputStream:input extensionRegistry:extensionRegistry]; - if (errorPtr) { - *errorPtr = nil; - } - } - @catch (NSException *exception) { - [self release]; - self = nil; - if (errorPtr) { - *errorPtr = ErrorFromException(exception); - } - } -#ifdef DEBUG - if (self && !self.initialized) { - [self release]; - self = nil; - if (errorPtr) { - *errorPtr = MessageError(GPBMessageErrorCodeMissingRequiredField, nil); - } - } -#endif - } - return self; -} - -- (void)dealloc { - [self internalClear:NO]; - NSCAssert(!autocreator_, @"Autocreator was not cleared before dealloc."); - if (readOnlySemaphore_) { - dispatch_release(readOnlySemaphore_); - } - [super dealloc]; -} - -- (void)copyFieldsInto:(GPBMessage *)message - zone:(NSZone *)zone - descriptor:(GPBDescriptor *)descriptor { - // Copy all the storage... - memcpy(message->messageStorage_, messageStorage_, descriptor->storageSize_); - - GPBFileSyntax syntax = descriptor.file.syntax; - - // Loop over the fields doing fixup... - for (GPBFieldDescriptor *field in descriptor->fields_) { - if (GPBFieldIsMapOrArray(field)) { - id value = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (value) { - // We need to copy the array/map, but the catch is for message fields, - // we also need to ensure all the messages as those need copying also. - id newValue; - if (GPBFieldDataTypeIsMessage(field)) { - if (field.fieldType == GPBFieldTypeRepeated) { - NSArray *existingArray = (NSArray *)value; - NSMutableArray *newArray = - [[NSMutableArray alloc] initWithCapacity:existingArray.count]; - newValue = newArray; - for (GPBMessage *msg in existingArray) { - GPBMessage *copiedMsg = [msg copyWithZone:zone]; - [newArray addObject:copiedMsg]; - [copiedMsg release]; - } - } else { - if (field.mapKeyDataType == GPBDataTypeString) { - // Map is an NSDictionary. - NSDictionary *existingDict = value; - NSMutableDictionary *newDict = [[NSMutableDictionary alloc] - initWithCapacity:existingDict.count]; - newValue = newDict; - [existingDict enumerateKeysAndObjectsUsingBlock:^(NSString *key, - GPBMessage *msg, - BOOL *stop) { -#pragma unused(stop) - GPBMessage *copiedMsg = [msg copyWithZone:zone]; - [newDict setObject:copiedMsg forKey:key]; - [copiedMsg release]; - }]; - } else { - // Is one of the GPB*ObjectDictionary classes. Type doesn't - // matter, just need one to invoke the selector. - GPBInt32ObjectDictionary *existingDict = value; - newValue = [existingDict deepCopyWithZone:zone]; - } - } - } else { - // Not messages (but is a map/array)... - if (field.fieldType == GPBFieldTypeRepeated) { - if (GPBFieldDataTypeIsObject(field)) { - // NSArray - newValue = [value mutableCopyWithZone:zone]; - } else { - // GPB*Array - newValue = [value copyWithZone:zone]; - } - } else { - if (field.mapKeyDataType == GPBDataTypeString) { - // NSDictionary - newValue = [value mutableCopyWithZone:zone]; - } else { - // Is one of the GPB*Dictionary classes. Type doesn't matter, - // just need one to invoke the selector. - GPBInt32Int32Dictionary *existingDict = value; - newValue = [existingDict copyWithZone:zone]; - } - } - } - // We retain here because the memcpy picked up the pointer value and - // the next call to SetRetainedObject... will release the current value. - [value retain]; - GPBSetRetainedObjectIvarWithFieldInternal(message, field, newValue, - syntax); - } - } else if (GPBFieldDataTypeIsMessage(field)) { - // For object types, if we have a value, copy it. If we don't, - // zero it to remove the pointer to something that was autocreated - // (and the ptr just got memcpyed). - if (GPBGetHasIvarField(self, field)) { - GPBMessage *value = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - GPBMessage *newValue = [value copyWithZone:zone]; - // We retain here because the memcpy picked up the pointer value and - // the next call to SetRetainedObject... will release the current value. - [value retain]; - GPBSetRetainedObjectIvarWithFieldInternal(message, field, newValue, - syntax); - } else { - uint8_t *storage = (uint8_t *)message->messageStorage_; - id *typePtr = (id *)&storage[field->description_->offset]; - *typePtr = NULL; - } - } else if (GPBFieldDataTypeIsObject(field) && - GPBGetHasIvarField(self, field)) { - // A set string/data value (message picked off above), copy it. - id value = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - id newValue = [value copyWithZone:zone]; - // We retain here because the memcpy picked up the pointer value and - // the next call to SetRetainedObject... will release the current value. - [value retain]; - GPBSetRetainedObjectIvarWithFieldInternal(message, field, newValue, - syntax); - } else { - // memcpy took care of the rest of the primitive fields if they were set. - } - } // for (field in descriptor->fields_) -} - -- (id)copyWithZone:(NSZone *)zone { - GPBDescriptor *descriptor = [self descriptor]; - GPBMessage *result = [[descriptor.messageClass allocWithZone:zone] init]; - - [self copyFieldsInto:result zone:zone descriptor:descriptor]; - // Make immutable copies of the extra bits. - result->unknownFields_ = [unknownFields_ copyWithZone:zone]; - result->extensionMap_ = CloneExtensionMap(extensionMap_, zone); - return result; -} - -- (void)clear { - [self internalClear:YES]; -} - -- (void)internalClear:(BOOL)zeroStorage { - GPBDescriptor *descriptor = [self descriptor]; - for (GPBFieldDescriptor *field in descriptor->fields_) { - if (GPBFieldIsMapOrArray(field)) { - id arrayOrMap = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (arrayOrMap) { - if (field.fieldType == GPBFieldTypeRepeated) { - if (GPBFieldDataTypeIsObject(field)) { - if ([arrayOrMap isKindOfClass:[GPBAutocreatedArray class]]) { - GPBAutocreatedArray *autoArray = arrayOrMap; - if (autoArray->_autocreator == self) { - autoArray->_autocreator = nil; - } - } - } else { - // Type doesn't matter, it is a GPB*Array. - GPBInt32Array *gpbArray = arrayOrMap; - if (gpbArray->_autocreator == self) { - gpbArray->_autocreator = nil; - } - } - } else { - if ((field.mapKeyDataType == GPBDataTypeString) && - GPBFieldDataTypeIsObject(field)) { - if ([arrayOrMap isKindOfClass:[GPBAutocreatedDictionary class]]) { - GPBAutocreatedDictionary *autoDict = arrayOrMap; - if (autoDict->_autocreator == self) { - autoDict->_autocreator = nil; - } - } - } else { - // Type doesn't matter, it is a GPB*Dictionary. - GPBInt32Int32Dictionary *gpbDict = arrayOrMap; - if (gpbDict->_autocreator == self) { - gpbDict->_autocreator = nil; - } - } - } - [arrayOrMap release]; - } - } else if (GPBFieldDataTypeIsMessage(field)) { - GPBClearAutocreatedMessageIvarWithField(self, field); - GPBMessage *value = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [value release]; - } else if (GPBFieldDataTypeIsObject(field) && - GPBGetHasIvarField(self, field)) { - id value = GPBGetObjectIvarWithField(self, field); - [value release]; - } - } - - // GPBClearMessageAutocreator() expects that its caller has already been - // removed from autocreatedExtensionMap_ so we set to nil first. - NSArray *autocreatedValues = [autocreatedExtensionMap_ allValues]; - [autocreatedExtensionMap_ release]; - autocreatedExtensionMap_ = nil; - - // Since we're clearing all of our extensions, make sure that we clear the - // autocreator on any that we've created so they no longer refer to us. - for (GPBMessage *value in autocreatedValues) { - NSCAssert(GPBWasMessageAutocreatedBy(value, self), - @"Autocreated extension does not refer back to self."); - GPBClearMessageAutocreator(value); - } - - [extensionMap_ release]; - extensionMap_ = nil; - [unknownFields_ release]; - unknownFields_ = nil; - - // Note that clearing does not affect autocreator_. If we are being cleared - // because of a dealloc, then autocreator_ should be nil anyway. If we are - // being cleared because someone explicitly clears us, we don't want to - // sever our relationship with our autocreator. - - if (zeroStorage) { - memset(messageStorage_, 0, descriptor->storageSize_); - } -} - -- (BOOL)isInitialized { - GPBDescriptor *descriptor = [self descriptor]; - for (GPBFieldDescriptor *field in descriptor->fields_) { - if (field.isRequired) { - if (!GPBGetHasIvarField(self, field)) { - return NO; - } - } - if (GPBFieldDataTypeIsMessage(field)) { - GPBFieldType fieldType = field.fieldType; - if (fieldType == GPBFieldTypeSingle) { - if (field.isRequired) { - GPBMessage *message = GPBGetMessageMessageField(self, field); - if (!message.initialized) { - return NO; - } - } else { - NSAssert(field.isOptional, - @"%@: Single message field %@ not required or optional?", - [self class], field.name); - if (GPBGetHasIvarField(self, field)) { - GPBMessage *message = GPBGetMessageMessageField(self, field); - if (!message.initialized) { - return NO; - } - } - } - } else if (fieldType == GPBFieldTypeRepeated) { - NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - for (GPBMessage *message in array) { - if (!message.initialized) { - return NO; - } - } - } else { // fieldType == GPBFieldTypeMap - if (field.mapKeyDataType == GPBDataTypeString) { - NSDictionary *map = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (map && !GPBDictionaryIsInitializedInternalHelper(map, field)) { - return NO; - } - } else { - // Real type is GPB*ObjectDictionary, exact type doesn't matter. - GPBInt32ObjectDictionary *map = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (map && ![map isInitialized]) { - return NO; - } - } - } - } - } - - __block BOOL result = YES; - [extensionMap_ - enumerateKeysAndObjectsUsingBlock:^(GPBExtensionDescriptor *extension, - id obj, - BOOL *stop) { - if (GPBExtensionIsMessage(extension)) { - if (extension.isRepeated) { - for (GPBMessage *msg in obj) { - if (!msg.initialized) { - result = NO; - *stop = YES; - break; - } - } - } else { - GPBMessage *asMsg = obj; - if (!asMsg.initialized) { - result = NO; - *stop = YES; - } - } - } - }]; - return result; -} - -- (GPBDescriptor *)descriptor { - return [[self class] descriptor]; -} - -- (NSData *)data { -#ifdef DEBUG - if (!self.initialized) { - return nil; - } -#endif - NSMutableData *data = [NSMutableData dataWithLength:[self serializedSize]]; - GPBCodedOutputStream *stream = - [[GPBCodedOutputStream alloc] initWithData:data]; - @try { - [self writeToCodedOutputStream:stream]; - } - @catch (NSException *exception) { - // This really shouldn't happen. The only way writeToCodedOutputStream: - // could throw is if something in the library has a bug and the - // serializedSize was wrong. -#ifdef DEBUG - NSLog(@"%@: Internal exception while building message data: %@", - [self class], exception); -#endif - data = nil; - } - [stream release]; - return data; -} - -- (NSData *)delimitedData { - size_t serializedSize = [self serializedSize]; - size_t varintSize = GPBComputeRawVarint32SizeForInteger(serializedSize); - NSMutableData *data = - [NSMutableData dataWithLength:(serializedSize + varintSize)]; - GPBCodedOutputStream *stream = - [[GPBCodedOutputStream alloc] initWithData:data]; - @try { - [self writeDelimitedToCodedOutputStream:stream]; - } - @catch (NSException *exception) { - // This really shouldn't happen. The only way writeToCodedOutputStream: - // could throw is if something in the library has a bug and the - // serializedSize was wrong. -#ifdef DEBUG - NSLog(@"%@: Internal exception while building message delimitedData: %@", - [self class], exception); -#endif - // If it happens, truncate. - data.length = 0; - } - [stream release]; - return data; -} - -- (void)writeToOutputStream:(NSOutputStream *)output { - GPBCodedOutputStream *stream = - [[GPBCodedOutputStream alloc] initWithOutputStream:output]; - [self writeToCodedOutputStream:stream]; - [stream release]; -} - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)output { - GPBDescriptor *descriptor = [self descriptor]; - NSArray *fieldsArray = descriptor->fields_; - NSUInteger fieldCount = fieldsArray.count; - const GPBExtensionRange *extensionRanges = descriptor.extensionRanges; - NSUInteger extensionRangesCount = descriptor.extensionRangesCount; - for (NSUInteger i = 0, j = 0; i < fieldCount || j < extensionRangesCount;) { - if (i == fieldCount) { - [self writeExtensionsToCodedOutputStream:output - range:extensionRanges[j++]]; - } else if (j == extensionRangesCount || - GPBFieldNumber(fieldsArray[i]) < extensionRanges[j].start) { - [self writeField:fieldsArray[i++] toCodedOutputStream:output]; - } else { - [self writeExtensionsToCodedOutputStream:output - range:extensionRanges[j++]]; - } - } - if (descriptor.isWireFormat) { - [unknownFields_ writeAsMessageSetTo:output]; - } else { - [unknownFields_ writeToCodedOutputStream:output]; - } -} - -- (void)writeDelimitedToOutputStream:(NSOutputStream *)output { - GPBCodedOutputStream *codedOutput = - [[GPBCodedOutputStream alloc] initWithOutputStream:output]; - [self writeDelimitedToCodedOutputStream:codedOutput]; - [codedOutput release]; -} - -- (void)writeDelimitedToCodedOutputStream:(GPBCodedOutputStream *)output { - [output writeRawVarintSizeTAs32:[self serializedSize]]; - [self writeToCodedOutputStream:output]; -} - -- (void)writeField:(GPBFieldDescriptor *)field - toCodedOutputStream:(GPBCodedOutputStream *)output { - GPBFieldType fieldType = field.fieldType; - if (fieldType == GPBFieldTypeSingle) { - BOOL has = GPBGetHasIvarField(self, field); - if (!has) { - return; - } - } - uint32_t fieldNumber = GPBFieldNumber(field); - -//%PDDM-DEFINE FIELD_CASE(TYPE, REAL_TYPE) -//%FIELD_CASE_FULL(TYPE, REAL_TYPE, REAL_TYPE) -//%PDDM-DEFINE FIELD_CASE_FULL(TYPE, REAL_TYPE, ARRAY_TYPE) -//% case GPBDataType##TYPE: -//% if (fieldType == GPBFieldTypeRepeated) { -//% uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; -//% GPB##ARRAY_TYPE##Array *array = -//% GPBGetObjectIvarWithFieldNoAutocreate(self, field); -//% [output write##TYPE##Array:fieldNumber values:array tag:tag]; -//% } else if (fieldType == GPBFieldTypeSingle) { -//% [output write##TYPE:fieldNumber -//% TYPE$S value:GPBGetMessage##REAL_TYPE##Field(self, field)]; -//% } else { // fieldType == GPBFieldTypeMap -//% // Exact type here doesn't matter. -//% GPBInt32##ARRAY_TYPE##Dictionary *dict = -//% GPBGetObjectIvarWithFieldNoAutocreate(self, field); -//% [dict writeToCodedOutputStream:output asField:field]; -//% } -//% break; -//% -//%PDDM-DEFINE FIELD_CASE2(TYPE) -//% case GPBDataType##TYPE: -//% if (fieldType == GPBFieldTypeRepeated) { -//% NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field); -//% [output write##TYPE##Array:fieldNumber values:array]; -//% } else if (fieldType == GPBFieldTypeSingle) { -//% // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check -//% // again. -//% [output write##TYPE:fieldNumber -//% TYPE$S value:GPBGetObjectIvarWithFieldNoAutocreate(self, field)]; -//% } else { // fieldType == GPBFieldTypeMap -//% // Exact type here doesn't matter. -//% id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field); -//% GPBDataType mapKeyDataType = field.mapKeyDataType; -//% if (mapKeyDataType == GPBDataTypeString) { -//% GPBDictionaryWriteToStreamInternalHelper(output, dict, field); -//% } else { -//% [dict writeToCodedOutputStream:output asField:field]; -//% } -//% } -//% break; -//% - - switch (GPBGetFieldDataType(field)) { - -//%PDDM-EXPAND FIELD_CASE(Bool, Bool) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeBool: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBBoolArray *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeBoolArray:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeBool:fieldNumber - value:GPBGetMessageBoolField(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32BoolDictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(Fixed32, UInt32) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeFixed32: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBUInt32Array *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeFixed32Array:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeFixed32:fieldNumber - value:GPBGetMessageUInt32Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32UInt32Dictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(SFixed32, Int32) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeSFixed32: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBInt32Array *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeSFixed32Array:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeSFixed32:fieldNumber - value:GPBGetMessageInt32Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32Int32Dictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(Float, Float) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeFloat: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBFloatArray *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeFloatArray:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeFloat:fieldNumber - value:GPBGetMessageFloatField(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32FloatDictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(Fixed64, UInt64) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeFixed64: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBUInt64Array *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeFixed64Array:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeFixed64:fieldNumber - value:GPBGetMessageUInt64Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32UInt64Dictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(SFixed64, Int64) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeSFixed64: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBInt64Array *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeSFixed64Array:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeSFixed64:fieldNumber - value:GPBGetMessageInt64Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32Int64Dictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(Double, Double) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeDouble: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBDoubleArray *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeDoubleArray:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeDouble:fieldNumber - value:GPBGetMessageDoubleField(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32DoubleDictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(Int32, Int32) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeInt32: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBInt32Array *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeInt32Array:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeInt32:fieldNumber - value:GPBGetMessageInt32Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32Int32Dictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(Int64, Int64) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeInt64: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBInt64Array *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeInt64Array:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeInt64:fieldNumber - value:GPBGetMessageInt64Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32Int64Dictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(SInt32, Int32) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeSInt32: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBInt32Array *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeSInt32Array:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeSInt32:fieldNumber - value:GPBGetMessageInt32Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32Int32Dictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(SInt64, Int64) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeSInt64: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBInt64Array *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeSInt64Array:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeSInt64:fieldNumber - value:GPBGetMessageInt64Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32Int64Dictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(UInt32, UInt32) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeUInt32: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBUInt32Array *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeUInt32Array:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeUInt32:fieldNumber - value:GPBGetMessageUInt32Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32UInt32Dictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE(UInt64, UInt64) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeUInt64: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBUInt64Array *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeUInt64Array:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeUInt64:fieldNumber - value:GPBGetMessageUInt64Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32UInt64Dictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE_FULL(Enum, Int32, Enum) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeEnum: - if (fieldType == GPBFieldTypeRepeated) { - uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0; - GPBEnumArray *array = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeEnumArray:fieldNumber values:array tag:tag]; - } else if (fieldType == GPBFieldTypeSingle) { - [output writeEnum:fieldNumber - value:GPBGetMessageInt32Field(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - GPBInt32EnumDictionary *dict = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [dict writeToCodedOutputStream:output asField:field]; - } - break; - -//%PDDM-EXPAND FIELD_CASE2(Bytes) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeBytes: - if (fieldType == GPBFieldTypeRepeated) { - NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeBytesArray:fieldNumber values:array]; - } else if (fieldType == GPBFieldTypeSingle) { - // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check - // again. - [output writeBytes:fieldNumber - value:GPBGetObjectIvarWithFieldNoAutocreate(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - GPBDataType mapKeyDataType = field.mapKeyDataType; - if (mapKeyDataType == GPBDataTypeString) { - GPBDictionaryWriteToStreamInternalHelper(output, dict, field); - } else { - [dict writeToCodedOutputStream:output asField:field]; - } - } - break; - -//%PDDM-EXPAND FIELD_CASE2(String) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeString: - if (fieldType == GPBFieldTypeRepeated) { - NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeStringArray:fieldNumber values:array]; - } else if (fieldType == GPBFieldTypeSingle) { - // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check - // again. - [output writeString:fieldNumber - value:GPBGetObjectIvarWithFieldNoAutocreate(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - GPBDataType mapKeyDataType = field.mapKeyDataType; - if (mapKeyDataType == GPBDataTypeString) { - GPBDictionaryWriteToStreamInternalHelper(output, dict, field); - } else { - [dict writeToCodedOutputStream:output asField:field]; - } - } - break; - -//%PDDM-EXPAND FIELD_CASE2(Message) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeMessage: - if (fieldType == GPBFieldTypeRepeated) { - NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeMessageArray:fieldNumber values:array]; - } else if (fieldType == GPBFieldTypeSingle) { - // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check - // again. - [output writeMessage:fieldNumber - value:GPBGetObjectIvarWithFieldNoAutocreate(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - GPBDataType mapKeyDataType = field.mapKeyDataType; - if (mapKeyDataType == GPBDataTypeString) { - GPBDictionaryWriteToStreamInternalHelper(output, dict, field); - } else { - [dict writeToCodedOutputStream:output asField:field]; - } - } - break; - -//%PDDM-EXPAND FIELD_CASE2(Group) -// This block of code is generated, do not edit it directly. - - case GPBDataTypeGroup: - if (fieldType == GPBFieldTypeRepeated) { - NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [output writeGroupArray:fieldNumber values:array]; - } else if (fieldType == GPBFieldTypeSingle) { - // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check - // again. - [output writeGroup:fieldNumber - value:GPBGetObjectIvarWithFieldNoAutocreate(self, field)]; - } else { // fieldType == GPBFieldTypeMap - // Exact type here doesn't matter. - id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - GPBDataType mapKeyDataType = field.mapKeyDataType; - if (mapKeyDataType == GPBDataTypeString) { - GPBDictionaryWriteToStreamInternalHelper(output, dict, field); - } else { - [dict writeToCodedOutputStream:output asField:field]; - } - } - break; - -//%PDDM-EXPAND-END (18 expansions) - } -} - -#pragma mark - Extensions - -- (id)getExtension:(GPBExtensionDescriptor *)extension { - CheckExtension(self, extension); - id value = [extensionMap_ objectForKey:extension]; - if (value != nil) { - return value; - } - - // No default for repeated. - if (extension.isRepeated) { - return nil; - } - // Non messages get their default. - if (!GPBExtensionIsMessage(extension)) { - return extension.defaultValue; - } - - // Check for an autocreated value. - GPBPrepareReadOnlySemaphore(self); - dispatch_semaphore_wait(readOnlySemaphore_, DISPATCH_TIME_FOREVER); - value = [autocreatedExtensionMap_ objectForKey:extension]; - if (!value) { - // Auto create the message extensions to match normal fields. - value = CreateMessageWithAutocreatorForExtension(extension.msgClass, self, - extension); - - if (autocreatedExtensionMap_ == nil) { - autocreatedExtensionMap_ = [[NSMutableDictionary alloc] init]; - } - - // We can't simply call setExtension here because that would clear the new - // value's autocreator. - [autocreatedExtensionMap_ setObject:value forKey:extension]; - [value release]; - } - - dispatch_semaphore_signal(readOnlySemaphore_); - return value; -} - -- (id)getExistingExtension:(GPBExtensionDescriptor *)extension { - // This is an internal method so we don't need to call CheckExtension(). - return [extensionMap_ objectForKey:extension]; -} - -- (BOOL)hasExtension:(GPBExtensionDescriptor *)extension { -#if defined(DEBUG) && DEBUG - CheckExtension(self, extension); -#endif // DEBUG - return nil != [extensionMap_ objectForKey:extension]; -} - -- (NSArray *)extensionsCurrentlySet { - return [extensionMap_ allKeys]; -} - -- (void)writeExtensionsToCodedOutputStream:(GPBCodedOutputStream *)output - range:(GPBExtensionRange)range { - NSArray *sortedExtensions = [[extensionMap_ allKeys] - sortedArrayUsingSelector:@selector(compareByFieldNumber:)]; - uint32_t start = range.start; - uint32_t end = range.end; - for (GPBExtensionDescriptor *extension in sortedExtensions) { - uint32_t fieldNumber = extension.fieldNumber; - if (fieldNumber >= start && fieldNumber < end) { - id value = [extensionMap_ objectForKey:extension]; - GPBWriteExtensionValueToOutputStream(extension, value, output); - } - } -} - -- (void)setExtension:(GPBExtensionDescriptor *)extension value:(id)value { - if (!value) { - [self clearExtension:extension]; - return; - } - - CheckExtension(self, extension); - - if (extension.repeated) { - [NSException raise:NSInvalidArgumentException - format:@"Must call addExtension() for repeated types."]; - } - - if (extensionMap_ == nil) { - extensionMap_ = [[NSMutableDictionary alloc] init]; - } - - // This pointless cast is for CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION. - // Without it, the compiler complains we're passing an id nullable when - // setObject:forKey: requires a id nonnull for the value. The check for - // !value at the start of the method ensures it isn't nil, but the check - // isn't smart enough to realize that. - [extensionMap_ setObject:(id)value forKey:extension]; - - GPBExtensionDescriptor *descriptor = extension; - - if (GPBExtensionIsMessage(descriptor) && !descriptor.isRepeated) { - GPBMessage *autocreatedValue = - [[autocreatedExtensionMap_ objectForKey:extension] retain]; - // Must remove from the map before calling GPBClearMessageAutocreator() so - // that GPBClearMessageAutocreator() knows its safe to clear. - [autocreatedExtensionMap_ removeObjectForKey:extension]; - GPBClearMessageAutocreator(autocreatedValue); - [autocreatedValue release]; - } - - GPBBecomeVisibleToAutocreator(self); -} - -- (void)addExtension:(GPBExtensionDescriptor *)extension value:(id)value { - CheckExtension(self, extension); - - if (!extension.repeated) { - [NSException raise:NSInvalidArgumentException - format:@"Must call setExtension() for singular types."]; - } - - if (extensionMap_ == nil) { - extensionMap_ = [[NSMutableDictionary alloc] init]; - } - NSMutableArray *list = [extensionMap_ objectForKey:extension]; - if (list == nil) { - list = [NSMutableArray array]; - [extensionMap_ setObject:list forKey:extension]; - } - - [list addObject:value]; - GPBBecomeVisibleToAutocreator(self); -} - -- (void)setExtension:(GPBExtensionDescriptor *)extension - index:(NSUInteger)idx - value:(id)value { - CheckExtension(self, extension); - - if (!extension.repeated) { - [NSException raise:NSInvalidArgumentException - format:@"Must call setExtension() for singular types."]; - } - - if (extensionMap_ == nil) { - extensionMap_ = [[NSMutableDictionary alloc] init]; - } - - NSMutableArray *list = [extensionMap_ objectForKey:extension]; - - [list replaceObjectAtIndex:idx withObject:value]; - GPBBecomeVisibleToAutocreator(self); -} - -- (void)clearExtension:(GPBExtensionDescriptor *)extension { - CheckExtension(self, extension); - - // Only become visible if there was actually a value to clear. - if ([extensionMap_ objectForKey:extension]) { - [extensionMap_ removeObjectForKey:extension]; - GPBBecomeVisibleToAutocreator(self); - } -} - -#pragma mark - mergeFrom - -- (void)mergeFromData:(NSData *)data - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry { - GPBCodedInputStream *input = [[GPBCodedInputStream alloc] initWithData:data]; - [self mergeFromCodedInputStream:input extensionRegistry:extensionRegistry]; - [input checkLastTagWas:0]; - [input release]; -} - -#pragma mark - mergeDelimitedFrom - -- (void)mergeDelimitedFromCodedInputStream:(GPBCodedInputStream *)input - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry { - GPBCodedInputStreamState *state = &input->state_; - if (GPBCodedInputStreamIsAtEnd(state)) { - return; - } - NSData *data = GPBCodedInputStreamReadRetainedBytesNoCopy(state); - if (data == nil) { - return; - } - [self mergeFromData:data extensionRegistry:extensionRegistry]; - [data release]; -} - -#pragma mark - Parse From Data Support - -+ (instancetype)parseFromData:(NSData *)data error:(NSError **)errorPtr { - return [self parseFromData:data extensionRegistry:nil error:errorPtr]; -} - -+ (instancetype)parseFromData:(NSData *)data - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry - error:(NSError **)errorPtr { - return [[[self alloc] initWithData:data - extensionRegistry:extensionRegistry - error:errorPtr] autorelease]; -} - -+ (instancetype)parseFromCodedInputStream:(GPBCodedInputStream *)input - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry - error:(NSError **)errorPtr { - return - [[[self alloc] initWithCodedInputStream:input - extensionRegistry:extensionRegistry - error:errorPtr] autorelease]; -} - -#pragma mark - Parse Delimited From Data Support - -+ (instancetype)parseDelimitedFromCodedInputStream:(GPBCodedInputStream *)input - extensionRegistry: - (GPBExtensionRegistry *)extensionRegistry - error:(NSError **)errorPtr { - GPBMessage *message = [[[self alloc] init] autorelease]; - @try { - [message mergeDelimitedFromCodedInputStream:input - extensionRegistry:extensionRegistry]; - if (errorPtr) { - *errorPtr = nil; - } - } - @catch (NSException *exception) { - message = nil; - if (errorPtr) { - *errorPtr = ErrorFromException(exception); - } - } -#ifdef DEBUG - if (message && !message.initialized) { - message = nil; - if (errorPtr) { - *errorPtr = MessageError(GPBMessageErrorCodeMissingRequiredField, nil); - } - } -#endif - return message; -} - -#pragma mark - Unknown Field Support - -- (GPBUnknownFieldSet *)unknownFields { - return unknownFields_; -} - -- (void)setUnknownFields:(GPBUnknownFieldSet *)unknownFields { - if (unknownFields != unknownFields_) { - [unknownFields_ release]; - unknownFields_ = [unknownFields copy]; - GPBBecomeVisibleToAutocreator(self); - } -} - -- (void)parseMessageSet:(GPBCodedInputStream *)input - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry { - uint32_t typeId = 0; - NSData *rawBytes = nil; - GPBExtensionDescriptor *extension = nil; - GPBCodedInputStreamState *state = &input->state_; - while (true) { - uint32_t tag = GPBCodedInputStreamReadTag(state); - if (tag == 0) { - break; - } - - if (tag == GPBWireFormatMessageSetTypeIdTag) { - typeId = GPBCodedInputStreamReadUInt32(state); - if (typeId != 0) { - extension = [extensionRegistry extensionForDescriptor:[self descriptor] - fieldNumber:typeId]; - } - } else if (tag == GPBWireFormatMessageSetMessageTag) { - rawBytes = - [GPBCodedInputStreamReadRetainedBytesNoCopy(state) autorelease]; - } else { - if (![input skipField:tag]) { - break; - } - } - } - - [input checkLastTagWas:GPBWireFormatMessageSetItemEndTag]; - - if (rawBytes != nil && typeId != 0) { - if (extension != nil) { - GPBCodedInputStream *newInput = - [[GPBCodedInputStream alloc] initWithData:rawBytes]; - GPBExtensionMergeFromInputStream(extension, - extension.packable, - newInput, - extensionRegistry, - self); - [newInput release]; - } else { - GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(self); - [unknownFields mergeMessageSetMessage:typeId data:rawBytes]; - } - } -} - -- (BOOL)parseUnknownField:(GPBCodedInputStream *)input - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry - tag:(uint32_t)tag { - GPBWireFormat wireType = GPBWireFormatGetTagWireType(tag); - int32_t fieldNumber = GPBWireFormatGetTagFieldNumber(tag); - - GPBDescriptor *descriptor = [self descriptor]; - GPBExtensionDescriptor *extension = - [extensionRegistry extensionForDescriptor:descriptor - fieldNumber:fieldNumber]; - if (extension == nil) { - if (descriptor.wireFormat && GPBWireFormatMessageSetItemTag == tag) { - [self parseMessageSet:input extensionRegistry:extensionRegistry]; - return YES; - } - } else { - if (extension.wireType == wireType) { - GPBExtensionMergeFromInputStream(extension, - extension.packable, - input, - extensionRegistry, - self); - return YES; - } - // Primitive, repeated types can be packed on unpacked on the wire, and are - // parsed either way. - if ([extension isRepeated] && - !GPBDataTypeIsObject(extension->description_->dataType) && - (extension.alternateWireType == wireType)) { - GPBExtensionMergeFromInputStream(extension, - !extension.packable, - input, - extensionRegistry, - self); - return YES; - } - } - if ([GPBUnknownFieldSet isFieldTag:tag]) { - GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(self); - return [unknownFields mergeFieldFrom:tag input:input]; - } else { - return NO; - } -} - -- (void)addUnknownMapEntry:(int32_t)fieldNum value:(NSData *)data { - GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(self); - [unknownFields addUnknownMapEntry:fieldNum value:data]; -} - -#pragma mark - MergeFromCodedInputStream Support - -static void MergeSingleFieldFromCodedInputStream( - GPBMessage *self, GPBFieldDescriptor *field, GPBFileSyntax syntax, - GPBCodedInputStream *input, GPBExtensionRegistry *extensionRegistry) { - GPBDataType fieldDataType = GPBGetFieldDataType(field); - switch (fieldDataType) { -#define CASE_SINGLE_POD(NAME, TYPE, FUNC_TYPE) \ - case GPBDataType##NAME: { \ - TYPE val = GPBCodedInputStreamRead##NAME(&input->state_); \ - GPBSet##FUNC_TYPE##IvarWithFieldInternal(self, field, val, syntax); \ - break; \ - } -#define CASE_SINGLE_OBJECT(NAME) \ - case GPBDataType##NAME: { \ - id val = GPBCodedInputStreamReadRetained##NAME(&input->state_); \ - GPBSetRetainedObjectIvarWithFieldInternal(self, field, val, syntax); \ - break; \ - } - CASE_SINGLE_POD(Bool, BOOL, Bool) - CASE_SINGLE_POD(Fixed32, uint32_t, UInt32) - CASE_SINGLE_POD(SFixed32, int32_t, Int32) - CASE_SINGLE_POD(Float, float, Float) - CASE_SINGLE_POD(Fixed64, uint64_t, UInt64) - CASE_SINGLE_POD(SFixed64, int64_t, Int64) - CASE_SINGLE_POD(Double, double, Double) - CASE_SINGLE_POD(Int32, int32_t, Int32) - CASE_SINGLE_POD(Int64, int64_t, Int64) - CASE_SINGLE_POD(SInt32, int32_t, Int32) - CASE_SINGLE_POD(SInt64, int64_t, Int64) - CASE_SINGLE_POD(UInt32, uint32_t, UInt32) - CASE_SINGLE_POD(UInt64, uint64_t, UInt64) - CASE_SINGLE_OBJECT(Bytes) - CASE_SINGLE_OBJECT(String) -#undef CASE_SINGLE_POD -#undef CASE_SINGLE_OBJECT - - case GPBDataTypeMessage: { - if (GPBGetHasIvarField(self, field)) { - // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has - // check again. - GPBMessage *message = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [input readMessage:message extensionRegistry:extensionRegistry]; - } else { - GPBMessage *message = [[field.msgClass alloc] init]; - [input readMessage:message extensionRegistry:extensionRegistry]; - GPBSetRetainedObjectIvarWithFieldInternal(self, field, message, syntax); - } - break; - } - - case GPBDataTypeGroup: { - if (GPBGetHasIvarField(self, field)) { - // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has - // check again. - GPBMessage *message = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [input readGroup:GPBFieldNumber(field) - message:message - extensionRegistry:extensionRegistry]; - } else { - GPBMessage *message = [[field.msgClass alloc] init]; - [input readGroup:GPBFieldNumber(field) - message:message - extensionRegistry:extensionRegistry]; - GPBSetRetainedObjectIvarWithFieldInternal(self, field, message, syntax); - } - break; - } - - case GPBDataTypeEnum: { - int32_t val = GPBCodedInputStreamReadEnum(&input->state_); - if (GPBHasPreservingUnknownEnumSemantics(syntax) || - [field isValidEnumValue:val]) { - GPBSetInt32IvarWithFieldInternal(self, field, val, syntax); - } else { - GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(self); - [unknownFields mergeVarintField:GPBFieldNumber(field) value:val]; - } - } - } // switch -} - -static void MergeRepeatedPackedFieldFromCodedInputStream( - GPBMessage *self, GPBFieldDescriptor *field, GPBFileSyntax syntax, - GPBCodedInputStream *input) { - GPBDataType fieldDataType = GPBGetFieldDataType(field); - GPBCodedInputStreamState *state = &input->state_; - id genericArray = GetOrCreateArrayIvarWithField(self, field, syntax); - int32_t length = GPBCodedInputStreamReadInt32(state); - size_t limit = GPBCodedInputStreamPushLimit(state, length); - while (GPBCodedInputStreamBytesUntilLimit(state) > 0) { - switch (fieldDataType) { -#define CASE_REPEATED_PACKED_POD(NAME, TYPE, ARRAY_TYPE) \ - case GPBDataType##NAME: { \ - TYPE val = GPBCodedInputStreamRead##NAME(state); \ - [(GPB##ARRAY_TYPE##Array *)genericArray addValue:val]; \ - break; \ - } - CASE_REPEATED_PACKED_POD(Bool, BOOL, Bool) - CASE_REPEATED_PACKED_POD(Fixed32, uint32_t, UInt32) - CASE_REPEATED_PACKED_POD(SFixed32, int32_t, Int32) - CASE_REPEATED_PACKED_POD(Float, float, Float) - CASE_REPEATED_PACKED_POD(Fixed64, uint64_t, UInt64) - CASE_REPEATED_PACKED_POD(SFixed64, int64_t, Int64) - CASE_REPEATED_PACKED_POD(Double, double, Double) - CASE_REPEATED_PACKED_POD(Int32, int32_t, Int32) - CASE_REPEATED_PACKED_POD(Int64, int64_t, Int64) - CASE_REPEATED_PACKED_POD(SInt32, int32_t, Int32) - CASE_REPEATED_PACKED_POD(SInt64, int64_t, Int64) - CASE_REPEATED_PACKED_POD(UInt32, uint32_t, UInt32) - CASE_REPEATED_PACKED_POD(UInt64, uint64_t, UInt64) -#undef CASE_REPEATED_PACKED_POD - - case GPBDataTypeBytes: - case GPBDataTypeString: - case GPBDataTypeMessage: - case GPBDataTypeGroup: - NSCAssert(NO, @"Non primitive types can't be packed"); - break; - - case GPBDataTypeEnum: { - int32_t val = GPBCodedInputStreamReadEnum(state); - if (GPBHasPreservingUnknownEnumSemantics(syntax) || - [field isValidEnumValue:val]) { - [(GPBEnumArray*)genericArray addRawValue:val]; - } else { - GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(self); - [unknownFields mergeVarintField:GPBFieldNumber(field) value:val]; - } - break; - } - } // switch - } // while(BytesUntilLimit() > 0) - GPBCodedInputStreamPopLimit(state, limit); -} - -static void MergeRepeatedNotPackedFieldFromCodedInputStream( - GPBMessage *self, GPBFieldDescriptor *field, GPBFileSyntax syntax, - GPBCodedInputStream *input, GPBExtensionRegistry *extensionRegistry) { - GPBCodedInputStreamState *state = &input->state_; - id genericArray = GetOrCreateArrayIvarWithField(self, field, syntax); - switch (GPBGetFieldDataType(field)) { -#define CASE_REPEATED_NOT_PACKED_POD(NAME, TYPE, ARRAY_TYPE) \ - case GPBDataType##NAME: { \ - TYPE val = GPBCodedInputStreamRead##NAME(state); \ - [(GPB##ARRAY_TYPE##Array *)genericArray addValue:val]; \ - break; \ - } -#define CASE_REPEATED_NOT_PACKED_OBJECT(NAME) \ - case GPBDataType##NAME: { \ - id val = GPBCodedInputStreamReadRetained##NAME(state); \ - [(NSMutableArray*)genericArray addObject:val]; \ - [val release]; \ - break; \ - } - CASE_REPEATED_NOT_PACKED_POD(Bool, BOOL, Bool) - CASE_REPEATED_NOT_PACKED_POD(Fixed32, uint32_t, UInt32) - CASE_REPEATED_NOT_PACKED_POD(SFixed32, int32_t, Int32) - CASE_REPEATED_NOT_PACKED_POD(Float, float, Float) - CASE_REPEATED_NOT_PACKED_POD(Fixed64, uint64_t, UInt64) - CASE_REPEATED_NOT_PACKED_POD(SFixed64, int64_t, Int64) - CASE_REPEATED_NOT_PACKED_POD(Double, double, Double) - CASE_REPEATED_NOT_PACKED_POD(Int32, int32_t, Int32) - CASE_REPEATED_NOT_PACKED_POD(Int64, int64_t, Int64) - CASE_REPEATED_NOT_PACKED_POD(SInt32, int32_t, Int32) - CASE_REPEATED_NOT_PACKED_POD(SInt64, int64_t, Int64) - CASE_REPEATED_NOT_PACKED_POD(UInt32, uint32_t, UInt32) - CASE_REPEATED_NOT_PACKED_POD(UInt64, uint64_t, UInt64) - CASE_REPEATED_NOT_PACKED_OBJECT(Bytes) - CASE_REPEATED_NOT_PACKED_OBJECT(String) -#undef CASE_REPEATED_NOT_PACKED_POD -#undef CASE_NOT_PACKED_OBJECT - case GPBDataTypeMessage: { - GPBMessage *message = [[field.msgClass alloc] init]; - [input readMessage:message extensionRegistry:extensionRegistry]; - [(NSMutableArray*)genericArray addObject:message]; - [message release]; - break; - } - case GPBDataTypeGroup: { - GPBMessage *message = [[field.msgClass alloc] init]; - [input readGroup:GPBFieldNumber(field) - message:message - extensionRegistry:extensionRegistry]; - [(NSMutableArray*)genericArray addObject:message]; - [message release]; - break; - } - case GPBDataTypeEnum: { - int32_t val = GPBCodedInputStreamReadEnum(state); - if (GPBHasPreservingUnknownEnumSemantics(syntax) || - [field isValidEnumValue:val]) { - [(GPBEnumArray*)genericArray addRawValue:val]; - } else { - GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(self); - [unknownFields mergeVarintField:GPBFieldNumber(field) value:val]; - } - break; - } - } // switch -} - -- (void)mergeFromCodedInputStream:(GPBCodedInputStream *)input - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry { - GPBDescriptor *descriptor = [self descriptor]; - GPBFileSyntax syntax = descriptor.file.syntax; - GPBCodedInputStreamState *state = &input->state_; - uint32_t tag = 0; - NSUInteger startingIndex = 0; - NSArray *fields = descriptor->fields_; - NSUInteger numFields = fields.count; - while (YES) { - BOOL merged = NO; - tag = GPBCodedInputStreamReadTag(state); - if (tag == 0) { - break; // Reached end. - } - for (NSUInteger i = 0; i < numFields; ++i) { - if (startingIndex >= numFields) startingIndex = 0; - GPBFieldDescriptor *fieldDescriptor = fields[startingIndex]; - if (GPBFieldTag(fieldDescriptor) == tag) { - GPBFieldType fieldType = fieldDescriptor.fieldType; - if (fieldType == GPBFieldTypeSingle) { - MergeSingleFieldFromCodedInputStream(self, fieldDescriptor, syntax, - input, extensionRegistry); - // Well formed protos will only have a single field once, advance - // the starting index to the next field. - startingIndex += 1; - } else if (fieldType == GPBFieldTypeRepeated) { - if (fieldDescriptor.isPackable) { - MergeRepeatedPackedFieldFromCodedInputStream( - self, fieldDescriptor, syntax, input); - // Well formed protos will only have a repeated field that is - // packed once, advance the starting index to the next field. - startingIndex += 1; - } else { - MergeRepeatedNotPackedFieldFromCodedInputStream( - self, fieldDescriptor, syntax, input, extensionRegistry); - } - } else { // fieldType == GPBFieldTypeMap - // GPB*Dictionary or NSDictionary, exact type doesn't matter at this - // point. - id map = GetOrCreateMapIvarWithField(self, fieldDescriptor, syntax); - [input readMapEntry:map - extensionRegistry:extensionRegistry - field:fieldDescriptor - parentMessage:self]; - } - merged = YES; - break; - } else { - startingIndex += 1; - } - } // for(i < numFields) - - if (!merged && (tag != 0)) { - // Primitive, repeated types can be packed on unpacked on the wire, and - // are parsed either way. The above loop covered tag in the preferred - // for, so this need to check the alternate form. - for (NSUInteger i = 0; i < numFields; ++i) { - if (startingIndex >= numFields) startingIndex = 0; - GPBFieldDescriptor *fieldDescriptor = fields[startingIndex]; - if ((fieldDescriptor.fieldType == GPBFieldTypeRepeated) && - !GPBFieldDataTypeIsObject(fieldDescriptor) && - (GPBFieldAlternateTag(fieldDescriptor) == tag)) { - BOOL alternateIsPacked = !fieldDescriptor.isPackable; - if (alternateIsPacked) { - MergeRepeatedPackedFieldFromCodedInputStream( - self, fieldDescriptor, syntax, input); - // Well formed protos will only have a repeated field that is - // packed once, advance the starting index to the next field. - startingIndex += 1; - } else { - MergeRepeatedNotPackedFieldFromCodedInputStream( - self, fieldDescriptor, syntax, input, extensionRegistry); - } - merged = YES; - break; - } else { - startingIndex += 1; - } - } - } - - if (!merged) { - if (tag == 0) { - // zero signals EOF / limit reached - return; - } else { - if (GPBPreserveUnknownFields(syntax)) { - if (![self parseUnknownField:input - extensionRegistry:extensionRegistry - tag:tag]) { - // it's an endgroup tag - return; - } - } else { - if (![input skipField:tag]) { - return; - } - } - } - } // if(!merged) - - } // while(YES) -} - -#pragma mark - MergeFrom Support - -- (void)mergeFrom:(GPBMessage *)other { - Class selfClass = [self class]; - Class otherClass = [other class]; - if (!([selfClass isSubclassOfClass:otherClass] || - [otherClass isSubclassOfClass:selfClass])) { - [NSException raise:NSInvalidArgumentException - format:@"Classes must match %@ != %@", selfClass, otherClass]; - } - - // We assume something will be done and become visible. - GPBBecomeVisibleToAutocreator(self); - - GPBDescriptor *descriptor = [[self class] descriptor]; - GPBFileSyntax syntax = descriptor.file.syntax; - - for (GPBFieldDescriptor *field in descriptor->fields_) { - GPBFieldType fieldType = field.fieldType; - if (fieldType == GPBFieldTypeSingle) { - int32_t hasIndex = GPBFieldHasIndex(field); - uint32_t fieldNumber = GPBFieldNumber(field); - if (!GPBGetHasIvar(other, hasIndex, fieldNumber)) { - // Other doesn't have the field set, on to the next. - continue; - } - GPBDataType fieldDataType = GPBGetFieldDataType(field); - switch (fieldDataType) { - case GPBDataTypeBool: - GPBSetBoolIvarWithFieldInternal( - self, field, GPBGetMessageBoolField(other, field), syntax); - break; - case GPBDataTypeSFixed32: - case GPBDataTypeEnum: - case GPBDataTypeInt32: - case GPBDataTypeSInt32: - GPBSetInt32IvarWithFieldInternal( - self, field, GPBGetMessageInt32Field(other, field), syntax); - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - GPBSetUInt32IvarWithFieldInternal( - self, field, GPBGetMessageUInt32Field(other, field), syntax); - break; - case GPBDataTypeSFixed64: - case GPBDataTypeInt64: - case GPBDataTypeSInt64: - GPBSetInt64IvarWithFieldInternal( - self, field, GPBGetMessageInt64Field(other, field), syntax); - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - GPBSetUInt64IvarWithFieldInternal( - self, field, GPBGetMessageUInt64Field(other, field), syntax); - break; - case GPBDataTypeFloat: - GPBSetFloatIvarWithFieldInternal( - self, field, GPBGetMessageFloatField(other, field), syntax); - break; - case GPBDataTypeDouble: - GPBSetDoubleIvarWithFieldInternal( - self, field, GPBGetMessageDoubleField(other, field), syntax); - break; - case GPBDataTypeBytes: - case GPBDataTypeString: { - id otherVal = GPBGetObjectIvarWithFieldNoAutocreate(other, field); - GPBSetObjectIvarWithFieldInternal(self, field, otherVal, syntax); - break; - } - case GPBDataTypeMessage: - case GPBDataTypeGroup: { - id otherVal = GPBGetObjectIvarWithFieldNoAutocreate(other, field); - if (GPBGetHasIvar(self, hasIndex, fieldNumber)) { - GPBMessage *message = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - [message mergeFrom:otherVal]; - } else { - GPBMessage *message = [otherVal copy]; - GPBSetRetainedObjectIvarWithFieldInternal(self, field, message, - syntax); - } - break; - } - } // switch() - } else if (fieldType == GPBFieldTypeRepeated) { - // In the case of a list, they need to be appended, and there is no - // _hasIvar to worry about setting. - id otherArray = - GPBGetObjectIvarWithFieldNoAutocreate(other, field); - if (otherArray) { - GPBDataType fieldDataType = field->description_->dataType; - if (GPBDataTypeIsObject(fieldDataType)) { - NSMutableArray *resultArray = - GetOrCreateArrayIvarWithField(self, field, syntax); - [resultArray addObjectsFromArray:otherArray]; - } else if (fieldDataType == GPBDataTypeEnum) { - GPBEnumArray *resultArray = - GetOrCreateArrayIvarWithField(self, field, syntax); - [resultArray addRawValuesFromArray:otherArray]; - } else { - // The array type doesn't matter, that all implment - // -addValuesFromArray:. - GPBInt32Array *resultArray = - GetOrCreateArrayIvarWithField(self, field, syntax); - [resultArray addValuesFromArray:otherArray]; - } - } - } else { // fieldType = GPBFieldTypeMap - // In the case of a map, they need to be merged, and there is no - // _hasIvar to worry about setting. - id otherDict = GPBGetObjectIvarWithFieldNoAutocreate(other, field); - if (otherDict) { - GPBDataType keyDataType = field.mapKeyDataType; - GPBDataType valueDataType = field->description_->dataType; - if (GPBDataTypeIsObject(keyDataType) && - GPBDataTypeIsObject(valueDataType)) { - NSMutableDictionary *resultDict = - GetOrCreateMapIvarWithField(self, field, syntax); - [resultDict addEntriesFromDictionary:otherDict]; - } else if (valueDataType == GPBDataTypeEnum) { - // The exact type doesn't matter, just need to know it is a - // GPB*EnumDictionary. - GPBInt32EnumDictionary *resultDict = - GetOrCreateMapIvarWithField(self, field, syntax); - [resultDict addRawEntriesFromDictionary:otherDict]; - } else { - // The exact type doesn't matter, they all implement - // -addEntriesFromDictionary:. - GPBInt32Int32Dictionary *resultDict = - GetOrCreateMapIvarWithField(self, field, syntax); - [resultDict addEntriesFromDictionary:otherDict]; - } - } - } // if (fieldType)..else if...else - } // for(fields) - - // Unknown fields. - if (!unknownFields_) { - [self setUnknownFields:other.unknownFields]; - } else { - [unknownFields_ mergeUnknownFields:other.unknownFields]; - } - - // Extensions - - if (other->extensionMap_.count == 0) { - return; - } - - if (extensionMap_ == nil) { - extensionMap_ = - CloneExtensionMap(other->extensionMap_, NSZoneFromPointer(self)); - } else { - for (GPBExtensionDescriptor *extension in other->extensionMap_) { - id otherValue = [other->extensionMap_ objectForKey:extension]; - id value = [extensionMap_ objectForKey:extension]; - BOOL isMessageExtension = GPBExtensionIsMessage(extension); - - if (extension.repeated) { - NSMutableArray *list = value; - if (list == nil) { - list = [[NSMutableArray alloc] init]; - [extensionMap_ setObject:list forKey:extension]; - [list release]; - } - if (isMessageExtension) { - for (GPBMessage *otherListValue in otherValue) { - GPBMessage *copiedValue = [otherListValue copy]; - [list addObject:copiedValue]; - [copiedValue release]; - } - } else { - [list addObjectsFromArray:otherValue]; - } - } else { - if (isMessageExtension) { - if (value) { - [(GPBMessage *)value mergeFrom:(GPBMessage *)otherValue]; - } else { - GPBMessage *copiedValue = [otherValue copy]; - [extensionMap_ setObject:copiedValue forKey:extension]; - [copiedValue release]; - } - } else { - [extensionMap_ setObject:otherValue forKey:extension]; - } - } - - if (isMessageExtension && !extension.isRepeated) { - GPBMessage *autocreatedValue = - [[autocreatedExtensionMap_ objectForKey:extension] retain]; - // Must remove from the map before calling GPBClearMessageAutocreator() - // so that GPBClearMessageAutocreator() knows its safe to clear. - [autocreatedExtensionMap_ removeObjectForKey:extension]; - GPBClearMessageAutocreator(autocreatedValue); - [autocreatedValue release]; - } - } - } -} - -#pragma mark - isEqual: & hash Support - -- (BOOL)isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[self class]] && - ![self isKindOfClass:[other class]]) { - return NO; - } - - GPBMessage *otherMsg = other; - GPBDescriptor *descriptor = [[self class] descriptor]; - uint8_t *selfStorage = (uint8_t *)messageStorage_; - uint8_t *otherStorage = (uint8_t *)otherMsg->messageStorage_; - - for (GPBFieldDescriptor *field in descriptor->fields_) { - if (GPBFieldIsMapOrArray(field)) { - // In the case of a list or map, there is no _hasIvar to worry about. - // NOTE: These are NSArray/GPB*Array or NSDictionary/GPB*Dictionary, but - // the type doesn't really matter as the objects all support -count and - // -isEqual:. - NSArray *resultMapOrArray = - GPBGetObjectIvarWithFieldNoAutocreate(self, field); - NSArray *otherMapOrArray = - GPBGetObjectIvarWithFieldNoAutocreate(other, field); - // nil and empty are equal - if (resultMapOrArray.count != 0 || otherMapOrArray.count != 0) { - if (![resultMapOrArray isEqual:otherMapOrArray]) { - return NO; - } - } - } else { // Single field - int32_t hasIndex = GPBFieldHasIndex(field); - uint32_t fieldNum = GPBFieldNumber(field); - BOOL selfHas = GPBGetHasIvar(self, hasIndex, fieldNum); - BOOL otherHas = GPBGetHasIvar(other, hasIndex, fieldNum); - if (selfHas != otherHas) { - return NO; // Differing has values, not equal. - } - if (!selfHas) { - // Same has values, was no, nothing else to check for this field. - continue; - } - // Now compare the values. - GPBDataType fieldDataType = GPBGetFieldDataType(field); - size_t fieldOffset = field->description_->offset; - switch (fieldDataType) { - case GPBDataTypeBool: { - // Bools are stored in has_bits to avoid needing explicit space in - // the storage structure. - // (the field number passed to the HasIvar helper doesn't really - // matter since the offset is never negative) - BOOL selfValue = GPBGetHasIvar(self, (int32_t)(fieldOffset), 0); - BOOL otherValue = GPBGetHasIvar(other, (int32_t)(fieldOffset), 0); - if (selfValue != otherValue) { - return NO; - } - break; - } - case GPBDataTypeSFixed32: - case GPBDataTypeInt32: - case GPBDataTypeSInt32: - case GPBDataTypeEnum: - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - case GPBDataTypeFloat: { - GPBInternalCompileAssert(sizeof(float) == sizeof(uint32_t), float_not_32_bits); - // These are all 32bit, signed/unsigned doesn't matter for equality. - uint32_t *selfValPtr = (uint32_t *)&selfStorage[fieldOffset]; - uint32_t *otherValPtr = (uint32_t *)&otherStorage[fieldOffset]; - if (*selfValPtr != *otherValPtr) { - return NO; - } - break; - } - case GPBDataTypeSFixed64: - case GPBDataTypeInt64: - case GPBDataTypeSInt64: - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - case GPBDataTypeDouble: { - GPBInternalCompileAssert(sizeof(double) == sizeof(uint64_t), double_not_64_bits); - // These are all 64bit, signed/unsigned doesn't matter for equality. - uint64_t *selfValPtr = (uint64_t *)&selfStorage[fieldOffset]; - uint64_t *otherValPtr = (uint64_t *)&otherStorage[fieldOffset]; - if (*selfValPtr != *otherValPtr) { - return NO; - } - break; - } - case GPBDataTypeBytes: - case GPBDataTypeString: - case GPBDataTypeMessage: - case GPBDataTypeGroup: { - // Type doesn't matter here, they all implement -isEqual:. - id *selfValPtr = (id *)&selfStorage[fieldOffset]; - id *otherValPtr = (id *)&otherStorage[fieldOffset]; - if (![*selfValPtr isEqual:*otherValPtr]) { - return NO; - } - break; - } - } // switch() - } // if(mapOrArray)...else - } // for(fields) - - // nil and empty are equal - if (extensionMap_.count != 0 || otherMsg->extensionMap_.count != 0) { - if (![extensionMap_ isEqual:otherMsg->extensionMap_]) { - return NO; - } - } - - // nil and empty are equal - GPBUnknownFieldSet *otherUnknowns = otherMsg->unknownFields_; - if ([unknownFields_ countOfFields] != 0 || - [otherUnknowns countOfFields] != 0) { - if (![unknownFields_ isEqual:otherUnknowns]) { - return NO; - } - } - - return YES; -} - -// It is very difficult to implement a generic hash for ProtoBuf messages that -// will perform well. If you need hashing on your ProtoBufs (eg you are using -// them as dictionary keys) you will probably want to implement a ProtoBuf -// message specific hash as a category on your protobuf class. Do not make it a -// category on GPBMessage as you will conflict with this hash, and will possibly -// override hash for all generated protobufs. A good implementation of hash will -// be really fast, so we would recommend only hashing protobufs that have an -// identifier field of some kind that you can easily hash. If you implement -// hash, we would strongly recommend overriding isEqual: in your category as -// well, as the default implementation of isEqual: is extremely slow, and may -// drastically affect performance in large sets. -- (NSUInteger)hash { - GPBDescriptor *descriptor = [[self class] descriptor]; - const NSUInteger prime = 19; - uint8_t *storage = (uint8_t *)messageStorage_; - - // Start with the descriptor and then mix it with some instance info. - // Hopefully that will give a spread based on classes and what fields are set. - NSUInteger result = (NSUInteger)descriptor; - - for (GPBFieldDescriptor *field in descriptor->fields_) { - if (GPBFieldIsMapOrArray(field)) { - // Exact type doesn't matter, just check if there are any elements. - NSArray *mapOrArray = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - NSUInteger count = mapOrArray.count; - if (count) { - // NSArray/NSDictionary use count, use the field number and the count. - result = prime * result + GPBFieldNumber(field); - result = prime * result + count; - } - } else if (GPBGetHasIvarField(self, field)) { - // Just using the field number seemed simple/fast, but then a small - // message class where all the same fields are always set (to different - // things would end up all with the same hash, so pull in some data). - GPBDataType fieldDataType = GPBGetFieldDataType(field); - size_t fieldOffset = field->description_->offset; - switch (fieldDataType) { - case GPBDataTypeBool: { - // Bools are stored in has_bits to avoid needing explicit space in - // the storage structure. - // (the field number passed to the HasIvar helper doesn't really - // matter since the offset is never negative) - BOOL value = GPBGetHasIvar(self, (int32_t)(fieldOffset), 0); - result = prime * result + value; - break; - } - case GPBDataTypeSFixed32: - case GPBDataTypeInt32: - case GPBDataTypeSInt32: - case GPBDataTypeEnum: - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - case GPBDataTypeFloat: { - GPBInternalCompileAssert(sizeof(float) == sizeof(uint32_t), float_not_32_bits); - // These are all 32bit, just mix it in. - uint32_t *valPtr = (uint32_t *)&storage[fieldOffset]; - result = prime * result + *valPtr; - break; - } - case GPBDataTypeSFixed64: - case GPBDataTypeInt64: - case GPBDataTypeSInt64: - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - case GPBDataTypeDouble: { - GPBInternalCompileAssert(sizeof(double) == sizeof(uint64_t), double_not_64_bits); - // These are all 64bit, just mix what fits into an NSUInteger in. - uint64_t *valPtr = (uint64_t *)&storage[fieldOffset]; - result = prime * result + (NSUInteger)(*valPtr); - break; - } - case GPBDataTypeBytes: - case GPBDataTypeString: { - // Type doesn't matter here, they both implement -hash:. - id *valPtr = (id *)&storage[fieldOffset]; - result = prime * result + [*valPtr hash]; - break; - } - - case GPBDataTypeMessage: - case GPBDataTypeGroup: { - GPBMessage **valPtr = (GPBMessage **)&storage[fieldOffset]; - // Could call -hash on the sub message, but that could recurse pretty - // deep; follow the lead of NSArray/NSDictionary and don't really - // recurse for hash, instead use the field number and the descriptor - // of the sub message. Yes, this could suck for a bunch of messages - // where they all only differ in the sub messages, but if you are - // using a message with sub messages for something that needs -hash, - // odds are you are also copying them as keys, and that deep copy - // will also suck. - result = prime * result + GPBFieldNumber(field); - result = prime * result + (NSUInteger)[[*valPtr class] descriptor]; - break; - } - } // switch() - } - } - - // Unknowns and extensions are not included. - - return result; -} - -#pragma mark - Description Support - -- (NSString *)description { - NSString *textFormat = GPBTextFormatForMessage(self, @" "); - NSString *description = [NSString - stringWithFormat:@"<%@ %p>: {\n%@}", [self class], self, textFormat]; - return description; -} - -#if defined(DEBUG) && DEBUG - -// Xcode 5.1 added support for custom quick look info. -// https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/CustomClassDisplay_in_QuickLook/CH01-quick_look_for_custom_objects/CH01-quick_look_for_custom_objects.html#//apple_ref/doc/uid/TP40014001-CH2-SW1 -- (id)debugQuickLookObject { - return GPBTextFormatForMessage(self, nil); -} - -#endif // DEBUG - -#pragma mark - SerializedSize - -- (size_t)serializedSize { - GPBDescriptor *descriptor = [[self class] descriptor]; - size_t result = 0; - - // Has check is done explicitly, so GPBGetObjectIvarWithFieldNoAutocreate() - // avoids doing the has check again. - - // Fields. - for (GPBFieldDescriptor *fieldDescriptor in descriptor->fields_) { - GPBFieldType fieldType = fieldDescriptor.fieldType; - GPBDataType fieldDataType = GPBGetFieldDataType(fieldDescriptor); - - // Single Fields - if (fieldType == GPBFieldTypeSingle) { - BOOL selfHas = GPBGetHasIvarField(self, fieldDescriptor); - if (!selfHas) { - continue; // Nothing to do. - } - - uint32_t fieldNumber = GPBFieldNumber(fieldDescriptor); - - switch (fieldDataType) { -#define CASE_SINGLE_POD(NAME, TYPE, FUNC_TYPE) \ - case GPBDataType##NAME: { \ - TYPE fieldVal = GPBGetMessage##FUNC_TYPE##Field(self, fieldDescriptor); \ - result += GPBCompute##NAME##Size(fieldNumber, fieldVal); \ - break; \ - } -#define CASE_SINGLE_OBJECT(NAME) \ - case GPBDataType##NAME: { \ - id fieldVal = GPBGetObjectIvarWithFieldNoAutocreate(self, fieldDescriptor); \ - result += GPBCompute##NAME##Size(fieldNumber, fieldVal); \ - break; \ - } - CASE_SINGLE_POD(Bool, BOOL, Bool) - CASE_SINGLE_POD(Fixed32, uint32_t, UInt32) - CASE_SINGLE_POD(SFixed32, int32_t, Int32) - CASE_SINGLE_POD(Float, float, Float) - CASE_SINGLE_POD(Fixed64, uint64_t, UInt64) - CASE_SINGLE_POD(SFixed64, int64_t, Int64) - CASE_SINGLE_POD(Double, double, Double) - CASE_SINGLE_POD(Int32, int32_t, Int32) - CASE_SINGLE_POD(Int64, int64_t, Int64) - CASE_SINGLE_POD(SInt32, int32_t, Int32) - CASE_SINGLE_POD(SInt64, int64_t, Int64) - CASE_SINGLE_POD(UInt32, uint32_t, UInt32) - CASE_SINGLE_POD(UInt64, uint64_t, UInt64) - CASE_SINGLE_OBJECT(Bytes) - CASE_SINGLE_OBJECT(String) - CASE_SINGLE_OBJECT(Message) - CASE_SINGLE_OBJECT(Group) - CASE_SINGLE_POD(Enum, int32_t, Int32) -#undef CASE_SINGLE_POD -#undef CASE_SINGLE_OBJECT - } - - // Repeated Fields - } else if (fieldType == GPBFieldTypeRepeated) { - id genericArray = - GPBGetObjectIvarWithFieldNoAutocreate(self, fieldDescriptor); - NSUInteger count = [genericArray count]; - if (count == 0) { - continue; // Nothing to add. - } - __block size_t dataSize = 0; - - switch (fieldDataType) { -#define CASE_REPEATED_POD(NAME, TYPE, ARRAY_TYPE) \ - CASE_REPEATED_POD_EXTRA(NAME, TYPE, ARRAY_TYPE, ) -#define CASE_REPEATED_POD_EXTRA(NAME, TYPE, ARRAY_TYPE, ARRAY_ACCESSOR_NAME) \ - case GPBDataType##NAME: { \ - GPB##ARRAY_TYPE##Array *array = genericArray; \ - [array enumerate##ARRAY_ACCESSOR_NAME##ValuesWithBlock:^(TYPE value, NSUInteger idx, BOOL *stop) { \ - _Pragma("unused(idx, stop)"); \ - dataSize += GPBCompute##NAME##SizeNoTag(value); \ - }]; \ - break; \ - } -#define CASE_REPEATED_OBJECT(NAME) \ - case GPBDataType##NAME: { \ - for (id value in genericArray) { \ - dataSize += GPBCompute##NAME##SizeNoTag(value); \ - } \ - break; \ - } - CASE_REPEATED_POD(Bool, BOOL, Bool) - CASE_REPEATED_POD(Fixed32, uint32_t, UInt32) - CASE_REPEATED_POD(SFixed32, int32_t, Int32) - CASE_REPEATED_POD(Float, float, Float) - CASE_REPEATED_POD(Fixed64, uint64_t, UInt64) - CASE_REPEATED_POD(SFixed64, int64_t, Int64) - CASE_REPEATED_POD(Double, double, Double) - CASE_REPEATED_POD(Int32, int32_t, Int32) - CASE_REPEATED_POD(Int64, int64_t, Int64) - CASE_REPEATED_POD(SInt32, int32_t, Int32) - CASE_REPEATED_POD(SInt64, int64_t, Int64) - CASE_REPEATED_POD(UInt32, uint32_t, UInt32) - CASE_REPEATED_POD(UInt64, uint64_t, UInt64) - CASE_REPEATED_OBJECT(Bytes) - CASE_REPEATED_OBJECT(String) - CASE_REPEATED_OBJECT(Message) - CASE_REPEATED_OBJECT(Group) - CASE_REPEATED_POD_EXTRA(Enum, int32_t, Enum, Raw) -#undef CASE_REPEATED_POD -#undef CASE_REPEATED_POD_EXTRA -#undef CASE_REPEATED_OBJECT - } // switch - result += dataSize; - size_t tagSize = GPBComputeTagSize(GPBFieldNumber(fieldDescriptor)); - if (fieldDataType == GPBDataTypeGroup) { - // Groups have both a start and an end tag. - tagSize *= 2; - } - if (fieldDescriptor.isPackable) { - result += tagSize; - result += GPBComputeSizeTSizeAsInt32NoTag(dataSize); - } else { - result += count * tagSize; - } - - // Map<> Fields - } else { // fieldType == GPBFieldTypeMap - if (GPBDataTypeIsObject(fieldDataType) && - (fieldDescriptor.mapKeyDataType == GPBDataTypeString)) { - // If key type was string, then the map is an NSDictionary. - NSDictionary *map = - GPBGetObjectIvarWithFieldNoAutocreate(self, fieldDescriptor); - if (map) { - result += GPBDictionaryComputeSizeInternalHelper(map, fieldDescriptor); - } - } else { - // Type will be GPB*GroupDictionary, exact type doesn't matter. - GPBInt32Int32Dictionary *map = - GPBGetObjectIvarWithFieldNoAutocreate(self, fieldDescriptor); - result += [map computeSerializedSizeAsField:fieldDescriptor]; - } - } - } // for(fields) - - // Add any unknown fields. - if (descriptor.wireFormat) { - result += [unknownFields_ serializedSizeAsMessageSet]; - } else { - result += [unknownFields_ serializedSize]; - } - - // Add any extensions. - for (GPBExtensionDescriptor *extension in extensionMap_) { - id value = [extensionMap_ objectForKey:extension]; - result += GPBComputeExtensionSerializedSizeIncludingTag(extension, value); - } - - return result; -} - -#pragma mark - Resolve Methods Support - -typedef struct ResolveIvarAccessorMethodResult { - IMP impToAdd; - SEL encodingSelector; -} ResolveIvarAccessorMethodResult; - -static void ResolveIvarGet(GPBFieldDescriptor *field, - ResolveIvarAccessorMethodResult *result) { - GPBDataType fieldDataType = GPBGetFieldDataType(field); - switch (fieldDataType) { -#define CASE_GET(NAME, TYPE, TRUE_NAME) \ - case GPBDataType##NAME: { \ - result->impToAdd = imp_implementationWithBlock(^(id obj) { \ - return GPBGetMessage##TRUE_NAME##Field(obj, field); \ - }); \ - result->encodingSelector = @selector(get##NAME); \ - break; \ - } -#define CASE_GET_OBJECT(NAME, TYPE, TRUE_NAME) \ - case GPBDataType##NAME: { \ - result->impToAdd = imp_implementationWithBlock(^(id obj) { \ - return GPBGetObjectIvarWithField(obj, field); \ - }); \ - result->encodingSelector = @selector(get##NAME); \ - break; \ - } - CASE_GET(Bool, BOOL, Bool) - CASE_GET(Fixed32, uint32_t, UInt32) - CASE_GET(SFixed32, int32_t, Int32) - CASE_GET(Float, float, Float) - CASE_GET(Fixed64, uint64_t, UInt64) - CASE_GET(SFixed64, int64_t, Int64) - CASE_GET(Double, double, Double) - CASE_GET(Int32, int32_t, Int32) - CASE_GET(Int64, int64_t, Int64) - CASE_GET(SInt32, int32_t, Int32) - CASE_GET(SInt64, int64_t, Int64) - CASE_GET(UInt32, uint32_t, UInt32) - CASE_GET(UInt64, uint64_t, UInt64) - CASE_GET_OBJECT(Bytes, id, Object) - CASE_GET_OBJECT(String, id, Object) - CASE_GET_OBJECT(Message, id, Object) - CASE_GET_OBJECT(Group, id, Object) - CASE_GET(Enum, int32_t, Enum) -#undef CASE_GET - } -} - -static void ResolveIvarSet(GPBFieldDescriptor *field, - GPBFileSyntax syntax, - ResolveIvarAccessorMethodResult *result) { - GPBDataType fieldDataType = GPBGetFieldDataType(field); - switch (fieldDataType) { -#define CASE_SET(NAME, TYPE, TRUE_NAME) \ - case GPBDataType##NAME: { \ - result->impToAdd = imp_implementationWithBlock(^(id obj, TYPE value) { \ - return GPBSet##TRUE_NAME##IvarWithFieldInternal(obj, field, value, syntax); \ - }); \ - result->encodingSelector = @selector(set##NAME:); \ - break; \ - } - CASE_SET(Bool, BOOL, Bool) - CASE_SET(Fixed32, uint32_t, UInt32) - CASE_SET(SFixed32, int32_t, Int32) - CASE_SET(Float, float, Float) - CASE_SET(Fixed64, uint64_t, UInt64) - CASE_SET(SFixed64, int64_t, Int64) - CASE_SET(Double, double, Double) - CASE_SET(Int32, int32_t, Int32) - CASE_SET(Int64, int64_t, Int64) - CASE_SET(SInt32, int32_t, Int32) - CASE_SET(SInt64, int64_t, Int64) - CASE_SET(UInt32, uint32_t, UInt32) - CASE_SET(UInt64, uint64_t, UInt64) - CASE_SET(Bytes, id, Object) - CASE_SET(String, id, Object) - CASE_SET(Message, id, Object) - CASE_SET(Group, id, Object) - CASE_SET(Enum, int32_t, Enum) -#undef CASE_SET - } -} - -+ (BOOL)resolveInstanceMethod:(SEL)sel { - const GPBDescriptor *descriptor = [self descriptor]; - if (!descriptor) { - return NO; - } - - // NOTE: hasOrCountSel_/setHasSel_ will be NULL if the field for the given - // message should not have has support (done in GPBDescriptor.m), so there is - // no need for checks here to see if has*/setHas* are allowed. - - ResolveIvarAccessorMethodResult result = {NULL, NULL}; - for (GPBFieldDescriptor *field in descriptor->fields_) { - BOOL isMapOrArray = GPBFieldIsMapOrArray(field); - if (!isMapOrArray) { - // Single fields. - if (sel == field->getSel_) { - ResolveIvarGet(field, &result); - break; - } else if (sel == field->setSel_) { - ResolveIvarSet(field, descriptor.file.syntax, &result); - break; - } else if (sel == field->hasOrCountSel_) { - int32_t index = GPBFieldHasIndex(field); - uint32_t fieldNum = GPBFieldNumber(field); - result.impToAdd = imp_implementationWithBlock(^(id obj) { - return GPBGetHasIvar(obj, index, fieldNum); - }); - result.encodingSelector = @selector(getBool); - break; - } else if (sel == field->setHasSel_) { - result.impToAdd = imp_implementationWithBlock(^(id obj, BOOL value) { - if (value) { - [NSException raise:NSInvalidArgumentException - format:@"%@: %@ can only be set to NO (to clear field).", - [obj class], - NSStringFromSelector(field->setHasSel_)]; - } - GPBClearMessageField(obj, field); - }); - result.encodingSelector = @selector(setBool:); - break; - } else { - GPBOneofDescriptor *oneof = field->containingOneof_; - if (oneof && (sel == oneof->caseSel_)) { - int32_t index = GPBFieldHasIndex(field); - result.impToAdd = imp_implementationWithBlock(^(id obj) { - return GPBGetHasOneof(obj, index); - }); - result.encodingSelector = @selector(getEnum); - break; - } - } - } else { - // map<>/repeated fields. - if (sel == field->getSel_) { - if (field.fieldType == GPBFieldTypeRepeated) { - result.impToAdd = imp_implementationWithBlock(^(id obj) { - return GetArrayIvarWithField(obj, field); - }); - } else { - result.impToAdd = imp_implementationWithBlock(^(id obj) { - return GetMapIvarWithField(obj, field); - }); - } - result.encodingSelector = @selector(getArray); - break; - } else if (sel == field->setSel_) { - // Local for syntax so the block can directly capture it and not the - // full lookup. - const GPBFileSyntax syntax = descriptor.file.syntax; - result.impToAdd = imp_implementationWithBlock(^(id obj, id value) { - return GPBSetObjectIvarWithFieldInternal(obj, field, value, syntax); - }); - result.encodingSelector = @selector(setArray:); - break; - } else if (sel == field->hasOrCountSel_) { - result.impToAdd = imp_implementationWithBlock(^(id obj) { - // Type doesn't matter, all *Array and *Dictionary types support - // -count. - NSArray *arrayOrMap = - GPBGetObjectIvarWithFieldNoAutocreate(obj, field); - return [arrayOrMap count]; - }); - result.encodingSelector = @selector(getArrayCount); - break; - } - } - } - if (result.impToAdd) { - const char *encoding = - GPBMessageEncodingForSelector(result.encodingSelector, YES); - Class msgClass = descriptor.messageClass; - BOOL methodAdded = class_addMethod(msgClass, sel, result.impToAdd, encoding); - // class_addMethod() is documented as also failing if the method was already - // added; so we check if the method is already there and return success so - // the method dispatch will still happen. Why would it already be added? - // Two threads could cause the same method to be bound at the same time, - // but only one will actually bind it; the other still needs to return true - // so things will dispatch. - if (!methodAdded) { - methodAdded = GPBClassHasSel(msgClass, sel); - } - return methodAdded; - } - return [super resolveInstanceMethod:sel]; -} - -+ (BOOL)resolveClassMethod:(SEL)sel { - // Extensions scoped to a Message and looked up via class methods. - if (GPBResolveExtensionClassMethod(self, sel)) { - return YES; - } - return [super resolveClassMethod:sel]; -} - -#pragma mark - NSCoding Support - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [self init]; - if (self) { - NSData *data = - [aDecoder decodeObjectOfClass:[NSData class] forKey:kGPBDataCoderKey]; - if (data.length) { - [self mergeFromData:data extensionRegistry:nil]; - } - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - NSData *data = [self data]; - if (data.length) { - [aCoder encodeObject:data forKey:kGPBDataCoderKey]; - } -} - -#pragma mark - KVC Support - -+ (BOOL)accessInstanceVariablesDirectly { - // Make sure KVC doesn't use instance variables. - return NO; -} - -@end - -#pragma mark - Messages from GPBUtilities.h but defined here for access to helpers. - -// Only exists for public api, no core code should use this. -id GPBGetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field) { -#if defined(DEBUG) && DEBUG - if (field.fieldType != GPBFieldTypeRepeated) { - [NSException raise:NSInvalidArgumentException - format:@"%@.%@ is not a repeated field.", - [self class], field.name]; - } -#endif - GPBDescriptor *descriptor = [[self class] descriptor]; - GPBFileSyntax syntax = descriptor.file.syntax; - return GetOrCreateArrayIvarWithField(self, field, syntax); -} - -// Only exists for public api, no core code should use this. -id GPBGetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field) { -#if defined(DEBUG) && DEBUG - if (field.fieldType != GPBFieldTypeMap) { - [NSException raise:NSInvalidArgumentException - format:@"%@.%@ is not a map<> field.", - [self class], field.name]; - } -#endif - GPBDescriptor *descriptor = [[self class] descriptor]; - GPBFileSyntax syntax = descriptor.file.syntax; - return GetOrCreateMapIvarWithField(self, field, syntax); -} - -#pragma clang diagnostic pop diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBMessage_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBMessage_PackagePrivate.h deleted file mode 100644 index 90834d40..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBMessage_PackagePrivate.h +++ /dev/null @@ -1,134 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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. - -// This header is private to the ProtobolBuffers library and must NOT be -// included by any sources outside this library. The contents of this file are -// subject to change at any time without notice. - -#import "GPBMessage.h" - -#import <libkern/OSAtomic.h> - -#import "GPBBootstrap.h" - -typedef struct GPBMessage_Storage { - uint32_t _has_storage_[0]; -} GPBMessage_Storage; - -typedef struct GPBMessage_Storage *GPBMessage_StoragePtr; - -@interface GPBMessage () { - @package - // NOTE: Because of the +allocWithZone code using NSAllocateObject(), - // this structure should ideally always be kept pointer aligned where the - // real storage starts is also pointer aligned. The compiler/runtime already - // do this, but it may not be documented. - - // A pointer to the actual fields of the subclasses. The actual structure - // pointed to by this pointer will depend on the subclass. - // All of the actual structures will start the same as - // GPBMessage_Storage with _has_storage__ as the first field. - // Kept public because static functions need to access it. - GPBMessage_StoragePtr messageStorage_; - - // A lock to provide mutual exclusion from internal data that can be modified - // by *read* operations such as getters (autocreation of message fields and - // message extensions, not setting of values). Used to guarantee thread safety - // for concurrent reads on the message. - // NOTE: OSSpinLock may seem like a good fit here but Apple engineers have - // pointed out that they are vulnerable to live locking on iOS in cases of - // priority inversion: - // http://mjtsai.com/blog/2015/12/16/osspinlock-is-unsafe/ - // https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000372.html - // Use of readOnlySemaphore_ must be prefaced by a call to - // GPBPrepareReadOnlySemaphore to ensure it has been created. This allows - // readOnlySemaphore_ to be only created when actually needed. - dispatch_semaphore_t readOnlySemaphore_; -} - -// Gets an extension value without autocreating the result if not found. (i.e. -// returns nil if the extension is not set) -- (id)getExistingExtension:(GPBExtensionDescriptor *)extension; - -// Parses a message of this type from the input and merges it with this -// message. -// -// Warning: This does not verify that all required fields are present in -// the input message. -// Note: The caller should call -// -[CodedInputStream checkLastTagWas:] after calling this to -// verify that the last tag seen was the appropriate end-group tag, -// or zero for EOF. -// NOTE: This will throw if there is an error while parsing. -- (void)mergeFromCodedInputStream:(GPBCodedInputStream *)input - extensionRegistry:(GPBExtensionRegistry *)extensionRegistry; - -// Parses the next delimited message of this type from the input and merges it -// with this message. -- (void)mergeDelimitedFromCodedInputStream:(GPBCodedInputStream *)input - extensionRegistry: - (GPBExtensionRegistry *)extensionRegistry; - -- (void)addUnknownMapEntry:(int32_t)fieldNum value:(NSData *)data; - -@end - -CF_EXTERN_C_BEGIN - - -// Call this before using the readOnlySemaphore_. This ensures it is created only once. -void GPBPrepareReadOnlySemaphore(GPBMessage *self); - -// Returns a new instance that was automatically created by |autocreator| for -// its field |field|. -GPBMessage *GPBCreateMessageWithAutocreator(Class msgClass, - GPBMessage *autocreator, - GPBFieldDescriptor *field) - __attribute__((ns_returns_retained)); - -// Returns whether |message| autocreated this message. This is NO if the message -// was not autocreated by |message| or if it has been mutated since -// autocreation. -BOOL GPBWasMessageAutocreatedBy(GPBMessage *message, GPBMessage *parent); - -// Call this when you mutate a message. It will cause the message to become -// visible to its autocreator. -void GPBBecomeVisibleToAutocreator(GPBMessage *self); - -// Call this when an array/dictionary is mutated so the parent message that -// autocreated it can react. -void GPBAutocreatedArrayModified(GPBMessage *self, id array); -void GPBAutocreatedDictionaryModified(GPBMessage *self, id dictionary); - -// Clear the autocreator, if any. Asserts if the autocreator still has an -// autocreated reference to this message. -void GPBClearMessageAutocreator(GPBMessage *self); - -CF_EXTERN_C_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBProtocolBuffers.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBProtocolBuffers.h deleted file mode 100644 index 68d8854e..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBProtocolBuffers.h +++ /dev/null @@ -1,76 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBBootstrap.h" - -#import "GPBArray.h" -#import "GPBCodedInputStream.h" -#import "GPBCodedOutputStream.h" -#import "GPBDescriptor.h" -#import "GPBDictionary.h" -#import "GPBExtensionRegistry.h" -#import "GPBMessage.h" -#import "GPBRootObject.h" -#import "GPBUnknownField.h" -#import "GPBUnknownFieldSet.h" -#import "GPBUtilities.h" -#import "GPBWellKnownTypes.h" -#import "GPBWireFormat.h" - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -// Well-known proto types -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/Any.pbobjc.h> - #import <Protobuf/Api.pbobjc.h> - #import <Protobuf/Duration.pbobjc.h> - #import <Protobuf/Empty.pbobjc.h> - #import <Protobuf/FieldMask.pbobjc.h> - #import <Protobuf/SourceContext.pbobjc.h> - #import <Protobuf/Struct.pbobjc.h> - #import <Protobuf/Timestamp.pbobjc.h> - #import <Protobuf/Type.pbobjc.h> - #import <Protobuf/Wrappers.pbobjc.h> -#else - #import "google/protobuf/Any.pbobjc.h" - #import "google/protobuf/Api.pbobjc.h" - #import "google/protobuf/Duration.pbobjc.h" - #import "google/protobuf/Empty.pbobjc.h" - #import "google/protobuf/FieldMask.pbobjc.h" - #import "google/protobuf/SourceContext.pbobjc.h" - #import "google/protobuf/Struct.pbobjc.h" - #import "google/protobuf/Timestamp.pbobjc.h" - #import "google/protobuf/Type.pbobjc.h" - #import "google/protobuf/Wrappers.pbobjc.h" -#endif diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBProtocolBuffers_RuntimeSupport.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBProtocolBuffers_RuntimeSupport.h deleted file mode 100644 index fea75b93..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBProtocolBuffers_RuntimeSupport.h +++ /dev/null @@ -1,40 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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. - -// This header is meant to only be used by the generated source, it should not -// be included in code using protocol buffers. - -#import "GPBProtocolBuffers.h" - -#import "GPBDescriptor_PackagePrivate.h" -#import "GPBExtensionInternals.h" -#import "GPBMessage_PackagePrivate.h" -#import "GPBRootObject_PackagePrivate.h" -#import "GPBUtilities_PackagePrivate.h" diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRootObject.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRootObject.h deleted file mode 100644 index d2e2aebf..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRootObject.h +++ /dev/null @@ -1,52 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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> - -@class GPBExtensionRegistry; - -NS_ASSUME_NONNULL_BEGIN - -/** - * Every generated proto file defines a local "Root" class that exposes a - * GPBExtensionRegistry for all the extensions defined by that file and - * the files it depends on. - **/ -@interface GPBRootObject : NSObject - -/** - * @return An extension registry for the given file and all the files it depends - * on. - **/ -+ (GPBExtensionRegistry *)extensionRegistry; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRootObject.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRootObject.m deleted file mode 100644 index 585d205a..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRootObject.m +++ /dev/null @@ -1,237 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBRootObject_PackagePrivate.h" - -#import <objc/runtime.h> - -#import <CoreFoundation/CoreFoundation.h> - -#import "GPBDescriptor.h" -#import "GPBExtensionRegistry.h" -#import "GPBUtilities_PackagePrivate.h" - -@interface GPBExtensionDescriptor (GPBRootObject) -// Get singletonName as a c string. -- (const char *)singletonNameC; -@end - -@implementation GPBRootObject - -// Taken from http://www.burtleburtle.net/bob/hash/doobs.html -// Public Domain -static uint32_t jenkins_one_at_a_time_hash(const char *key) { - uint32_t hash = 0; - for (uint32_t i = 0; key[i] != '\0'; ++i) { - hash += key[i]; - hash += (hash << 10); - hash ^= (hash >> 6); - } - hash += (hash << 3); - hash ^= (hash >> 11); - hash += (hash << 15); - return hash; -} - -// Key methods for our custom CFDictionary. -// Note that the dictionary lasts for the lifetime of our app, so no need -// to worry about deallocation. All of the items are added to it at -// startup, and so the keys don't need to be retained/released. -// Keys are NULL terminated char *. -static const void *GPBRootExtensionKeyRetain(CFAllocatorRef allocator, - const void *value) { -#pragma unused(allocator) - return value; -} - -static void GPBRootExtensionKeyRelease(CFAllocatorRef allocator, - const void *value) { -#pragma unused(allocator) -#pragma unused(value) -} - -static CFStringRef GPBRootExtensionCopyKeyDescription(const void *value) { - const char *key = (const char *)value; - return CFStringCreateWithCString(kCFAllocatorDefault, key, - kCFStringEncodingUTF8); -} - -static Boolean GPBRootExtensionKeyEqual(const void *value1, - const void *value2) { - const char *key1 = (const char *)value1; - const char *key2 = (const char *)value2; - return strcmp(key1, key2) == 0; -} - -static CFHashCode GPBRootExtensionKeyHash(const void *value) { - const char *key = (const char *)value; - return jenkins_one_at_a_time_hash(key); -} - -// NOTE: OSSpinLock may seem like a good fit here but Apple engineers have -// pointed out that they are vulnerable to live locking on iOS in cases of -// priority inversion: -// http://mjtsai.com/blog/2015/12/16/osspinlock-is-unsafe/ -// https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000372.html -static dispatch_semaphore_t gExtensionSingletonDictionarySemaphore; -static CFMutableDictionaryRef gExtensionSingletonDictionary = NULL; -static GPBExtensionRegistry *gDefaultExtensionRegistry = NULL; - -+ (void)initialize { - // Ensure the global is started up. - if (!gExtensionSingletonDictionary) { - gExtensionSingletonDictionarySemaphore = dispatch_semaphore_create(1); - CFDictionaryKeyCallBacks keyCallBacks = { - // See description above for reason for using custom dictionary. - 0, - GPBRootExtensionKeyRetain, - GPBRootExtensionKeyRelease, - GPBRootExtensionCopyKeyDescription, - GPBRootExtensionKeyEqual, - GPBRootExtensionKeyHash, - }; - gExtensionSingletonDictionary = - CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &keyCallBacks, - &kCFTypeDictionaryValueCallBacks); - gDefaultExtensionRegistry = [[GPBExtensionRegistry alloc] init]; - } - - if ([self superclass] == [GPBRootObject class]) { - // This is here to start up all the per file "Root" subclasses. - // This must be done in initialize to enforce thread safety of start up of - // the protocol buffer library. - [self extensionRegistry]; - } -} - -+ (GPBExtensionRegistry *)extensionRegistry { - // Is overridden in all the subclasses that provide extensions to provide the - // per class one. - return gDefaultExtensionRegistry; -} - -+ (void)globallyRegisterExtension:(GPBExtensionDescriptor *)field { - const char *key = [field singletonNameC]; - dispatch_semaphore_wait(gExtensionSingletonDictionarySemaphore, - DISPATCH_TIME_FOREVER); - CFDictionarySetValue(gExtensionSingletonDictionary, key, field); - dispatch_semaphore_signal(gExtensionSingletonDictionarySemaphore); -} - -static id ExtensionForName(id self, SEL _cmd) { - // Really fast way of doing "classname_selName". - // This came up as a hotspot (creation of NSString *) when accessing a - // lot of extensions. - const char *selName = sel_getName(_cmd); - if (selName[0] == '_') { - return nil; // Apple internal selector. - } - size_t selNameLen = 0; - while (1) { - char c = selName[selNameLen]; - if (c == '\0') { // String end. - break; - } - if (c == ':') { - return nil; // Selector took an arg, not one of the runtime methods. - } - ++selNameLen; - } - - const char *className = class_getName(self); - size_t classNameLen = strlen(className); - char key[classNameLen + selNameLen + 2]; - memcpy(key, className, classNameLen); - key[classNameLen] = '_'; - memcpy(&key[classNameLen + 1], selName, selNameLen); - key[classNameLen + 1 + selNameLen] = '\0'; - - // NOTE: Even though this method is called from another C function, - // gExtensionSingletonDictionarySemaphore and gExtensionSingletonDictionary - // will always be initialized. This is because this call flow is just to - // lookup the Extension, meaning the code is calling an Extension class - // message on a Message or Root class. This guarantees that the class was - // initialized and Message classes ensure their Root was also initialized. - NSAssert(gExtensionSingletonDictionary, @"Startup order broken!"); - - dispatch_semaphore_wait(gExtensionSingletonDictionarySemaphore, - DISPATCH_TIME_FOREVER); - id extension = (id)CFDictionaryGetValue(gExtensionSingletonDictionary, key); - // We can't remove the key from the dictionary here (as an optimization), - // two threads could have gone into +resolveClassMethod: for the same method, - // and ended up here; there's no way to ensure both return YES without letting - // both try to wire in the method. - dispatch_semaphore_signal(gExtensionSingletonDictionarySemaphore); - return extension; -} - -BOOL GPBResolveExtensionClassMethod(Class self, SEL sel) { - // Another option would be to register the extensions with the class at - // globallyRegisterExtension: - // Timing the two solutions, this solution turned out to be much faster - // and reduced startup time, and runtime memory. - // The advantage to globallyRegisterExtension is that it would reduce the - // size of the protos somewhat because the singletonNameC wouldn't need - // to include the class name. For a class with a lot of extensions it - // can add up. You could also significantly reduce the code complexity of this - // file. - id extension = ExtensionForName(self, sel); - if (extension != nil) { - const char *encoding = - GPBMessageEncodingForSelector(@selector(getClassValue), NO); - Class metaClass = objc_getMetaClass(class_getName(self)); - IMP imp = imp_implementationWithBlock(^(id obj) { -#pragma unused(obj) - return extension; - }); - BOOL methodAdded = class_addMethod(metaClass, sel, imp, encoding); - // class_addMethod() is documented as also failing if the method was already - // added; so we check if the method is already there and return success so - // the method dispatch will still happen. Why would it already be added? - // Two threads could cause the same method to be bound at the same time, - // but only one will actually bind it; the other still needs to return true - // so things will dispatch. - if (!methodAdded) { - methodAdded = GPBClassHasSel(metaClass, sel); - } - return methodAdded; - } - return NO; -} - - -+ (BOOL)resolveClassMethod:(SEL)sel { - if (GPBResolveExtensionClassMethod(self, sel)) { - return YES; - } - return [super resolveClassMethod:sel]; -} - -@end diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRootObject_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRootObject_PackagePrivate.h deleted file mode 100644 index 3c8f09c8..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRootObject_PackagePrivate.h +++ /dev/null @@ -1,46 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBRootObject.h" - -@class GPBExtensionDescriptor; - -@interface GPBRootObject () - -// Globally register. -+ (void)globallyRegisterExtension:(GPBExtensionDescriptor *)field; - -@end - -// Returns YES if the selector was resolved and added to the class, -// NO otherwise. -BOOL GPBResolveExtensionClassMethod(Class self, SEL sel); diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRuntimeTypes.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRuntimeTypes.h deleted file mode 100644 index 4d552060..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBRuntimeTypes.h +++ /dev/null @@ -1,144 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBBootstrap.h" - -@class GPBEnumDescriptor; -@class GPBMessage; -@class GPBInt32Array; - -/** - * Verifies that a given value can be represented by an enum type. - * */ -typedef BOOL (*GPBEnumValidationFunc)(int32_t); - -/** - * Fetches an EnumDescriptor. - * */ -typedef GPBEnumDescriptor *(*GPBEnumDescriptorFunc)(void); - -/** - * Magic value used at runtime to indicate an enum value that wasn't know at - * compile time. - * */ -enum { - kGPBUnrecognizedEnumeratorValue = (int32_t)0xFBADBEEF, -}; - -/** - * A union for storing all possible Protobuf values. Note that owner is - * responsible for memory management of object types. - * */ -typedef union { - BOOL valueBool; - int32_t valueInt32; - int64_t valueInt64; - uint32_t valueUInt32; - uint64_t valueUInt64; - float valueFloat; - double valueDouble; - GPB_UNSAFE_UNRETAINED NSData *valueData; - GPB_UNSAFE_UNRETAINED NSString *valueString; - GPB_UNSAFE_UNRETAINED GPBMessage *valueMessage; - int32_t valueEnum; -} GPBGenericValue; - -/** - * Enum listing the possible data types that a field can contain. - * - * @note Do not change the order of this enum (or add things to it) without - * thinking about it very carefully. There are several things that depend - * on the order. - * */ -typedef NS_ENUM(uint8_t, GPBDataType) { - /** Field contains boolean value(s). */ - GPBDataTypeBool = 0, - /** Field contains unsigned 4 byte value(s). */ - GPBDataTypeFixed32, - /** Field contains signed 4 byte value(s). */ - GPBDataTypeSFixed32, - /** Field contains float value(s). */ - GPBDataTypeFloat, - /** Field contains unsigned 8 byte value(s). */ - GPBDataTypeFixed64, - /** Field contains signed 8 byte value(s). */ - GPBDataTypeSFixed64, - /** Field contains double value(s). */ - GPBDataTypeDouble, - /** - * Field contains variable length value(s). Inefficient for encoding negative - * numbers – if your field is likely to have negative values, use - * GPBDataTypeSInt32 instead. - **/ - GPBDataTypeInt32, - /** - * Field contains variable length value(s). Inefficient for encoding negative - * numbers – if your field is likely to have negative values, use - * GPBDataTypeSInt64 instead. - **/ - GPBDataTypeInt64, - /** Field contains signed variable length integer value(s). */ - GPBDataTypeSInt32, - /** Field contains signed variable length integer value(s). */ - GPBDataTypeSInt64, - /** Field contains unsigned variable length integer value(s). */ - GPBDataTypeUInt32, - /** Field contains unsigned variable length integer value(s). */ - GPBDataTypeUInt64, - /** Field contains an arbitrary sequence of bytes. */ - GPBDataTypeBytes, - /** Field contains UTF-8 encoded or 7-bit ASCII text. */ - GPBDataTypeString, - /** Field contains message type(s). */ - GPBDataTypeMessage, - /** Field contains message type(s). */ - GPBDataTypeGroup, - /** Field contains enum value(s). */ - GPBDataTypeEnum, -}; - -enum { - /** - * A count of the number of types in GPBDataType. Separated out from the - * GPBDataType enum to avoid warnings regarding not handling GPBDataType_Count - * in switch statements. - **/ - GPBDataType_Count = GPBDataTypeEnum + 1 -}; - -/** An extension range. */ -typedef struct GPBExtensionRange { - /** Inclusive. */ - uint32_t start; - /** Exclusive. */ - uint32_t end; -} GPBExtensionRange; diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownField.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownField.h deleted file mode 100644 index a135cc20..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownField.h +++ /dev/null @@ -1,96 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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> - -@class GPBCodedOutputStream; -@class GPBUInt32Array; -@class GPBUInt64Array; -@class GPBUnknownFieldSet; - -NS_ASSUME_NONNULL_BEGIN -/** - * Store an unknown field. These are used in conjunction with - * GPBUnknownFieldSet. - **/ -@interface GPBUnknownField : NSObject<NSCopying> - -/** The field number the data is stored under. */ -@property(nonatomic, readonly, assign) int32_t number; - -/** An array of varint values for this field. */ -@property(nonatomic, readonly, strong) GPBUInt64Array *varintList; - -/** An array of fixed32 values for this field. */ -@property(nonatomic, readonly, strong) GPBUInt32Array *fixed32List; - -/** An array of fixed64 values for this field. */ -@property(nonatomic, readonly, strong) GPBUInt64Array *fixed64List; - -/** An array of data values for this field. */ -@property(nonatomic, readonly, strong) NSArray<NSData*> *lengthDelimitedList; - -/** An array of groups of values for this field. */ -@property(nonatomic, readonly, strong) NSArray<GPBUnknownFieldSet*> *groupList; - -/** - * Add a value to the varintList. - * - * @param value The value to add. - **/ -- (void)addVarint:(uint64_t)value; -/** - * Add a value to the fixed32List. - * - * @param value The value to add. - **/ -- (void)addFixed32:(uint32_t)value; -/** - * Add a value to the fixed64List. - * - * @param value The value to add. - **/ -- (void)addFixed64:(uint64_t)value; -/** - * Add a value to the lengthDelimitedList. - * - * @param value The value to add. - **/ -- (void)addLengthDelimited:(NSData *)value; -/** - * Add a value to the groupList. - * - * @param value The value to add. - **/ -- (void)addGroup:(GPBUnknownFieldSet *)value; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownField.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownField.m deleted file mode 100644 index 30efe756..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownField.m +++ /dev/null @@ -1,334 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBUnknownField_PackagePrivate.h" - -#import "GPBArray.h" -#import "GPBCodedOutputStream_PackagePrivate.h" - -@implementation GPBUnknownField { - @protected - int32_t number_; - GPBUInt64Array *mutableVarintList_; - GPBUInt32Array *mutableFixed32List_; - GPBUInt64Array *mutableFixed64List_; - NSMutableArray<NSData*> *mutableLengthDelimitedList_; - NSMutableArray<GPBUnknownFieldSet*> *mutableGroupList_; -} - -@synthesize number = number_; -@synthesize varintList = mutableVarintList_; -@synthesize fixed32List = mutableFixed32List_; -@synthesize fixed64List = mutableFixed64List_; -@synthesize lengthDelimitedList = mutableLengthDelimitedList_; -@synthesize groupList = mutableGroupList_; - -- (instancetype)initWithNumber:(int32_t)number { - if ((self = [super init])) { - number_ = number; - } - return self; -} - -- (void)dealloc { - [mutableVarintList_ release]; - [mutableFixed32List_ release]; - [mutableFixed64List_ release]; - [mutableLengthDelimitedList_ release]; - [mutableGroupList_ release]; - - [super dealloc]; -} - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -- (id)copyWithZone:(NSZone *)zone { - GPBUnknownField *result = - [[GPBUnknownField allocWithZone:zone] initWithNumber:number_]; - result->mutableFixed32List_ = [mutableFixed32List_ copyWithZone:zone]; - result->mutableFixed64List_ = [mutableFixed64List_ copyWithZone:zone]; - result->mutableLengthDelimitedList_ = - [mutableLengthDelimitedList_ copyWithZone:zone]; - result->mutableVarintList_ = [mutableVarintList_ copyWithZone:zone]; - if (mutableGroupList_.count) { - result->mutableGroupList_ = [[NSMutableArray allocWithZone:zone] - initWithCapacity:mutableGroupList_.count]; - for (GPBUnknownFieldSet *group in mutableGroupList_) { - GPBUnknownFieldSet *copied = [group copyWithZone:zone]; - [result->mutableGroupList_ addObject:copied]; - [copied release]; - } - } - return result; -} - -- (BOOL)isEqual:(id)object { - if (self == object) return YES; - if (![object isKindOfClass:[GPBUnknownField class]]) return NO; - GPBUnknownField *field = (GPBUnknownField *)object; - BOOL equalVarint = - (mutableVarintList_.count == 0 && field->mutableVarintList_.count == 0) || - [mutableVarintList_ isEqual:field->mutableVarintList_]; - if (!equalVarint) return NO; - BOOL equalFixed32 = (mutableFixed32List_.count == 0 && - field->mutableFixed32List_.count == 0) || - [mutableFixed32List_ isEqual:field->mutableFixed32List_]; - if (!equalFixed32) return NO; - BOOL equalFixed64 = (mutableFixed64List_.count == 0 && - field->mutableFixed64List_.count == 0) || - [mutableFixed64List_ isEqual:field->mutableFixed64List_]; - if (!equalFixed64) return NO; - BOOL equalLDList = - (mutableLengthDelimitedList_.count == 0 && - field->mutableLengthDelimitedList_.count == 0) || - [mutableLengthDelimitedList_ isEqual:field->mutableLengthDelimitedList_]; - if (!equalLDList) return NO; - BOOL equalGroupList = - (mutableGroupList_.count == 0 && field->mutableGroupList_.count == 0) || - [mutableGroupList_ isEqual:field->mutableGroupList_]; - if (!equalGroupList) return NO; - return YES; -} - -- (NSUInteger)hash { - // Just mix the hashes of the possible sub arrays. - const int prime = 31; - NSUInteger result = prime + [mutableVarintList_ hash]; - result = prime * result + [mutableFixed32List_ hash]; - result = prime * result + [mutableFixed64List_ hash]; - result = prime * result + [mutableLengthDelimitedList_ hash]; - result = prime * result + [mutableGroupList_ hash]; - return result; -} - -- (void)writeToOutput:(GPBCodedOutputStream *)output { - NSUInteger count = mutableVarintList_.count; - if (count > 0) { - [output writeUInt64Array:number_ values:mutableVarintList_ tag:0]; - } - count = mutableFixed32List_.count; - if (count > 0) { - [output writeFixed32Array:number_ values:mutableFixed32List_ tag:0]; - } - count = mutableFixed64List_.count; - if (count > 0) { - [output writeFixed64Array:number_ values:mutableFixed64List_ tag:0]; - } - count = mutableLengthDelimitedList_.count; - if (count > 0) { - [output writeBytesArray:number_ values:mutableLengthDelimitedList_]; - } - count = mutableGroupList_.count; - if (count > 0) { - [output writeUnknownGroupArray:number_ values:mutableGroupList_]; - } -} - -- (size_t)serializedSize { - __block size_t result = 0; - int32_t number = number_; - [mutableVarintList_ - enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - result += GPBComputeUInt64Size(number, value); - }]; - - [mutableFixed32List_ - enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - result += GPBComputeFixed32Size(number, value); - }]; - - [mutableFixed64List_ - enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - result += GPBComputeFixed64Size(number, value); - }]; - - for (NSData *data in mutableLengthDelimitedList_) { - result += GPBComputeBytesSize(number, data); - } - - for (GPBUnknownFieldSet *set in mutableGroupList_) { - result += GPBComputeUnknownGroupSize(number, set); - } - - return result; -} - -- (void)writeAsMessageSetExtensionToOutput:(GPBCodedOutputStream *)output { - for (NSData *data in mutableLengthDelimitedList_) { - [output writeRawMessageSetExtension:number_ value:data]; - } -} - -- (size_t)serializedSizeAsMessageSetExtension { - size_t result = 0; - for (NSData *data in mutableLengthDelimitedList_) { - result += GPBComputeRawMessageSetExtensionSize(number_, data); - } - return result; -} - -- (NSString *)description { - NSMutableString *description = [NSMutableString - stringWithFormat:@"<%@ %p>: Field: %d {\n", [self class], self, number_]; - [mutableVarintList_ - enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [description appendFormat:@"\t%llu\n", value]; - }]; - - [mutableFixed32List_ - enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [description appendFormat:@"\t%u\n", value]; - }]; - - [mutableFixed64List_ - enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { -#pragma unused(idx, stop) - [description appendFormat:@"\t%llu\n", value]; - }]; - - for (NSData *data in mutableLengthDelimitedList_) { - [description appendFormat:@"\t%@\n", data]; - } - - for (GPBUnknownFieldSet *set in mutableGroupList_) { - [description appendFormat:@"\t%@\n", set]; - } - [description appendString:@"}"]; - return description; -} - -- (void)mergeFromField:(GPBUnknownField *)other { - GPBUInt64Array *otherVarintList = other.varintList; - if (otherVarintList.count > 0) { - if (mutableVarintList_ == nil) { - mutableVarintList_ = [otherVarintList copy]; - } else { - [mutableVarintList_ addValuesFromArray:otherVarintList]; - } - } - - GPBUInt32Array *otherFixed32List = other.fixed32List; - if (otherFixed32List.count > 0) { - if (mutableFixed32List_ == nil) { - mutableFixed32List_ = [otherFixed32List copy]; - } else { - [mutableFixed32List_ addValuesFromArray:otherFixed32List]; - } - } - - GPBUInt64Array *otherFixed64List = other.fixed64List; - if (otherFixed64List.count > 0) { - if (mutableFixed64List_ == nil) { - mutableFixed64List_ = [otherFixed64List copy]; - } else { - [mutableFixed64List_ addValuesFromArray:otherFixed64List]; - } - } - - NSArray *otherLengthDelimitedList = other.lengthDelimitedList; - if (otherLengthDelimitedList.count > 0) { - if (mutableLengthDelimitedList_ == nil) { - mutableLengthDelimitedList_ = [otherLengthDelimitedList mutableCopy]; - } else { - [mutableLengthDelimitedList_ - addObjectsFromArray:otherLengthDelimitedList]; - } - } - - NSArray *otherGroupList = other.groupList; - if (otherGroupList.count > 0) { - if (mutableGroupList_ == nil) { - mutableGroupList_ = - [[NSMutableArray alloc] initWithCapacity:otherGroupList.count]; - } - // Make our own mutable copies. - for (GPBUnknownFieldSet *group in otherGroupList) { - GPBUnknownFieldSet *copied = [group copy]; - [mutableGroupList_ addObject:copied]; - [copied release]; - } - } -} - -- (void)addVarint:(uint64_t)value { - if (mutableVarintList_ == nil) { - mutableVarintList_ = [[GPBUInt64Array alloc] initWithValues:&value count:1]; - } else { - [mutableVarintList_ addValue:value]; - } -} - -- (void)addFixed32:(uint32_t)value { - if (mutableFixed32List_ == nil) { - mutableFixed32List_ = - [[GPBUInt32Array alloc] initWithValues:&value count:1]; - } else { - [mutableFixed32List_ addValue:value]; - } -} - -- (void)addFixed64:(uint64_t)value { - if (mutableFixed64List_ == nil) { - mutableFixed64List_ = - [[GPBUInt64Array alloc] initWithValues:&value count:1]; - } else { - [mutableFixed64List_ addValue:value]; - } -} - -- (void)addLengthDelimited:(NSData *)value { - if (mutableLengthDelimitedList_ == nil) { - mutableLengthDelimitedList_ = - [[NSMutableArray alloc] initWithObjects:&value count:1]; - } else { - [mutableLengthDelimitedList_ addObject:value]; - } -} - -- (void)addGroup:(GPBUnknownFieldSet *)value { - if (mutableGroupList_ == nil) { - mutableGroupList_ = [[NSMutableArray alloc] initWithObjects:&value count:1]; - } else { - [mutableGroupList_ addObject:value]; - } -} - -#pragma clang diagnostic pop - -@end diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownFieldSet.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownFieldSet.h deleted file mode 100644 index 1b5f24f3..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownFieldSet.h +++ /dev/null @@ -1,82 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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> - -@class GPBUnknownField; - -NS_ASSUME_NONNULL_BEGIN - -/** - * A collection of unknown fields. Fields parsed from the binary representation - * of a message that are unknown end up in an instance of this set. This only - * applies for files declared with the "proto2" syntax. Files declared with the - * "proto3" syntax discard the unknown values. - **/ -@interface GPBUnknownFieldSet : NSObject<NSCopying> - -/** - * Tests to see if the given field number has a value. - * - * @param number The field number to check. - * - * @return YES if there is an unknown field for the given field number. - **/ -- (BOOL)hasField:(int32_t)number; - -/** - * Fetches the GPBUnknownField for the given field number. - * - * @param number The field number to look up. - * - * @return The GPBUnknownField or nil if none found. - **/ -- (nullable GPBUnknownField *)getField:(int32_t)number; - -/** - * @return The number of fields in this set. - **/ -- (NSUInteger)countOfFields; - -/** - * Adds the given field to the set. - * - * @param field The field to add to the set. - **/ -- (void)addField:(GPBUnknownField *)field; - -/** - * @return An array of the GPBUnknownFields sorted by the field numbers. - **/ -- (NSArray<GPBUnknownField *> *)sortedFields; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownFieldSet.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownFieldSet.m deleted file mode 100644 index a7335f05..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownFieldSet.m +++ /dev/null @@ -1,395 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBUnknownFieldSet_PackagePrivate.h" - -#import "GPBCodedInputStream_PackagePrivate.h" -#import "GPBCodedOutputStream.h" -#import "GPBUnknownField_PackagePrivate.h" -#import "GPBUtilities.h" -#import "GPBWireFormat.h" - -#pragma mark Helpers - -static void checkNumber(int32_t number) { - if (number == 0) { - [NSException raise:NSInvalidArgumentException - format:@"Zero is not a valid field number."]; - } -} - -@implementation GPBUnknownFieldSet { - @package - CFMutableDictionaryRef fields_; -} - -static void CopyWorker(const void *key, const void *value, void *context) { -#pragma unused(key) - GPBUnknownField *field = value; - GPBUnknownFieldSet *result = context; - - GPBUnknownField *copied = [field copy]; - [result addField:copied]; - [copied release]; -} - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -- (id)copyWithZone:(NSZone *)zone { - GPBUnknownFieldSet *result = [[GPBUnknownFieldSet allocWithZone:zone] init]; - if (fields_) { - CFDictionaryApplyFunction(fields_, CopyWorker, result); - } - return result; -} - -- (void)dealloc { - if (fields_) { - CFRelease(fields_); - } - [super dealloc]; -} - -- (BOOL)isEqual:(id)object { - BOOL equal = NO; - if ([object isKindOfClass:[GPBUnknownFieldSet class]]) { - GPBUnknownFieldSet *set = (GPBUnknownFieldSet *)object; - if ((fields_ == NULL) && (set->fields_ == NULL)) { - equal = YES; - } else if ((fields_ != NULL) && (set->fields_ != NULL)) { - equal = CFEqual(fields_, set->fields_); - } - } - return equal; -} - -- (NSUInteger)hash { - // Return the hash of the fields dictionary (or just some value). - if (fields_) { - return CFHash(fields_); - } - return (NSUInteger)[GPBUnknownFieldSet class]; -} - -#pragma mark - Public Methods - -- (BOOL)hasField:(int32_t)number { - ssize_t key = number; - return fields_ ? (CFDictionaryGetValue(fields_, (void *)key) != nil) : NO; -} - -- (GPBUnknownField *)getField:(int32_t)number { - ssize_t key = number; - GPBUnknownField *result = - fields_ ? CFDictionaryGetValue(fields_, (void *)key) : nil; - return result; -} - -- (NSUInteger)countOfFields { - return fields_ ? CFDictionaryGetCount(fields_) : 0; -} - -- (NSArray *)sortedFields { - if (!fields_) return [NSArray array]; - size_t count = CFDictionaryGetCount(fields_); - ssize_t keys[count]; - GPBUnknownField *values[count]; - CFDictionaryGetKeysAndValues(fields_, (const void **)keys, - (const void **)values); - struct GPBFieldPair { - ssize_t key; - GPBUnknownField *value; - } pairs[count]; - for (size_t i = 0; i < count; ++i) { - pairs[i].key = keys[i]; - pairs[i].value = values[i]; - }; - qsort_b(pairs, count, sizeof(struct GPBFieldPair), - ^(const void *first, const void *second) { - const struct GPBFieldPair *a = first; - const struct GPBFieldPair *b = second; - return (a->key > b->key) ? 1 : ((a->key == b->key) ? 0 : -1); - }); - for (size_t i = 0; i < count; ++i) { - values[i] = pairs[i].value; - }; - return [NSArray arrayWithObjects:values count:count]; -} - -#pragma mark - Internal Methods - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)output { - if (!fields_) return; - size_t count = CFDictionaryGetCount(fields_); - ssize_t keys[count]; - GPBUnknownField *values[count]; - CFDictionaryGetKeysAndValues(fields_, (const void **)keys, - (const void **)values); - if (count > 1) { - struct GPBFieldPair { - ssize_t key; - GPBUnknownField *value; - } pairs[count]; - - for (size_t i = 0; i < count; ++i) { - pairs[i].key = keys[i]; - pairs[i].value = values[i]; - }; - qsort_b(pairs, count, sizeof(struct GPBFieldPair), - ^(const void *first, const void *second) { - const struct GPBFieldPair *a = first; - const struct GPBFieldPair *b = second; - return (a->key > b->key) ? 1 : ((a->key == b->key) ? 0 : -1); - }); - for (size_t i = 0; i < count; ++i) { - GPBUnknownField *value = pairs[i].value; - [value writeToOutput:output]; - } - } else { - [values[0] writeToOutput:output]; - } -} - -- (NSString *)description { - NSMutableString *description = [NSMutableString - stringWithFormat:@"<%@ %p>: TextFormat: {\n", [self class], self]; - NSString *textFormat = GPBTextFormatForUnknownFieldSet(self, @" "); - [description appendString:textFormat]; - [description appendString:@"}"]; - return description; -} - -static void GPBUnknownFieldSetSerializedSize(const void *key, const void *value, - void *context) { -#pragma unused(key) - GPBUnknownField *field = value; - size_t *result = context; - *result += [field serializedSize]; -} - -- (size_t)serializedSize { - size_t result = 0; - if (fields_) { - CFDictionaryApplyFunction(fields_, GPBUnknownFieldSetSerializedSize, - &result); - } - return result; -} - -static void GPBUnknownFieldSetWriteAsMessageSetTo(const void *key, - const void *value, - void *context) { -#pragma unused(key) - GPBUnknownField *field = value; - GPBCodedOutputStream *output = context; - [field writeAsMessageSetExtensionToOutput:output]; -} - -- (void)writeAsMessageSetTo:(GPBCodedOutputStream *)output { - if (fields_) { - CFDictionaryApplyFunction(fields_, GPBUnknownFieldSetWriteAsMessageSetTo, - output); - } -} - -static void GPBUnknownFieldSetSerializedSizeAsMessageSet(const void *key, - const void *value, - void *context) { -#pragma unused(key) - GPBUnknownField *field = value; - size_t *result = context; - *result += [field serializedSizeAsMessageSetExtension]; -} - -- (size_t)serializedSizeAsMessageSet { - size_t result = 0; - if (fields_) { - CFDictionaryApplyFunction( - fields_, GPBUnknownFieldSetSerializedSizeAsMessageSet, &result); - } - return result; -} - -- (NSData *)data { - NSMutableData *data = [NSMutableData dataWithLength:self.serializedSize]; - GPBCodedOutputStream *output = - [[GPBCodedOutputStream alloc] initWithData:data]; - [self writeToCodedOutputStream:output]; - [output release]; - return data; -} - -+ (BOOL)isFieldTag:(int32_t)tag { - return GPBWireFormatGetTagWireType(tag) != GPBWireFormatEndGroup; -} - -- (void)addField:(GPBUnknownField *)field { - int32_t number = [field number]; - checkNumber(number); - if (!fields_) { - // Use a custom dictionary here because the keys are numbers and conversion - // back and forth from NSNumber isn't worth the cost. - fields_ = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, NULL, - &kCFTypeDictionaryValueCallBacks); - } - ssize_t key = number; - CFDictionarySetValue(fields_, (const void *)key, field); -} - -- (GPBUnknownField *)mutableFieldForNumber:(int32_t)number create:(BOOL)create { - ssize_t key = number; - GPBUnknownField *existing = - fields_ ? CFDictionaryGetValue(fields_, (const void *)key) : nil; - if (!existing && create) { - existing = [[GPBUnknownField alloc] initWithNumber:number]; - // This retains existing. - [self addField:existing]; - [existing release]; - } - return existing; -} - -static void GPBUnknownFieldSetMergeUnknownFields(const void *key, - const void *value, - void *context) { -#pragma unused(key) - GPBUnknownField *field = value; - GPBUnknownFieldSet *self = context; - - int32_t number = [field number]; - checkNumber(number); - GPBUnknownField *oldField = [self mutableFieldForNumber:number create:NO]; - if (oldField) { - [oldField mergeFromField:field]; - } else { - // Merge only comes from GPBMessage's mergeFrom:, so it means we are on - // mutable message and are an mutable instance, so make sure we need - // mutable fields. - GPBUnknownField *fieldCopy = [field copy]; - [self addField:fieldCopy]; - [fieldCopy release]; - } -} - -- (void)mergeUnknownFields:(GPBUnknownFieldSet *)other { - if (other && other->fields_) { - CFDictionaryApplyFunction(other->fields_, - GPBUnknownFieldSetMergeUnknownFields, self); - } -} - -- (void)mergeFromData:(NSData *)data { - GPBCodedInputStream *input = [[GPBCodedInputStream alloc] initWithData:data]; - [self mergeFromCodedInputStream:input]; - [input checkLastTagWas:0]; - [input release]; -} - -- (void)mergeVarintField:(int32_t)number value:(int32_t)value { - checkNumber(number); - [[self mutableFieldForNumber:number create:YES] addVarint:value]; -} - -- (BOOL)mergeFieldFrom:(int32_t)tag input:(GPBCodedInputStream *)input { - NSAssert(GPBWireFormatIsValidTag(tag), @"Got passed an invalid tag"); - int32_t number = GPBWireFormatGetTagFieldNumber(tag); - GPBCodedInputStreamState *state = &input->state_; - switch (GPBWireFormatGetTagWireType(tag)) { - case GPBWireFormatVarint: { - GPBUnknownField *field = [self mutableFieldForNumber:number create:YES]; - [field addVarint:GPBCodedInputStreamReadInt64(state)]; - return YES; - } - case GPBWireFormatFixed64: { - GPBUnknownField *field = [self mutableFieldForNumber:number create:YES]; - [field addFixed64:GPBCodedInputStreamReadFixed64(state)]; - return YES; - } - case GPBWireFormatLengthDelimited: { - NSData *data = GPBCodedInputStreamReadRetainedBytes(state); - GPBUnknownField *field = [self mutableFieldForNumber:number create:YES]; - [field addLengthDelimited:data]; - [data release]; - return YES; - } - case GPBWireFormatStartGroup: { - GPBUnknownFieldSet *unknownFieldSet = [[GPBUnknownFieldSet alloc] init]; - [input readUnknownGroup:number message:unknownFieldSet]; - GPBUnknownField *field = [self mutableFieldForNumber:number create:YES]; - [field addGroup:unknownFieldSet]; - [unknownFieldSet release]; - return YES; - } - case GPBWireFormatEndGroup: - return NO; - case GPBWireFormatFixed32: { - GPBUnknownField *field = [self mutableFieldForNumber:number create:YES]; - [field addFixed32:GPBCodedInputStreamReadFixed32(state)]; - return YES; - } - } -} - -- (void)mergeMessageSetMessage:(int32_t)number data:(NSData *)messageData { - [[self mutableFieldForNumber:number create:YES] - addLengthDelimited:messageData]; -} - -- (void)addUnknownMapEntry:(int32_t)fieldNum value:(NSData *)data { - GPBUnknownField *field = [self mutableFieldForNumber:fieldNum create:YES]; - [field addLengthDelimited:data]; -} - -- (void)mergeFromCodedInputStream:(GPBCodedInputStream *)input { - while (YES) { - int32_t tag = GPBCodedInputStreamReadTag(&input->state_); - if (tag == 0 || ![self mergeFieldFrom:tag input:input]) { - break; - } - } -} - -- (void)getTags:(int32_t *)tags { - if (!fields_) return; - size_t count = CFDictionaryGetCount(fields_); - ssize_t keys[count]; - CFDictionaryGetKeysAndValues(fields_, (const void **)keys, NULL); - for (size_t i = 0; i < count; ++i) { - tags[i] = (int32_t)keys[i]; - } -} - -#pragma clang diagnostic pop - -@end diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownFieldSet_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownFieldSet_PackagePrivate.h deleted file mode 100644 index e27127ad..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownFieldSet_PackagePrivate.h +++ /dev/null @@ -1,61 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBUnknownFieldSet.h" - -@class GPBCodedOutputStream; -@class GPBCodedInputStream; - -@interface GPBUnknownFieldSet () - -+ (BOOL)isFieldTag:(int32_t)tag; - -- (NSData *)data; - -- (size_t)serializedSize; -- (size_t)serializedSizeAsMessageSet; - -- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)output; -- (void)writeAsMessageSetTo:(GPBCodedOutputStream *)output; - -- (void)mergeUnknownFields:(GPBUnknownFieldSet *)other; - -- (void)mergeFromCodedInputStream:(GPBCodedInputStream *)input; -- (void)mergeFromData:(NSData *)data; - -- (void)mergeVarintField:(int32_t)number value:(int32_t)value; -- (BOOL)mergeFieldFrom:(int32_t)tag input:(GPBCodedInputStream *)input; -- (void)mergeMessageSetMessage:(int32_t)number data:(NSData *)messageData; - -- (void)addUnknownMapEntry:(int32_t)fieldNum value:(NSData *)data; - -@end diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownField_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownField_PackagePrivate.h deleted file mode 100644 index 1fbce0f9..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUnknownField_PackagePrivate.h +++ /dev/null @@ -1,49 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBUnknownField.h" - -@class GPBCodedOutputStream; - -@interface GPBUnknownField () - -- (instancetype)initWithNumber:(int32_t)number; - -- (void)writeToOutput:(GPBCodedOutputStream *)output; -- (size_t)serializedSize; - -- (void)writeAsMessageSetExtensionToOutput:(GPBCodedOutputStream *)output; -- (size_t)serializedSizeAsMessageSetExtension; - -- (void)mergeFromField:(GPBUnknownField *)other; - -@end diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUtilities.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUtilities.h deleted file mode 100644 index 5464dfb3..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUtilities.h +++ /dev/null @@ -1,539 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBArray.h" -#import "GPBMessage.h" -#import "GPBRuntimeTypes.h" - -CF_EXTERN_C_BEGIN - -NS_ASSUME_NONNULL_BEGIN - -/** - * Generates a string that should be a valid "TextFormat" for the C++ version - * of Protocol Buffers. - * - * @param message The message to generate from. - * @param lineIndent A string to use as the prefix for all lines generated. Can - * be nil if no extra indent is needed. - * - * @return An NSString with the TextFormat of the message. - **/ -NSString *GPBTextFormatForMessage(GPBMessage *message, - NSString * __nullable lineIndent); - -/** - * Generates a string that should be a valid "TextFormat" for the C++ version - * of Protocol Buffers. - * - * @param unknownSet The unknown field set to generate from. - * @param lineIndent A string to use as the prefix for all lines generated. Can - * be nil if no extra indent is needed. - * - * @return An NSString with the TextFormat of the unknown field set. - **/ -NSString *GPBTextFormatForUnknownFieldSet(GPBUnknownFieldSet * __nullable unknownSet, - NSString * __nullable lineIndent); - -/** - * Checks if the given field number is set on a message. - * - * @param self The message to check. - * @param fieldNumber The field number to check. - * - * @return YES if the field number is set on the given message. - **/ -BOOL GPBMessageHasFieldNumberSet(GPBMessage *self, uint32_t fieldNumber); - -/** - * Checks if the given field is set on a message. - * - * @param self The message to check. - * @param field The field to check. - * - * @return YES if the field is set on the given message. - **/ -BOOL GPBMessageHasFieldSet(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Clears the given field for the given message. - * - * @param self The message for which to clear the field. - * @param field The field to clear. - **/ -void GPBClearMessageField(GPBMessage *self, GPBFieldDescriptor *field); - -//%PDDM-EXPAND GPB_ACCESSORS() -// This block of code is generated, do not edit it directly. - - -// -// Get/Set a given field from/to a message. -// - -// Single Fields - -/** - * Gets the value of a bytes field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -NSData *GPBGetMessageBytesField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of a bytes field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageBytesField(GPBMessage *self, GPBFieldDescriptor *field, NSData *value); - -/** - * Gets the value of a string field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -NSString *GPBGetMessageStringField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of a string field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageStringField(GPBMessage *self, GPBFieldDescriptor *field, NSString *value); - -/** - * Gets the value of a message field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -GPBMessage *GPBGetMessageMessageField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of a message field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageMessageField(GPBMessage *self, GPBFieldDescriptor *field, GPBMessage *value); - -/** - * Gets the value of a group field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -GPBMessage *GPBGetMessageGroupField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of a group field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageGroupField(GPBMessage *self, GPBFieldDescriptor *field, GPBMessage *value); - -/** - * Gets the value of a bool field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -BOOL GPBGetMessageBoolField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of a bool field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageBoolField(GPBMessage *self, GPBFieldDescriptor *field, BOOL value); - -/** - * Gets the value of an int32 field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -int32_t GPBGetMessageInt32Field(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of an int32 field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageInt32Field(GPBMessage *self, GPBFieldDescriptor *field, int32_t value); - -/** - * Gets the value of an uint32 field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -uint32_t GPBGetMessageUInt32Field(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of an uint32 field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageUInt32Field(GPBMessage *self, GPBFieldDescriptor *field, uint32_t value); - -/** - * Gets the value of an int64 field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -int64_t GPBGetMessageInt64Field(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of an int64 field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageInt64Field(GPBMessage *self, GPBFieldDescriptor *field, int64_t value); - -/** - * Gets the value of an uint64 field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -uint64_t GPBGetMessageUInt64Field(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of an uint64 field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageUInt64Field(GPBMessage *self, GPBFieldDescriptor *field, uint64_t value); - -/** - * Gets the value of a float field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -float GPBGetMessageFloatField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of a float field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageFloatField(GPBMessage *self, GPBFieldDescriptor *field, float value); - -/** - * Gets the value of a double field. - * - * @param self The message from which to get the field. - * @param field The field to get. - **/ -double GPBGetMessageDoubleField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of a double field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The to set in the field. - **/ -void GPBSetMessageDoubleField(GPBMessage *self, GPBFieldDescriptor *field, double value); - -/** - * Gets the given enum field of a message. For proto3, if the value isn't a - * member of the enum, @c kGPBUnrecognizedEnumeratorValue will be returned. - * GPBGetMessageRawEnumField will bypass the check and return whatever value - * was set. - * - * @param self The message from which to get the field. - * @param field The field to get. - * - * @return The enum value for the given field. - **/ -int32_t GPBGetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Set the given enum field of a message. You can only set values that are - * members of the enum. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The enum value to set in the field. - **/ -void GPBSetMessageEnumField(GPBMessage *self, - GPBFieldDescriptor *field, - int32_t value); - -/** - * Get the given enum field of a message. No check is done to ensure the value - * was defined in the enum. - * - * @param self The message from which to get the field. - * @param field The field to get. - * - * @return The raw enum value for the given field. - **/ -int32_t GPBGetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Set the given enum field of a message. You can set the value to anything, - * even a value that is not a member of the enum. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param value The raw enum value to set in the field. - **/ -void GPBSetMessageRawEnumField(GPBMessage *self, - GPBFieldDescriptor *field, - int32_t value); - -// Repeated Fields - -/** - * Gets the value of a repeated field. - * - * @param self The message from which to get the field. - * @param field The repeated field to get. - * - * @return A GPB*Array or an NSMutableArray based on the field's type. - **/ -id GPBGetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of a repeated field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param array A GPB*Array or NSMutableArray based on the field's type. - **/ -void GPBSetMessageRepeatedField(GPBMessage *self, - GPBFieldDescriptor *field, - id array); - -// Map Fields - -/** - * Gets the value of a map<> field. - * - * @param self The message from which to get the field. - * @param field The repeated field to get. - * - * @return A GPB*Dictionary or NSMutableDictionary based on the field's type. - **/ -id GPBGetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field); - -/** - * Sets the value of a map<> field. - * - * @param self The message into which to set the field. - * @param field The field to set. - * @param dictionary A GPB*Dictionary or NSMutableDictionary based on the - * field's type. - **/ -void GPBSetMessageMapField(GPBMessage *self, - GPBFieldDescriptor *field, - id dictionary); - -//%PDDM-EXPAND-END GPB_ACCESSORS() - -/** - * Returns an empty NSData to assign to byte fields when you wish to assign them - * to empty. Prevents allocating a lot of little [NSData data] objects. - **/ -NSData *GPBEmptyNSData(void) __attribute__((pure)); - -/** - * Drops the `unknownFields` from the given message and from all sub message. - **/ -void GPBMessageDropUnknownFieldsRecursively(GPBMessage *message); - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - - -//%PDDM-DEFINE GPB_ACCESSORS() -//% -//%// -//%// Get/Set a given field from/to a message. -//%// -//% -//%// Single Fields -//% -//%GPB_ACCESSOR_SINGLE_FULL(Bytes, NSData, , *) -//%GPB_ACCESSOR_SINGLE_FULL(String, NSString, , *) -//%GPB_ACCESSOR_SINGLE_FULL(Message, GPBMessage, , *) -//%GPB_ACCESSOR_SINGLE_FULL(Group, GPBMessage, , *) -//%GPB_ACCESSOR_SINGLE(Bool, BOOL, ) -//%GPB_ACCESSOR_SINGLE(Int32, int32_t, n) -//%GPB_ACCESSOR_SINGLE(UInt32, uint32_t, n) -//%GPB_ACCESSOR_SINGLE(Int64, int64_t, n) -//%GPB_ACCESSOR_SINGLE(UInt64, uint64_t, n) -//%GPB_ACCESSOR_SINGLE(Float, float, ) -//%GPB_ACCESSOR_SINGLE(Double, double, ) -//%/** -//% * Gets the given enum field of a message. For proto3, if the value isn't a -//% * member of the enum, @c kGPBUnrecognizedEnumeratorValue will be returned. -//% * GPBGetMessageRawEnumField will bypass the check and return whatever value -//% * was set. -//% * -//% * @param self The message from which to get the field. -//% * @param field The field to get. -//% * -//% * @return The enum value for the given field. -//% **/ -//%int32_t GPBGetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field); -//% -//%/** -//% * Set the given enum field of a message. You can only set values that are -//% * members of the enum. -//% * -//% * @param self The message into which to set the field. -//% * @param field The field to set. -//% * @param value The enum value to set in the field. -//% **/ -//%void GPBSetMessageEnumField(GPBMessage *self, -//% GPBFieldDescriptor *field, -//% int32_t value); -//% -//%/** -//% * Get the given enum field of a message. No check is done to ensure the value -//% * was defined in the enum. -//% * -//% * @param self The message from which to get the field. -//% * @param field The field to get. -//% * -//% * @return The raw enum value for the given field. -//% **/ -//%int32_t GPBGetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field); -//% -//%/** -//% * Set the given enum field of a message. You can set the value to anything, -//% * even a value that is not a member of the enum. -//% * -//% * @param self The message into which to set the field. -//% * @param field The field to set. -//% * @param value The raw enum value to set in the field. -//% **/ -//%void GPBSetMessageRawEnumField(GPBMessage *self, -//% GPBFieldDescriptor *field, -//% int32_t value); -//% -//%// Repeated Fields -//% -//%/** -//% * Gets the value of a repeated field. -//% * -//% * @param self The message from which to get the field. -//% * @param field The repeated field to get. -//% * -//% * @return A GPB*Array or an NSMutableArray based on the field's type. -//% **/ -//%id GPBGetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field); -//% -//%/** -//% * Sets the value of a repeated field. -//% * -//% * @param self The message into which to set the field. -//% * @param field The field to set. -//% * @param array A GPB*Array or NSMutableArray based on the field's type. -//% **/ -//%void GPBSetMessageRepeatedField(GPBMessage *self, -//% GPBFieldDescriptor *field, -//% id array); -//% -//%// Map Fields -//% -//%/** -//% * Gets the value of a map<> field. -//% * -//% * @param self The message from which to get the field. -//% * @param field The repeated field to get. -//% * -//% * @return A GPB*Dictionary or NSMutableDictionary based on the field's type. -//% **/ -//%id GPBGetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field); -//% -//%/** -//% * Sets the value of a map<> field. -//% * -//% * @param self The message into which to set the field. -//% * @param field The field to set. -//% * @param dictionary A GPB*Dictionary or NSMutableDictionary based on the -//% * field's type. -//% **/ -//%void GPBSetMessageMapField(GPBMessage *self, -//% GPBFieldDescriptor *field, -//% id dictionary); -//% - -//%PDDM-DEFINE GPB_ACCESSOR_SINGLE(NAME, TYPE, AN) -//%GPB_ACCESSOR_SINGLE_FULL(NAME, TYPE, AN, ) -//%PDDM-DEFINE GPB_ACCESSOR_SINGLE_FULL(NAME, TYPE, AN, TisP) -//%/** -//% * Gets the value of a##AN NAME$L field. -//% * -//% * @param self The message from which to get the field. -//% * @param field The field to get. -//% **/ -//%TYPE TisP##GPBGetMessage##NAME##Field(GPBMessage *self, GPBFieldDescriptor *field); -//% -//%/** -//% * Sets the value of a##AN NAME$L field. -//% * -//% * @param self The message into which to set the field. -//% * @param field The field to set. -//% * @param value The to set in the field. -//% **/ -//%void GPBSetMessage##NAME##Field(GPBMessage *self, GPBFieldDescriptor *field, TYPE TisP##value); -//% diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUtilities.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUtilities.m deleted file mode 100644 index 5029ec73..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUtilities.m +++ /dev/null @@ -1,1923 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBUtilities_PackagePrivate.h" - -#import <objc/runtime.h> - -#import "GPBArray_PackagePrivate.h" -#import "GPBDescriptor_PackagePrivate.h" -#import "GPBDictionary_PackagePrivate.h" -#import "GPBMessage_PackagePrivate.h" -#import "GPBUnknownField.h" -#import "GPBUnknownFieldSet.h" - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -static void AppendTextFormatForMessage(GPBMessage *message, - NSMutableString *toStr, - NSString *lineIndent); - -NSData *GPBEmptyNSData(void) { - static dispatch_once_t onceToken; - static NSData *defaultNSData = nil; - dispatch_once(&onceToken, ^{ - defaultNSData = [[NSData alloc] init]; - }); - return defaultNSData; -} - -void GPBMessageDropUnknownFieldsRecursively(GPBMessage *initialMessage) { - if (!initialMessage) { - return; - } - - // Use an array as a list to process to avoid recursion. - NSMutableArray *todo = [NSMutableArray arrayWithObject:initialMessage]; - - while (todo.count) { - GPBMessage *msg = todo.lastObject; - [todo removeLastObject]; - - // Clear unknowns. - msg.unknownFields = nil; - - // Handle the message fields. - GPBDescriptor *descriptor = [[msg class] descriptor]; - for (GPBFieldDescriptor *field in descriptor->fields_) { - if (!GPBFieldDataTypeIsMessage(field)) { - continue; - } - switch (field.fieldType) { - case GPBFieldTypeSingle: - if (GPBGetHasIvarField(msg, field)) { - GPBMessage *fieldMessage = GPBGetObjectIvarWithFieldNoAutocreate(msg, field); - [todo addObject:fieldMessage]; - } - break; - - case GPBFieldTypeRepeated: { - NSArray *fieldMessages = GPBGetObjectIvarWithFieldNoAutocreate(msg, field); - if (fieldMessages.count) { - [todo addObjectsFromArray:fieldMessages]; - } - break; - } - - case GPBFieldTypeMap: { - id rawFieldMap = GPBGetObjectIvarWithFieldNoAutocreate(msg, field); - switch (field.mapKeyDataType) { - case GPBDataTypeBool: - [(GPBBoolObjectDictionary*)rawFieldMap enumerateKeysAndObjectsUsingBlock:^( - BOOL key, id _Nonnull object, BOOL * _Nonnull stop) { - #pragma unused(key, stop) - [todo addObject:object]; - }]; - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - [(GPBUInt32ObjectDictionary*)rawFieldMap enumerateKeysAndObjectsUsingBlock:^( - uint32_t key, id _Nonnull object, BOOL * _Nonnull stop) { - #pragma unused(key, stop) - [todo addObject:object]; - }]; - break; - case GPBDataTypeInt32: - case GPBDataTypeSFixed32: - case GPBDataTypeSInt32: - [(GPBInt32ObjectDictionary*)rawFieldMap enumerateKeysAndObjectsUsingBlock:^( - int32_t key, id _Nonnull object, BOOL * _Nonnull stop) { - #pragma unused(key, stop) - [todo addObject:object]; - }]; - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - [(GPBUInt64ObjectDictionary*)rawFieldMap enumerateKeysAndObjectsUsingBlock:^( - uint64_t key, id _Nonnull object, BOOL * _Nonnull stop) { - #pragma unused(key, stop) - [todo addObject:object]; - }]; - break; - case GPBDataTypeInt64: - case GPBDataTypeSFixed64: - case GPBDataTypeSInt64: - [(GPBInt64ObjectDictionary*)rawFieldMap enumerateKeysAndObjectsUsingBlock:^( - int64_t key, id _Nonnull object, BOOL * _Nonnull stop) { - #pragma unused(key, stop) - [todo addObject:object]; - }]; - break; - case GPBDataTypeString: - [(NSDictionary*)rawFieldMap enumerateKeysAndObjectsUsingBlock:^( - NSString * _Nonnull key, GPBMessage * _Nonnull obj, BOOL * _Nonnull stop) { - #pragma unused(key, stop) - [todo addObject:obj]; - }]; - break; - case GPBDataTypeFloat: - case GPBDataTypeDouble: - case GPBDataTypeEnum: - case GPBDataTypeBytes: - case GPBDataTypeGroup: - case GPBDataTypeMessage: - NSCAssert(NO, @"Aren't valid key types."); - } - break; - } // switch(field.mapKeyDataType) - } // switch(field.fieldType) - } // for(fields) - - // Handle any extensions holding messages. - for (GPBExtensionDescriptor *extension in [msg extensionsCurrentlySet]) { - if (!GPBDataTypeIsMessage(extension.dataType)) { - continue; - } - if (extension.isRepeated) { - NSArray *extMessages = [msg getExtension:extension]; - [todo addObjectsFromArray:extMessages]; - } else { - GPBMessage *extMessage = [msg getExtension:extension]; - [todo addObject:extMessage]; - } - } // for(extensionsCurrentlySet) - - } // while(todo.count) -} - - -// -- About Version Checks -- -// There's actually 3 places these checks all come into play: -// 1. When the generated source is compile into .o files, the header check -// happens. This is checking the protoc used matches the library being used -// when making the .o. -// 2. Every place a generated proto header is included in a developer's code, -// the header check comes into play again. But this time it is checking that -// the current library headers being used still support/match the ones for -// the generated code. -// 3. At runtime the final check here (GPBCheckRuntimeVersionsInternal), is -// called from the generated code passing in values captured when the -// generated code's .o was made. This checks that at runtime the generated -// code and runtime library match. - -void GPBCheckRuntimeVersionSupport(int32_t objcRuntimeVersion) { - // NOTE: This is passing the value captured in the compiled code to check - // against the values captured when the runtime support was compiled. This - // ensures the library code isn't in a different framework/library that - // was generated with a non matching version. - if (GOOGLE_PROTOBUF_OBJC_VERSION < objcRuntimeVersion) { - // Library is too old for headers. - [NSException raise:NSInternalInconsistencyException - format:@"Linked to ProtocolBuffer runtime version %d," - @" but code compiled needing atleast %d!", - GOOGLE_PROTOBUF_OBJC_VERSION, objcRuntimeVersion]; - } - if (objcRuntimeVersion < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION) { - // Headers are too old for library. - [NSException raise:NSInternalInconsistencyException - format:@"Proto generation source compiled against runtime" - @" version %d, but this version of the runtime only" - @" supports back to %d!", - objcRuntimeVersion, - GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION]; - } -} - -// This api is no longer used for version checks. 30001 is the last version -// using this old versioning model. When that support is removed, this function -// can be removed (along with the declaration in GPBUtilities_PackagePrivate.h). -void GPBCheckRuntimeVersionInternal(int32_t version) { - GPBInternalCompileAssert(GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION == 30001, - time_to_remove_this_old_version_shim); - if (version != GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION) { - [NSException raise:NSInternalInconsistencyException - format:@"Linked to ProtocolBuffer runtime version %d," - @" but code compiled with version %d!", - GOOGLE_PROTOBUF_OBJC_GEN_VERSION, version]; - } -} - -BOOL GPBMessageHasFieldNumberSet(GPBMessage *self, uint32_t fieldNumber) { - GPBDescriptor *descriptor = [self descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:fieldNumber]; - return GPBMessageHasFieldSet(self, field); -} - -BOOL GPBMessageHasFieldSet(GPBMessage *self, GPBFieldDescriptor *field) { - if (self == nil || field == nil) return NO; - - // Repeated/Map don't use the bit, they check the count. - if (GPBFieldIsMapOrArray(field)) { - // Array/map type doesn't matter, since GPB*Array/NSArray and - // GPB*Dictionary/NSDictionary all support -count; - NSArray *arrayOrMap = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - return (arrayOrMap.count > 0); - } else { - return GPBGetHasIvarField(self, field); - } -} - -void GPBClearMessageField(GPBMessage *self, GPBFieldDescriptor *field) { - // If not set, nothing to do. - if (!GPBGetHasIvarField(self, field)) { - return; - } - - if (GPBFieldStoresObject(field)) { - // Object types are handled slightly differently, they need to be released. - uint8_t *storage = (uint8_t *)self->messageStorage_; - id *typePtr = (id *)&storage[field->description_->offset]; - [*typePtr release]; - *typePtr = nil; - } else { - // POD types just need to clear the has bit as the Get* method will - // fetch the default when needed. - } - GPBSetHasIvarField(self, field, NO); -} - -BOOL GPBGetHasIvar(GPBMessage *self, int32_t idx, uint32_t fieldNumber) { - NSCAssert(self->messageStorage_ != NULL, - @"%@: All messages should have storage (from init)", - [self class]); - if (idx < 0) { - NSCAssert(fieldNumber != 0, @"Invalid field number."); - BOOL hasIvar = (self->messageStorage_->_has_storage_[-idx] == fieldNumber); - return hasIvar; - } else { - NSCAssert(idx != GPBNoHasBit, @"Invalid has bit."); - uint32_t byteIndex = idx / 32; - uint32_t bitMask = (1 << (idx % 32)); - BOOL hasIvar = - (self->messageStorage_->_has_storage_[byteIndex] & bitMask) ? YES : NO; - return hasIvar; - } -} - -uint32_t GPBGetHasOneof(GPBMessage *self, int32_t idx) { - NSCAssert(idx < 0, @"%@: invalid index (%d) for oneof.", - [self class], idx); - uint32_t result = self->messageStorage_->_has_storage_[-idx]; - return result; -} - -void GPBSetHasIvar(GPBMessage *self, int32_t idx, uint32_t fieldNumber, - BOOL value) { - if (idx < 0) { - NSCAssert(fieldNumber != 0, @"Invalid field number."); - uint32_t *has_storage = self->messageStorage_->_has_storage_; - has_storage[-idx] = (value ? fieldNumber : 0); - } else { - NSCAssert(idx != GPBNoHasBit, @"Invalid has bit."); - uint32_t *has_storage = self->messageStorage_->_has_storage_; - uint32_t byte = idx / 32; - uint32_t bitMask = (1 << (idx % 32)); - if (value) { - has_storage[byte] |= bitMask; - } else { - has_storage[byte] &= ~bitMask; - } - } -} - -void GPBMaybeClearOneof(GPBMessage *self, GPBOneofDescriptor *oneof, - int32_t oneofHasIndex, uint32_t fieldNumberNotToClear) { - uint32_t fieldNumberSet = GPBGetHasOneof(self, oneofHasIndex); - if ((fieldNumberSet == fieldNumberNotToClear) || (fieldNumberSet == 0)) { - // Do nothing/nothing set in the oneof. - return; - } - - // Like GPBClearMessageField(), free the memory if an objecttype is set, - // pod types don't need to do anything. - GPBFieldDescriptor *fieldSet = [oneof fieldWithNumber:fieldNumberSet]; - NSCAssert(fieldSet, - @"%@: oneof set to something (%u) not in the oneof?", - [self class], fieldNumberSet); - if (fieldSet && GPBFieldStoresObject(fieldSet)) { - uint8_t *storage = (uint8_t *)self->messageStorage_; - id *typePtr = (id *)&storage[fieldSet->description_->offset]; - [*typePtr release]; - *typePtr = nil; - } - - // Set to nothing stored in the oneof. - // (field number doesn't matter since setting to nothing). - GPBSetHasIvar(self, oneofHasIndex, 1, NO); -} - -#pragma mark - IVar accessors - -//%PDDM-DEFINE IVAR_POD_ACCESSORS_DEFN(NAME, TYPE) -//%TYPE GPBGetMessage##NAME##Field(GPBMessage *self, -//% TYPE$S NAME$S GPBFieldDescriptor *field) { -//% if (GPBGetHasIvarField(self, field)) { -//% uint8_t *storage = (uint8_t *)self->messageStorage_; -//% TYPE *typePtr = (TYPE *)&storage[field->description_->offset]; -//% return *typePtr; -//% } else { -//% return field.defaultValue.value##NAME; -//% } -//%} -//% -//%// Only exists for public api, no core code should use this. -//%void GPBSetMessage##NAME##Field(GPBMessage *self, -//% NAME$S GPBFieldDescriptor *field, -//% NAME$S TYPE value) { -//% if (self == nil || field == nil) return; -//% GPBFileSyntax syntax = [self descriptor].file.syntax; -//% GPBSet##NAME##IvarWithFieldInternal(self, field, value, syntax); -//%} -//% -//%void GPBSet##NAME##IvarWithFieldInternal(GPBMessage *self, -//% NAME$S GPBFieldDescriptor *field, -//% NAME$S TYPE value, -//% NAME$S GPBFileSyntax syntax) { -//% GPBOneofDescriptor *oneof = field->containingOneof_; -//% if (oneof) { -//% GPBMessageFieldDescription *fieldDesc = field->description_; -//% GPBMaybeClearOneof(self, oneof, fieldDesc->hasIndex, fieldDesc->number); -//% } -//% NSCAssert(self->messageStorage_ != NULL, -//% @"%@: All messages should have storage (from init)", -//% [self class]); -//%#if defined(__clang_analyzer__) -//% if (self->messageStorage_ == NULL) return; -//%#endif -//% uint8_t *storage = (uint8_t *)self->messageStorage_; -//% TYPE *typePtr = (TYPE *)&storage[field->description_->offset]; -//% *typePtr = value; -//% // proto2: any value counts as having been set; proto3, it -//% // has to be a non zero value or be in a oneof. -//% BOOL hasValue = ((syntax == GPBFileSyntaxProto2) -//% || (value != (TYPE)0) -//% || (field->containingOneof_ != NULL)); -//% GPBSetHasIvarField(self, field, hasValue); -//% GPBBecomeVisibleToAutocreator(self); -//%} -//% -//%PDDM-DEFINE IVAR_ALIAS_DEFN_OBJECT(NAME, TYPE) -//%// Only exists for public api, no core code should use this. -//%TYPE *GPBGetMessage##NAME##Field(GPBMessage *self, -//% TYPE$S NAME$S GPBFieldDescriptor *field) { -//% return (TYPE *)GPBGetObjectIvarWithField(self, field); -//%} -//% -//%// Only exists for public api, no core code should use this. -//%void GPBSetMessage##NAME##Field(GPBMessage *self, -//% NAME$S GPBFieldDescriptor *field, -//% NAME$S TYPE *value) { -//% GPBSetObjectIvarWithField(self, field, (id)value); -//%} -//% - -// Object types are handled slightly differently, they need to be released -// and retained. - -void GPBSetAutocreatedRetainedObjectIvarWithField( - GPBMessage *self, GPBFieldDescriptor *field, - id __attribute__((ns_consumed)) value) { - uint8_t *storage = (uint8_t *)self->messageStorage_; - id *typePtr = (id *)&storage[field->description_->offset]; - NSCAssert(*typePtr == NULL, @"Can't set autocreated object more than once."); - *typePtr = value; -} - -void GPBClearAutocreatedMessageIvarWithField(GPBMessage *self, - GPBFieldDescriptor *field) { - if (GPBGetHasIvarField(self, field)) { - return; - } - uint8_t *storage = (uint8_t *)self->messageStorage_; - id *typePtr = (id *)&storage[field->description_->offset]; - GPBMessage *oldValue = *typePtr; - *typePtr = NULL; - GPBClearMessageAutocreator(oldValue); - [oldValue release]; -} - -// This exists only for briging some aliased types, nothing else should use it. -static void GPBSetObjectIvarWithField(GPBMessage *self, - GPBFieldDescriptor *field, id value) { - if (self == nil || field == nil) return; - GPBFileSyntax syntax = [self descriptor].file.syntax; - GPBSetRetainedObjectIvarWithFieldInternal(self, field, [value retain], - syntax); -} - -void GPBSetObjectIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, id value, - GPBFileSyntax syntax) { - GPBSetRetainedObjectIvarWithFieldInternal(self, field, [value retain], - syntax); -} - -void GPBSetRetainedObjectIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - id value, GPBFileSyntax syntax) { - NSCAssert(self->messageStorage_ != NULL, - @"%@: All messages should have storage (from init)", - [self class]); -#if defined(__clang_analyzer__) - if (self->messageStorage_ == NULL) return; -#endif - GPBDataType fieldType = GPBGetFieldDataType(field); - BOOL isMapOrArray = GPBFieldIsMapOrArray(field); - BOOL fieldIsMessage = GPBDataTypeIsMessage(fieldType); -#ifdef DEBUG - if (value == nil && !isMapOrArray && !fieldIsMessage && - field.hasDefaultValue) { - // Setting a message to nil is an obvious way to "clear" the value - // as there is no way to set a non-empty default value for messages. - // - // For Strings and Bytes that have default values set it is not clear what - // should be done when their value is set to nil. Is the intention just to - // clear the set value and reset to default, or is the intention to set the - // value to the empty string/data? Arguments can be made for both cases. - // 'nil' has been abused as a replacement for an empty string/data in ObjC. - // We decided to be consistent with all "object" types and clear the has - // field, and fall back on the default value. The warning below will only - // appear in debug, but the could should be changed so the intention is - // clear. - NSString *hasSel = NSStringFromSelector(field->hasOrCountSel_); - NSString *propName = field.name; - NSString *className = self.descriptor.name; - NSLog(@"warning: '%@.%@ = nil;' is not clearly defined for fields with " - @"default values. Please use '%@.%@ = %@' if you want to set it to " - @"empty, or call '%@.%@ = NO' to reset it to it's default value of " - @"'%@'. Defaulting to resetting default value.", - className, propName, className, propName, - (fieldType == GPBDataTypeString) ? @"@\"\"" : @"GPBEmptyNSData()", - className, hasSel, field.defaultValue.valueString); - // Note: valueString, depending on the type, it could easily be - // valueData/valueMessage. - } -#endif // DEBUG - if (!isMapOrArray) { - // Non repeated/map can be in an oneof, clear any existing value from the - // oneof. - GPBOneofDescriptor *oneof = field->containingOneof_; - if (oneof) { - GPBMessageFieldDescription *fieldDesc = field->description_; - GPBMaybeClearOneof(self, oneof, fieldDesc->hasIndex, fieldDesc->number); - } - // Clear "has" if they are being set to nil. - BOOL setHasValue = (value != nil); - // Under proto3, Bytes & String fields get cleared by resetting them to - // their default (empty) values, so if they are set to something of length - // zero, they are being cleared. - if ((syntax == GPBFileSyntaxProto3) && !fieldIsMessage && - ([value length] == 0)) { - // Except, if the field was in a oneof, then it still gets recorded as - // having been set so the state of the oneof can be serialized back out. - if (!oneof) { - setHasValue = NO; - } - if (setHasValue) { - NSCAssert(value != nil, @"Should never be setting has for nil"); - } else { - // The value passed in was retained, it must be released since we - // aren't saving anything in the field. - [value release]; - value = nil; - } - } - GPBSetHasIvarField(self, field, setHasValue); - } - uint8_t *storage = (uint8_t *)self->messageStorage_; - id *typePtr = (id *)&storage[field->description_->offset]; - - id oldValue = *typePtr; - - *typePtr = value; - - if (oldValue) { - if (isMapOrArray) { - if (field.fieldType == GPBFieldTypeRepeated) { - // If the old array was autocreated by us, then clear it. - if (GPBDataTypeIsObject(fieldType)) { - if ([oldValue isKindOfClass:[GPBAutocreatedArray class]]) { - GPBAutocreatedArray *autoArray = oldValue; - if (autoArray->_autocreator == self) { - autoArray->_autocreator = nil; - } - } - } else { - // Type doesn't matter, it is a GPB*Array. - GPBInt32Array *gpbArray = oldValue; - if (gpbArray->_autocreator == self) { - gpbArray->_autocreator = nil; - } - } - } else { // GPBFieldTypeMap - // If the old map was autocreated by us, then clear it. - if ((field.mapKeyDataType == GPBDataTypeString) && - GPBDataTypeIsObject(fieldType)) { - if ([oldValue isKindOfClass:[GPBAutocreatedDictionary class]]) { - GPBAutocreatedDictionary *autoDict = oldValue; - if (autoDict->_autocreator == self) { - autoDict->_autocreator = nil; - } - } - } else { - // Type doesn't matter, it is a GPB*Dictionary. - GPBInt32Int32Dictionary *gpbDict = oldValue; - if (gpbDict->_autocreator == self) { - gpbDict->_autocreator = nil; - } - } - } - } else if (fieldIsMessage) { - // If the old message value was autocreated by us, then clear it. - GPBMessage *oldMessageValue = oldValue; - if (GPBWasMessageAutocreatedBy(oldMessageValue, self)) { - GPBClearMessageAutocreator(oldMessageValue); - } - } - [oldValue release]; - } - - GPBBecomeVisibleToAutocreator(self); -} - -id GPBGetObjectIvarWithFieldNoAutocreate(GPBMessage *self, - GPBFieldDescriptor *field) { - if (self->messageStorage_ == nil) { - return nil; - } - uint8_t *storage = (uint8_t *)self->messageStorage_; - id *typePtr = (id *)&storage[field->description_->offset]; - return *typePtr; -} - -id GPBGetObjectIvarWithField(GPBMessage *self, GPBFieldDescriptor *field) { - NSCAssert(!GPBFieldIsMapOrArray(field), @"Shouldn't get here"); - if (GPBGetHasIvarField(self, field)) { - uint8_t *storage = (uint8_t *)self->messageStorage_; - id *typePtr = (id *)&storage[field->description_->offset]; - return *typePtr; - } - // Not set... - - // Non messages (string/data), get their default. - if (!GPBFieldDataTypeIsMessage(field)) { - return field.defaultValue.valueMessage; - } - - GPBPrepareReadOnlySemaphore(self); - dispatch_semaphore_wait(self->readOnlySemaphore_, DISPATCH_TIME_FOREVER); - GPBMessage *result = GPBGetObjectIvarWithFieldNoAutocreate(self, field); - if (!result) { - // For non repeated messages, create the object, set it and return it. - // This object will not initially be visible via GPBGetHasIvar, so - // we save its creator so it can become visible if it's mutated later. - result = GPBCreateMessageWithAutocreator(field.msgClass, self, field); - GPBSetAutocreatedRetainedObjectIvarWithField(self, field, result); - } - dispatch_semaphore_signal(self->readOnlySemaphore_); - return result; -} - -// Only exists for public api, no core code should use this. -int32_t GPBGetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field) { - GPBFileSyntax syntax = [self descriptor].file.syntax; - return GPBGetEnumIvarWithFieldInternal(self, field, syntax); -} - -int32_t GPBGetEnumIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - GPBFileSyntax syntax) { - int32_t result = GPBGetMessageInt32Field(self, field); - // If this is presevering unknown enums, make sure the value is valid before - // returning it. - if (GPBHasPreservingUnknownEnumSemantics(syntax) && - ![field isValidEnumValue:result]) { - result = kGPBUnrecognizedEnumeratorValue; - } - return result; -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field, - int32_t value) { - GPBFileSyntax syntax = [self descriptor].file.syntax; - GPBSetInt32IvarWithFieldInternal(self, field, value, syntax); -} - -void GPBSetEnumIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, int32_t value, - GPBFileSyntax syntax) { - // Don't allow in unknown values. Proto3 can use the Raw method. - if (![field isValidEnumValue:value]) { - [NSException raise:NSInvalidArgumentException - format:@"%@.%@: Attempt to set an unknown enum value (%d)", - [self class], field.name, value]; - } - GPBSetInt32IvarWithFieldInternal(self, field, value, syntax); -} - -// Only exists for public api, no core code should use this. -int32_t GPBGetMessageRawEnumField(GPBMessage *self, - GPBFieldDescriptor *field) { - int32_t result = GPBGetMessageInt32Field(self, field); - return result; -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field, - int32_t value) { - GPBFileSyntax syntax = [self descriptor].file.syntax; - GPBSetInt32IvarWithFieldInternal(self, field, value, syntax); -} - -BOOL GPBGetMessageBoolField(GPBMessage *self, - GPBFieldDescriptor *field) { - if (GPBGetHasIvarField(self, field)) { - // Bools are stored in the has bits to avoid needing explicit space in the - // storage structure. - // (the field number passed to the HasIvar helper doesn't really matter - // since the offset is never negative) - GPBMessageFieldDescription *fieldDesc = field->description_; - return GPBGetHasIvar(self, (int32_t)(fieldDesc->offset), fieldDesc->number); - } else { - return field.defaultValue.valueBool; - } -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageBoolField(GPBMessage *self, - GPBFieldDescriptor *field, - BOOL value) { - if (self == nil || field == nil) return; - GPBFileSyntax syntax = [self descriptor].file.syntax; - GPBSetBoolIvarWithFieldInternal(self, field, value, syntax); -} - -void GPBSetBoolIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - BOOL value, - GPBFileSyntax syntax) { - GPBMessageFieldDescription *fieldDesc = field->description_; - GPBOneofDescriptor *oneof = field->containingOneof_; - if (oneof) { - GPBMaybeClearOneof(self, oneof, fieldDesc->hasIndex, fieldDesc->number); - } - - // Bools are stored in the has bits to avoid needing explicit space in the - // storage structure. - // (the field number passed to the HasIvar helper doesn't really matter since - // the offset is never negative) - GPBSetHasIvar(self, (int32_t)(fieldDesc->offset), fieldDesc->number, value); - - // proto2: any value counts as having been set; proto3, it - // has to be a non zero value or be in a oneof. - BOOL hasValue = ((syntax == GPBFileSyntaxProto2) - || (value != (BOOL)0) - || (field->containingOneof_ != NULL)); - GPBSetHasIvarField(self, field, hasValue); - GPBBecomeVisibleToAutocreator(self); -} - -//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(Int32, int32_t) -// This block of code is generated, do not edit it directly. - -int32_t GPBGetMessageInt32Field(GPBMessage *self, - GPBFieldDescriptor *field) { - if (GPBGetHasIvarField(self, field)) { - uint8_t *storage = (uint8_t *)self->messageStorage_; - int32_t *typePtr = (int32_t *)&storage[field->description_->offset]; - return *typePtr; - } else { - return field.defaultValue.valueInt32; - } -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageInt32Field(GPBMessage *self, - GPBFieldDescriptor *field, - int32_t value) { - if (self == nil || field == nil) return; - GPBFileSyntax syntax = [self descriptor].file.syntax; - GPBSetInt32IvarWithFieldInternal(self, field, value, syntax); -} - -void GPBSetInt32IvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - int32_t value, - GPBFileSyntax syntax) { - GPBOneofDescriptor *oneof = field->containingOneof_; - if (oneof) { - GPBMessageFieldDescription *fieldDesc = field->description_; - GPBMaybeClearOneof(self, oneof, fieldDesc->hasIndex, fieldDesc->number); - } - NSCAssert(self->messageStorage_ != NULL, - @"%@: All messages should have storage (from init)", - [self class]); -#if defined(__clang_analyzer__) - if (self->messageStorage_ == NULL) return; -#endif - uint8_t *storage = (uint8_t *)self->messageStorage_; - int32_t *typePtr = (int32_t *)&storage[field->description_->offset]; - *typePtr = value; - // proto2: any value counts as having been set; proto3, it - // has to be a non zero value or be in a oneof. - BOOL hasValue = ((syntax == GPBFileSyntaxProto2) - || (value != (int32_t)0) - || (field->containingOneof_ != NULL)); - GPBSetHasIvarField(self, field, hasValue); - GPBBecomeVisibleToAutocreator(self); -} - -//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(UInt32, uint32_t) -// This block of code is generated, do not edit it directly. - -uint32_t GPBGetMessageUInt32Field(GPBMessage *self, - GPBFieldDescriptor *field) { - if (GPBGetHasIvarField(self, field)) { - uint8_t *storage = (uint8_t *)self->messageStorage_; - uint32_t *typePtr = (uint32_t *)&storage[field->description_->offset]; - return *typePtr; - } else { - return field.defaultValue.valueUInt32; - } -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageUInt32Field(GPBMessage *self, - GPBFieldDescriptor *field, - uint32_t value) { - if (self == nil || field == nil) return; - GPBFileSyntax syntax = [self descriptor].file.syntax; - GPBSetUInt32IvarWithFieldInternal(self, field, value, syntax); -} - -void GPBSetUInt32IvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - uint32_t value, - GPBFileSyntax syntax) { - GPBOneofDescriptor *oneof = field->containingOneof_; - if (oneof) { - GPBMessageFieldDescription *fieldDesc = field->description_; - GPBMaybeClearOneof(self, oneof, fieldDesc->hasIndex, fieldDesc->number); - } - NSCAssert(self->messageStorage_ != NULL, - @"%@: All messages should have storage (from init)", - [self class]); -#if defined(__clang_analyzer__) - if (self->messageStorage_ == NULL) return; -#endif - uint8_t *storage = (uint8_t *)self->messageStorage_; - uint32_t *typePtr = (uint32_t *)&storage[field->description_->offset]; - *typePtr = value; - // proto2: any value counts as having been set; proto3, it - // has to be a non zero value or be in a oneof. - BOOL hasValue = ((syntax == GPBFileSyntaxProto2) - || (value != (uint32_t)0) - || (field->containingOneof_ != NULL)); - GPBSetHasIvarField(self, field, hasValue); - GPBBecomeVisibleToAutocreator(self); -} - -//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(Int64, int64_t) -// This block of code is generated, do not edit it directly. - -int64_t GPBGetMessageInt64Field(GPBMessage *self, - GPBFieldDescriptor *field) { - if (GPBGetHasIvarField(self, field)) { - uint8_t *storage = (uint8_t *)self->messageStorage_; - int64_t *typePtr = (int64_t *)&storage[field->description_->offset]; - return *typePtr; - } else { - return field.defaultValue.valueInt64; - } -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageInt64Field(GPBMessage *self, - GPBFieldDescriptor *field, - int64_t value) { - if (self == nil || field == nil) return; - GPBFileSyntax syntax = [self descriptor].file.syntax; - GPBSetInt64IvarWithFieldInternal(self, field, value, syntax); -} - -void GPBSetInt64IvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - int64_t value, - GPBFileSyntax syntax) { - GPBOneofDescriptor *oneof = field->containingOneof_; - if (oneof) { - GPBMessageFieldDescription *fieldDesc = field->description_; - GPBMaybeClearOneof(self, oneof, fieldDesc->hasIndex, fieldDesc->number); - } - NSCAssert(self->messageStorage_ != NULL, - @"%@: All messages should have storage (from init)", - [self class]); -#if defined(__clang_analyzer__) - if (self->messageStorage_ == NULL) return; -#endif - uint8_t *storage = (uint8_t *)self->messageStorage_; - int64_t *typePtr = (int64_t *)&storage[field->description_->offset]; - *typePtr = value; - // proto2: any value counts as having been set; proto3, it - // has to be a non zero value or be in a oneof. - BOOL hasValue = ((syntax == GPBFileSyntaxProto2) - || (value != (int64_t)0) - || (field->containingOneof_ != NULL)); - GPBSetHasIvarField(self, field, hasValue); - GPBBecomeVisibleToAutocreator(self); -} - -//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(UInt64, uint64_t) -// This block of code is generated, do not edit it directly. - -uint64_t GPBGetMessageUInt64Field(GPBMessage *self, - GPBFieldDescriptor *field) { - if (GPBGetHasIvarField(self, field)) { - uint8_t *storage = (uint8_t *)self->messageStorage_; - uint64_t *typePtr = (uint64_t *)&storage[field->description_->offset]; - return *typePtr; - } else { - return field.defaultValue.valueUInt64; - } -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageUInt64Field(GPBMessage *self, - GPBFieldDescriptor *field, - uint64_t value) { - if (self == nil || field == nil) return; - GPBFileSyntax syntax = [self descriptor].file.syntax; - GPBSetUInt64IvarWithFieldInternal(self, field, value, syntax); -} - -void GPBSetUInt64IvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - uint64_t value, - GPBFileSyntax syntax) { - GPBOneofDescriptor *oneof = field->containingOneof_; - if (oneof) { - GPBMessageFieldDescription *fieldDesc = field->description_; - GPBMaybeClearOneof(self, oneof, fieldDesc->hasIndex, fieldDesc->number); - } - NSCAssert(self->messageStorage_ != NULL, - @"%@: All messages should have storage (from init)", - [self class]); -#if defined(__clang_analyzer__) - if (self->messageStorage_ == NULL) return; -#endif - uint8_t *storage = (uint8_t *)self->messageStorage_; - uint64_t *typePtr = (uint64_t *)&storage[field->description_->offset]; - *typePtr = value; - // proto2: any value counts as having been set; proto3, it - // has to be a non zero value or be in a oneof. - BOOL hasValue = ((syntax == GPBFileSyntaxProto2) - || (value != (uint64_t)0) - || (field->containingOneof_ != NULL)); - GPBSetHasIvarField(self, field, hasValue); - GPBBecomeVisibleToAutocreator(self); -} - -//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(Float, float) -// This block of code is generated, do not edit it directly. - -float GPBGetMessageFloatField(GPBMessage *self, - GPBFieldDescriptor *field) { - if (GPBGetHasIvarField(self, field)) { - uint8_t *storage = (uint8_t *)self->messageStorage_; - float *typePtr = (float *)&storage[field->description_->offset]; - return *typePtr; - } else { - return field.defaultValue.valueFloat; - } -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageFloatField(GPBMessage *self, - GPBFieldDescriptor *field, - float value) { - if (self == nil || field == nil) return; - GPBFileSyntax syntax = [self descriptor].file.syntax; - GPBSetFloatIvarWithFieldInternal(self, field, value, syntax); -} - -void GPBSetFloatIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - float value, - GPBFileSyntax syntax) { - GPBOneofDescriptor *oneof = field->containingOneof_; - if (oneof) { - GPBMessageFieldDescription *fieldDesc = field->description_; - GPBMaybeClearOneof(self, oneof, fieldDesc->hasIndex, fieldDesc->number); - } - NSCAssert(self->messageStorage_ != NULL, - @"%@: All messages should have storage (from init)", - [self class]); -#if defined(__clang_analyzer__) - if (self->messageStorage_ == NULL) return; -#endif - uint8_t *storage = (uint8_t *)self->messageStorage_; - float *typePtr = (float *)&storage[field->description_->offset]; - *typePtr = value; - // proto2: any value counts as having been set; proto3, it - // has to be a non zero value or be in a oneof. - BOOL hasValue = ((syntax == GPBFileSyntaxProto2) - || (value != (float)0) - || (field->containingOneof_ != NULL)); - GPBSetHasIvarField(self, field, hasValue); - GPBBecomeVisibleToAutocreator(self); -} - -//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(Double, double) -// This block of code is generated, do not edit it directly. - -double GPBGetMessageDoubleField(GPBMessage *self, - GPBFieldDescriptor *field) { - if (GPBGetHasIvarField(self, field)) { - uint8_t *storage = (uint8_t *)self->messageStorage_; - double *typePtr = (double *)&storage[field->description_->offset]; - return *typePtr; - } else { - return field.defaultValue.valueDouble; - } -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageDoubleField(GPBMessage *self, - GPBFieldDescriptor *field, - double value) { - if (self == nil || field == nil) return; - GPBFileSyntax syntax = [self descriptor].file.syntax; - GPBSetDoubleIvarWithFieldInternal(self, field, value, syntax); -} - -void GPBSetDoubleIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - double value, - GPBFileSyntax syntax) { - GPBOneofDescriptor *oneof = field->containingOneof_; - if (oneof) { - GPBMessageFieldDescription *fieldDesc = field->description_; - GPBMaybeClearOneof(self, oneof, fieldDesc->hasIndex, fieldDesc->number); - } - NSCAssert(self->messageStorage_ != NULL, - @"%@: All messages should have storage (from init)", - [self class]); -#if defined(__clang_analyzer__) - if (self->messageStorage_ == NULL) return; -#endif - uint8_t *storage = (uint8_t *)self->messageStorage_; - double *typePtr = (double *)&storage[field->description_->offset]; - *typePtr = value; - // proto2: any value counts as having been set; proto3, it - // has to be a non zero value or be in a oneof. - BOOL hasValue = ((syntax == GPBFileSyntaxProto2) - || (value != (double)0) - || (field->containingOneof_ != NULL)); - GPBSetHasIvarField(self, field, hasValue); - GPBBecomeVisibleToAutocreator(self); -} - -//%PDDM-EXPAND-END (6 expansions) - -// Aliases are function calls that are virtually the same. - -//%PDDM-EXPAND IVAR_ALIAS_DEFN_OBJECT(String, NSString) -// This block of code is generated, do not edit it directly. - -// Only exists for public api, no core code should use this. -NSString *GPBGetMessageStringField(GPBMessage *self, - GPBFieldDescriptor *field) { - return (NSString *)GPBGetObjectIvarWithField(self, field); -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageStringField(GPBMessage *self, - GPBFieldDescriptor *field, - NSString *value) { - GPBSetObjectIvarWithField(self, field, (id)value); -} - -//%PDDM-EXPAND IVAR_ALIAS_DEFN_OBJECT(Bytes, NSData) -// This block of code is generated, do not edit it directly. - -// Only exists for public api, no core code should use this. -NSData *GPBGetMessageBytesField(GPBMessage *self, - GPBFieldDescriptor *field) { - return (NSData *)GPBGetObjectIvarWithField(self, field); -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageBytesField(GPBMessage *self, - GPBFieldDescriptor *field, - NSData *value) { - GPBSetObjectIvarWithField(self, field, (id)value); -} - -//%PDDM-EXPAND IVAR_ALIAS_DEFN_OBJECT(Message, GPBMessage) -// This block of code is generated, do not edit it directly. - -// Only exists for public api, no core code should use this. -GPBMessage *GPBGetMessageMessageField(GPBMessage *self, - GPBFieldDescriptor *field) { - return (GPBMessage *)GPBGetObjectIvarWithField(self, field); -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageMessageField(GPBMessage *self, - GPBFieldDescriptor *field, - GPBMessage *value) { - GPBSetObjectIvarWithField(self, field, (id)value); -} - -//%PDDM-EXPAND IVAR_ALIAS_DEFN_OBJECT(Group, GPBMessage) -// This block of code is generated, do not edit it directly. - -// Only exists for public api, no core code should use this. -GPBMessage *GPBGetMessageGroupField(GPBMessage *self, - GPBFieldDescriptor *field) { - return (GPBMessage *)GPBGetObjectIvarWithField(self, field); -} - -// Only exists for public api, no core code should use this. -void GPBSetMessageGroupField(GPBMessage *self, - GPBFieldDescriptor *field, - GPBMessage *value) { - GPBSetObjectIvarWithField(self, field, (id)value); -} - -//%PDDM-EXPAND-END (4 expansions) - -// GPBGetMessageRepeatedField is defined in GPBMessage.m - -// Only exists for public api, no core code should use this. -void GPBSetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field, id array) { -#if defined(DEBUG) && DEBUG - if (field.fieldType != GPBFieldTypeRepeated) { - [NSException raise:NSInvalidArgumentException - format:@"%@.%@ is not a repeated field.", - [self class], field.name]; - } - Class expectedClass = Nil; - switch (GPBGetFieldDataType(field)) { - case GPBDataTypeBool: - expectedClass = [GPBBoolArray class]; - break; - case GPBDataTypeSFixed32: - case GPBDataTypeInt32: - case GPBDataTypeSInt32: - expectedClass = [GPBInt32Array class]; - break; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - expectedClass = [GPBUInt32Array class]; - break; - case GPBDataTypeSFixed64: - case GPBDataTypeInt64: - case GPBDataTypeSInt64: - expectedClass = [GPBInt64Array class]; - break; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - expectedClass = [GPBUInt64Array class]; - break; - case GPBDataTypeFloat: - expectedClass = [GPBFloatArray class]; - break; - case GPBDataTypeDouble: - expectedClass = [GPBDoubleArray class]; - break; - case GPBDataTypeBytes: - case GPBDataTypeString: - case GPBDataTypeMessage: - case GPBDataTypeGroup: - expectedClass = [NSMutableArray class]; - break; - case GPBDataTypeEnum: - expectedClass = [GPBEnumArray class]; - break; - } - if (array && ![array isKindOfClass:expectedClass]) { - [NSException raise:NSInvalidArgumentException - format:@"%@.%@: Expected %@ object, got %@.", - [self class], field.name, expectedClass, [array class]]; - } -#endif - GPBSetObjectIvarWithField(self, field, array); -} - -#if defined(DEBUG) && DEBUG -static NSString *TypeToStr(GPBDataType dataType) { - switch (dataType) { - case GPBDataTypeBool: - return @"Bool"; - case GPBDataTypeSFixed32: - case GPBDataTypeInt32: - case GPBDataTypeSInt32: - return @"Int32"; - case GPBDataTypeFixed32: - case GPBDataTypeUInt32: - return @"UInt32"; - case GPBDataTypeSFixed64: - case GPBDataTypeInt64: - case GPBDataTypeSInt64: - return @"Int64"; - case GPBDataTypeFixed64: - case GPBDataTypeUInt64: - return @"UInt64"; - case GPBDataTypeFloat: - return @"Float"; - case GPBDataTypeDouble: - return @"Double"; - case GPBDataTypeBytes: - case GPBDataTypeString: - case GPBDataTypeMessage: - case GPBDataTypeGroup: - return @"Object"; - case GPBDataTypeEnum: - return @"Bool"; - } -} -#endif - -// GPBGetMessageMapField is defined in GPBMessage.m - -// Only exists for public api, no core code should use this. -void GPBSetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field, - id dictionary) { -#if defined(DEBUG) && DEBUG - if (field.fieldType != GPBFieldTypeMap) { - [NSException raise:NSInvalidArgumentException - format:@"%@.%@ is not a map<> field.", - [self class], field.name]; - } - if (dictionary) { - GPBDataType keyDataType = field.mapKeyDataType; - GPBDataType valueDataType = GPBGetFieldDataType(field); - NSString *keyStr = TypeToStr(keyDataType); - NSString *valueStr = TypeToStr(valueDataType); - if (keyDataType == GPBDataTypeString) { - keyStr = @"String"; - } - Class expectedClass = Nil; - if ((keyDataType == GPBDataTypeString) && - GPBDataTypeIsObject(valueDataType)) { - expectedClass = [NSMutableDictionary class]; - } else { - NSString *className = - [NSString stringWithFormat:@"GPB%@%@Dictionary", keyStr, valueStr]; - expectedClass = NSClassFromString(className); - NSCAssert(expectedClass, @"Missing a class (%@)?", expectedClass); - } - if (![dictionary isKindOfClass:expectedClass]) { - [NSException raise:NSInvalidArgumentException - format:@"%@.%@: Expected %@ object, got %@.", - [self class], field.name, expectedClass, - [dictionary class]]; - } - } -#endif - GPBSetObjectIvarWithField(self, field, dictionary); -} - -#pragma mark - Misc Dynamic Runtime Utils - -const char *GPBMessageEncodingForSelector(SEL selector, BOOL instanceSel) { - Protocol *protocol = - objc_getProtocol(GPBStringifySymbol(GPBMessageSignatureProtocol)); - struct objc_method_description description = - protocol_getMethodDescription(protocol, selector, NO, instanceSel); - return description.types; -} - -#pragma mark - Text Format Support - -static void AppendStringEscaped(NSString *toPrint, NSMutableString *destStr) { - [destStr appendString:@"\""]; - NSUInteger len = [toPrint length]; - for (NSUInteger i = 0; i < len; ++i) { - unichar aChar = [toPrint characterAtIndex:i]; - switch (aChar) { - case '\n': [destStr appendString:@"\\n"]; break; - case '\r': [destStr appendString:@"\\r"]; break; - case '\t': [destStr appendString:@"\\t"]; break; - case '\"': [destStr appendString:@"\\\""]; break; - case '\'': [destStr appendString:@"\\\'"]; break; - case '\\': [destStr appendString:@"\\\\"]; break; - default: - // This differs slightly from the C++ code in that the C++ doesn't - // generate UTF8; it looks at the string in UTF8, but escapes every - // byte > 0x7E. - if (aChar < 0x20) { - [destStr appendFormat:@"\\%d%d%d", - (aChar / 64), ((aChar % 64) / 8), (aChar % 8)]; - } else { - [destStr appendFormat:@"%C", aChar]; - } - break; - } - } - [destStr appendString:@"\""]; -} - -static void AppendBufferAsString(NSData *buffer, NSMutableString *destStr) { - const char *src = (const char *)[buffer bytes]; - size_t srcLen = [buffer length]; - [destStr appendString:@"\""]; - for (const char *srcEnd = src + srcLen; src < srcEnd; src++) { - switch (*src) { - case '\n': [destStr appendString:@"\\n"]; break; - case '\r': [destStr appendString:@"\\r"]; break; - case '\t': [destStr appendString:@"\\t"]; break; - case '\"': [destStr appendString:@"\\\""]; break; - case '\'': [destStr appendString:@"\\\'"]; break; - case '\\': [destStr appendString:@"\\\\"]; break; - default: - if (isprint(*src)) { - [destStr appendFormat:@"%c", *src]; - } else { - // NOTE: doing hex means you have to worry about the letter after - // the hex being another hex char and forcing that to be escaped, so - // use octal to keep it simple. - [destStr appendFormat:@"\\%03o", (uint8_t)(*src)]; - } - break; - } - } - [destStr appendString:@"\""]; -} - -static void AppendTextFormatForMapMessageField( - id map, GPBFieldDescriptor *field, NSMutableString *toStr, - NSString *lineIndent, NSString *fieldName, NSString *lineEnding) { - GPBDataType keyDataType = field.mapKeyDataType; - GPBDataType valueDataType = GPBGetFieldDataType(field); - BOOL isMessageValue = GPBDataTypeIsMessage(valueDataType); - - NSString *msgStartFirst = - [NSString stringWithFormat:@"%@%@ {%@\n", lineIndent, fieldName, lineEnding]; - NSString *msgStart = - [NSString stringWithFormat:@"%@%@ {\n", lineIndent, fieldName]; - NSString *msgEnd = [NSString stringWithFormat:@"%@}\n", lineIndent]; - - NSString *keyLine = [NSString stringWithFormat:@"%@ key: ", lineIndent]; - NSString *valueLine = [NSString stringWithFormat:@"%@ value%s ", lineIndent, - (isMessageValue ? "" : ":")]; - - __block BOOL isFirst = YES; - - if ((keyDataType == GPBDataTypeString) && - GPBDataTypeIsObject(valueDataType)) { - // map is an NSDictionary. - NSDictionary *dict = map; - [dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { - #pragma unused(stop) - [toStr appendString:(isFirst ? msgStartFirst : msgStart)]; - isFirst = NO; - - [toStr appendString:keyLine]; - AppendStringEscaped(key, toStr); - [toStr appendString:@"\n"]; - - [toStr appendString:valueLine]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wswitch-enum" - switch (valueDataType) { - case GPBDataTypeString: - AppendStringEscaped(value, toStr); - break; - - case GPBDataTypeBytes: - AppendBufferAsString(value, toStr); - break; - - case GPBDataTypeMessage: - [toStr appendString:@"{\n"]; - NSString *subIndent = [lineIndent stringByAppendingString:@" "]; - AppendTextFormatForMessage(value, toStr, subIndent); - [toStr appendFormat:@"%@ }", lineIndent]; - break; - - default: - NSCAssert(NO, @"Can't happen"); - break; - } -#pragma clang diagnostic pop - [toStr appendString:@"\n"]; - - [toStr appendString:msgEnd]; - }]; - } else { - // map is one of the GPB*Dictionary classes, type doesn't matter. - GPBInt32Int32Dictionary *dict = map; - [dict enumerateForTextFormat:^(id keyObj, id valueObj) { - [toStr appendString:(isFirst ? msgStartFirst : msgStart)]; - isFirst = NO; - - // Key always is a NSString. - if (keyDataType == GPBDataTypeString) { - [toStr appendString:keyLine]; - AppendStringEscaped(keyObj, toStr); - [toStr appendString:@"\n"]; - } else { - [toStr appendFormat:@"%@%@\n", keyLine, keyObj]; - } - - [toStr appendString:valueLine]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wswitch-enum" - switch (valueDataType) { - case GPBDataTypeString: - AppendStringEscaped(valueObj, toStr); - break; - - case GPBDataTypeBytes: - AppendBufferAsString(valueObj, toStr); - break; - - case GPBDataTypeMessage: - [toStr appendString:@"{\n"]; - NSString *subIndent = [lineIndent stringByAppendingString:@" "]; - AppendTextFormatForMessage(valueObj, toStr, subIndent); - [toStr appendFormat:@"%@ }", lineIndent]; - break; - - case GPBDataTypeEnum: { - int32_t enumValue = [valueObj intValue]; - NSString *valueStr = nil; - GPBEnumDescriptor *descriptor = field.enumDescriptor; - if (descriptor) { - valueStr = [descriptor textFormatNameForValue:enumValue]; - } - if (valueStr) { - [toStr appendString:valueStr]; - } else { - [toStr appendFormat:@"%d", enumValue]; - } - break; - } - - default: - NSCAssert(valueDataType != GPBDataTypeGroup, @"Can't happen"); - // Everything else is a NSString. - [toStr appendString:valueObj]; - break; - } -#pragma clang diagnostic pop - [toStr appendString:@"\n"]; - - [toStr appendString:msgEnd]; - }]; - } -} - -static void AppendTextFormatForMessageField(GPBMessage *message, - GPBFieldDescriptor *field, - NSMutableString *toStr, - NSString *lineIndent) { - id arrayOrMap; - NSUInteger count; - GPBFieldType fieldType = field.fieldType; - switch (fieldType) { - case GPBFieldTypeSingle: - arrayOrMap = nil; - count = (GPBGetHasIvarField(message, field) ? 1 : 0); - break; - - case GPBFieldTypeRepeated: - // Will be NSArray or GPB*Array, type doesn't matter, they both - // implement count. - arrayOrMap = GPBGetObjectIvarWithFieldNoAutocreate(message, field); - count = [(NSArray *)arrayOrMap count]; - break; - - case GPBFieldTypeMap: { - // Will be GPB*Dictionary or NSMutableDictionary, type doesn't matter, - // they both implement count. - arrayOrMap = GPBGetObjectIvarWithFieldNoAutocreate(message, field); - count = [(NSDictionary *)arrayOrMap count]; - break; - } - } - - if (count == 0) { - // Nothing to print, out of here. - return; - } - - NSString *lineEnding = @""; - - // If the name can't be reversed or support for extra info was turned off, - // this can return nil. - NSString *fieldName = [field textFormatName]; - if ([fieldName length] == 0) { - fieldName = [NSString stringWithFormat:@"%u", GPBFieldNumber(field)]; - // If there is only one entry, put the objc name as a comment, other wise - // add it before the repeated values. - if (count > 1) { - [toStr appendFormat:@"%@# %@\n", lineIndent, field.name]; - } else { - lineEnding = [NSString stringWithFormat:@" # %@", field.name]; - } - } - - if (fieldType == GPBFieldTypeMap) { - AppendTextFormatForMapMessageField(arrayOrMap, field, toStr, lineIndent, - fieldName, lineEnding); - return; - } - - id array = arrayOrMap; - const BOOL isRepeated = (array != nil); - - GPBDataType fieldDataType = GPBGetFieldDataType(field); - BOOL isMessageField = GPBDataTypeIsMessage(fieldDataType); - for (NSUInteger j = 0; j < count; ++j) { - // Start the line. - [toStr appendFormat:@"%@%@%s ", lineIndent, fieldName, - (isMessageField ? "" : ":")]; - - // The value. - switch (fieldDataType) { -#define FIELD_CASE(GPBDATATYPE, CTYPE, REAL_TYPE, ...) \ - case GPBDataType##GPBDATATYPE: { \ - CTYPE v = (isRepeated ? [(GPB##REAL_TYPE##Array *)array valueAtIndex:j] \ - : GPBGetMessage##REAL_TYPE##Field(message, field)); \ - [toStr appendFormat:__VA_ARGS__, v]; \ - break; \ - } - - FIELD_CASE(Int32, int32_t, Int32, @"%d") - FIELD_CASE(SInt32, int32_t, Int32, @"%d") - FIELD_CASE(SFixed32, int32_t, Int32, @"%d") - FIELD_CASE(UInt32, uint32_t, UInt32, @"%u") - FIELD_CASE(Fixed32, uint32_t, UInt32, @"%u") - FIELD_CASE(Int64, int64_t, Int64, @"%lld") - FIELD_CASE(SInt64, int64_t, Int64, @"%lld") - FIELD_CASE(SFixed64, int64_t, Int64, @"%lld") - FIELD_CASE(UInt64, uint64_t, UInt64, @"%llu") - FIELD_CASE(Fixed64, uint64_t, UInt64, @"%llu") - FIELD_CASE(Float, float, Float, @"%.*g", FLT_DIG) - FIELD_CASE(Double, double, Double, @"%.*lg", DBL_DIG) - -#undef FIELD_CASE - - case GPBDataTypeEnum: { - int32_t v = (isRepeated ? [(GPBEnumArray *)array rawValueAtIndex:j] - : GPBGetMessageInt32Field(message, field)); - NSString *valueStr = nil; - GPBEnumDescriptor *descriptor = field.enumDescriptor; - if (descriptor) { - valueStr = [descriptor textFormatNameForValue:v]; - } - if (valueStr) { - [toStr appendString:valueStr]; - } else { - [toStr appendFormat:@"%d", v]; - } - break; - } - - case GPBDataTypeBool: { - BOOL v = (isRepeated ? [(GPBBoolArray *)array valueAtIndex:j] - : GPBGetMessageBoolField(message, field)); - [toStr appendString:(v ? @"true" : @"false")]; - break; - } - - case GPBDataTypeString: { - NSString *v = (isRepeated ? [(NSArray *)array objectAtIndex:j] - : GPBGetMessageStringField(message, field)); - AppendStringEscaped(v, toStr); - break; - } - - case GPBDataTypeBytes: { - NSData *v = (isRepeated ? [(NSArray *)array objectAtIndex:j] - : GPBGetMessageBytesField(message, field)); - AppendBufferAsString(v, toStr); - break; - } - - case GPBDataTypeGroup: - case GPBDataTypeMessage: { - GPBMessage *v = - (isRepeated ? [(NSArray *)array objectAtIndex:j] - : GPBGetObjectIvarWithField(message, field)); - [toStr appendFormat:@"{%@\n", lineEnding]; - NSString *subIndent = [lineIndent stringByAppendingString:@" "]; - AppendTextFormatForMessage(v, toStr, subIndent); - [toStr appendFormat:@"%@}", lineIndent]; - lineEnding = @""; - break; - } - - } // switch(fieldDataType) - - // End the line. - [toStr appendFormat:@"%@\n", lineEnding]; - - } // for(count) -} - -static void AppendTextFormatForMessageExtensionRange(GPBMessage *message, - NSArray *activeExtensions, - GPBExtensionRange range, - NSMutableString *toStr, - NSString *lineIndent) { - uint32_t start = range.start; - uint32_t end = range.end; - for (GPBExtensionDescriptor *extension in activeExtensions) { - uint32_t fieldNumber = extension.fieldNumber; - if (fieldNumber < start) { - // Not there yet. - continue; - } - if (fieldNumber > end) { - // Done. - break; - } - - id rawExtValue = [message getExtension:extension]; - BOOL isRepeated = extension.isRepeated; - - NSUInteger numValues = 1; - NSString *lineEnding = @""; - if (isRepeated) { - numValues = [(NSArray *)rawExtValue count]; - } - - NSString *singletonName = extension.singletonName; - if (numValues == 1) { - lineEnding = [NSString stringWithFormat:@" # [%@]", singletonName]; - } else { - [toStr appendFormat:@"%@# [%@]\n", lineIndent, singletonName]; - } - - GPBDataType extDataType = extension.dataType; - for (NSUInteger j = 0; j < numValues; ++j) { - id curValue = (isRepeated ? [rawExtValue objectAtIndex:j] : rawExtValue); - - // Start the line. - [toStr appendFormat:@"%@%u%s ", lineIndent, fieldNumber, - (GPBDataTypeIsMessage(extDataType) ? "" : ":")]; - - // The value. - switch (extDataType) { -#define FIELD_CASE(GPBDATATYPE, CTYPE, NUMSELECTOR, ...) \ - case GPBDataType##GPBDATATYPE: { \ - CTYPE v = [(NSNumber *)curValue NUMSELECTOR]; \ - [toStr appendFormat:__VA_ARGS__, v]; \ - break; \ - } - - FIELD_CASE(Int32, int32_t, intValue, @"%d") - FIELD_CASE(SInt32, int32_t, intValue, @"%d") - FIELD_CASE(SFixed32, int32_t, unsignedIntValue, @"%d") - FIELD_CASE(UInt32, uint32_t, unsignedIntValue, @"%u") - FIELD_CASE(Fixed32, uint32_t, unsignedIntValue, @"%u") - FIELD_CASE(Int64, int64_t, longLongValue, @"%lld") - FIELD_CASE(SInt64, int64_t, longLongValue, @"%lld") - FIELD_CASE(SFixed64, int64_t, longLongValue, @"%lld") - FIELD_CASE(UInt64, uint64_t, unsignedLongLongValue, @"%llu") - FIELD_CASE(Fixed64, uint64_t, unsignedLongLongValue, @"%llu") - FIELD_CASE(Float, float, floatValue, @"%.*g", FLT_DIG) - FIELD_CASE(Double, double, doubleValue, @"%.*lg", DBL_DIG) - // TODO: Add a comment with the enum name from enum descriptors - // (might not be real value, so leave it as a comment, ObjC compiler - // name mangles differently). Doesn't look like we actually generate - // an enum descriptor reference like we do for normal fields, so this - // will take a compiler change. - FIELD_CASE(Enum, int32_t, intValue, @"%d") - -#undef FIELD_CASE - - case GPBDataTypeBool: - [toStr appendString:([(NSNumber *)curValue boolValue] ? @"true" - : @"false")]; - break; - - case GPBDataTypeString: - AppendStringEscaped(curValue, toStr); - break; - - case GPBDataTypeBytes: - AppendBufferAsString((NSData *)curValue, toStr); - break; - - case GPBDataTypeGroup: - case GPBDataTypeMessage: { - [toStr appendFormat:@"{%@\n", lineEnding]; - NSString *subIndent = [lineIndent stringByAppendingString:@" "]; - AppendTextFormatForMessage(curValue, toStr, subIndent); - [toStr appendFormat:@"%@}", lineIndent]; - lineEnding = @""; - break; - } - - } // switch(extDataType) - - } // for(numValues) - - // End the line. - [toStr appendFormat:@"%@\n", lineEnding]; - - } // for..in(activeExtensions) -} - -static void AppendTextFormatForMessage(GPBMessage *message, - NSMutableString *toStr, - NSString *lineIndent) { - GPBDescriptor *descriptor = [message descriptor]; - NSArray *fieldsArray = descriptor->fields_; - NSUInteger fieldCount = fieldsArray.count; - const GPBExtensionRange *extensionRanges = descriptor.extensionRanges; - NSUInteger extensionRangesCount = descriptor.extensionRangesCount; - NSArray *activeExtensions = [[message extensionsCurrentlySet] - sortedArrayUsingSelector:@selector(compareByFieldNumber:)]; - for (NSUInteger i = 0, j = 0; i < fieldCount || j < extensionRangesCount;) { - if (i == fieldCount) { - AppendTextFormatForMessageExtensionRange( - message, activeExtensions, extensionRanges[j++], toStr, lineIndent); - } else if (j == extensionRangesCount || - GPBFieldNumber(fieldsArray[i]) < extensionRanges[j].start) { - AppendTextFormatForMessageField(message, fieldsArray[i++], toStr, - lineIndent); - } else { - AppendTextFormatForMessageExtensionRange( - message, activeExtensions, extensionRanges[j++], toStr, lineIndent); - } - } - - NSString *unknownFieldsStr = - GPBTextFormatForUnknownFieldSet(message.unknownFields, lineIndent); - if ([unknownFieldsStr length] > 0) { - [toStr appendFormat:@"%@# --- Unknown fields ---\n", lineIndent]; - [toStr appendString:unknownFieldsStr]; - } -} - -NSString *GPBTextFormatForMessage(GPBMessage *message, NSString *lineIndent) { - if (message == nil) return @""; - if (lineIndent == nil) lineIndent = @""; - - NSMutableString *buildString = [NSMutableString string]; - AppendTextFormatForMessage(message, buildString, lineIndent); - return buildString; -} - -NSString *GPBTextFormatForUnknownFieldSet(GPBUnknownFieldSet *unknownSet, - NSString *lineIndent) { - if (unknownSet == nil) return @""; - if (lineIndent == nil) lineIndent = @""; - - NSMutableString *result = [NSMutableString string]; - for (GPBUnknownField *field in [unknownSet sortedFields]) { - int32_t fieldNumber = [field number]; - -#define PRINT_LOOP(PROPNAME, CTYPE, FORMAT) \ - [field.PROPNAME \ - enumerateValuesWithBlock:^(CTYPE value, NSUInteger idx, BOOL * stop) { \ - _Pragma("unused(idx, stop)"); \ - [result \ - appendFormat:@"%@%d: " #FORMAT "\n", lineIndent, fieldNumber, value]; \ - }]; - - PRINT_LOOP(varintList, uint64_t, %llu); - PRINT_LOOP(fixed32List, uint32_t, 0x%X); - PRINT_LOOP(fixed64List, uint64_t, 0x%llX); - -#undef PRINT_LOOP - - // NOTE: C++ version of TextFormat tries to parse this as a message - // and print that if it succeeds. - for (NSData *data in field.lengthDelimitedList) { - [result appendFormat:@"%@%d: ", lineIndent, fieldNumber]; - AppendBufferAsString(data, result); - [result appendString:@"\n"]; - } - - for (GPBUnknownFieldSet *subUnknownSet in field.groupList) { - [result appendFormat:@"%@%d: {\n", lineIndent, fieldNumber]; - NSString *subIndent = [lineIndent stringByAppendingString:@" "]; - NSString *subUnknwonSetStr = - GPBTextFormatForUnknownFieldSet(subUnknownSet, subIndent); - [result appendString:subUnknwonSetStr]; - [result appendFormat:@"%@}\n", lineIndent]; - } - } - return result; -} - -// Helpers to decode a varint. Not using GPBCodedInputStream version because -// that needs a state object, and we don't want to create an input stream out -// of the data. -GPB_INLINE int8_t ReadRawByteFromData(const uint8_t **data) { - int8_t result = *((int8_t *)(*data)); - ++(*data); - return result; -} - -static int32_t ReadRawVarint32FromData(const uint8_t **data) { - int8_t tmp = ReadRawByteFromData(data); - if (tmp >= 0) { - return tmp; - } - int32_t result = tmp & 0x7f; - if ((tmp = ReadRawByteFromData(data)) >= 0) { - result |= tmp << 7; - } else { - result |= (tmp & 0x7f) << 7; - if ((tmp = ReadRawByteFromData(data)) >= 0) { - result |= tmp << 14; - } else { - result |= (tmp & 0x7f) << 14; - if ((tmp = ReadRawByteFromData(data)) >= 0) { - result |= tmp << 21; - } else { - result |= (tmp & 0x7f) << 21; - result |= (tmp = ReadRawByteFromData(data)) << 28; - if (tmp < 0) { - // Discard upper 32 bits. - for (int i = 0; i < 5; i++) { - if (ReadRawByteFromData(data) >= 0) { - return result; - } - } - [NSException raise:NSParseErrorException - format:@"Unable to read varint32"]; - } - } - } - } - return result; -} - -NSString *GPBDecodeTextFormatName(const uint8_t *decodeData, int32_t key, - NSString *inputStr) { - // decodData form: - // varint32: num entries - // for each entry: - // varint32: key - // bytes*: decode data - // - // decode data one of two forms: - // 1: a \0 followed by the string followed by an \0 - // 2: bytecodes to transform an input into the right thing, ending with \0 - // - // the bytes codes are of the form: - // 0xabbccccc - // 0x0 (all zeros), end. - // a - if set, add an underscore - // bb - 00 ccccc bytes as is - // bb - 10 ccccc upper first, as is on rest, ccccc byte total - // bb - 01 ccccc lower first, as is on rest, ccccc byte total - // bb - 11 ccccc all upper, ccccc byte total - - if (!decodeData || !inputStr) { - return nil; - } - - // Find key - const uint8_t *scan = decodeData; - int32_t numEntries = ReadRawVarint32FromData(&scan); - BOOL foundKey = NO; - while (!foundKey && (numEntries > 0)) { - --numEntries; - int32_t dataKey = ReadRawVarint32FromData(&scan); - if (dataKey == key) { - foundKey = YES; - } else { - // If it is a inlined string, it will start with \0; if it is bytecode it - // will start with a code. So advance one (skipping the inline string - // marker), and then loop until reaching the end marker (\0). - ++scan; - while (*scan != 0) ++scan; - // Now move past the end marker. - ++scan; - } - } - - if (!foundKey) { - return nil; - } - - // Decode - - if (*scan == 0) { - // Inline string. Move over the marker, and NSString can take it as - // UTF8. - ++scan; - NSString *result = [NSString stringWithUTF8String:(const char *)scan]; - return result; - } - - NSMutableString *result = - [NSMutableString stringWithCapacity:[inputStr length]]; - - const uint8_t kAddUnderscore = 0b10000000; - const uint8_t kOpMask = 0b01100000; - // const uint8_t kOpAsIs = 0b00000000; - const uint8_t kOpFirstUpper = 0b01000000; - const uint8_t kOpFirstLower = 0b00100000; - const uint8_t kOpAllUpper = 0b01100000; - const uint8_t kSegmentLenMask = 0b00011111; - - NSInteger i = 0; - for (; *scan != 0; ++scan) { - if (*scan & kAddUnderscore) { - [result appendString:@"_"]; - } - int segmentLen = *scan & kSegmentLenMask; - uint8_t decodeOp = *scan & kOpMask; - - // Do op specific handling of the first character. - if (decodeOp == kOpFirstUpper) { - unichar c = [inputStr characterAtIndex:i]; - [result appendFormat:@"%c", toupper((char)c)]; - ++i; - --segmentLen; - } else if (decodeOp == kOpFirstLower) { - unichar c = [inputStr characterAtIndex:i]; - [result appendFormat:@"%c", tolower((char)c)]; - ++i; - --segmentLen; - } - // else op == kOpAsIs || op == kOpAllUpper - - // Now pull over the rest of the length for this segment. - for (int x = 0; x < segmentLen; ++x) { - unichar c = [inputStr characterAtIndex:(i + x)]; - if (decodeOp == kOpAllUpper) { - [result appendFormat:@"%c", toupper((char)c)]; - } else { - [result appendFormat:@"%C", c]; - } - } - i += segmentLen; - } - - return result; -} - -#pragma clang diagnostic pop - -BOOL GPBClassHasSel(Class aClass, SEL sel) { - // NOTE: We have to use class_copyMethodList, all other runtime method - // lookups actually also resolve the method implementation and this - // is called from within those methods. - - BOOL result = NO; - unsigned int methodCount = 0; - Method *methodList = class_copyMethodList(aClass, &methodCount); - for (unsigned int i = 0; i < methodCount; ++i) { - SEL methodSelector = method_getName(methodList[i]); - if (methodSelector == sel) { - result = YES; - break; - } - } - free(methodList); - return result; -} - -#pragma mark - GPBMessageSignatureProtocol - -// A series of selectors that are used solely to get @encoding values -// for them by the dynamic protobuf runtime code. An object using the protocol -// needs to be declared for the protocol to be valid at runtime. -@interface GPBMessageSignatureProtocol : NSObject<GPBMessageSignatureProtocol> -@end -@implementation GPBMessageSignatureProtocol -@end diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUtilities_PackagePrivate.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUtilities_PackagePrivate.h deleted file mode 100644 index 16859d48..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBUtilities_PackagePrivate.h +++ /dev/null @@ -1,350 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBUtilities.h" - -#import "GPBDescriptor_PackagePrivate.h" - -// Macros for stringifying library symbols. These are used in the generated -// PB descriptor classes wherever a library symbol name is represented as a -// string. See README.google for more information. -#define GPBStringify(S) #S -#define GPBStringifySymbol(S) GPBStringify(S) - -#define GPBNSStringify(S) @#S -#define GPBNSStringifySymbol(S) GPBNSStringify(S) - -// Constant to internally mark when there is no has bit. -#define GPBNoHasBit INT32_MAX - -CF_EXTERN_C_BEGIN - -// These two are used to inject a runtime check for version mismatch into the -// generated sources to make sure they are linked with a supporting runtime. -void GPBCheckRuntimeVersionSupport(int32_t objcRuntimeVersion); -GPB_INLINE void GPB_DEBUG_CHECK_RUNTIME_VERSIONS() { - // NOTE: By being inline here, this captures the value from the library's - // headers at the time the generated code was compiled. -#if defined(DEBUG) && DEBUG - GPBCheckRuntimeVersionSupport(GOOGLE_PROTOBUF_OBJC_VERSION); -#endif -} - -// Legacy version of the checks, remove when GOOGLE_PROTOBUF_OBJC_GEN_VERSION -// goes away (see more info in GPBBootstrap.h). -void GPBCheckRuntimeVersionInternal(int32_t version); -GPB_INLINE void GPBDebugCheckRuntimeVersion() { -#if defined(DEBUG) && DEBUG - GPBCheckRuntimeVersionInternal(GOOGLE_PROTOBUF_OBJC_GEN_VERSION); -#endif -} - -// Conversion functions for de/serializing floating point types. - -GPB_INLINE int64_t GPBConvertDoubleToInt64(double v) { - union { double f; int64_t i; } u; - u.f = v; - return u.i; -} - -GPB_INLINE int32_t GPBConvertFloatToInt32(float v) { - union { float f; int32_t i; } u; - u.f = v; - return u.i; -} - -GPB_INLINE double GPBConvertInt64ToDouble(int64_t v) { - union { double f; int64_t i; } u; - u.i = v; - return u.f; -} - -GPB_INLINE float GPBConvertInt32ToFloat(int32_t v) { - union { float f; int32_t i; } u; - u.i = v; - return u.f; -} - -GPB_INLINE int32_t GPBLogicalRightShift32(int32_t value, int32_t spaces) { - return (int32_t)((uint32_t)(value) >> spaces); -} - -GPB_INLINE int64_t GPBLogicalRightShift64(int64_t value, int32_t spaces) { - return (int64_t)((uint64_t)(value) >> spaces); -} - -// Decode a ZigZag-encoded 32-bit value. ZigZag encodes signed integers -// into values that can be efficiently encoded with varint. (Otherwise, -// negative values must be sign-extended to 64 bits to be varint encoded, -// thus always taking 10 bytes on the wire.) -GPB_INLINE int32_t GPBDecodeZigZag32(uint32_t n) { - return (int32_t)(GPBLogicalRightShift32((int32_t)n, 1) ^ -((int32_t)(n) & 1)); -} - -// Decode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers -// into values that can be efficiently encoded with varint. (Otherwise, -// negative values must be sign-extended to 64 bits to be varint encoded, -// thus always taking 10 bytes on the wire.) -GPB_INLINE int64_t GPBDecodeZigZag64(uint64_t n) { - return (int64_t)(GPBLogicalRightShift64((int64_t)n, 1) ^ -((int64_t)(n) & 1)); -} - -// Encode a ZigZag-encoded 32-bit value. ZigZag encodes signed integers -// into values that can be efficiently encoded with varint. (Otherwise, -// negative values must be sign-extended to 64 bits to be varint encoded, -// thus always taking 10 bytes on the wire.) -GPB_INLINE uint32_t GPBEncodeZigZag32(int32_t n) { - // Note: the right-shift must be arithmetic - return (uint32_t)((n << 1) ^ (n >> 31)); -} - -// Encode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers -// into values that can be efficiently encoded with varint. (Otherwise, -// negative values must be sign-extended to 64 bits to be varint encoded, -// thus always taking 10 bytes on the wire.) -GPB_INLINE uint64_t GPBEncodeZigZag64(int64_t n) { - // Note: the right-shift must be arithmetic - return (uint64_t)((n << 1) ^ (n >> 63)); -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wswitch-enum" -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -GPB_INLINE BOOL GPBDataTypeIsObject(GPBDataType type) { - switch (type) { - case GPBDataTypeBytes: - case GPBDataTypeString: - case GPBDataTypeMessage: - case GPBDataTypeGroup: - return YES; - default: - return NO; - } -} - -GPB_INLINE BOOL GPBDataTypeIsMessage(GPBDataType type) { - switch (type) { - case GPBDataTypeMessage: - case GPBDataTypeGroup: - return YES; - default: - return NO; - } -} - -GPB_INLINE BOOL GPBFieldDataTypeIsMessage(GPBFieldDescriptor *field) { - return GPBDataTypeIsMessage(field->description_->dataType); -} - -GPB_INLINE BOOL GPBFieldDataTypeIsObject(GPBFieldDescriptor *field) { - return GPBDataTypeIsObject(field->description_->dataType); -} - -GPB_INLINE BOOL GPBExtensionIsMessage(GPBExtensionDescriptor *ext) { - return GPBDataTypeIsMessage(ext->description_->dataType); -} - -// The field is an array/map or it has an object value. -GPB_INLINE BOOL GPBFieldStoresObject(GPBFieldDescriptor *field) { - GPBMessageFieldDescription *desc = field->description_; - if ((desc->flags & (GPBFieldRepeated | GPBFieldMapKeyMask)) != 0) { - return YES; - } - return GPBDataTypeIsObject(desc->dataType); -} - -BOOL GPBGetHasIvar(GPBMessage *self, int32_t index, uint32_t fieldNumber); -void GPBSetHasIvar(GPBMessage *self, int32_t idx, uint32_t fieldNumber, - BOOL value); -uint32_t GPBGetHasOneof(GPBMessage *self, int32_t index); - -GPB_INLINE BOOL -GPBGetHasIvarField(GPBMessage *self, GPBFieldDescriptor *field) { - GPBMessageFieldDescription *fieldDesc = field->description_; - return GPBGetHasIvar(self, fieldDesc->hasIndex, fieldDesc->number); -} -GPB_INLINE void GPBSetHasIvarField(GPBMessage *self, GPBFieldDescriptor *field, - BOOL value) { - GPBMessageFieldDescription *fieldDesc = field->description_; - GPBSetHasIvar(self, fieldDesc->hasIndex, fieldDesc->number, value); -} - -void GPBMaybeClearOneof(GPBMessage *self, GPBOneofDescriptor *oneof, - int32_t oneofHasIndex, uint32_t fieldNumberNotToClear); - -#pragma clang diagnostic pop - -//%PDDM-DEFINE GPB_IVAR_SET_DECL(NAME, TYPE) -//%void GPBSet##NAME##IvarWithFieldInternal(GPBMessage *self, -//% NAME$S GPBFieldDescriptor *field, -//% NAME$S TYPE value, -//% NAME$S GPBFileSyntax syntax); -//%PDDM-EXPAND GPB_IVAR_SET_DECL(Bool, BOOL) -// This block of code is generated, do not edit it directly. - -void GPBSetBoolIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - BOOL value, - GPBFileSyntax syntax); -//%PDDM-EXPAND GPB_IVAR_SET_DECL(Int32, int32_t) -// This block of code is generated, do not edit it directly. - -void GPBSetInt32IvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - int32_t value, - GPBFileSyntax syntax); -//%PDDM-EXPAND GPB_IVAR_SET_DECL(UInt32, uint32_t) -// This block of code is generated, do not edit it directly. - -void GPBSetUInt32IvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - uint32_t value, - GPBFileSyntax syntax); -//%PDDM-EXPAND GPB_IVAR_SET_DECL(Int64, int64_t) -// This block of code is generated, do not edit it directly. - -void GPBSetInt64IvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - int64_t value, - GPBFileSyntax syntax); -//%PDDM-EXPAND GPB_IVAR_SET_DECL(UInt64, uint64_t) -// This block of code is generated, do not edit it directly. - -void GPBSetUInt64IvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - uint64_t value, - GPBFileSyntax syntax); -//%PDDM-EXPAND GPB_IVAR_SET_DECL(Float, float) -// This block of code is generated, do not edit it directly. - -void GPBSetFloatIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - float value, - GPBFileSyntax syntax); -//%PDDM-EXPAND GPB_IVAR_SET_DECL(Double, double) -// This block of code is generated, do not edit it directly. - -void GPBSetDoubleIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - double value, - GPBFileSyntax syntax); -//%PDDM-EXPAND GPB_IVAR_SET_DECL(Enum, int32_t) -// This block of code is generated, do not edit it directly. - -void GPBSetEnumIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - int32_t value, - GPBFileSyntax syntax); -//%PDDM-EXPAND-END (8 expansions) - -int32_t GPBGetEnumIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - GPBFileSyntax syntax); - -id GPBGetObjectIvarWithField(GPBMessage *self, GPBFieldDescriptor *field); - -void GPBSetObjectIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, id value, - GPBFileSyntax syntax); -void GPBSetRetainedObjectIvarWithFieldInternal(GPBMessage *self, - GPBFieldDescriptor *field, - id __attribute__((ns_consumed)) - value, - GPBFileSyntax syntax); - -// GPBGetObjectIvarWithField will automatically create the field (message) if -// it doesn't exist. GPBGetObjectIvarWithFieldNoAutocreate will return nil. -id GPBGetObjectIvarWithFieldNoAutocreate(GPBMessage *self, - GPBFieldDescriptor *field); - -void GPBSetAutocreatedRetainedObjectIvarWithField( - GPBMessage *self, GPBFieldDescriptor *field, - id __attribute__((ns_consumed)) value); - -// Clears and releases the autocreated message ivar, if it's autocreated. If -// it's not set as autocreated, this method does nothing. -void GPBClearAutocreatedMessageIvarWithField(GPBMessage *self, - GPBFieldDescriptor *field); - -// Returns an Objective C encoding for |selector|. |instanceSel| should be -// YES if it's an instance selector (as opposed to a class selector). -// |selector| must be a selector from MessageSignatureProtocol. -const char *GPBMessageEncodingForSelector(SEL selector, BOOL instanceSel); - -// Helper for text format name encoding. -// decodeData is the data describing the sepecial decodes. -// key and inputString are the input that needs decoding. -NSString *GPBDecodeTextFormatName(const uint8_t *decodeData, int32_t key, - NSString *inputString); - -// A series of selectors that are used solely to get @encoding values -// for them by the dynamic protobuf runtime code. See -// GPBMessageEncodingForSelector for details. -@protocol GPBMessageSignatureProtocol -@optional - -#define GPB_MESSAGE_SIGNATURE_ENTRY(TYPE, NAME) \ - -(TYPE)get##NAME; \ - -(void)set##NAME : (TYPE)value; \ - -(TYPE)get##NAME##AtIndex : (NSUInteger)index; - -GPB_MESSAGE_SIGNATURE_ENTRY(BOOL, Bool) -GPB_MESSAGE_SIGNATURE_ENTRY(uint32_t, Fixed32) -GPB_MESSAGE_SIGNATURE_ENTRY(int32_t, SFixed32) -GPB_MESSAGE_SIGNATURE_ENTRY(float, Float) -GPB_MESSAGE_SIGNATURE_ENTRY(uint64_t, Fixed64) -GPB_MESSAGE_SIGNATURE_ENTRY(int64_t, SFixed64) -GPB_MESSAGE_SIGNATURE_ENTRY(double, Double) -GPB_MESSAGE_SIGNATURE_ENTRY(int32_t, Int32) -GPB_MESSAGE_SIGNATURE_ENTRY(int64_t, Int64) -GPB_MESSAGE_SIGNATURE_ENTRY(int32_t, SInt32) -GPB_MESSAGE_SIGNATURE_ENTRY(int64_t, SInt64) -GPB_MESSAGE_SIGNATURE_ENTRY(uint32_t, UInt32) -GPB_MESSAGE_SIGNATURE_ENTRY(uint64_t, UInt64) -GPB_MESSAGE_SIGNATURE_ENTRY(NSData *, Bytes) -GPB_MESSAGE_SIGNATURE_ENTRY(NSString *, String) -GPB_MESSAGE_SIGNATURE_ENTRY(GPBMessage *, Message) -GPB_MESSAGE_SIGNATURE_ENTRY(GPBMessage *, Group) -GPB_MESSAGE_SIGNATURE_ENTRY(int32_t, Enum) - -#undef GPB_MESSAGE_SIGNATURE_ENTRY - -- (id)getArray; -- (NSUInteger)getArrayCount; -- (void)setArray:(NSArray *)array; -+ (id)getClassValue; -@end - -BOOL GPBClassHasSel(Class aClass, SEL sel); - -CF_EXTERN_C_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWellKnownTypes.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWellKnownTypes.h deleted file mode 100644 index 04df4178..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWellKnownTypes.h +++ /dev/null @@ -1,245 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2015 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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> - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/Any.pbobjc.h> - #import <Protobuf/Duration.pbobjc.h> - #import <Protobuf/Timestamp.pbobjc.h> -#else - #import "google/protobuf/Any.pbobjc.h" - #import "google/protobuf/Duration.pbobjc.h" - #import "google/protobuf/Timestamp.pbobjc.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - Errors - -/** NSError domain used for errors. */ -extern NSString *const GPBWellKnownTypesErrorDomain; - -/** Error code for NSError with GPBWellKnownTypesErrorDomain. */ -typedef NS_ENUM(NSInteger, GPBWellKnownTypesErrorCode) { - /** The type_url could not be computed for the requested GPBMessage class. */ - GPBWellKnownTypesErrorCodeFailedToComputeTypeURL = -100, - /** type_url in a Any doesn’t match that of the requested GPBMessage class. */ - GPBWellKnownTypesErrorCodeTypeURLMismatch = -101, -}; - -#pragma mark - GPBTimestamp - -/** - * Category for GPBTimestamp to work with standard Foundation time/date types. - **/ -@interface GPBTimestamp (GBPWellKnownTypes) - -/** The NSDate representation of this GPBTimestamp. */ -@property(nonatomic, readwrite, strong) NSDate *date; - -/** - * The NSTimeInterval representation of this GPBTimestamp. - * - * @note: Not all second/nanos combinations can be represented in a - * NSTimeInterval, so getting this could be a lossy transform. - **/ -@property(nonatomic, readwrite) NSTimeInterval timeIntervalSince1970; - -/** - * Initializes a GPBTimestamp with the given NSDate. - * - * @param date The date to configure the GPBTimestamp with. - * - * @return A newly initialized GPBTimestamp. - **/ -- (instancetype)initWithDate:(NSDate *)date; - -/** - * Initializes a GPBTimestamp with the given NSTimeInterval. - * - * @param timeIntervalSince1970 Time interval to configure the GPBTimestamp with. - * - * @return A newly initialized GPBTimestamp. - **/ -- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970; - -@end - -#pragma mark - GPBDuration - -/** - * Category for GPBDuration to work with standard Foundation time type. - **/ -@interface GPBDuration (GBPWellKnownTypes) - -/** - * The NSTimeInterval representation of this GPBDuration. - * - * @note: Not all second/nanos combinations can be represented in a - * NSTimeInterval, so getting this could be a lossy transform. - **/ -@property(nonatomic, readwrite) NSTimeInterval timeInterval; - -/** - * Initializes a GPBDuration with the given NSTimeInterval. - * - * @param timeInterval Time interval to configure the GPBDuration with. - * - * @return A newly initialized GPBDuration. - **/ -- (instancetype)initWithTimeInterval:(NSTimeInterval)timeInterval; - -// These next two methods are deprecated because GBPDuration has no need of a -// "base" time. The older methods were about symmetry with GBPTimestamp, but -// the unix epoch usage is too confusing. - -/** Deprecated, use timeInterval instead. */ -@property(nonatomic, readwrite) NSTimeInterval timeIntervalSince1970 - __attribute__((deprecated("Use timeInterval"))); -/** Deprecated, use initWithTimeInterval: instead. */ -- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 - __attribute__((deprecated("Use initWithTimeInterval:"))); - -@end - -#pragma mark - GPBAny - -/** - * Category for GPBAny to help work with the message within the object. - **/ -@interface GPBAny (GBPWellKnownTypes) - -/** - * Convenience method to create a GPBAny containing the serialized message. - * This uses type.googleapis.com/ as the type_url's prefix. - * - * @param message The message to be packed into the GPBAny. - * @param errorPtr Pointer to an error that will be populated if something goes - * wrong. - * - * @return A newly configured GPBAny with the given message, or nil on failure. - */ -+ (nullable instancetype)anyWithMessage:(nonnull GPBMessage *)message - error:(NSError **)errorPtr; - -/** - * Convenience method to create a GPBAny containing the serialized message. - * - * @param message The message to be packed into the GPBAny. - * @param typeURLPrefix The URL prefix to apply for type_url. - * @param errorPtr Pointer to an error that will be populated if something - * goes wrong. - * - * @return A newly configured GPBAny with the given message, or nil on failure. - */ -+ (nullable instancetype)anyWithMessage:(nonnull GPBMessage *)message - typeURLPrefix:(nonnull NSString *)typeURLPrefix - error:(NSError **)errorPtr; - -/** - * Initializes a GPBAny to contain the serialized message. This uses - * type.googleapis.com/ as the type_url's prefix. - * - * @param message The message to be packed into the GPBAny. - * @param errorPtr Pointer to an error that will be populated if something goes - * wrong. - * - * @return A newly configured GPBAny with the given message, or nil on failure. - */ -- (nullable instancetype)initWithMessage:(nonnull GPBMessage *)message - error:(NSError **)errorPtr; - -/** - * Initializes a GPBAny to contain the serialized message. - * - * @param message The message to be packed into the GPBAny. - * @param typeURLPrefix The URL prefix to apply for type_url. - * @param errorPtr Pointer to an error that will be populated if something - * goes wrong. - * - * @return A newly configured GPBAny with the given message, or nil on failure. - */ -- (nullable instancetype)initWithMessage:(nonnull GPBMessage *)message - typeURLPrefix:(nonnull NSString *)typeURLPrefix - error:(NSError **)errorPtr; - -/** - * Packs the serialized message into this GPBAny. This uses - * type.googleapis.com/ as the type_url's prefix. - * - * @param message The message to be packed into the GPBAny. - * @param errorPtr Pointer to an error that will be populated if something goes - * wrong. - * - * @return Whether the packing was successful or not. - */ -- (BOOL)packWithMessage:(nonnull GPBMessage *)message - error:(NSError **)errorPtr; - -/** - * Packs the serialized message into this GPBAny. - * - * @param message The message to be packed into the GPBAny. - * @param typeURLPrefix The URL prefix to apply for type_url. - * @param errorPtr Pointer to an error that will be populated if something - * goes wrong. - * - * @return Whether the packing was successful or not. - */ -- (BOOL)packWithMessage:(nonnull GPBMessage *)message - typeURLPrefix:(nonnull NSString *)typeURLPrefix - error:(NSError **)errorPtr; - -/** - * Unpacks the serialized message as if it was an instance of the given class. - * - * @note When checking type_url, the base URL is not checked, only the fully - * qualified name. - * - * @param messageClass The class to use to deserialize the contained message. - * @param errorPtr Pointer to an error that will be populated if something - * goes wrong. - * - * @return An instance of the given class populated with the contained data, or - * nil on failure. - */ -- (nullable GPBMessage *)unpackMessageClass:(Class)messageClass - error:(NSError **)errorPtr; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWellKnownTypes.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWellKnownTypes.m deleted file mode 100644 index 2808afeb..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWellKnownTypes.m +++ /dev/null @@ -1,272 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2015 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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. - -// Importing sources here to force the linker to include our category methods in -// the static library. If these were compiled separately, the category methods -// below would be stripped by the linker. - -#import "GPBWellKnownTypes.h" - -#import "GPBUtilities_PackagePrivate.h" - -NSString *const GPBWellKnownTypesErrorDomain = - GPBNSStringifySymbol(GPBWellKnownTypesErrorDomain); - -static NSString *kTypePrefixGoogleApisCom = @"type.googleapis.com/"; - -static NSTimeInterval TimeIntervalFromSecondsAndNanos(int64_t seconds, - int32_t nanos) { - return seconds + (NSTimeInterval)nanos / 1e9; -} - -static int32_t SecondsAndNanosFromTimeInterval(NSTimeInterval time, - int64_t *outSeconds, - BOOL nanosMustBePositive) { - NSTimeInterval seconds; - NSTimeInterval nanos = modf(time, &seconds); - - if (nanosMustBePositive && (nanos < 0)) { - // Per Timestamp.proto, nanos is non-negative and "Negative second values with - // fractions must still have non-negative nanos values that count forward in - // time. Must be from 0 to 999,999,999 inclusive." - --seconds; - nanos = 1.0 + nanos; - } - - nanos *= 1e9; - *outSeconds = (int64_t)seconds; - return (int32_t)nanos; -} - -static NSString *BuildTypeURL(NSString *typeURLPrefix, NSString *fullName) { - if (typeURLPrefix.length == 0) { - return fullName; - } - - if ([typeURLPrefix hasSuffix:@"/"]) { - return [typeURLPrefix stringByAppendingString:fullName]; - } - - return [NSString stringWithFormat:@"%@/%@", typeURLPrefix, fullName]; -} - -static NSString *ParseTypeFromURL(NSString *typeURLString) { - NSRange range = [typeURLString rangeOfString:@"/" options:NSBackwardsSearch]; - if ((range.location == NSNotFound) || - (NSMaxRange(range) == typeURLString.length)) { - return nil; - } - NSString *result = [typeURLString substringFromIndex:range.location + 1]; - return result; -} - -#pragma mark - GPBTimestamp - -@implementation GPBTimestamp (GBPWellKnownTypes) - -- (instancetype)initWithDate:(NSDate *)date { - return [self initWithTimeIntervalSince1970:date.timeIntervalSince1970]; -} - -- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 { - if ((self = [super init])) { - int64_t seconds; - int32_t nanos = SecondsAndNanosFromTimeInterval( - timeIntervalSince1970, &seconds, YES); - self.seconds = seconds; - self.nanos = nanos; - } - return self; -} - -- (NSDate *)date { - return [NSDate dateWithTimeIntervalSince1970:self.timeIntervalSince1970]; -} - -- (void)setDate:(NSDate *)date { - self.timeIntervalSince1970 = date.timeIntervalSince1970; -} - -- (NSTimeInterval)timeIntervalSince1970 { - return TimeIntervalFromSecondsAndNanos(self.seconds, self.nanos); -} - -- (void)setTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 { - int64_t seconds; - int32_t nanos = - SecondsAndNanosFromTimeInterval(timeIntervalSince1970, &seconds, YES); - self.seconds = seconds; - self.nanos = nanos; -} - -@end - -#pragma mark - GPBDuration - -@implementation GPBDuration (GBPWellKnownTypes) - -- (instancetype)initWithTimeInterval:(NSTimeInterval)timeInterval { - if ((self = [super init])) { - int64_t seconds; - int32_t nanos = SecondsAndNanosFromTimeInterval( - timeInterval, &seconds, NO); - self.seconds = seconds; - self.nanos = nanos; - } - return self; -} - -- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 { - return [self initWithTimeInterval:timeIntervalSince1970]; -} - -- (NSTimeInterval)timeInterval { - return TimeIntervalFromSecondsAndNanos(self.seconds, self.nanos); -} - -- (void)setTimeInterval:(NSTimeInterval)timeInterval { - int64_t seconds; - int32_t nanos = - SecondsAndNanosFromTimeInterval(timeInterval, &seconds, NO); - self.seconds = seconds; - self.nanos = nanos; -} - -- (NSTimeInterval)timeIntervalSince1970 { - return self.timeInterval; -} - -- (void)setTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 { - self.timeInterval = timeIntervalSince1970; -} - -@end - -#pragma mark - GPBAny - -@implementation GPBAny (GBPWellKnownTypes) - -+ (instancetype)anyWithMessage:(GPBMessage *)message - error:(NSError **)errorPtr { - return [self anyWithMessage:message - typeURLPrefix:kTypePrefixGoogleApisCom - error:errorPtr]; -} - -+ (instancetype)anyWithMessage:(GPBMessage *)message - typeURLPrefix:(NSString *)typeURLPrefix - error:(NSError **)errorPtr { - return [[[self alloc] initWithMessage:message - typeURLPrefix:typeURLPrefix - error:errorPtr] autorelease]; -} - -- (instancetype)initWithMessage:(GPBMessage *)message - error:(NSError **)errorPtr { - return [self initWithMessage:message - typeURLPrefix:kTypePrefixGoogleApisCom - error:errorPtr]; -} - -- (instancetype)initWithMessage:(GPBMessage *)message - typeURLPrefix:(NSString *)typeURLPrefix - error:(NSError **)errorPtr { - self = [self init]; - if (self) { - if (![self packWithMessage:message - typeURLPrefix:typeURLPrefix - error:errorPtr]) { - [self release]; - self = nil; - } - } - return self; -} - -- (BOOL)packWithMessage:(GPBMessage *)message - error:(NSError **)errorPtr { - return [self packWithMessage:message - typeURLPrefix:kTypePrefixGoogleApisCom - error:errorPtr]; -} - -- (BOOL)packWithMessage:(GPBMessage *)message - typeURLPrefix:(NSString *)typeURLPrefix - error:(NSError **)errorPtr { - NSString *fullName = [message descriptor].fullName; - if (fullName.length == 0) { - if (errorPtr) { - *errorPtr = - [NSError errorWithDomain:GPBWellKnownTypesErrorDomain - code:GPBWellKnownTypesErrorCodeFailedToComputeTypeURL - userInfo:nil]; - } - return NO; - } - if (errorPtr) { - *errorPtr = nil; - } - self.typeURL = BuildTypeURL(typeURLPrefix, fullName); - self.value = message.data; - return YES; -} - -- (GPBMessage *)unpackMessageClass:(Class)messageClass - error:(NSError **)errorPtr { - NSString *fullName = [messageClass descriptor].fullName; - if (fullName.length == 0) { - if (errorPtr) { - *errorPtr = - [NSError errorWithDomain:GPBWellKnownTypesErrorDomain - code:GPBWellKnownTypesErrorCodeFailedToComputeTypeURL - userInfo:nil]; - } - return nil; - } - - NSString *expectedFullName = ParseTypeFromURL(self.typeURL); - if ((expectedFullName == nil) || ![expectedFullName isEqual:fullName]) { - if (errorPtr) { - *errorPtr = - [NSError errorWithDomain:GPBWellKnownTypesErrorDomain - code:GPBWellKnownTypesErrorCodeTypeURLMismatch - userInfo:nil]; - } - return nil; - } - - // Any is proto3, which means no extensions, so this assumes anything put - // within an any also won't need extensions. A second helper could be added - // if needed. - return [messageClass parseFromData:self.value - error:errorPtr]; -} - -@end diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWireFormat.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWireFormat.h deleted file mode 100644 index c5941a38..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWireFormat.h +++ /dev/null @@ -1,73 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBRuntimeTypes.h" - -CF_EXTERN_C_BEGIN - -NS_ASSUME_NONNULL_BEGIN - -typedef enum { - GPBWireFormatVarint = 0, - GPBWireFormatFixed64 = 1, - GPBWireFormatLengthDelimited = 2, - GPBWireFormatStartGroup = 3, - GPBWireFormatEndGroup = 4, - GPBWireFormatFixed32 = 5, -} GPBWireFormat; - -enum { - GPBWireFormatMessageSetItem = 1, - GPBWireFormatMessageSetTypeId = 2, - GPBWireFormatMessageSetMessage = 3 -}; - -uint32_t GPBWireFormatMakeTag(uint32_t fieldNumber, GPBWireFormat wireType) - __attribute__((const)); -GPBWireFormat GPBWireFormatGetTagWireType(uint32_t tag) __attribute__((const)); -uint32_t GPBWireFormatGetTagFieldNumber(uint32_t tag) __attribute__((const)); -BOOL GPBWireFormatIsValidTag(uint32_t tag) __attribute__((const)); - -GPBWireFormat GPBWireFormatForType(GPBDataType dataType, BOOL isPacked) - __attribute__((const)); - -#define GPBWireFormatMessageSetItemTag \ - (GPBWireFormatMakeTag(GPBWireFormatMessageSetItem, GPBWireFormatStartGroup)) -#define GPBWireFormatMessageSetItemEndTag \ - (GPBWireFormatMakeTag(GPBWireFormatMessageSetItem, GPBWireFormatEndGroup)) -#define GPBWireFormatMessageSetTypeIdTag \ - (GPBWireFormatMakeTag(GPBWireFormatMessageSetTypeId, GPBWireFormatVarint)) -#define GPBWireFormatMessageSetMessageTag \ - (GPBWireFormatMakeTag(GPBWireFormatMessageSetMessage, \ - GPBWireFormatLengthDelimited)) - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWireFormat.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWireFormat.m deleted file mode 100644 index 860a339f..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/GPBWireFormat.m +++ /dev/null @@ -1,85 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "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 THE COPYRIGHT -// OWNER 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 "GPBWireFormat.h" - -#import "GPBUtilities_PackagePrivate.h" - -enum { - GPBWireFormatTagTypeBits = 3, - GPBWireFormatTagTypeMask = 7 /* = (1 << GPBWireFormatTagTypeBits) - 1 */, -}; - -uint32_t GPBWireFormatMakeTag(uint32_t fieldNumber, GPBWireFormat wireType) { - return (fieldNumber << GPBWireFormatTagTypeBits) | wireType; -} - -GPBWireFormat GPBWireFormatGetTagWireType(uint32_t tag) { - return (GPBWireFormat)(tag & GPBWireFormatTagTypeMask); -} - -uint32_t GPBWireFormatGetTagFieldNumber(uint32_t tag) { - return GPBLogicalRightShift32(tag, GPBWireFormatTagTypeBits); -} - -BOOL GPBWireFormatIsValidTag(uint32_t tag) { - uint32_t formatBits = (tag & GPBWireFormatTagTypeMask); - // The valid GPBWireFormat* values are 0-5, anything else is not a valid tag. - BOOL result = (formatBits <= 5); - return result; -} - -GPBWireFormat GPBWireFormatForType(GPBDataType type, BOOL isPacked) { - if (isPacked) { - return GPBWireFormatLengthDelimited; - } - - static const GPBWireFormat format[GPBDataType_Count] = { - GPBWireFormatVarint, // GPBDataTypeBool - GPBWireFormatFixed32, // GPBDataTypeFixed32 - GPBWireFormatFixed32, // GPBDataTypeSFixed32 - GPBWireFormatFixed32, // GPBDataTypeFloat - GPBWireFormatFixed64, // GPBDataTypeFixed64 - GPBWireFormatFixed64, // GPBDataTypeSFixed64 - GPBWireFormatFixed64, // GPBDataTypeDouble - GPBWireFormatVarint, // GPBDataTypeInt32 - GPBWireFormatVarint, // GPBDataTypeInt64 - GPBWireFormatVarint, // GPBDataTypeSInt32 - GPBWireFormatVarint, // GPBDataTypeSInt64 - GPBWireFormatVarint, // GPBDataTypeUInt32 - GPBWireFormatVarint, // GPBDataTypeUInt64 - GPBWireFormatLengthDelimited, // GPBDataTypeBytes - GPBWireFormatLengthDelimited, // GPBDataTypeString - GPBWireFormatLengthDelimited, // GPBDataTypeMessage - GPBWireFormatStartGroup, // GPBDataTypeGroup - GPBWireFormatVarint // GPBDataTypeEnum - }; - return format[type]; -} diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Any.pbobjc.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Any.pbobjc.h deleted file mode 100644 index d236e4b2..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Any.pbobjc.h +++ /dev/null @@ -1,163 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/any.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers.h> -#else - #import "GPBProtocolBuffers.h" -#endif - -#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002 -#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources. -#endif -#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION -#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources. -#endif - -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -CF_EXTERN_C_BEGIN - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - GPBAnyRoot - -/** - * Exposes the extension registry for this file. - * - * The base class provides: - * @code - * + (GPBExtensionRegistry *)extensionRegistry; - * @endcode - * which is a @c GPBExtensionRegistry that includes all the extensions defined by - * this file and all files that it depends on. - **/ -@interface GPBAnyRoot : GPBRootObject -@end - -#pragma mark - GPBAny - -typedef GPB_ENUM(GPBAny_FieldNumber) { - GPBAny_FieldNumber_TypeURL = 1, - GPBAny_FieldNumber_Value = 2, -}; - -/** - * `Any` contains an arbitrary serialized protocol buffer message along with a - * URL that describes the type of the serialized message. - * - * Protobuf library provides support to pack/unpack Any values in the form - * of utility functions or additional generated methods of the Any type. - * - * Example 1: Pack and unpack a message in C++. - * - * Foo foo = ...; - * Any any; - * any.PackFrom(foo); - * ... - * if (any.UnpackTo(&foo)) { - * ... - * } - * - * Example 2: Pack and unpack a message in Java. - * - * Foo foo = ...; - * Any any = Any.pack(foo); - * ... - * if (any.is(Foo.class)) { - * foo = any.unpack(Foo.class); - * } - * - * Example 3: Pack and unpack a message in Python. - * - * foo = Foo(...) - * any = Any() - * any.Pack(foo) - * ... - * if any.Is(Foo.DESCRIPTOR): - * any.Unpack(foo) - * ... - * - * The pack methods provided by protobuf library will by default use - * 'type.googleapis.com/full.type.name' as the type URL and the unpack - * methods only use the fully qualified type name after the last '/' - * in the type URL, for example "foo.bar.com/x/y.z" will yield type - * name "y.z". - * - * - * JSON - * ==== - * The JSON representation of an `Any` value uses the regular - * representation of the deserialized, embedded message, with an - * additional field `\@type` which contains the type URL. Example: - * - * package google.profile; - * message Person { - * string first_name = 1; - * string last_name = 2; - * } - * - * { - * "\@type": "type.googleapis.com/google.profile.Person", - * "firstName": <string>, - * "lastName": <string> - * } - * - * If the embedded message type is well-known and has a custom JSON - * representation, that representation will be embedded adding a field - * `value` which holds the custom JSON in addition to the `\@type` - * field. Example (for message [google.protobuf.Duration][]): - * - * { - * "\@type": "type.googleapis.com/google.protobuf.Duration", - * "value": "1.212s" - * } - **/ -@interface GPBAny : GPBMessage - -/** - * A URL/resource name whose content describes the type of the - * serialized protocol buffer message. - * - * For URLs which use the scheme `http`, `https`, or no scheme, the - * following restrictions and interpretations apply: - * - * * If no scheme is provided, `https` is assumed. - * * The last segment of the URL's path must represent the fully - * qualified name of the type (as in `path/google.protobuf.Duration`). - * The name should be in a canonical form (e.g., leading "." is - * not accepted). - * * An HTTP GET on the URL must yield a [google.protobuf.Type][] - * value in binary format, or produce an error. - * * Applications are allowed to cache lookup results based on the - * URL, or have them precompiled into a binary to avoid any - * lookup. Therefore, binary compatibility needs to be preserved - * on changes to types. (Use versioned type names to manage - * breaking changes.) - * - * Schemes other than `http`, `https` (or the empty scheme) might be - * used with implementation specific semantics. - **/ -@property(nonatomic, readwrite, copy, null_resettable) NSString *typeURL; - -/** Must be a valid serialized protocol buffer of the above specified type. */ -@property(nonatomic, readwrite, copy, null_resettable) NSData *value; - -@end - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Any.pbobjc.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Any.pbobjc.m deleted file mode 100644 index d210643f..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Any.pbobjc.m +++ /dev/null @@ -1,112 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/any.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h> -#else - #import "GPBProtocolBuffers_RuntimeSupport.h" -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/Any.pbobjc.h> -#else - #import "google/protobuf/Any.pbobjc.h" -#endif -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -#pragma mark - GPBAnyRoot - -@implementation GPBAnyRoot - -// No extensions in the file and no imports, so no need to generate -// +extensionRegistry. - -@end - -#pragma mark - GPBAnyRoot_FileDescriptor - -static GPBFileDescriptor *GPBAnyRoot_FileDescriptor(void) { - // This is called by +initialize so there is no need to worry - // about thread safety of the singleton. - static GPBFileDescriptor *descriptor = NULL; - if (!descriptor) { - GPB_DEBUG_CHECK_RUNTIME_VERSIONS(); - descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf" - objcPrefix:@"GPB" - syntax:GPBFileSyntaxProto3]; - } - return descriptor; -} - -#pragma mark - GPBAny - -@implementation GPBAny - -@dynamic typeURL; -@dynamic value; - -typedef struct GPBAny__storage_ { - uint32_t _has_storage_[1]; - NSString *typeURL; - NSData *value; -} GPBAny__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "typeURL", - .dataTypeSpecific.className = NULL, - .number = GPBAny_FieldNumber_TypeURL, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBAny__storage_, typeURL), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldTextFormatNameCustom), - .dataType = GPBDataTypeString, - }, - { - .name = "value", - .dataTypeSpecific.className = NULL, - .number = GPBAny_FieldNumber_Value, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBAny__storage_, value), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeBytes, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBAny class] - rootClass:[GPBAnyRoot class] - file:GPBAnyRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBAny__storage_) - flags:GPBDescriptorInitializationFlag_None]; -#if !GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS - static const char *extraTextFormatInfo = - "\001\001\004\241!!\000"; - [localDescriptor setupExtraTextInfo:extraTextFormatInfo]; -#endif // !GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Api.pbobjc.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Api.pbobjc.h deleted file mode 100644 index 742a8122..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Api.pbobjc.h +++ /dev/null @@ -1,299 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/api.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers.h> -#else - #import "GPBProtocolBuffers.h" -#endif - -#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002 -#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources. -#endif -#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION -#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources. -#endif - -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -CF_EXTERN_C_BEGIN - -@class GPBMethod; -@class GPBMixin; -@class GPBOption; -@class GPBSourceContext; -GPB_ENUM_FWD_DECLARE(GPBSyntax); - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - GPBApiRoot - -/** - * Exposes the extension registry for this file. - * - * The base class provides: - * @code - * + (GPBExtensionRegistry *)extensionRegistry; - * @endcode - * which is a @c GPBExtensionRegistry that includes all the extensions defined by - * this file and all files that it depends on. - **/ -@interface GPBApiRoot : GPBRootObject -@end - -#pragma mark - GPBApi - -typedef GPB_ENUM(GPBApi_FieldNumber) { - GPBApi_FieldNumber_Name = 1, - GPBApi_FieldNumber_MethodsArray = 2, - GPBApi_FieldNumber_OptionsArray = 3, - GPBApi_FieldNumber_Version = 4, - GPBApi_FieldNumber_SourceContext = 5, - GPBApi_FieldNumber_MixinsArray = 6, - GPBApi_FieldNumber_Syntax = 7, -}; - -/** - * Api is a light-weight descriptor for a protocol buffer service. - **/ -@interface GPBApi : GPBMessage - -/** - * The fully qualified name of this api, including package name - * followed by the api's simple name. - **/ -@property(nonatomic, readwrite, copy, null_resettable) NSString *name; - -/** The methods of this api, in unspecified order. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBMethod*> *methodsArray; -/** The number of items in @c methodsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger methodsArray_Count; - -/** Any metadata attached to the API. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBOption*> *optionsArray; -/** The number of items in @c optionsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger optionsArray_Count; - -/** - * A version string for this api. If specified, must have the form - * `major-version.minor-version`, as in `1.10`. If the minor version - * is omitted, it defaults to zero. If the entire version field is - * empty, the major version is derived from the package name, as - * outlined below. If the field is not empty, the version in the - * package name will be verified to be consistent with what is - * provided here. - * - * The versioning schema uses [semantic - * versioning](http://semver.org) where the major version number - * indicates a breaking change and the minor version an additive, - * non-breaking change. Both version numbers are signals to users - * what to expect from different versions, and should be carefully - * chosen based on the product plan. - * - * The major version is also reflected in the package name of the - * API, which must end in `v<major-version>`, as in - * `google.feature.v1`. For major versions 0 and 1, the suffix can - * be omitted. Zero major versions must only be used for - * experimental, none-GA apis. - **/ -@property(nonatomic, readwrite, copy, null_resettable) NSString *version; - -/** - * Source context for the protocol buffer service represented by this - * message. - **/ -@property(nonatomic, readwrite, strong, null_resettable) GPBSourceContext *sourceContext; -/** Test to see if @c sourceContext has been set. */ -@property(nonatomic, readwrite) BOOL hasSourceContext; - -/** Included APIs. See [Mixin][]. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBMixin*> *mixinsArray; -/** The number of items in @c mixinsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger mixinsArray_Count; - -/** The source syntax of the service. */ -@property(nonatomic, readwrite) enum GPBSyntax syntax; - -@end - -/** - * Fetches the raw value of a @c GPBApi's @c syntax property, even - * if the value was not defined by the enum at the time the code was generated. - **/ -int32_t GPBApi_Syntax_RawValue(GPBApi *message); -/** - * Sets the raw value of an @c GPBApi's @c syntax property, allowing - * it to be set to a value that was not defined by the enum at the time the code - * was generated. - **/ -void SetGPBApi_Syntax_RawValue(GPBApi *message, int32_t value); - -#pragma mark - GPBMethod - -typedef GPB_ENUM(GPBMethod_FieldNumber) { - GPBMethod_FieldNumber_Name = 1, - GPBMethod_FieldNumber_RequestTypeURL = 2, - GPBMethod_FieldNumber_RequestStreaming = 3, - GPBMethod_FieldNumber_ResponseTypeURL = 4, - GPBMethod_FieldNumber_ResponseStreaming = 5, - GPBMethod_FieldNumber_OptionsArray = 6, - GPBMethod_FieldNumber_Syntax = 7, -}; - -/** - * Method represents a method of an api. - **/ -@interface GPBMethod : GPBMessage - -/** The simple name of this method. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *name; - -/** A URL of the input message type. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *requestTypeURL; - -/** If true, the request is streamed. */ -@property(nonatomic, readwrite) BOOL requestStreaming; - -/** The URL of the output message type. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *responseTypeURL; - -/** If true, the response is streamed. */ -@property(nonatomic, readwrite) BOOL responseStreaming; - -/** Any metadata attached to the method. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBOption*> *optionsArray; -/** The number of items in @c optionsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger optionsArray_Count; - -/** The source syntax of this method. */ -@property(nonatomic, readwrite) enum GPBSyntax syntax; - -@end - -/** - * Fetches the raw value of a @c GPBMethod's @c syntax property, even - * if the value was not defined by the enum at the time the code was generated. - **/ -int32_t GPBMethod_Syntax_RawValue(GPBMethod *message); -/** - * Sets the raw value of an @c GPBMethod's @c syntax property, allowing - * it to be set to a value that was not defined by the enum at the time the code - * was generated. - **/ -void SetGPBMethod_Syntax_RawValue(GPBMethod *message, int32_t value); - -#pragma mark - GPBMixin - -typedef GPB_ENUM(GPBMixin_FieldNumber) { - GPBMixin_FieldNumber_Name = 1, - GPBMixin_FieldNumber_Root = 2, -}; - -/** - * Declares an API to be included in this API. The including API must - * redeclare all the methods from the included API, but documentation - * and options are inherited as follows: - * - * - If after comment and whitespace stripping, the documentation - * string of the redeclared method is empty, it will be inherited - * from the original method. - * - * - Each annotation belonging to the service config (http, - * visibility) which is not set in the redeclared method will be - * inherited. - * - * - If an http annotation is inherited, the path pattern will be - * modified as follows. Any version prefix will be replaced by the - * version of the including API plus the [root][] path if specified. - * - * Example of a simple mixin: - * - * package google.acl.v1; - * service AccessControl { - * // Get the underlying ACL object. - * rpc GetAcl(GetAclRequest) returns (Acl) { - * option (google.api.http).get = "/v1/{resource=**}:getAcl"; - * } - * } - * - * package google.storage.v2; - * service Storage { - * rpc GetAcl(GetAclRequest) returns (Acl); - * - * // Get a data record. - * rpc GetData(GetDataRequest) returns (Data) { - * option (google.api.http).get = "/v2/{resource=**}"; - * } - * } - * - * Example of a mixin configuration: - * - * apis: - * - name: google.storage.v2.Storage - * mixins: - * - name: google.acl.v1.AccessControl - * - * The mixin construct implies that all methods in `AccessControl` are - * also declared with same name and request/response types in - * `Storage`. A documentation generator or annotation processor will - * see the effective `Storage.GetAcl` method after inherting - * documentation and annotations as follows: - * - * service Storage { - * // Get the underlying ACL object. - * rpc GetAcl(GetAclRequest) returns (Acl) { - * option (google.api.http).get = "/v2/{resource=**}:getAcl"; - * } - * ... - * } - * - * Note how the version in the path pattern changed from `v1` to `v2`. - * - * If the `root` field in the mixin is specified, it should be a - * relative path under which inherited HTTP paths are placed. Example: - * - * apis: - * - name: google.storage.v2.Storage - * mixins: - * - name: google.acl.v1.AccessControl - * root: acls - * - * This implies the following inherited HTTP annotation: - * - * service Storage { - * // Get the underlying ACL object. - * rpc GetAcl(GetAclRequest) returns (Acl) { - * option (google.api.http).get = "/v2/acls/{resource=**}:getAcl"; - * } - * ... - * } - **/ -@interface GPBMixin : GPBMessage - -/** The fully qualified name of the API which is included. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *name; - -/** - * If non-empty specifies a path under which inherited HTTP paths - * are rooted. - **/ -@property(nonatomic, readwrite, copy, null_resettable) NSString *root; - -@end - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Api.pbobjc.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Api.pbobjc.m deleted file mode 100644 index 58b47157..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Api.pbobjc.m +++ /dev/null @@ -1,356 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/api.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h> -#else - #import "GPBProtocolBuffers_RuntimeSupport.h" -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/Api.pbobjc.h> - #import <Protobuf/SourceContext.pbobjc.h> - #import <Protobuf/Type.pbobjc.h> -#else - #import "google/protobuf/Api.pbobjc.h" - #import "google/protobuf/SourceContext.pbobjc.h" - #import "google/protobuf/Type.pbobjc.h" -#endif -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -#pragma mark - GPBApiRoot - -@implementation GPBApiRoot - -// No extensions in the file and none of the imports (direct or indirect) -// defined extensions, so no need to generate +extensionRegistry. - -@end - -#pragma mark - GPBApiRoot_FileDescriptor - -static GPBFileDescriptor *GPBApiRoot_FileDescriptor(void) { - // This is called by +initialize so there is no need to worry - // about thread safety of the singleton. - static GPBFileDescriptor *descriptor = NULL; - if (!descriptor) { - GPB_DEBUG_CHECK_RUNTIME_VERSIONS(); - descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf" - objcPrefix:@"GPB" - syntax:GPBFileSyntaxProto3]; - } - return descriptor; -} - -#pragma mark - GPBApi - -@implementation GPBApi - -@dynamic name; -@dynamic methodsArray, methodsArray_Count; -@dynamic optionsArray, optionsArray_Count; -@dynamic version; -@dynamic hasSourceContext, sourceContext; -@dynamic mixinsArray, mixinsArray_Count; -@dynamic syntax; - -typedef struct GPBApi__storage_ { - uint32_t _has_storage_[1]; - GPBSyntax syntax; - NSString *name; - NSMutableArray *methodsArray; - NSMutableArray *optionsArray; - NSString *version; - GPBSourceContext *sourceContext; - NSMutableArray *mixinsArray; -} GPBApi__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "name", - .dataTypeSpecific.className = NULL, - .number = GPBApi_FieldNumber_Name, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBApi__storage_, name), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "methodsArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBMethod), - .number = GPBApi_FieldNumber_MethodsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBApi__storage_, methodsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - { - .name = "optionsArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBOption), - .number = GPBApi_FieldNumber_OptionsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBApi__storage_, optionsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - { - .name = "version", - .dataTypeSpecific.className = NULL, - .number = GPBApi_FieldNumber_Version, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBApi__storage_, version), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "sourceContext", - .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext), - .number = GPBApi_FieldNumber_SourceContext, - .hasIndex = 2, - .offset = (uint32_t)offsetof(GPBApi__storage_, sourceContext), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeMessage, - }, - { - .name = "mixinsArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBMixin), - .number = GPBApi_FieldNumber_MixinsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBApi__storage_, mixinsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - { - .name = "syntax", - .dataTypeSpecific.enumDescFunc = GPBSyntax_EnumDescriptor, - .number = GPBApi_FieldNumber_Syntax, - .hasIndex = 3, - .offset = (uint32_t)offsetof(GPBApi__storage_, syntax), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor), - .dataType = GPBDataTypeEnum, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBApi class] - rootClass:[GPBApiRoot class] - file:GPBApiRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBApi__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -int32_t GPBApi_Syntax_RawValue(GPBApi *message) { - GPBDescriptor *descriptor = [GPBApi descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBApi_FieldNumber_Syntax]; - return GPBGetMessageInt32Field(message, field); -} - -void SetGPBApi_Syntax_RawValue(GPBApi *message, int32_t value) { - GPBDescriptor *descriptor = [GPBApi descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBApi_FieldNumber_Syntax]; - GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax); -} - -#pragma mark - GPBMethod - -@implementation GPBMethod - -@dynamic name; -@dynamic requestTypeURL; -@dynamic requestStreaming; -@dynamic responseTypeURL; -@dynamic responseStreaming; -@dynamic optionsArray, optionsArray_Count; -@dynamic syntax; - -typedef struct GPBMethod__storage_ { - uint32_t _has_storage_[1]; - GPBSyntax syntax; - NSString *name; - NSString *requestTypeURL; - NSString *responseTypeURL; - NSMutableArray *optionsArray; -} GPBMethod__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "name", - .dataTypeSpecific.className = NULL, - .number = GPBMethod_FieldNumber_Name, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBMethod__storage_, name), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "requestTypeURL", - .dataTypeSpecific.className = NULL, - .number = GPBMethod_FieldNumber_RequestTypeURL, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBMethod__storage_, requestTypeURL), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldTextFormatNameCustom), - .dataType = GPBDataTypeString, - }, - { - .name = "requestStreaming", - .dataTypeSpecific.className = NULL, - .number = GPBMethod_FieldNumber_RequestStreaming, - .hasIndex = 2, - .offset = 3, // Stored in _has_storage_ to save space. - .flags = GPBFieldOptional, - .dataType = GPBDataTypeBool, - }, - { - .name = "responseTypeURL", - .dataTypeSpecific.className = NULL, - .number = GPBMethod_FieldNumber_ResponseTypeURL, - .hasIndex = 4, - .offset = (uint32_t)offsetof(GPBMethod__storage_, responseTypeURL), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldTextFormatNameCustom), - .dataType = GPBDataTypeString, - }, - { - .name = "responseStreaming", - .dataTypeSpecific.className = NULL, - .number = GPBMethod_FieldNumber_ResponseStreaming, - .hasIndex = 5, - .offset = 6, // Stored in _has_storage_ to save space. - .flags = GPBFieldOptional, - .dataType = GPBDataTypeBool, - }, - { - .name = "optionsArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBOption), - .number = GPBMethod_FieldNumber_OptionsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBMethod__storage_, optionsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - { - .name = "syntax", - .dataTypeSpecific.enumDescFunc = GPBSyntax_EnumDescriptor, - .number = GPBMethod_FieldNumber_Syntax, - .hasIndex = 7, - .offset = (uint32_t)offsetof(GPBMethod__storage_, syntax), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor), - .dataType = GPBDataTypeEnum, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBMethod class] - rootClass:[GPBApiRoot class] - file:GPBApiRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBMethod__storage_) - flags:GPBDescriptorInitializationFlag_None]; -#if !GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS - static const char *extraTextFormatInfo = - "\002\002\007\244\241!!\000\004\010\244\241!!\000"; - [localDescriptor setupExtraTextInfo:extraTextFormatInfo]; -#endif // !GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -int32_t GPBMethod_Syntax_RawValue(GPBMethod *message) { - GPBDescriptor *descriptor = [GPBMethod descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBMethod_FieldNumber_Syntax]; - return GPBGetMessageInt32Field(message, field); -} - -void SetGPBMethod_Syntax_RawValue(GPBMethod *message, int32_t value) { - GPBDescriptor *descriptor = [GPBMethod descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBMethod_FieldNumber_Syntax]; - GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax); -} - -#pragma mark - GPBMixin - -@implementation GPBMixin - -@dynamic name; -@dynamic root; - -typedef struct GPBMixin__storage_ { - uint32_t _has_storage_[1]; - NSString *name; - NSString *root; -} GPBMixin__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "name", - .dataTypeSpecific.className = NULL, - .number = GPBMixin_FieldNumber_Name, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBMixin__storage_, name), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "root", - .dataTypeSpecific.className = NULL, - .number = GPBMixin_FieldNumber_Root, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBMixin__storage_, root), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBMixin class] - rootClass:[GPBApiRoot class] - file:GPBApiRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBMixin__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Duration.pbobjc.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Duration.pbobjc.h deleted file mode 100644 index d9a388ac..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Duration.pbobjc.h +++ /dev/null @@ -1,141 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/duration.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers.h> -#else - #import "GPBProtocolBuffers.h" -#endif - -#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002 -#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources. -#endif -#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION -#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources. -#endif - -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -CF_EXTERN_C_BEGIN - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - GPBDurationRoot - -/** - * Exposes the extension registry for this file. - * - * The base class provides: - * @code - * + (GPBExtensionRegistry *)extensionRegistry; - * @endcode - * which is a @c GPBExtensionRegistry that includes all the extensions defined by - * this file and all files that it depends on. - **/ -@interface GPBDurationRoot : GPBRootObject -@end - -#pragma mark - GPBDuration - -typedef GPB_ENUM(GPBDuration_FieldNumber) { - GPBDuration_FieldNumber_Seconds = 1, - GPBDuration_FieldNumber_Nanos = 2, -}; - -/** - * A Duration represents a signed, fixed-length span of time represented - * as a count of seconds and fractions of seconds at nanosecond - * resolution. It is independent of any calendar and concepts like "day" - * or "month". It is related to Timestamp in that the difference between - * two Timestamp values is a Duration and it can be added or subtracted - * from a Timestamp. Range is approximately +-10,000 years. - * - * # Examples - * - * Example 1: Compute Duration from two Timestamps in pseudo code. - * - * Timestamp start = ...; - * Timestamp end = ...; - * Duration duration = ...; - * - * duration.seconds = end.seconds - start.seconds; - * duration.nanos = end.nanos - start.nanos; - * - * if (duration.seconds < 0 && duration.nanos > 0) { - * duration.seconds += 1; - * duration.nanos -= 1000000000; - * } else if (durations.seconds > 0 && duration.nanos < 0) { - * duration.seconds -= 1; - * duration.nanos += 1000000000; - * } - * - * Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. - * - * Timestamp start = ...; - * Duration duration = ...; - * Timestamp end = ...; - * - * end.seconds = start.seconds + duration.seconds; - * end.nanos = start.nanos + duration.nanos; - * - * if (end.nanos < 0) { - * end.seconds -= 1; - * end.nanos += 1000000000; - * } else if (end.nanos >= 1000000000) { - * end.seconds += 1; - * end.nanos -= 1000000000; - * } - * - * Example 3: Compute Duration from datetime.timedelta in Python. - * - * td = datetime.timedelta(days=3, minutes=10) - * duration = Duration() - * duration.FromTimedelta(td) - * - * # JSON Mapping - * - * In JSON format, the Duration type is encoded as a string rather than an - * object, where the string ends in the suffix "s" (indicating seconds) and - * is preceded by the number of seconds, with nanoseconds expressed as - * fractional seconds. For example, 3 seconds with 0 nanoseconds should be - * encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should - * be expressed in JSON format as "3.000000001s", and 3 seconds and 1 - * microsecond should be expressed in JSON format as "3.000001s". - **/ -@interface GPBDuration : GPBMessage - -/** - * Signed seconds of the span of time. Must be from -315,576,000,000 - * to +315,576,000,000 inclusive. Note: these bounds are computed from: - * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - **/ -@property(nonatomic, readwrite) int64_t seconds; - -/** - * Signed fractions of a second at nanosecond resolution of the span - * of time. Durations less than one second are represented with a 0 - * `seconds` field and a positive or negative `nanos` field. For durations - * of one second or more, a non-zero value for the `nanos` field must be - * of the same sign as the `seconds` field. Must be from -999,999,999 - * to +999,999,999 inclusive. - **/ -@property(nonatomic, readwrite) int32_t nanos; - -@end - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Duration.pbobjc.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Duration.pbobjc.m deleted file mode 100644 index bafb64a0..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Duration.pbobjc.m +++ /dev/null @@ -1,107 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/duration.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h> -#else - #import "GPBProtocolBuffers_RuntimeSupport.h" -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/Duration.pbobjc.h> -#else - #import "google/protobuf/Duration.pbobjc.h" -#endif -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -#pragma mark - GPBDurationRoot - -@implementation GPBDurationRoot - -// No extensions in the file and no imports, so no need to generate -// +extensionRegistry. - -@end - -#pragma mark - GPBDurationRoot_FileDescriptor - -static GPBFileDescriptor *GPBDurationRoot_FileDescriptor(void) { - // This is called by +initialize so there is no need to worry - // about thread safety of the singleton. - static GPBFileDescriptor *descriptor = NULL; - if (!descriptor) { - GPB_DEBUG_CHECK_RUNTIME_VERSIONS(); - descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf" - objcPrefix:@"GPB" - syntax:GPBFileSyntaxProto3]; - } - return descriptor; -} - -#pragma mark - GPBDuration - -@implementation GPBDuration - -@dynamic seconds; -@dynamic nanos; - -typedef struct GPBDuration__storage_ { - uint32_t _has_storage_[1]; - int32_t nanos; - int64_t seconds; -} GPBDuration__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "seconds", - .dataTypeSpecific.className = NULL, - .number = GPBDuration_FieldNumber_Seconds, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBDuration__storage_, seconds), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeInt64, - }, - { - .name = "nanos", - .dataTypeSpecific.className = NULL, - .number = GPBDuration_FieldNumber_Nanos, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBDuration__storage_, nanos), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeInt32, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBDuration class] - rootClass:[GPBDurationRoot class] - file:GPBDurationRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBDuration__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Empty.pbobjc.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Empty.pbobjc.h deleted file mode 100644 index bd49cfdb..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Empty.pbobjc.h +++ /dev/null @@ -1,70 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/empty.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers.h> -#else - #import "GPBProtocolBuffers.h" -#endif - -#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002 -#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources. -#endif -#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION -#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources. -#endif - -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -CF_EXTERN_C_BEGIN - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - GPBEmptyRoot - -/** - * Exposes the extension registry for this file. - * - * The base class provides: - * @code - * + (GPBExtensionRegistry *)extensionRegistry; - * @endcode - * which is a @c GPBExtensionRegistry that includes all the extensions defined by - * this file and all files that it depends on. - **/ -@interface GPBEmptyRoot : GPBRootObject -@end - -#pragma mark - GPBEmpty - -/** - * A generic empty message that you can re-use to avoid defining duplicated - * empty messages in your APIs. A typical example is to use it as the request - * or the response type of an API method. For instance: - * - * service Foo { - * rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); - * } - * - * The JSON representation for `Empty` is empty JSON object `{}`. - **/ -@interface GPBEmpty : GPBMessage - -@end - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Empty.pbobjc.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Empty.pbobjc.m deleted file mode 100644 index 506b500e..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Empty.pbobjc.m +++ /dev/null @@ -1,83 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/empty.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h> -#else - #import "GPBProtocolBuffers_RuntimeSupport.h" -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/Empty.pbobjc.h> -#else - #import "google/protobuf/Empty.pbobjc.h" -#endif -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -#pragma mark - GPBEmptyRoot - -@implementation GPBEmptyRoot - -// No extensions in the file and no imports, so no need to generate -// +extensionRegistry. - -@end - -#pragma mark - GPBEmptyRoot_FileDescriptor - -static GPBFileDescriptor *GPBEmptyRoot_FileDescriptor(void) { - // This is called by +initialize so there is no need to worry - // about thread safety of the singleton. - static GPBFileDescriptor *descriptor = NULL; - if (!descriptor) { - GPB_DEBUG_CHECK_RUNTIME_VERSIONS(); - descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf" - objcPrefix:@"GPB" - syntax:GPBFileSyntaxProto3]; - } - return descriptor; -} - -#pragma mark - GPBEmpty - -@implementation GPBEmpty - - -typedef struct GPBEmpty__storage_ { - uint32_t _has_storage_[1]; -} GPBEmpty__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBEmpty class] - rootClass:[GPBEmptyRoot class] - file:GPBEmptyRoot_FileDescriptor() - fields:NULL - fieldCount:0 - storageSize:sizeof(GPBEmpty__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/FieldMask.pbobjc.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/FieldMask.pbobjc.h deleted file mode 100644 index 07e60818..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/FieldMask.pbobjc.h +++ /dev/null @@ -1,271 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/field_mask.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers.h> -#else - #import "GPBProtocolBuffers.h" -#endif - -#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002 -#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources. -#endif -#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION -#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources. -#endif - -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -CF_EXTERN_C_BEGIN - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - GPBFieldMaskRoot - -/** - * Exposes the extension registry for this file. - * - * The base class provides: - * @code - * + (GPBExtensionRegistry *)extensionRegistry; - * @endcode - * which is a @c GPBExtensionRegistry that includes all the extensions defined by - * this file and all files that it depends on. - **/ -@interface GPBFieldMaskRoot : GPBRootObject -@end - -#pragma mark - GPBFieldMask - -typedef GPB_ENUM(GPBFieldMask_FieldNumber) { - GPBFieldMask_FieldNumber_PathsArray = 1, -}; - -/** - * `FieldMask` represents a set of symbolic field paths, for example: - * - * paths: "f.a" - * paths: "f.b.d" - * - * Here `f` represents a field in some root message, `a` and `b` - * fields in the message found in `f`, and `d` a field found in the - * message in `f.b`. - * - * Field masks are used to specify a subset of fields that should be - * returned by a get operation or modified by an update operation. - * Field masks also have a custom JSON encoding (see below). - * - * # Field Masks in Projections - * - * When used in the context of a projection, a response message or - * sub-message is filtered by the API to only contain those fields as - * specified in the mask. For example, if the mask in the previous - * example is applied to a response message as follows: - * - * f { - * a : 22 - * b { - * d : 1 - * x : 2 - * } - * y : 13 - * } - * z: 8 - * - * The result will not contain specific values for fields x,y and z - * (their value will be set to the default, and omitted in proto text - * output): - * - * - * f { - * a : 22 - * b { - * d : 1 - * } - * } - * - * A repeated field is not allowed except at the last position of a - * paths string. - * - * If a FieldMask object is not present in a get operation, the - * operation applies to all fields (as if a FieldMask of all fields - * had been specified). - * - * Note that a field mask does not necessarily apply to the - * top-level response message. In case of a REST get operation, the - * field mask applies directly to the response, but in case of a REST - * list operation, the mask instead applies to each individual message - * in the returned resource list. In case of a REST custom method, - * other definitions may be used. Where the mask applies will be - * clearly documented together with its declaration in the API. In - * any case, the effect on the returned resource/resources is required - * behavior for APIs. - * - * # Field Masks in Update Operations - * - * A field mask in update operations specifies which fields of the - * targeted resource are going to be updated. The API is required - * to only change the values of the fields as specified in the mask - * and leave the others untouched. If a resource is passed in to - * describe the updated values, the API ignores the values of all - * fields not covered by the mask. - * - * If a repeated field is specified for an update operation, the existing - * repeated values in the target resource will be overwritten by the new values. - * Note that a repeated field is only allowed in the last position of a `paths` - * string. - * - * If a sub-message is specified in the last position of the field mask for an - * update operation, then the existing sub-message in the target resource is - * overwritten. Given the target message: - * - * f { - * b { - * d : 1 - * x : 2 - * } - * c : 1 - * } - * - * And an update message: - * - * f { - * b { - * d : 10 - * } - * } - * - * then if the field mask is: - * - * paths: "f.b" - * - * then the result will be: - * - * f { - * b { - * d : 10 - * } - * c : 1 - * } - * - * However, if the update mask was: - * - * paths: "f.b.d" - * - * then the result would be: - * - * f { - * b { - * d : 10 - * x : 2 - * } - * c : 1 - * } - * - * In order to reset a field's value to the default, the field must - * be in the mask and set to the default value in the provided resource. - * Hence, in order to reset all fields of a resource, provide a default - * instance of the resource and set all fields in the mask, or do - * not provide a mask as described below. - * - * If a field mask is not present on update, the operation applies to - * all fields (as if a field mask of all fields has been specified). - * Note that in the presence of schema evolution, this may mean that - * fields the client does not know and has therefore not filled into - * the request will be reset to their default. If this is unwanted - * behavior, a specific service may require a client to always specify - * a field mask, producing an error if not. - * - * As with get operations, the location of the resource which - * describes the updated values in the request message depends on the - * operation kind. In any case, the effect of the field mask is - * required to be honored by the API. - * - * ## Considerations for HTTP REST - * - * The HTTP kind of an update operation which uses a field mask must - * be set to PATCH instead of PUT in order to satisfy HTTP semantics - * (PUT must only be used for full updates). - * - * # JSON Encoding of Field Masks - * - * In JSON, a field mask is encoded as a single string where paths are - * separated by a comma. Fields name in each path are converted - * to/from lower-camel naming conventions. - * - * As an example, consider the following message declarations: - * - * message Profile { - * User user = 1; - * Photo photo = 2; - * } - * message User { - * string display_name = 1; - * string address = 2; - * } - * - * In proto a field mask for `Profile` may look as such: - * - * mask { - * paths: "user.display_name" - * paths: "photo" - * } - * - * In JSON, the same mask is represented as below: - * - * { - * mask: "user.displayName,photo" - * } - * - * # Field Masks and Oneof Fields - * - * Field masks treat fields in oneofs just as regular fields. Consider the - * following message: - * - * message SampleMessage { - * oneof test_oneof { - * string name = 4; - * SubMessage sub_message = 9; - * } - * } - * - * The field mask can be: - * - * mask { - * paths: "name" - * } - * - * Or: - * - * mask { - * paths: "sub_message" - * } - * - * Note that oneof type names ("test_oneof" in this case) cannot be used in - * paths. - **/ -@interface GPBFieldMask : GPBMessage - -/** The set of field mask paths. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *pathsArray; -/** The number of items in @c pathsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger pathsArray_Count; - -@end - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/FieldMask.pbobjc.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/FieldMask.pbobjc.m deleted file mode 100644 index b0915af4..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/FieldMask.pbobjc.m +++ /dev/null @@ -1,96 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/field_mask.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h> -#else - #import "GPBProtocolBuffers_RuntimeSupport.h" -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/FieldMask.pbobjc.h> -#else - #import "google/protobuf/FieldMask.pbobjc.h" -#endif -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -#pragma mark - GPBFieldMaskRoot - -@implementation GPBFieldMaskRoot - -// No extensions in the file and no imports, so no need to generate -// +extensionRegistry. - -@end - -#pragma mark - GPBFieldMaskRoot_FileDescriptor - -static GPBFileDescriptor *GPBFieldMaskRoot_FileDescriptor(void) { - // This is called by +initialize so there is no need to worry - // about thread safety of the singleton. - static GPBFileDescriptor *descriptor = NULL; - if (!descriptor) { - GPB_DEBUG_CHECK_RUNTIME_VERSIONS(); - descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf" - objcPrefix:@"GPB" - syntax:GPBFileSyntaxProto3]; - } - return descriptor; -} - -#pragma mark - GPBFieldMask - -@implementation GPBFieldMask - -@dynamic pathsArray, pathsArray_Count; - -typedef struct GPBFieldMask__storage_ { - uint32_t _has_storage_[1]; - NSMutableArray *pathsArray; -} GPBFieldMask__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "pathsArray", - .dataTypeSpecific.className = NULL, - .number = GPBFieldMask_FieldNumber_PathsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBFieldMask__storage_, pathsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeString, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBFieldMask class] - rootClass:[GPBFieldMaskRoot class] - file:GPBFieldMaskRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBFieldMask__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/SourceContext.pbobjc.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/SourceContext.pbobjc.h deleted file mode 100644 index 799d190a..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/SourceContext.pbobjc.h +++ /dev/null @@ -1,73 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/source_context.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers.h> -#else - #import "GPBProtocolBuffers.h" -#endif - -#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002 -#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources. -#endif -#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION -#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources. -#endif - -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -CF_EXTERN_C_BEGIN - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - GPBSourceContextRoot - -/** - * Exposes the extension registry for this file. - * - * The base class provides: - * @code - * + (GPBExtensionRegistry *)extensionRegistry; - * @endcode - * which is a @c GPBExtensionRegistry that includes all the extensions defined by - * this file and all files that it depends on. - **/ -@interface GPBSourceContextRoot : GPBRootObject -@end - -#pragma mark - GPBSourceContext - -typedef GPB_ENUM(GPBSourceContext_FieldNumber) { - GPBSourceContext_FieldNumber_FileName = 1, -}; - -/** - * `SourceContext` represents information about the source of a - * protobuf element, like the file in which it is defined. - **/ -@interface GPBSourceContext : GPBMessage - -/** - * The path-qualified name of the .proto file that contained the associated - * protobuf element. For example: `"google/protobuf/source_context.proto"`. - **/ -@property(nonatomic, readwrite, copy, null_resettable) NSString *fileName; - -@end - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/SourceContext.pbobjc.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/SourceContext.pbobjc.m deleted file mode 100644 index 83bfa346..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/SourceContext.pbobjc.m +++ /dev/null @@ -1,96 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/source_context.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h> -#else - #import "GPBProtocolBuffers_RuntimeSupport.h" -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/SourceContext.pbobjc.h> -#else - #import "google/protobuf/SourceContext.pbobjc.h" -#endif -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -#pragma mark - GPBSourceContextRoot - -@implementation GPBSourceContextRoot - -// No extensions in the file and no imports, so no need to generate -// +extensionRegistry. - -@end - -#pragma mark - GPBSourceContextRoot_FileDescriptor - -static GPBFileDescriptor *GPBSourceContextRoot_FileDescriptor(void) { - // This is called by +initialize so there is no need to worry - // about thread safety of the singleton. - static GPBFileDescriptor *descriptor = NULL; - if (!descriptor) { - GPB_DEBUG_CHECK_RUNTIME_VERSIONS(); - descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf" - objcPrefix:@"GPB" - syntax:GPBFileSyntaxProto3]; - } - return descriptor; -} - -#pragma mark - GPBSourceContext - -@implementation GPBSourceContext - -@dynamic fileName; - -typedef struct GPBSourceContext__storage_ { - uint32_t _has_storage_[1]; - NSString *fileName; -} GPBSourceContext__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "fileName", - .dataTypeSpecific.className = NULL, - .number = GPBSourceContext_FieldNumber_FileName, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBSourceContext__storage_, fileName), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBSourceContext class] - rootClass:[GPBSourceContextRoot class] - file:GPBSourceContextRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBSourceContext__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Struct.pbobjc.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Struct.pbobjc.h deleted file mode 100644 index 3fc80caa..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Struct.pbobjc.h +++ /dev/null @@ -1,200 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/struct.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers.h> -#else - #import "GPBProtocolBuffers.h" -#endif - -#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002 -#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources. -#endif -#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION -#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources. -#endif - -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -CF_EXTERN_C_BEGIN - -@class GPBListValue; -@class GPBStruct; -@class GPBValue; - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - Enum GPBNullValue - -/** - * `NullValue` is a singleton enumeration to represent the null value for the - * `Value` type union. - * - * The JSON representation for `NullValue` is JSON `null`. - **/ -typedef GPB_ENUM(GPBNullValue) { - /** - * Value used if any message's field encounters a value that is not defined - * by this enum. The message will also have C functions to get/set the rawValue - * of the field. - **/ - GPBNullValue_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue, - /** Null value. */ - GPBNullValue_NullValue = 0, -}; - -GPBEnumDescriptor *GPBNullValue_EnumDescriptor(void); - -/** - * Checks to see if the given value is defined by the enum or was not known at - * the time this source was generated. - **/ -BOOL GPBNullValue_IsValidValue(int32_t value); - -#pragma mark - GPBStructRoot - -/** - * Exposes the extension registry for this file. - * - * The base class provides: - * @code - * + (GPBExtensionRegistry *)extensionRegistry; - * @endcode - * which is a @c GPBExtensionRegistry that includes all the extensions defined by - * this file and all files that it depends on. - **/ -@interface GPBStructRoot : GPBRootObject -@end - -#pragma mark - GPBStruct - -typedef GPB_ENUM(GPBStruct_FieldNumber) { - GPBStruct_FieldNumber_Fields = 1, -}; - -/** - * `Struct` represents a structured data value, consisting of fields - * which map to dynamically typed values. In some languages, `Struct` - * might be supported by a native representation. For example, in - * scripting languages like JS a struct is represented as an - * object. The details of that representation are described together - * with the proto support for the language. - * - * The JSON representation for `Struct` is JSON object. - **/ -@interface GPBStruct : GPBMessage - -/** Unordered map of dynamically typed values. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableDictionary<NSString*, GPBValue*> *fields; -/** The number of items in @c fields without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger fields_Count; - -@end - -#pragma mark - GPBValue - -typedef GPB_ENUM(GPBValue_FieldNumber) { - GPBValue_FieldNumber_NullValue = 1, - GPBValue_FieldNumber_NumberValue = 2, - GPBValue_FieldNumber_StringValue = 3, - GPBValue_FieldNumber_BoolValue = 4, - GPBValue_FieldNumber_StructValue = 5, - GPBValue_FieldNumber_ListValue = 6, -}; - -typedef GPB_ENUM(GPBValue_Kind_OneOfCase) { - GPBValue_Kind_OneOfCase_GPBUnsetOneOfCase = 0, - GPBValue_Kind_OneOfCase_NullValue = 1, - GPBValue_Kind_OneOfCase_NumberValue = 2, - GPBValue_Kind_OneOfCase_StringValue = 3, - GPBValue_Kind_OneOfCase_BoolValue = 4, - GPBValue_Kind_OneOfCase_StructValue = 5, - GPBValue_Kind_OneOfCase_ListValue = 6, -}; - -/** - * `Value` represents a dynamically typed value which can be either - * null, a number, a string, a boolean, a recursive struct value, or a - * list of values. A producer of value is expected to set one of that - * variants, absence of any variant indicates an error. - * - * The JSON representation for `Value` is JSON value. - **/ -@interface GPBValue : GPBMessage - -/** The kind of value. */ -@property(nonatomic, readonly) GPBValue_Kind_OneOfCase kindOneOfCase; - -/** Represents a null value. */ -@property(nonatomic, readwrite) GPBNullValue nullValue; - -/** Represents a double value. */ -@property(nonatomic, readwrite) double numberValue; - -/** Represents a string value. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *stringValue; - -/** Represents a boolean value. */ -@property(nonatomic, readwrite) BOOL boolValue; - -/** Represents a structured value. */ -@property(nonatomic, readwrite, strong, null_resettable) GPBStruct *structValue; - -/** Represents a repeated `Value`. */ -@property(nonatomic, readwrite, strong, null_resettable) GPBListValue *listValue; - -@end - -/** - * Fetches the raw value of a @c GPBValue's @c nullValue property, even - * if the value was not defined by the enum at the time the code was generated. - **/ -int32_t GPBValue_NullValue_RawValue(GPBValue *message); -/** - * Sets the raw value of an @c GPBValue's @c nullValue property, allowing - * it to be set to a value that was not defined by the enum at the time the code - * was generated. - **/ -void SetGPBValue_NullValue_RawValue(GPBValue *message, int32_t value); - -/** - * Clears whatever value was set for the oneof 'kind'. - **/ -void GPBValue_ClearKindOneOfCase(GPBValue *message); - -#pragma mark - GPBListValue - -typedef GPB_ENUM(GPBListValue_FieldNumber) { - GPBListValue_FieldNumber_ValuesArray = 1, -}; - -/** - * `ListValue` is a wrapper around a repeated field of values. - * - * The JSON representation for `ListValue` is JSON array. - **/ -@interface GPBListValue : GPBMessage - -/** Repeated field of dynamically typed values. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBValue*> *valuesArray; -/** The number of items in @c valuesArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger valuesArray_Count; - -@end - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Struct.pbobjc.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Struct.pbobjc.m deleted file mode 100644 index f36ec582..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Struct.pbobjc.m +++ /dev/null @@ -1,293 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/struct.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h> -#else - #import "GPBProtocolBuffers_RuntimeSupport.h" -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/Struct.pbobjc.h> -#else - #import "google/protobuf/Struct.pbobjc.h" -#endif -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -#pragma mark - GPBStructRoot - -@implementation GPBStructRoot - -// No extensions in the file and no imports, so no need to generate -// +extensionRegistry. - -@end - -#pragma mark - GPBStructRoot_FileDescriptor - -static GPBFileDescriptor *GPBStructRoot_FileDescriptor(void) { - // This is called by +initialize so there is no need to worry - // about thread safety of the singleton. - static GPBFileDescriptor *descriptor = NULL; - if (!descriptor) { - GPB_DEBUG_CHECK_RUNTIME_VERSIONS(); - descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf" - objcPrefix:@"GPB" - syntax:GPBFileSyntaxProto3]; - } - return descriptor; -} - -#pragma mark - Enum GPBNullValue - -GPBEnumDescriptor *GPBNullValue_EnumDescriptor(void) { - static GPBEnumDescriptor *descriptor = NULL; - if (!descriptor) { - static const char *valueNames = - "NullValue\000"; - static const int32_t values[] = { - GPBNullValue_NullValue, - }; - GPBEnumDescriptor *worker = - [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(GPBNullValue) - valueNames:valueNames - values:values - count:(uint32_t)(sizeof(values) / sizeof(int32_t)) - enumVerifier:GPBNullValue_IsValidValue]; - if (!OSAtomicCompareAndSwapPtrBarrier(nil, worker, (void * volatile *)&descriptor)) { - [worker release]; - } - } - return descriptor; -} - -BOOL GPBNullValue_IsValidValue(int32_t value__) { - switch (value__) { - case GPBNullValue_NullValue: - return YES; - default: - return NO; - } -} - -#pragma mark - GPBStruct - -@implementation GPBStruct - -@dynamic fields, fields_Count; - -typedef struct GPBStruct__storage_ { - uint32_t _has_storage_[1]; - NSMutableDictionary *fields; -} GPBStruct__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "fields", - .dataTypeSpecific.className = GPBStringifySymbol(GPBValue), - .number = GPBStruct_FieldNumber_Fields, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBStruct__storage_, fields), - .flags = GPBFieldMapKeyString, - .dataType = GPBDataTypeMessage, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBStruct class] - rootClass:[GPBStructRoot class] - file:GPBStructRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBStruct__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -#pragma mark - GPBValue - -@implementation GPBValue - -@dynamic kindOneOfCase; -@dynamic nullValue; -@dynamic numberValue; -@dynamic stringValue; -@dynamic boolValue; -@dynamic structValue; -@dynamic listValue; - -typedef struct GPBValue__storage_ { - uint32_t _has_storage_[2]; - GPBNullValue nullValue; - NSString *stringValue; - GPBStruct *structValue; - GPBListValue *listValue; - double numberValue; -} GPBValue__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "nullValue", - .dataTypeSpecific.enumDescFunc = GPBNullValue_EnumDescriptor, - .number = GPBValue_FieldNumber_NullValue, - .hasIndex = -1, - .offset = (uint32_t)offsetof(GPBValue__storage_, nullValue), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor), - .dataType = GPBDataTypeEnum, - }, - { - .name = "numberValue", - .dataTypeSpecific.className = NULL, - .number = GPBValue_FieldNumber_NumberValue, - .hasIndex = -1, - .offset = (uint32_t)offsetof(GPBValue__storage_, numberValue), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeDouble, - }, - { - .name = "stringValue", - .dataTypeSpecific.className = NULL, - .number = GPBValue_FieldNumber_StringValue, - .hasIndex = -1, - .offset = (uint32_t)offsetof(GPBValue__storage_, stringValue), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "boolValue", - .dataTypeSpecific.className = NULL, - .number = GPBValue_FieldNumber_BoolValue, - .hasIndex = -1, - .offset = 0, // Stored in _has_storage_ to save space. - .flags = GPBFieldOptional, - .dataType = GPBDataTypeBool, - }, - { - .name = "structValue", - .dataTypeSpecific.className = GPBStringifySymbol(GPBStruct), - .number = GPBValue_FieldNumber_StructValue, - .hasIndex = -1, - .offset = (uint32_t)offsetof(GPBValue__storage_, structValue), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeMessage, - }, - { - .name = "listValue", - .dataTypeSpecific.className = GPBStringifySymbol(GPBListValue), - .number = GPBValue_FieldNumber_ListValue, - .hasIndex = -1, - .offset = (uint32_t)offsetof(GPBValue__storage_, listValue), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeMessage, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBValue class] - rootClass:[GPBStructRoot class] - file:GPBStructRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBValue__storage_) - flags:GPBDescriptorInitializationFlag_None]; - static const char *oneofs[] = { - "kind", - }; - [localDescriptor setupOneofs:oneofs - count:(uint32_t)(sizeof(oneofs) / sizeof(char*)) - firstHasIndex:-1]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -int32_t GPBValue_NullValue_RawValue(GPBValue *message) { - GPBDescriptor *descriptor = [GPBValue descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBValue_FieldNumber_NullValue]; - return GPBGetMessageInt32Field(message, field); -} - -void SetGPBValue_NullValue_RawValue(GPBValue *message, int32_t value) { - GPBDescriptor *descriptor = [GPBValue descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBValue_FieldNumber_NullValue]; - GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax); -} - -void GPBValue_ClearKindOneOfCase(GPBValue *message) { - GPBDescriptor *descriptor = [message descriptor]; - GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0]; - GPBMaybeClearOneof(message, oneof, -1, 0); -} -#pragma mark - GPBListValue - -@implementation GPBListValue - -@dynamic valuesArray, valuesArray_Count; - -typedef struct GPBListValue__storage_ { - uint32_t _has_storage_[1]; - NSMutableArray *valuesArray; -} GPBListValue__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "valuesArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBValue), - .number = GPBListValue_FieldNumber_ValuesArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBListValue__storage_, valuesArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBListValue class] - rootClass:[GPBStructRoot class] - file:GPBStructRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBListValue__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Timestamp.pbobjc.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Timestamp.pbobjc.h deleted file mode 100644 index 5d74bd32..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Timestamp.pbobjc.h +++ /dev/null @@ -1,157 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/timestamp.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers.h> -#else - #import "GPBProtocolBuffers.h" -#endif - -#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002 -#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources. -#endif -#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION -#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources. -#endif - -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -CF_EXTERN_C_BEGIN - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - GPBTimestampRoot - -/** - * Exposes the extension registry for this file. - * - * The base class provides: - * @code - * + (GPBExtensionRegistry *)extensionRegistry; - * @endcode - * which is a @c GPBExtensionRegistry that includes all the extensions defined by - * this file and all files that it depends on. - **/ -@interface GPBTimestampRoot : GPBRootObject -@end - -#pragma mark - GPBTimestamp - -typedef GPB_ENUM(GPBTimestamp_FieldNumber) { - GPBTimestamp_FieldNumber_Seconds = 1, - GPBTimestamp_FieldNumber_Nanos = 2, -}; - -/** - * A Timestamp represents a point in time independent of any time zone - * or calendar, represented as seconds and fractions of seconds at - * nanosecond resolution in UTC Epoch time. It is encoded using the - * Proleptic Gregorian Calendar which extends the Gregorian calendar - * backwards to year one. It is encoded assuming all minutes are 60 - * seconds long, i.e. leap seconds are "smeared" so that no leap second - * table is needed for interpretation. Range is from - * 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. - * By restricting to that range, we ensure that we can convert to - * and from RFC 3339 date strings. - * See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). - * - * # Examples - * - * Example 1: Compute Timestamp from POSIX `time()`. - * - * Timestamp timestamp; - * timestamp.set_seconds(time(NULL)); - * timestamp.set_nanos(0); - * - * Example 2: Compute Timestamp from POSIX `gettimeofday()`. - * - * struct timeval tv; - * gettimeofday(&tv, NULL); - * - * Timestamp timestamp; - * timestamp.set_seconds(tv.tv_sec); - * timestamp.set_nanos(tv.tv_usec * 1000); - * - * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. - * - * FILETIME ft; - * GetSystemTimeAsFileTime(&ft); - * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; - * - * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z - * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. - * Timestamp timestamp; - * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); - * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); - * - * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. - * - * long millis = System.currentTimeMillis(); - * - * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) - * .setNanos((int) ((millis % 1000) * 1000000)).build(); - * - * - * Example 5: Compute Timestamp from current time in Python. - * - * timestamp = Timestamp() - * timestamp.GetCurrentTime() - * - * # JSON Mapping - * - * In JSON format, the Timestamp type is encoded as a string in the - * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the - * format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" - * where {year} is always expressed using four digits while {month}, {day}, - * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional - * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), - * are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone - * is required, though only UTC (as indicated by "Z") is presently supported. - * - * For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past - * 01:30 UTC on January 15, 2017. - * - * In JavaScript, one can convert a Date object to this format using the - * standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString] - * method. In Python, a standard `datetime.datetime` object can be converted - * to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) - * with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one - * can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( - * http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()) - * to obtain a formatter capable of generating timestamps in this format. - **/ -@interface GPBTimestamp : GPBMessage - -/** - * Represents seconds of UTC time since Unix epoch - * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - * 9999-12-31T23:59:59Z inclusive. - **/ -@property(nonatomic, readwrite) int64_t seconds; - -/** - * Non-negative fractions of a second at nanosecond resolution. Negative - * second values with fractions must still have non-negative nanos values - * that count forward in time. Must be from 0 to 999,999,999 - * inclusive. - **/ -@property(nonatomic, readwrite) int32_t nanos; - -@end - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Timestamp.pbobjc.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Timestamp.pbobjc.m deleted file mode 100644 index 4ab159fb..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Timestamp.pbobjc.m +++ /dev/null @@ -1,107 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/timestamp.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h> -#else - #import "GPBProtocolBuffers_RuntimeSupport.h" -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/Timestamp.pbobjc.h> -#else - #import "google/protobuf/Timestamp.pbobjc.h" -#endif -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -#pragma mark - GPBTimestampRoot - -@implementation GPBTimestampRoot - -// No extensions in the file and no imports, so no need to generate -// +extensionRegistry. - -@end - -#pragma mark - GPBTimestampRoot_FileDescriptor - -static GPBFileDescriptor *GPBTimestampRoot_FileDescriptor(void) { - // This is called by +initialize so there is no need to worry - // about thread safety of the singleton. - static GPBFileDescriptor *descriptor = NULL; - if (!descriptor) { - GPB_DEBUG_CHECK_RUNTIME_VERSIONS(); - descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf" - objcPrefix:@"GPB" - syntax:GPBFileSyntaxProto3]; - } - return descriptor; -} - -#pragma mark - GPBTimestamp - -@implementation GPBTimestamp - -@dynamic seconds; -@dynamic nanos; - -typedef struct GPBTimestamp__storage_ { - uint32_t _has_storage_[1]; - int32_t nanos; - int64_t seconds; -} GPBTimestamp__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "seconds", - .dataTypeSpecific.className = NULL, - .number = GPBTimestamp_FieldNumber_Seconds, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBTimestamp__storage_, seconds), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeInt64, - }, - { - .name = "nanos", - .dataTypeSpecific.className = NULL, - .number = GPBTimestamp_FieldNumber_Nanos, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBTimestamp__storage_, nanos), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeInt32, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBTimestamp class] - rootClass:[GPBTimestampRoot class] - file:GPBTimestampRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBTimestamp__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Type.pbobjc.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Type.pbobjc.h deleted file mode 100644 index 17986970..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Type.pbobjc.h +++ /dev/null @@ -1,440 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/type.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers.h> -#else - #import "GPBProtocolBuffers.h" -#endif - -#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002 -#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources. -#endif -#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION -#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources. -#endif - -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -CF_EXTERN_C_BEGIN - -@class GPBAny; -@class GPBEnumValue; -@class GPBField; -@class GPBOption; -@class GPBSourceContext; - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - Enum GPBSyntax - -/** The syntax in which a protocol buffer element is defined. */ -typedef GPB_ENUM(GPBSyntax) { - /** - * Value used if any message's field encounters a value that is not defined - * by this enum. The message will also have C functions to get/set the rawValue - * of the field. - **/ - GPBSyntax_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue, - /** Syntax `proto2`. */ - GPBSyntax_SyntaxProto2 = 0, - - /** Syntax `proto3`. */ - GPBSyntax_SyntaxProto3 = 1, -}; - -GPBEnumDescriptor *GPBSyntax_EnumDescriptor(void); - -/** - * Checks to see if the given value is defined by the enum or was not known at - * the time this source was generated. - **/ -BOOL GPBSyntax_IsValidValue(int32_t value); - -#pragma mark - Enum GPBField_Kind - -/** Basic field types. */ -typedef GPB_ENUM(GPBField_Kind) { - /** - * Value used if any message's field encounters a value that is not defined - * by this enum. The message will also have C functions to get/set the rawValue - * of the field. - **/ - GPBField_Kind_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue, - /** Field type unknown. */ - GPBField_Kind_TypeUnknown = 0, - - /** Field type double. */ - GPBField_Kind_TypeDouble = 1, - - /** Field type float. */ - GPBField_Kind_TypeFloat = 2, - - /** Field type int64. */ - GPBField_Kind_TypeInt64 = 3, - - /** Field type uint64. */ - GPBField_Kind_TypeUint64 = 4, - - /** Field type int32. */ - GPBField_Kind_TypeInt32 = 5, - - /** Field type fixed64. */ - GPBField_Kind_TypeFixed64 = 6, - - /** Field type fixed32. */ - GPBField_Kind_TypeFixed32 = 7, - - /** Field type bool. */ - GPBField_Kind_TypeBool = 8, - - /** Field type string. */ - GPBField_Kind_TypeString = 9, - - /** Field type group. Proto2 syntax only, and deprecated. */ - GPBField_Kind_TypeGroup = 10, - - /** Field type message. */ - GPBField_Kind_TypeMessage = 11, - - /** Field type bytes. */ - GPBField_Kind_TypeBytes = 12, - - /** Field type uint32. */ - GPBField_Kind_TypeUint32 = 13, - - /** Field type enum. */ - GPBField_Kind_TypeEnum = 14, - - /** Field type sfixed32. */ - GPBField_Kind_TypeSfixed32 = 15, - - /** Field type sfixed64. */ - GPBField_Kind_TypeSfixed64 = 16, - - /** Field type sint32. */ - GPBField_Kind_TypeSint32 = 17, - - /** Field type sint64. */ - GPBField_Kind_TypeSint64 = 18, -}; - -GPBEnumDescriptor *GPBField_Kind_EnumDescriptor(void); - -/** - * Checks to see if the given value is defined by the enum or was not known at - * the time this source was generated. - **/ -BOOL GPBField_Kind_IsValidValue(int32_t value); - -#pragma mark - Enum GPBField_Cardinality - -/** Whether a field is optional, required, or repeated. */ -typedef GPB_ENUM(GPBField_Cardinality) { - /** - * Value used if any message's field encounters a value that is not defined - * by this enum. The message will also have C functions to get/set the rawValue - * of the field. - **/ - GPBField_Cardinality_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue, - /** For fields with unknown cardinality. */ - GPBField_Cardinality_CardinalityUnknown = 0, - - /** For optional fields. */ - GPBField_Cardinality_CardinalityOptional = 1, - - /** For required fields. Proto2 syntax only. */ - GPBField_Cardinality_CardinalityRequired = 2, - - /** For repeated fields. */ - GPBField_Cardinality_CardinalityRepeated = 3, -}; - -GPBEnumDescriptor *GPBField_Cardinality_EnumDescriptor(void); - -/** - * Checks to see if the given value is defined by the enum or was not known at - * the time this source was generated. - **/ -BOOL GPBField_Cardinality_IsValidValue(int32_t value); - -#pragma mark - GPBTypeRoot - -/** - * Exposes the extension registry for this file. - * - * The base class provides: - * @code - * + (GPBExtensionRegistry *)extensionRegistry; - * @endcode - * which is a @c GPBExtensionRegistry that includes all the extensions defined by - * this file and all files that it depends on. - **/ -@interface GPBTypeRoot : GPBRootObject -@end - -#pragma mark - GPBType - -typedef GPB_ENUM(GPBType_FieldNumber) { - GPBType_FieldNumber_Name = 1, - GPBType_FieldNumber_FieldsArray = 2, - GPBType_FieldNumber_OneofsArray = 3, - GPBType_FieldNumber_OptionsArray = 4, - GPBType_FieldNumber_SourceContext = 5, - GPBType_FieldNumber_Syntax = 6, -}; - -/** - * A protocol buffer message type. - **/ -@interface GPBType : GPBMessage - -/** The fully qualified message name. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *name; - -/** The list of fields. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBField*> *fieldsArray; -/** The number of items in @c fieldsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger fieldsArray_Count; - -/** The list of types appearing in `oneof` definitions in this type. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *oneofsArray; -/** The number of items in @c oneofsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger oneofsArray_Count; - -/** The protocol buffer options. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBOption*> *optionsArray; -/** The number of items in @c optionsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger optionsArray_Count; - -/** The source context. */ -@property(nonatomic, readwrite, strong, null_resettable) GPBSourceContext *sourceContext; -/** Test to see if @c sourceContext has been set. */ -@property(nonatomic, readwrite) BOOL hasSourceContext; - -/** The source syntax. */ -@property(nonatomic, readwrite) GPBSyntax syntax; - -@end - -/** - * Fetches the raw value of a @c GPBType's @c syntax property, even - * if the value was not defined by the enum at the time the code was generated. - **/ -int32_t GPBType_Syntax_RawValue(GPBType *message); -/** - * Sets the raw value of an @c GPBType's @c syntax property, allowing - * it to be set to a value that was not defined by the enum at the time the code - * was generated. - **/ -void SetGPBType_Syntax_RawValue(GPBType *message, int32_t value); - -#pragma mark - GPBField - -typedef GPB_ENUM(GPBField_FieldNumber) { - GPBField_FieldNumber_Kind = 1, - GPBField_FieldNumber_Cardinality = 2, - GPBField_FieldNumber_Number = 3, - GPBField_FieldNumber_Name = 4, - GPBField_FieldNumber_TypeURL = 6, - GPBField_FieldNumber_OneofIndex = 7, - GPBField_FieldNumber_Packed = 8, - GPBField_FieldNumber_OptionsArray = 9, - GPBField_FieldNumber_JsonName = 10, - GPBField_FieldNumber_DefaultValue = 11, -}; - -/** - * A single field of a message type. - **/ -@interface GPBField : GPBMessage - -/** The field type. */ -@property(nonatomic, readwrite) GPBField_Kind kind; - -/** The field cardinality. */ -@property(nonatomic, readwrite) GPBField_Cardinality cardinality; - -/** The field number. */ -@property(nonatomic, readwrite) int32_t number; - -/** The field name. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *name; - -/** - * The field type URL, without the scheme, for message or enumeration - * types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. - **/ -@property(nonatomic, readwrite, copy, null_resettable) NSString *typeURL; - -/** - * The index of the field type in `Type.oneofs`, for message or enumeration - * types. The first type has index 1; zero means the type is not in the list. - **/ -@property(nonatomic, readwrite) int32_t oneofIndex; - -/** Whether to use alternative packed wire representation. */ -@property(nonatomic, readwrite) BOOL packed; - -/** The protocol buffer options. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBOption*> *optionsArray; -/** The number of items in @c optionsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger optionsArray_Count; - -/** The field JSON name. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *jsonName; - -/** The string value of the default value of this field. Proto2 syntax only. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *defaultValue; - -@end - -/** - * Fetches the raw value of a @c GPBField's @c kind property, even - * if the value was not defined by the enum at the time the code was generated. - **/ -int32_t GPBField_Kind_RawValue(GPBField *message); -/** - * Sets the raw value of an @c GPBField's @c kind property, allowing - * it to be set to a value that was not defined by the enum at the time the code - * was generated. - **/ -void SetGPBField_Kind_RawValue(GPBField *message, int32_t value); - -/** - * Fetches the raw value of a @c GPBField's @c cardinality property, even - * if the value was not defined by the enum at the time the code was generated. - **/ -int32_t GPBField_Cardinality_RawValue(GPBField *message); -/** - * Sets the raw value of an @c GPBField's @c cardinality property, allowing - * it to be set to a value that was not defined by the enum at the time the code - * was generated. - **/ -void SetGPBField_Cardinality_RawValue(GPBField *message, int32_t value); - -#pragma mark - GPBEnum - -typedef GPB_ENUM(GPBEnum_FieldNumber) { - GPBEnum_FieldNumber_Name = 1, - GPBEnum_FieldNumber_EnumvalueArray = 2, - GPBEnum_FieldNumber_OptionsArray = 3, - GPBEnum_FieldNumber_SourceContext = 4, - GPBEnum_FieldNumber_Syntax = 5, -}; - -/** - * Enum type definition. - **/ -@interface GPBEnum : GPBMessage - -/** Enum type name. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *name; - -/** Enum value definitions. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBEnumValue*> *enumvalueArray; -/** The number of items in @c enumvalueArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger enumvalueArray_Count; - -/** Protocol buffer options. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBOption*> *optionsArray; -/** The number of items in @c optionsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger optionsArray_Count; - -/** The source context. */ -@property(nonatomic, readwrite, strong, null_resettable) GPBSourceContext *sourceContext; -/** Test to see if @c sourceContext has been set. */ -@property(nonatomic, readwrite) BOOL hasSourceContext; - -/** The source syntax. */ -@property(nonatomic, readwrite) GPBSyntax syntax; - -@end - -/** - * Fetches the raw value of a @c GPBEnum's @c syntax property, even - * if the value was not defined by the enum at the time the code was generated. - **/ -int32_t GPBEnum_Syntax_RawValue(GPBEnum *message); -/** - * Sets the raw value of an @c GPBEnum's @c syntax property, allowing - * it to be set to a value that was not defined by the enum at the time the code - * was generated. - **/ -void SetGPBEnum_Syntax_RawValue(GPBEnum *message, int32_t value); - -#pragma mark - GPBEnumValue - -typedef GPB_ENUM(GPBEnumValue_FieldNumber) { - GPBEnumValue_FieldNumber_Name = 1, - GPBEnumValue_FieldNumber_Number = 2, - GPBEnumValue_FieldNumber_OptionsArray = 3, -}; - -/** - * Enum value definition. - **/ -@interface GPBEnumValue : GPBMessage - -/** Enum value name. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *name; - -/** Enum value number. */ -@property(nonatomic, readwrite) int32_t number; - -/** Protocol buffer options. */ -@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GPBOption*> *optionsArray; -/** The number of items in @c optionsArray without causing the array to be created. */ -@property(nonatomic, readonly) NSUInteger optionsArray_Count; - -@end - -#pragma mark - GPBOption - -typedef GPB_ENUM(GPBOption_FieldNumber) { - GPBOption_FieldNumber_Name = 1, - GPBOption_FieldNumber_Value = 2, -}; - -/** - * A protocol buffer option, which can be attached to a message, field, - * enumeration, etc. - **/ -@interface GPBOption : GPBMessage - -/** - * The option's name. For protobuf built-in options (options defined in - * descriptor.proto), this is the short name. For example, `"map_entry"`. - * For custom options, it should be the fully-qualified name. For example, - * `"google.api.http"`. - **/ -@property(nonatomic, readwrite, copy, null_resettable) NSString *name; - -/** - * The option's value packed in an Any message. If the value is a primitive, - * the corresponding wrapper type defined in google/protobuf/wrappers.proto - * should be used. If the value is an enum, it should be stored as an int32 - * value using the google.protobuf.Int32Value type. - **/ -@property(nonatomic, readwrite, strong, null_resettable) GPBAny *value; -/** Test to see if @c value has been set. */ -@property(nonatomic, readwrite) BOOL hasValue; - -@end - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Type.pbobjc.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Type.pbobjc.m deleted file mode 100644 index 7a949388..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Type.pbobjc.m +++ /dev/null @@ -1,701 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/type.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h> -#else - #import "GPBProtocolBuffers_RuntimeSupport.h" -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/Type.pbobjc.h> - #import <Protobuf/Any.pbobjc.h> - #import <Protobuf/SourceContext.pbobjc.h> -#else - #import "google/protobuf/Type.pbobjc.h" - #import "google/protobuf/Any.pbobjc.h" - #import "google/protobuf/SourceContext.pbobjc.h" -#endif -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -#pragma mark - GPBTypeRoot - -@implementation GPBTypeRoot - -// No extensions in the file and none of the imports (direct or indirect) -// defined extensions, so no need to generate +extensionRegistry. - -@end - -#pragma mark - GPBTypeRoot_FileDescriptor - -static GPBFileDescriptor *GPBTypeRoot_FileDescriptor(void) { - // This is called by +initialize so there is no need to worry - // about thread safety of the singleton. - static GPBFileDescriptor *descriptor = NULL; - if (!descriptor) { - GPB_DEBUG_CHECK_RUNTIME_VERSIONS(); - descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf" - objcPrefix:@"GPB" - syntax:GPBFileSyntaxProto3]; - } - return descriptor; -} - -#pragma mark - Enum GPBSyntax - -GPBEnumDescriptor *GPBSyntax_EnumDescriptor(void) { - static GPBEnumDescriptor *descriptor = NULL; - if (!descriptor) { - static const char *valueNames = - "SyntaxProto2\000SyntaxProto3\000"; - static const int32_t values[] = { - GPBSyntax_SyntaxProto2, - GPBSyntax_SyntaxProto3, - }; - GPBEnumDescriptor *worker = - [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(GPBSyntax) - valueNames:valueNames - values:values - count:(uint32_t)(sizeof(values) / sizeof(int32_t)) - enumVerifier:GPBSyntax_IsValidValue]; - if (!OSAtomicCompareAndSwapPtrBarrier(nil, worker, (void * volatile *)&descriptor)) { - [worker release]; - } - } - return descriptor; -} - -BOOL GPBSyntax_IsValidValue(int32_t value__) { - switch (value__) { - case GPBSyntax_SyntaxProto2: - case GPBSyntax_SyntaxProto3: - return YES; - default: - return NO; - } -} - -#pragma mark - GPBType - -@implementation GPBType - -@dynamic name; -@dynamic fieldsArray, fieldsArray_Count; -@dynamic oneofsArray, oneofsArray_Count; -@dynamic optionsArray, optionsArray_Count; -@dynamic hasSourceContext, sourceContext; -@dynamic syntax; - -typedef struct GPBType__storage_ { - uint32_t _has_storage_[1]; - GPBSyntax syntax; - NSString *name; - NSMutableArray *fieldsArray; - NSMutableArray *oneofsArray; - NSMutableArray *optionsArray; - GPBSourceContext *sourceContext; -} GPBType__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "name", - .dataTypeSpecific.className = NULL, - .number = GPBType_FieldNumber_Name, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBType__storage_, name), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "fieldsArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBField), - .number = GPBType_FieldNumber_FieldsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBType__storage_, fieldsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - { - .name = "oneofsArray", - .dataTypeSpecific.className = NULL, - .number = GPBType_FieldNumber_OneofsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBType__storage_, oneofsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeString, - }, - { - .name = "optionsArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBOption), - .number = GPBType_FieldNumber_OptionsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBType__storage_, optionsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - { - .name = "sourceContext", - .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext), - .number = GPBType_FieldNumber_SourceContext, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBType__storage_, sourceContext), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeMessage, - }, - { - .name = "syntax", - .dataTypeSpecific.enumDescFunc = GPBSyntax_EnumDescriptor, - .number = GPBType_FieldNumber_Syntax, - .hasIndex = 2, - .offset = (uint32_t)offsetof(GPBType__storage_, syntax), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor), - .dataType = GPBDataTypeEnum, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBType class] - rootClass:[GPBTypeRoot class] - file:GPBTypeRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBType__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -int32_t GPBType_Syntax_RawValue(GPBType *message) { - GPBDescriptor *descriptor = [GPBType descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBType_FieldNumber_Syntax]; - return GPBGetMessageInt32Field(message, field); -} - -void SetGPBType_Syntax_RawValue(GPBType *message, int32_t value) { - GPBDescriptor *descriptor = [GPBType descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBType_FieldNumber_Syntax]; - GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax); -} - -#pragma mark - GPBField - -@implementation GPBField - -@dynamic kind; -@dynamic cardinality; -@dynamic number; -@dynamic name; -@dynamic typeURL; -@dynamic oneofIndex; -@dynamic packed; -@dynamic optionsArray, optionsArray_Count; -@dynamic jsonName; -@dynamic defaultValue; - -typedef struct GPBField__storage_ { - uint32_t _has_storage_[1]; - GPBField_Kind kind; - GPBField_Cardinality cardinality; - int32_t number; - int32_t oneofIndex; - NSString *name; - NSString *typeURL; - NSMutableArray *optionsArray; - NSString *jsonName; - NSString *defaultValue; -} GPBField__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "kind", - .dataTypeSpecific.enumDescFunc = GPBField_Kind_EnumDescriptor, - .number = GPBField_FieldNumber_Kind, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBField__storage_, kind), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor), - .dataType = GPBDataTypeEnum, - }, - { - .name = "cardinality", - .dataTypeSpecific.enumDescFunc = GPBField_Cardinality_EnumDescriptor, - .number = GPBField_FieldNumber_Cardinality, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBField__storage_, cardinality), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor), - .dataType = GPBDataTypeEnum, - }, - { - .name = "number", - .dataTypeSpecific.className = NULL, - .number = GPBField_FieldNumber_Number, - .hasIndex = 2, - .offset = (uint32_t)offsetof(GPBField__storage_, number), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeInt32, - }, - { - .name = "name", - .dataTypeSpecific.className = NULL, - .number = GPBField_FieldNumber_Name, - .hasIndex = 3, - .offset = (uint32_t)offsetof(GPBField__storage_, name), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "typeURL", - .dataTypeSpecific.className = NULL, - .number = GPBField_FieldNumber_TypeURL, - .hasIndex = 4, - .offset = (uint32_t)offsetof(GPBField__storage_, typeURL), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldTextFormatNameCustom), - .dataType = GPBDataTypeString, - }, - { - .name = "oneofIndex", - .dataTypeSpecific.className = NULL, - .number = GPBField_FieldNumber_OneofIndex, - .hasIndex = 5, - .offset = (uint32_t)offsetof(GPBField__storage_, oneofIndex), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeInt32, - }, - { - .name = "packed", - .dataTypeSpecific.className = NULL, - .number = GPBField_FieldNumber_Packed, - .hasIndex = 6, - .offset = 7, // Stored in _has_storage_ to save space. - .flags = GPBFieldOptional, - .dataType = GPBDataTypeBool, - }, - { - .name = "optionsArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBOption), - .number = GPBField_FieldNumber_OptionsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBField__storage_, optionsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - { - .name = "jsonName", - .dataTypeSpecific.className = NULL, - .number = GPBField_FieldNumber_JsonName, - .hasIndex = 8, - .offset = (uint32_t)offsetof(GPBField__storage_, jsonName), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "defaultValue", - .dataTypeSpecific.className = NULL, - .number = GPBField_FieldNumber_DefaultValue, - .hasIndex = 9, - .offset = (uint32_t)offsetof(GPBField__storage_, defaultValue), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBField class] - rootClass:[GPBTypeRoot class] - file:GPBTypeRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBField__storage_) - flags:GPBDescriptorInitializationFlag_None]; -#if !GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS - static const char *extraTextFormatInfo = - "\001\006\004\241!!\000"; - [localDescriptor setupExtraTextInfo:extraTextFormatInfo]; -#endif // !GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -int32_t GPBField_Kind_RawValue(GPBField *message) { - GPBDescriptor *descriptor = [GPBField descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBField_FieldNumber_Kind]; - return GPBGetMessageInt32Field(message, field); -} - -void SetGPBField_Kind_RawValue(GPBField *message, int32_t value) { - GPBDescriptor *descriptor = [GPBField descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBField_FieldNumber_Kind]; - GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax); -} - -int32_t GPBField_Cardinality_RawValue(GPBField *message) { - GPBDescriptor *descriptor = [GPBField descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBField_FieldNumber_Cardinality]; - return GPBGetMessageInt32Field(message, field); -} - -void SetGPBField_Cardinality_RawValue(GPBField *message, int32_t value) { - GPBDescriptor *descriptor = [GPBField descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBField_FieldNumber_Cardinality]; - GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax); -} - -#pragma mark - Enum GPBField_Kind - -GPBEnumDescriptor *GPBField_Kind_EnumDescriptor(void) { - static GPBEnumDescriptor *descriptor = NULL; - if (!descriptor) { - static const char *valueNames = - "TypeUnknown\000TypeDouble\000TypeFloat\000TypeInt" - "64\000TypeUint64\000TypeInt32\000TypeFixed64\000Type" - "Fixed32\000TypeBool\000TypeString\000TypeGroup\000Ty" - "peMessage\000TypeBytes\000TypeUint32\000TypeEnum\000" - "TypeSfixed32\000TypeSfixed64\000TypeSint32\000Typ" - "eSint64\000"; - static const int32_t values[] = { - GPBField_Kind_TypeUnknown, - GPBField_Kind_TypeDouble, - GPBField_Kind_TypeFloat, - GPBField_Kind_TypeInt64, - GPBField_Kind_TypeUint64, - GPBField_Kind_TypeInt32, - GPBField_Kind_TypeFixed64, - GPBField_Kind_TypeFixed32, - GPBField_Kind_TypeBool, - GPBField_Kind_TypeString, - GPBField_Kind_TypeGroup, - GPBField_Kind_TypeMessage, - GPBField_Kind_TypeBytes, - GPBField_Kind_TypeUint32, - GPBField_Kind_TypeEnum, - GPBField_Kind_TypeSfixed32, - GPBField_Kind_TypeSfixed64, - GPBField_Kind_TypeSint32, - GPBField_Kind_TypeSint64, - }; - GPBEnumDescriptor *worker = - [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(GPBField_Kind) - valueNames:valueNames - values:values - count:(uint32_t)(sizeof(values) / sizeof(int32_t)) - enumVerifier:GPBField_Kind_IsValidValue]; - if (!OSAtomicCompareAndSwapPtrBarrier(nil, worker, (void * volatile *)&descriptor)) { - [worker release]; - } - } - return descriptor; -} - -BOOL GPBField_Kind_IsValidValue(int32_t value__) { - switch (value__) { - case GPBField_Kind_TypeUnknown: - case GPBField_Kind_TypeDouble: - case GPBField_Kind_TypeFloat: - case GPBField_Kind_TypeInt64: - case GPBField_Kind_TypeUint64: - case GPBField_Kind_TypeInt32: - case GPBField_Kind_TypeFixed64: - case GPBField_Kind_TypeFixed32: - case GPBField_Kind_TypeBool: - case GPBField_Kind_TypeString: - case GPBField_Kind_TypeGroup: - case GPBField_Kind_TypeMessage: - case GPBField_Kind_TypeBytes: - case GPBField_Kind_TypeUint32: - case GPBField_Kind_TypeEnum: - case GPBField_Kind_TypeSfixed32: - case GPBField_Kind_TypeSfixed64: - case GPBField_Kind_TypeSint32: - case GPBField_Kind_TypeSint64: - return YES; - default: - return NO; - } -} - -#pragma mark - Enum GPBField_Cardinality - -GPBEnumDescriptor *GPBField_Cardinality_EnumDescriptor(void) { - static GPBEnumDescriptor *descriptor = NULL; - if (!descriptor) { - static const char *valueNames = - "CardinalityUnknown\000CardinalityOptional\000C" - "ardinalityRequired\000CardinalityRepeated\000"; - static const int32_t values[] = { - GPBField_Cardinality_CardinalityUnknown, - GPBField_Cardinality_CardinalityOptional, - GPBField_Cardinality_CardinalityRequired, - GPBField_Cardinality_CardinalityRepeated, - }; - GPBEnumDescriptor *worker = - [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(GPBField_Cardinality) - valueNames:valueNames - values:values - count:(uint32_t)(sizeof(values) / sizeof(int32_t)) - enumVerifier:GPBField_Cardinality_IsValidValue]; - if (!OSAtomicCompareAndSwapPtrBarrier(nil, worker, (void * volatile *)&descriptor)) { - [worker release]; - } - } - return descriptor; -} - -BOOL GPBField_Cardinality_IsValidValue(int32_t value__) { - switch (value__) { - case GPBField_Cardinality_CardinalityUnknown: - case GPBField_Cardinality_CardinalityOptional: - case GPBField_Cardinality_CardinalityRequired: - case GPBField_Cardinality_CardinalityRepeated: - return YES; - default: - return NO; - } -} - -#pragma mark - GPBEnum - -@implementation GPBEnum - -@dynamic name; -@dynamic enumvalueArray, enumvalueArray_Count; -@dynamic optionsArray, optionsArray_Count; -@dynamic hasSourceContext, sourceContext; -@dynamic syntax; - -typedef struct GPBEnum__storage_ { - uint32_t _has_storage_[1]; - GPBSyntax syntax; - NSString *name; - NSMutableArray *enumvalueArray; - NSMutableArray *optionsArray; - GPBSourceContext *sourceContext; -} GPBEnum__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "name", - .dataTypeSpecific.className = NULL, - .number = GPBEnum_FieldNumber_Name, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBEnum__storage_, name), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "enumvalueArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBEnumValue), - .number = GPBEnum_FieldNumber_EnumvalueArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBEnum__storage_, enumvalueArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - { - .name = "optionsArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBOption), - .number = GPBEnum_FieldNumber_OptionsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBEnum__storage_, optionsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - { - .name = "sourceContext", - .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext), - .number = GPBEnum_FieldNumber_SourceContext, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBEnum__storage_, sourceContext), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeMessage, - }, - { - .name = "syntax", - .dataTypeSpecific.enumDescFunc = GPBSyntax_EnumDescriptor, - .number = GPBEnum_FieldNumber_Syntax, - .hasIndex = 2, - .offset = (uint32_t)offsetof(GPBEnum__storage_, syntax), - .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor), - .dataType = GPBDataTypeEnum, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBEnum class] - rootClass:[GPBTypeRoot class] - file:GPBTypeRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBEnum__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -int32_t GPBEnum_Syntax_RawValue(GPBEnum *message) { - GPBDescriptor *descriptor = [GPBEnum descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBEnum_FieldNumber_Syntax]; - return GPBGetMessageInt32Field(message, field); -} - -void SetGPBEnum_Syntax_RawValue(GPBEnum *message, int32_t value) { - GPBDescriptor *descriptor = [GPBEnum descriptor]; - GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBEnum_FieldNumber_Syntax]; - GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax); -} - -#pragma mark - GPBEnumValue - -@implementation GPBEnumValue - -@dynamic name; -@dynamic number; -@dynamic optionsArray, optionsArray_Count; - -typedef struct GPBEnumValue__storage_ { - uint32_t _has_storage_[1]; - int32_t number; - NSString *name; - NSMutableArray *optionsArray; -} GPBEnumValue__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "name", - .dataTypeSpecific.className = NULL, - .number = GPBEnumValue_FieldNumber_Name, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBEnumValue__storage_, name), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "number", - .dataTypeSpecific.className = NULL, - .number = GPBEnumValue_FieldNumber_Number, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBEnumValue__storage_, number), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeInt32, - }, - { - .name = "optionsArray", - .dataTypeSpecific.className = GPBStringifySymbol(GPBOption), - .number = GPBEnumValue_FieldNumber_OptionsArray, - .hasIndex = GPBNoHasBit, - .offset = (uint32_t)offsetof(GPBEnumValue__storage_, optionsArray), - .flags = GPBFieldRepeated, - .dataType = GPBDataTypeMessage, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBEnumValue class] - rootClass:[GPBTypeRoot class] - file:GPBTypeRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBEnumValue__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -#pragma mark - GPBOption - -@implementation GPBOption - -@dynamic name; -@dynamic hasValue, value; - -typedef struct GPBOption__storage_ { - uint32_t _has_storage_[1]; - NSString *name; - GPBAny *value; -} GPBOption__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "name", - .dataTypeSpecific.className = NULL, - .number = GPBOption_FieldNumber_Name, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBOption__storage_, name), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - { - .name = "value", - .dataTypeSpecific.className = GPBStringifySymbol(GPBAny), - .number = GPBOption_FieldNumber_Value, - .hasIndex = 1, - .offset = (uint32_t)offsetof(GPBOption__storage_, value), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeMessage, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBOption class] - rootClass:[GPBTypeRoot class] - file:GPBTypeRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBOption__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Wrappers.pbobjc.h b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Wrappers.pbobjc.h deleted file mode 100644 index 3cb9fe77..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Wrappers.pbobjc.h +++ /dev/null @@ -1,215 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/wrappers.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers.h> -#else - #import "GPBProtocolBuffers.h" -#endif - -#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002 -#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources. -#endif -#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION -#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources. -#endif - -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -CF_EXTERN_C_BEGIN - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - GPBWrappersRoot - -/** - * Exposes the extension registry for this file. - * - * The base class provides: - * @code - * + (GPBExtensionRegistry *)extensionRegistry; - * @endcode - * which is a @c GPBExtensionRegistry that includes all the extensions defined by - * this file and all files that it depends on. - **/ -@interface GPBWrappersRoot : GPBRootObject -@end - -#pragma mark - GPBDoubleValue - -typedef GPB_ENUM(GPBDoubleValue_FieldNumber) { - GPBDoubleValue_FieldNumber_Value = 1, -}; - -/** - * Wrapper message for `double`. - * - * The JSON representation for `DoubleValue` is JSON number. - **/ -@interface GPBDoubleValue : GPBMessage - -/** The double value. */ -@property(nonatomic, readwrite) double value; - -@end - -#pragma mark - GPBFloatValue - -typedef GPB_ENUM(GPBFloatValue_FieldNumber) { - GPBFloatValue_FieldNumber_Value = 1, -}; - -/** - * Wrapper message for `float`. - * - * The JSON representation for `FloatValue` is JSON number. - **/ -@interface GPBFloatValue : GPBMessage - -/** The float value. */ -@property(nonatomic, readwrite) float value; - -@end - -#pragma mark - GPBInt64Value - -typedef GPB_ENUM(GPBInt64Value_FieldNumber) { - GPBInt64Value_FieldNumber_Value = 1, -}; - -/** - * Wrapper message for `int64`. - * - * The JSON representation for `Int64Value` is JSON string. - **/ -@interface GPBInt64Value : GPBMessage - -/** The int64 value. */ -@property(nonatomic, readwrite) int64_t value; - -@end - -#pragma mark - GPBUInt64Value - -typedef GPB_ENUM(GPBUInt64Value_FieldNumber) { - GPBUInt64Value_FieldNumber_Value = 1, -}; - -/** - * Wrapper message for `uint64`. - * - * The JSON representation for `UInt64Value` is JSON string. - **/ -@interface GPBUInt64Value : GPBMessage - -/** The uint64 value. */ -@property(nonatomic, readwrite) uint64_t value; - -@end - -#pragma mark - GPBInt32Value - -typedef GPB_ENUM(GPBInt32Value_FieldNumber) { - GPBInt32Value_FieldNumber_Value = 1, -}; - -/** - * Wrapper message for `int32`. - * - * The JSON representation for `Int32Value` is JSON number. - **/ -@interface GPBInt32Value : GPBMessage - -/** The int32 value. */ -@property(nonatomic, readwrite) int32_t value; - -@end - -#pragma mark - GPBUInt32Value - -typedef GPB_ENUM(GPBUInt32Value_FieldNumber) { - GPBUInt32Value_FieldNumber_Value = 1, -}; - -/** - * Wrapper message for `uint32`. - * - * The JSON representation for `UInt32Value` is JSON number. - **/ -@interface GPBUInt32Value : GPBMessage - -/** The uint32 value. */ -@property(nonatomic, readwrite) uint32_t value; - -@end - -#pragma mark - GPBBoolValue - -typedef GPB_ENUM(GPBBoolValue_FieldNumber) { - GPBBoolValue_FieldNumber_Value = 1, -}; - -/** - * Wrapper message for `bool`. - * - * The JSON representation for `BoolValue` is JSON `true` and `false`. - **/ -@interface GPBBoolValue : GPBMessage - -/** The bool value. */ -@property(nonatomic, readwrite) BOOL value; - -@end - -#pragma mark - GPBStringValue - -typedef GPB_ENUM(GPBStringValue_FieldNumber) { - GPBStringValue_FieldNumber_Value = 1, -}; - -/** - * Wrapper message for `string`. - * - * The JSON representation for `StringValue` is JSON string. - **/ -@interface GPBStringValue : GPBMessage - -/** The string value. */ -@property(nonatomic, readwrite, copy, null_resettable) NSString *value; - -@end - -#pragma mark - GPBBytesValue - -typedef GPB_ENUM(GPBBytesValue_FieldNumber) { - GPBBytesValue_FieldNumber_Value = 1, -}; - -/** - * Wrapper message for `bytes`. - * - * The JSON representation for `BytesValue` is JSON string. - **/ -@interface GPBBytesValue : GPBMessage - -/** The bytes value. */ -@property(nonatomic, readwrite, copy, null_resettable) NSData *value; - -@end - -NS_ASSUME_NONNULL_END - -CF_EXTERN_C_END - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Wrappers.pbobjc.m b/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Wrappers.pbobjc.m deleted file mode 100644 index 5479eb12..00000000 --- a/StoneIsland/platforms/ios/Pods/Protobuf/objectivec/google/protobuf/Wrappers.pbobjc.m +++ /dev/null @@ -1,439 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/wrappers.proto - -// This CPP symbol can be defined to use imports that match up to the framework -// imports needed when using CocoaPods. -#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS) - #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0 -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h> -#else - #import "GPBProtocolBuffers_RuntimeSupport.h" -#endif - -#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS - #import <Protobuf/Wrappers.pbobjc.h> -#else - #import "google/protobuf/Wrappers.pbobjc.h" -#endif -// @@protoc_insertion_point(imports) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -#pragma mark - GPBWrappersRoot - -@implementation GPBWrappersRoot - -// No extensions in the file and no imports, so no need to generate -// +extensionRegistry. - -@end - -#pragma mark - GPBWrappersRoot_FileDescriptor - -static GPBFileDescriptor *GPBWrappersRoot_FileDescriptor(void) { - // This is called by +initialize so there is no need to worry - // about thread safety of the singleton. - static GPBFileDescriptor *descriptor = NULL; - if (!descriptor) { - GPB_DEBUG_CHECK_RUNTIME_VERSIONS(); - descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf" - objcPrefix:@"GPB" - syntax:GPBFileSyntaxProto3]; - } - return descriptor; -} - -#pragma mark - GPBDoubleValue - -@implementation GPBDoubleValue - -@dynamic value; - -typedef struct GPBDoubleValue__storage_ { - uint32_t _has_storage_[1]; - double value; -} GPBDoubleValue__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "value", - .dataTypeSpecific.className = NULL, - .number = GPBDoubleValue_FieldNumber_Value, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBDoubleValue__storage_, value), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeDouble, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBDoubleValue class] - rootClass:[GPBWrappersRoot class] - file:GPBWrappersRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBDoubleValue__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -#pragma mark - GPBFloatValue - -@implementation GPBFloatValue - -@dynamic value; - -typedef struct GPBFloatValue__storage_ { - uint32_t _has_storage_[1]; - float value; -} GPBFloatValue__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "value", - .dataTypeSpecific.className = NULL, - .number = GPBFloatValue_FieldNumber_Value, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBFloatValue__storage_, value), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeFloat, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBFloatValue class] - rootClass:[GPBWrappersRoot class] - file:GPBWrappersRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBFloatValue__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -#pragma mark - GPBInt64Value - -@implementation GPBInt64Value - -@dynamic value; - -typedef struct GPBInt64Value__storage_ { - uint32_t _has_storage_[1]; - int64_t value; -} GPBInt64Value__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "value", - .dataTypeSpecific.className = NULL, - .number = GPBInt64Value_FieldNumber_Value, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBInt64Value__storage_, value), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeInt64, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBInt64Value class] - rootClass:[GPBWrappersRoot class] - file:GPBWrappersRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBInt64Value__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -#pragma mark - GPBUInt64Value - -@implementation GPBUInt64Value - -@dynamic value; - -typedef struct GPBUInt64Value__storage_ { - uint32_t _has_storage_[1]; - uint64_t value; -} GPBUInt64Value__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "value", - .dataTypeSpecific.className = NULL, - .number = GPBUInt64Value_FieldNumber_Value, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBUInt64Value__storage_, value), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeUInt64, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBUInt64Value class] - rootClass:[GPBWrappersRoot class] - file:GPBWrappersRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBUInt64Value__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -#pragma mark - GPBInt32Value - -@implementation GPBInt32Value - -@dynamic value; - -typedef struct GPBInt32Value__storage_ { - uint32_t _has_storage_[1]; - int32_t value; -} GPBInt32Value__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "value", - .dataTypeSpecific.className = NULL, - .number = GPBInt32Value_FieldNumber_Value, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBInt32Value__storage_, value), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeInt32, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBInt32Value class] - rootClass:[GPBWrappersRoot class] - file:GPBWrappersRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBInt32Value__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -#pragma mark - GPBUInt32Value - -@implementation GPBUInt32Value - -@dynamic value; - -typedef struct GPBUInt32Value__storage_ { - uint32_t _has_storage_[1]; - uint32_t value; -} GPBUInt32Value__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "value", - .dataTypeSpecific.className = NULL, - .number = GPBUInt32Value_FieldNumber_Value, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBUInt32Value__storage_, value), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeUInt32, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBUInt32Value class] - rootClass:[GPBWrappersRoot class] - file:GPBWrappersRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBUInt32Value__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -#pragma mark - GPBBoolValue - -@implementation GPBBoolValue - -@dynamic value; - -typedef struct GPBBoolValue__storage_ { - uint32_t _has_storage_[1]; -} GPBBoolValue__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "value", - .dataTypeSpecific.className = NULL, - .number = GPBBoolValue_FieldNumber_Value, - .hasIndex = 0, - .offset = 1, // Stored in _has_storage_ to save space. - .flags = GPBFieldOptional, - .dataType = GPBDataTypeBool, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBBoolValue class] - rootClass:[GPBWrappersRoot class] - file:GPBWrappersRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBBoolValue__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -#pragma mark - GPBStringValue - -@implementation GPBStringValue - -@dynamic value; - -typedef struct GPBStringValue__storage_ { - uint32_t _has_storage_[1]; - NSString *value; -} GPBStringValue__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "value", - .dataTypeSpecific.className = NULL, - .number = GPBStringValue_FieldNumber_Value, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBStringValue__storage_, value), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeString, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBStringValue class] - rootClass:[GPBWrappersRoot class] - file:GPBWrappersRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBStringValue__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - -#pragma mark - GPBBytesValue - -@implementation GPBBytesValue - -@dynamic value; - -typedef struct GPBBytesValue__storage_ { - uint32_t _has_storage_[1]; - NSData *value; -} GPBBytesValue__storage_; - -// This method is threadsafe because it is initially called -// in +initialize for each subclass. -+ (GPBDescriptor *)descriptor { - static GPBDescriptor *descriptor = nil; - if (!descriptor) { - static GPBMessageFieldDescription fields[] = { - { - .name = "value", - .dataTypeSpecific.className = NULL, - .number = GPBBytesValue_FieldNumber_Value, - .hasIndex = 0, - .offset = (uint32_t)offsetof(GPBBytesValue__storage_, value), - .flags = GPBFieldOptional, - .dataType = GPBDataTypeBytes, - }, - }; - GPBDescriptor *localDescriptor = - [GPBDescriptor allocDescriptorForClass:[GPBBytesValue class] - rootClass:[GPBWrappersRoot class] - file:GPBWrappersRoot_FileDescriptor() - fields:fields - fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription)) - storageSize:sizeof(GPBBytesValue__storage_) - flags:GPBDescriptorInitializationFlag_None]; - NSAssert(descriptor == nil, @"Startup recursed!"); - descriptor = localDescriptor; - } - return descriptor; -} - -@end - - -#pragma clang diagnostic pop - -// @@protoc_insertion_point(global_scope) diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-dummy.m b/StoneIsland/platforms/ios/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-dummy.m deleted file mode 100644 index 9e35ec0f..00000000 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_GoogleToolboxForMac : NSObject -@end -@implementation PodsDummy_GoogleToolboxForMac -@end diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch b/StoneIsland/platforms/ios/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch deleted file mode 100644 index beb2a244..00000000 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.xcconfig b/StoneIsland/platforms/ios/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.xcconfig deleted file mode 100644 index 02971f0a..00000000 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/GoogleToolboxForMac -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCore" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseMessaging" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Protobuf" "${PODS_ROOT}/Headers/Public/nanopb" -OTHER_LDFLAGS = -l"z" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleToolboxForMac -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-acknowledgements.markdown b/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-acknowledgements.markdown index 749bcc29..c07bb6cb 100644 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-acknowledgements.markdown +++ b/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-acknowledgements.markdown @@ -1,295 +1,27 @@ # Acknowledgements This application makes use of the following third party libraries: -## FirebaseAnalytics +## GGLInstanceID -Copyright 2017 Google +Copyright 2015 Google Inc. -## FirebaseCore +## GoogleCloudMessaging -Copyright 2017 Google +Copyright 2015 Google Inc. -## FirebaseInstanceID +## GoogleIPhoneUtilities -Copyright 2017 Google +Copyright 2015 Google Inc. -## FirebaseMessaging +## GoogleInterchangeUtilities -Copyright 2017 Google +Copyright 2016 Google -## GoogleToolboxForMac +## GoogleSymbolUtilities +Copyright 2016 Google - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. - - -## Protobuf - -This license applies to all parts of Protocol Buffers except the following: - - - Atomicops support for generic gcc, located in - src/google/protobuf/stubs/atomicops_internals_generic_gcc.h. - This file is copyrighted by Red Hat Inc. - - - Atomicops support for AIX/POWER, located in - src/google/protobuf/stubs/atomicops_internals_power.h. - This file is copyrighted by Bloomberg Finance LP. - -Copyright 2014, Google 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: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"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 THE COPYRIGHT -OWNER 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. - -Code generated by the Protocol Buffer compiler is owned by the owner -of the input file used when generating it. This code is not -standalone and requires a support library to be linked with it. This -support library is itself covered by the above license. - - -## nanopb - -Copyright (c) 2011 Petteri Aimonen <jpa at nanopb.mail.kapsi.fi> - -This software is provided 'as-is', without any express or -implied warranty. In no event will the authors be held liable -for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. +## GoogleUtilities +Copyright 2016 Google Generated by CocoaPods - https://cocoapods.org diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-acknowledgements.plist b/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-acknowledgements.plist index 2e620ed1..bf288035 100644 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-acknowledgements.plist +++ b/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-acknowledgements.plist @@ -14,335 +14,61 @@ </dict> <dict> <key>FooterText</key> - <string>Copyright 2017 Google</string> + <string>Copyright 2015 Google Inc.</string> <key>License</key> <string>Copyright</string> <key>Title</key> - <string>FirebaseAnalytics</string> + <string>GGLInstanceID</string> <key>Type</key> <string>PSGroupSpecifier</string> </dict> <dict> <key>FooterText</key> - <string>Copyright 2017 Google</string> + <string>Copyright 2015 Google Inc.</string> <key>License</key> <string>Copyright</string> <key>Title</key> - <string>FirebaseCore</string> + <string>GoogleCloudMessaging</string> <key>Type</key> <string>PSGroupSpecifier</string> </dict> <dict> <key>FooterText</key> - <string>Copyright 2017 Google</string> + <string>Copyright 2015 Google Inc.</string> <key>License</key> <string>Copyright</string> <key>Title</key> - <string>FirebaseInstanceID</string> + <string>GoogleIPhoneUtilities</string> <key>Type</key> <string>PSGroupSpecifier</string> </dict> <dict> <key>FooterText</key> - <string>Copyright 2017 Google</string> + <string>Copyright 2016 Google</string> <key>License</key> <string>Copyright</string> <key>Title</key> - <string>FirebaseMessaging</string> + <string>GoogleInterchangeUtilities</string> <key>Type</key> <string>PSGroupSpecifier</string> </dict> <dict> <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. -</string> + <string>Copyright 2016 Google</string> <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>GoogleToolboxForMac</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>This license applies to all parts of Protocol Buffers except the following: - - - Atomicops support for generic gcc, located in - src/google/protobuf/stubs/atomicops_internals_generic_gcc.h. - This file is copyrighted by Red Hat Inc. - - - Atomicops support for AIX/POWER, located in - src/google/protobuf/stubs/atomicops_internals_power.h. - This file is copyrighted by Bloomberg Finance LP. - -Copyright 2014, Google 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: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"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 THE COPYRIGHT -OWNER 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. - -Code generated by the Protocol Buffer compiler is owned by the owner -of the input file used when generating it. This code is not -standalone and requires a support library to be linked with it. This -support library is itself covered by the above license. -</string> - <key>License</key> - <string>3-Clause BSD License</string> + <string>Copyright</string> <key>Title</key> - <string>Protobuf</string> + <string>GoogleSymbolUtilities</string> <key>Type</key> <string>PSGroupSpecifier</string> </dict> <dict> <key>FooterText</key> - <string>Copyright (c) 2011 Petteri Aimonen <jpa at nanopb.mail.kapsi.fi> - -This software is provided 'as-is', without any express or -implied warranty. In no event will the authors be held liable -for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. -</string> + <string>Copyright 2016 Google</string> <key>License</key> - <string>zlib</string> + <string>Copyright</string> <key>Title</key> - <string>nanopb</string> + <string>GoogleUtilities</string> <key>Type</key> <string>PSGroupSpecifier</string> </dict> diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island.debug.xcconfig b/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island.debug.xcconfig index a59d208b..fcb5941f 100644 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island.debug.xcconfig +++ b/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island.debug.xcconfig @@ -1,9 +1,9 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseCore/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/FirebaseMessaging/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCore" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseMessaging" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Protobuf" "${PODS_ROOT}/Headers/Public/nanopb" -LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GoogleToolboxForMac" "$PODS_CONFIGURATION_BUILD_DIR/Protobuf" "$PODS_CONFIGURATION_BUILD_DIR/nanopb" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCore" -isystem "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" -isystem "${PODS_ROOT}/Headers/Public/FirebaseMessaging" -isystem "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" -isystem "${PODS_ROOT}/Headers/Public/Protobuf" -isystem "${PODS_ROOT}/Headers/Public/nanopb" -OTHER_LDFLAGS = $(inherited) -ObjC -l"GoogleToolboxForMac" -l"Protobuf" -l"c++" -l"nanopb" -l"sqlite3" -l"z" -framework "AddressBook" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "FirebaseMessaging" -framework "FirebaseNanoPB" -framework "StoreKit" -framework "SystemConfiguration" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/GoogleIPhoneUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks/frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks/frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks/frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GGLInstanceID" "${PODS_ROOT}/Headers/Public/GoogleCloudMessaging" "${PODS_ROOT}/Headers/Public/GoogleIPhoneUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/GGLInstanceID/Libraries" $(inherited) "${PODS_ROOT}/GoogleCloudMessaging/Libraries" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/GGLInstanceID" -isystem "${PODS_ROOT}/Headers/Public/GoogleCloudMessaging" -isystem "${PODS_ROOT}/Headers/Public/GoogleIPhoneUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLInstanceIDLib" -l"GcmLib" -l"sqlite3" -l"z" -framework "AddressBook" -framework "CoreGraphics" -framework "GoogleIPhoneUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "SystemConfiguration" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT}/Pods diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island.release.xcconfig b/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island.release.xcconfig index a59d208b..fcb5941f 100644 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island.release.xcconfig +++ b/StoneIsland/platforms/ios/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island.release.xcconfig @@ -1,9 +1,9 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseCore/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/FirebaseMessaging/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCore" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseMessaging" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Protobuf" "${PODS_ROOT}/Headers/Public/nanopb" -LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GoogleToolboxForMac" "$PODS_CONFIGURATION_BUILD_DIR/Protobuf" "$PODS_CONFIGURATION_BUILD_DIR/nanopb" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCore" -isystem "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" -isystem "${PODS_ROOT}/Headers/Public/FirebaseMessaging" -isystem "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" -isystem "${PODS_ROOT}/Headers/Public/Protobuf" -isystem "${PODS_ROOT}/Headers/Public/nanopb" -OTHER_LDFLAGS = $(inherited) -ObjC -l"GoogleToolboxForMac" -l"Protobuf" -l"c++" -l"nanopb" -l"sqlite3" -l"z" -framework "AddressBook" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "FirebaseMessaging" -framework "FirebaseNanoPB" -framework "StoreKit" -framework "SystemConfiguration" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/GoogleIPhoneUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks/frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks/frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks/frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GGLInstanceID" "${PODS_ROOT}/Headers/Public/GoogleCloudMessaging" "${PODS_ROOT}/Headers/Public/GoogleIPhoneUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/GGLInstanceID/Libraries" $(inherited) "${PODS_ROOT}/GoogleCloudMessaging/Libraries" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/GGLInstanceID" -isystem "${PODS_ROOT}/Headers/Public/GoogleCloudMessaging" -isystem "${PODS_ROOT}/Headers/Public/GoogleIPhoneUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLInstanceIDLib" -l"GcmLib" -l"sqlite3" -l"z" -framework "AddressBook" -framework "CoreGraphics" -framework "GoogleIPhoneUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "SystemConfiguration" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT}/Pods diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/Protobuf/Protobuf-dummy.m b/StoneIsland/platforms/ios/Pods/Target Support Files/Protobuf/Protobuf-dummy.m deleted file mode 100644 index e0f0a337..00000000 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/Protobuf/Protobuf-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Protobuf : NSObject -@end -@implementation PodsDummy_Protobuf -@end diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/Protobuf/Protobuf-prefix.pch b/StoneIsland/platforms/ios/Pods/Target Support Files/Protobuf/Protobuf-prefix.pch deleted file mode 100644 index beb2a244..00000000 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/Protobuf/Protobuf-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/Protobuf/Protobuf.xcconfig b/StoneIsland/platforms/ios/Pods/Target Support Files/Protobuf/Protobuf.xcconfig deleted file mode 100644 index 698e3f2a..00000000 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/Protobuf/Protobuf.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Protobuf -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Protobuf" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCore" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseMessaging" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Protobuf" "${PODS_ROOT}/Headers/Public/nanopb" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Protobuf -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/nanopb/nanopb-dummy.m b/StoneIsland/platforms/ios/Pods/Target Support Files/nanopb/nanopb-dummy.m deleted file mode 100644 index b3fa5956..00000000 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/nanopb/nanopb-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_nanopb : NSObject -@end -@implementation PodsDummy_nanopb -@end diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/nanopb/nanopb-prefix.pch b/StoneIsland/platforms/ios/Pods/Target Support Files/nanopb/nanopb-prefix.pch deleted file mode 100644 index beb2a244..00000000 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/nanopb/nanopb-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/StoneIsland/platforms/ios/Pods/Target Support Files/nanopb/nanopb.xcconfig b/StoneIsland/platforms/ios/Pods/Target Support Files/nanopb/nanopb.xcconfig deleted file mode 100644 index 41e216e7..00000000 --- a/StoneIsland/platforms/ios/Pods/Target Support Files/nanopb/nanopb.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/nanopb -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/nanopb" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCore" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseMessaging" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Protobuf" "${PODS_ROOT}/Headers/Public/nanopb" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/nanopb -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/StoneIsland/platforms/ios/Pods/nanopb/LICENSE.txt b/StoneIsland/platforms/ios/Pods/nanopb/LICENSE.txt deleted file mode 100644 index d11c9af1..00000000 --- a/StoneIsland/platforms/ios/Pods/nanopb/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2011 Petteri Aimonen <jpa at nanopb.mail.kapsi.fi> - -This software is provided 'as-is', without any express or -implied warranty. In no event will the authors be held liable -for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. diff --git a/StoneIsland/platforms/ios/Pods/nanopb/README.md b/StoneIsland/platforms/ios/Pods/nanopb/README.md deleted file mode 100644 index 07860f06..00000000 --- a/StoneIsland/platforms/ios/Pods/nanopb/README.md +++ /dev/null @@ -1,71 +0,0 @@ -Nanopb - Protocol Buffers for Embedded Systems -============================================== - -[](https://travis-ci.org/nanopb/nanopb) - -Nanopb is a small code-size Protocol Buffers implementation in ansi C. It is -especially suitable for use in microcontrollers, but fits any memory -restricted system. - -* **Homepage:** https://jpa.kapsi.fi/nanopb/ -* **Documentation:** https://jpa.kapsi.fi/nanopb/docs/ -* **Downloads:** https://jpa.kapsi.fi/nanopb/download/ -* **Forum:** https://groups.google.com/forum/#!forum/nanopb - - - -Using the nanopb library ------------------------- -To use the nanopb library, you need to do two things: - -1. Compile your .proto files for nanopb, using protoc. -2. Include pb_encode.c, pb_decode.c and pb_common.c in your project. - -The easiest way to get started is to study the project in "examples/simple". -It contains a Makefile, which should work directly under most Linux systems. -However, for any other kind of build system, see the manual steps in -README.txt in that folder. - - - -Using the Protocol Buffers compiler (protoc) --------------------------------------------- -The nanopb generator is implemented as a plugin for the Google's own protoc -compiler. This has the advantage that there is no need to reimplement the -basic parsing of .proto files. However, it does mean that you need the -Google's protobuf library in order to run the generator. - -If you have downloaded a binary package for nanopb (either Windows, Linux or -Mac OS X version), the 'protoc' binary is included in the 'generator-bin' -folder. In this case, you are ready to go. Simply run this command: - - generator-bin/protoc --nanopb_out=. myprotocol.proto - -However, if you are using a git checkout or a plain source distribution, you -need to provide your own version of protoc and the Google's protobuf library. -On Linux, the necessary packages are protobuf-compiler and python-protobuf. -On Windows, you can either build Google's protobuf library from source or use -one of the binary distributions of it. In either case, if you use a separate -protoc, you need to manually give the path to nanopb generator: - - protoc --plugin=protoc-gen-nanopb=nanopb/generator/protoc-gen-nanopb ... - - - -Running the tests ------------------ -If you want to perform further development of the nanopb core, or to verify -its functionality using your compiler and platform, you'll want to run the -test suite. The build rules for the test suite are implemented using Scons, -so you need to have that installed. To run the tests: - - cd tests - scons - -This will show the progress of various test cases. If the output does not -end in an error, the test cases were successful. - -Note: Mac OS X by default aliases 'clang' as 'gcc', while not actually -supporting the same command line options as gcc does. To run tests on -Mac OS X, use: "scons CC=clang CXX=clang". Same way can be used to run -tests with different compilers on any platform. diff --git a/StoneIsland/platforms/ios/Pods/nanopb/pb.h b/StoneIsland/platforms/ios/Pods/nanopb/pb.h deleted file mode 100644 index bf05a63c..00000000 --- a/StoneIsland/platforms/ios/Pods/nanopb/pb.h +++ /dev/null @@ -1,583 +0,0 @@ -/* Common parts of the nanopb library. Most of these are quite low-level - * stuff. For the high-level interface, see pb_encode.h and pb_decode.h. - */ - -#ifndef PB_H_INCLUDED -#define PB_H_INCLUDED - -/***************************************************************** - * Nanopb compilation time options. You can change these here by * - * uncommenting the lines, or on the compiler command line. * - *****************************************************************/ - -/* Enable support for dynamically allocated fields */ -/* #define PB_ENABLE_MALLOC 1 */ - -/* Define this if your CPU / compiler combination does not support - * unaligned memory access to packed structures. */ -/* #define PB_NO_PACKED_STRUCTS 1 */ - -/* Increase the number of required fields that are tracked. - * A compiler warning will tell if you need this. */ -/* #define PB_MAX_REQUIRED_FIELDS 256 */ - -/* Add support for tag numbers > 255 and fields larger than 255 bytes. */ -/* #define PB_FIELD_16BIT 1 */ - -/* Add support for tag numbers > 65536 and fields larger than 65536 bytes. */ -/* #define PB_FIELD_32BIT 1 */ - -/* Disable support for error messages in order to save some code space. */ -/* #define PB_NO_ERRMSG 1 */ - -/* Disable support for custom streams (support only memory buffers). */ -/* #define PB_BUFFER_ONLY 1 */ - -/* Switch back to the old-style callback function signature. - * This was the default until nanopb-0.2.1. */ -/* #define PB_OLD_CALLBACK_STYLE */ - - -/****************************************************************** - * You usually don't need to change anything below this line. * - * Feel free to look around and use the defined macros, though. * - ******************************************************************/ - - -/* Version of the nanopb library. Just in case you want to check it in - * your own program. */ -#define NANOPB_VERSION nanopb-0.3.8 - -/* Include all the system headers needed by nanopb. You will need the - * definitions of the following: - * - strlen, memcpy, memset functions - * - [u]int_least8_t, uint_fast8_t, [u]int_least16_t, [u]int32_t, [u]int64_t - * - size_t - * - bool - * - * If you don't have the standard header files, you can instead provide - * a custom header that defines or includes all this. In that case, - * define PB_SYSTEM_HEADER to the path of this file. - */ -#ifdef PB_SYSTEM_HEADER -#include PB_SYSTEM_HEADER -#else -#include <stdint.h> -#include <stddef.h> -#include <stdbool.h> -#include <string.h> - -#ifdef PB_ENABLE_MALLOC -#include <stdlib.h> -#endif -#endif - -/* Macro for defining packed structures (compiler dependent). - * This just reduces memory requirements, but is not required. - */ -#if defined(PB_NO_PACKED_STRUCTS) - /* Disable struct packing */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed -#elif defined(__GNUC__) || defined(__clang__) - /* For GCC and clang */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed __attribute__((packed)) -#elif defined(__ICCARM__) || defined(__CC_ARM) - /* For IAR ARM and Keil MDK-ARM compilers */ -# define PB_PACKED_STRUCT_START _Pragma("pack(push, 1)") -# define PB_PACKED_STRUCT_END _Pragma("pack(pop)") -# define pb_packed -#elif defined(_MSC_VER) && (_MSC_VER >= 1500) - /* For Microsoft Visual C++ */ -# define PB_PACKED_STRUCT_START __pragma(pack(push, 1)) -# define PB_PACKED_STRUCT_END __pragma(pack(pop)) -# define pb_packed -#else - /* Unknown compiler */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed -#endif - -/* Handly macro for suppressing unreferenced-parameter compiler warnings. */ -#ifndef PB_UNUSED -#define PB_UNUSED(x) (void)(x) -#endif - -/* Compile-time assertion, used for checking compatible compilation options. - * If this does not work properly on your compiler, use - * #define PB_NO_STATIC_ASSERT to disable it. - * - * But before doing that, check carefully the error message / place where it - * comes from to see if the error has a real cause. Unfortunately the error - * message is not always very clear to read, but you can see the reason better - * in the place where the PB_STATIC_ASSERT macro was called. - */ -#ifndef PB_NO_STATIC_ASSERT -#ifndef PB_STATIC_ASSERT -#define PB_STATIC_ASSERT(COND,MSG) typedef char PB_STATIC_ASSERT_MSG(MSG, __LINE__, __COUNTER__)[(COND)?1:-1]; -#define PB_STATIC_ASSERT_MSG(MSG, LINE, COUNTER) PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) -#define PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) pb_static_assertion_##MSG##LINE##COUNTER -#endif -#else -#define PB_STATIC_ASSERT(COND,MSG) -#endif - -/* Number of required fields to keep track of. */ -#ifndef PB_MAX_REQUIRED_FIELDS -#define PB_MAX_REQUIRED_FIELDS 64 -#endif - -#if PB_MAX_REQUIRED_FIELDS < 64 -#error You should not lower PB_MAX_REQUIRED_FIELDS from the default value (64). -#endif - -/* List of possible field types. These are used in the autogenerated code. - * Least-significant 4 bits tell the scalar type - * Most-significant 4 bits specify repeated/required/packed etc. - */ - -typedef uint_least8_t pb_type_t; - -/**** Field data types ****/ - -/* Numeric types */ -#define PB_LTYPE_VARINT 0x00 /* int32, int64, enum, bool */ -#define PB_LTYPE_UVARINT 0x01 /* uint32, uint64 */ -#define PB_LTYPE_SVARINT 0x02 /* sint32, sint64 */ -#define PB_LTYPE_FIXED32 0x03 /* fixed32, sfixed32, float */ -#define PB_LTYPE_FIXED64 0x04 /* fixed64, sfixed64, double */ - -/* Marker for last packable field type. */ -#define PB_LTYPE_LAST_PACKABLE 0x04 - -/* Byte array with pre-allocated buffer. - * data_size is the length of the allocated PB_BYTES_ARRAY structure. */ -#define PB_LTYPE_BYTES 0x05 - -/* String with pre-allocated buffer. - * data_size is the maximum length. */ -#define PB_LTYPE_STRING 0x06 - -/* Submessage - * submsg_fields is pointer to field descriptions */ -#define PB_LTYPE_SUBMESSAGE 0x07 - -/* Extension pseudo-field - * The field contains a pointer to pb_extension_t */ -#define PB_LTYPE_EXTENSION 0x08 - -/* Byte array with inline, pre-allocated byffer. - * data_size is the length of the inline, allocated buffer. - * This differs from PB_LTYPE_BYTES by defining the element as - * pb_byte_t[data_size] rather than pb_bytes_array_t. */ -#define PB_LTYPE_FIXED_LENGTH_BYTES 0x09 - -/* Number of declared LTYPES */ -#define PB_LTYPES_COUNT 0x0A -#define PB_LTYPE_MASK 0x0F - -/**** Field repetition rules ****/ - -#define PB_HTYPE_REQUIRED 0x00 -#define PB_HTYPE_OPTIONAL 0x10 -#define PB_HTYPE_REPEATED 0x20 -#define PB_HTYPE_ONEOF 0x30 -#define PB_HTYPE_MASK 0x30 - -/**** Field allocation types ****/ - -#define PB_ATYPE_STATIC 0x00 -#define PB_ATYPE_POINTER 0x80 -#define PB_ATYPE_CALLBACK 0x40 -#define PB_ATYPE_MASK 0xC0 - -#define PB_ATYPE(x) ((x) & PB_ATYPE_MASK) -#define PB_HTYPE(x) ((x) & PB_HTYPE_MASK) -#define PB_LTYPE(x) ((x) & PB_LTYPE_MASK) - -/* Data type used for storing sizes of struct fields - * and array counts. - */ -#if defined(PB_FIELD_32BIT) - typedef uint32_t pb_size_t; - typedef int32_t pb_ssize_t; -#elif defined(PB_FIELD_16BIT) - typedef uint_least16_t pb_size_t; - typedef int_least16_t pb_ssize_t; -#else - typedef uint_least8_t pb_size_t; - typedef int_least8_t pb_ssize_t; -#endif -#define PB_SIZE_MAX ((pb_size_t)-1) - -/* Data type for storing encoded data and other byte streams. - * This typedef exists to support platforms where uint8_t does not exist. - * You can regard it as equivalent on uint8_t on other platforms. - */ -typedef uint_least8_t pb_byte_t; - -/* This structure is used in auto-generated constants - * to specify struct fields. - * You can change field sizes if you need structures - * larger than 256 bytes or field tags larger than 256. - * The compiler should complain if your .proto has such - * structures. Fix that by defining PB_FIELD_16BIT or - * PB_FIELD_32BIT. - */ -PB_PACKED_STRUCT_START -typedef struct pb_field_s pb_field_t; -struct pb_field_s { - pb_size_t tag; - pb_type_t type; - pb_size_t data_offset; /* Offset of field data, relative to previous field. */ - pb_ssize_t size_offset; /* Offset of array size or has-boolean, relative to data */ - pb_size_t data_size; /* Data size in bytes for a single item */ - pb_size_t array_size; /* Maximum number of entries in array */ - - /* Field definitions for submessage - * OR default value for all other non-array, non-callback types - * If null, then field will zeroed. */ - const void *ptr; -} pb_packed; -PB_PACKED_STRUCT_END - -/* Make sure that the standard integer types are of the expected sizes. - * Otherwise fixed32/fixed64 fields can break. - * - * If you get errors here, it probably means that your stdint.h is not - * correct for your platform. - */ -PB_STATIC_ASSERT(sizeof(int64_t) == 2 * sizeof(int32_t), INT64_T_WRONG_SIZE) -PB_STATIC_ASSERT(sizeof(uint64_t) == 2 * sizeof(uint32_t), UINT64_T_WRONG_SIZE) - -/* This structure is used for 'bytes' arrays. - * It has the number of bytes in the beginning, and after that an array. - * Note that actual structs used will have a different length of bytes array. - */ -#define PB_BYTES_ARRAY_T(n) struct { pb_size_t size; pb_byte_t bytes[n]; } -#define PB_BYTES_ARRAY_T_ALLOCSIZE(n) ((size_t)n + offsetof(pb_bytes_array_t, bytes)) - -struct pb_bytes_array_s { - pb_size_t size; - pb_byte_t bytes[1]; -}; -typedef struct pb_bytes_array_s pb_bytes_array_t; - -/* This structure is used for giving the callback function. - * It is stored in the message structure and filled in by the method that - * calls pb_decode. - * - * The decoding callback will be given a limited-length stream - * If the wire type was string, the length is the length of the string. - * If the wire type was a varint/fixed32/fixed64, the length is the length - * of the actual value. - * The function may be called multiple times (especially for repeated types, - * but also otherwise if the message happens to contain the field multiple - * times.) - * - * The encoding callback will receive the actual output stream. - * It should write all the data in one call, including the field tag and - * wire type. It can write multiple fields. - * - * The callback can be null if you want to skip a field. - */ -typedef struct pb_istream_s pb_istream_t; -typedef struct pb_ostream_s pb_ostream_t; -typedef struct pb_callback_s pb_callback_t; -struct pb_callback_s { -#ifdef PB_OLD_CALLBACK_STYLE - /* Deprecated since nanopb-0.2.1 */ - union { - bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void *arg); - bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, const void *arg); - } funcs; -#else - /* New function signature, which allows modifying arg contents in callback. */ - union { - bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void **arg); - bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, void * const *arg); - } funcs; -#endif - - /* Free arg for use by callback */ - void *arg; -}; - -/* Wire types. Library user needs these only in encoder callbacks. */ -typedef enum { - PB_WT_VARINT = 0, - PB_WT_64BIT = 1, - PB_WT_STRING = 2, - PB_WT_32BIT = 5 -} pb_wire_type_t; - -/* Structure for defining the handling of unknown/extension fields. - * Usually the pb_extension_type_t structure is automatically generated, - * while the pb_extension_t structure is created by the user. However, - * if you want to catch all unknown fields, you can also create a custom - * pb_extension_type_t with your own callback. - */ -typedef struct pb_extension_type_s pb_extension_type_t; -typedef struct pb_extension_s pb_extension_t; -struct pb_extension_type_s { - /* Called for each unknown field in the message. - * If you handle the field, read off all of its data and return true. - * If you do not handle the field, do not read anything and return true. - * If you run into an error, return false. - * Set to NULL for default handler. - */ - bool (*decode)(pb_istream_t *stream, pb_extension_t *extension, - uint32_t tag, pb_wire_type_t wire_type); - - /* Called once after all regular fields have been encoded. - * If you have something to write, do so and return true. - * If you do not have anything to write, just return true. - * If you run into an error, return false. - * Set to NULL for default handler. - */ - bool (*encode)(pb_ostream_t *stream, const pb_extension_t *extension); - - /* Free field for use by the callback. */ - const void *arg; -}; - -struct pb_extension_s { - /* Type describing the extension field. Usually you'll initialize - * this to a pointer to the automatically generated structure. */ - const pb_extension_type_t *type; - - /* Destination for the decoded data. This must match the datatype - * of the extension field. */ - void *dest; - - /* Pointer to the next extension handler, or NULL. - * If this extension does not match a field, the next handler is - * automatically called. */ - pb_extension_t *next; - - /* The decoder sets this to true if the extension was found. - * Ignored for encoding. */ - bool found; -}; - -/* Memory allocation functions to use. You can define pb_realloc and - * pb_free to custom functions if you want. */ -#ifdef PB_ENABLE_MALLOC -# ifndef pb_realloc -# define pb_realloc(ptr, size) realloc(ptr, size) -# endif -# ifndef pb_free -# define pb_free(ptr) free(ptr) -# endif -#endif - -/* This is used to inform about need to regenerate .pb.h/.pb.c files. */ -#define PB_PROTO_HEADER_VERSION 30 - -/* These macros are used to declare pb_field_t's in the constant array. */ -/* Size of a structure member, in bytes. */ -#define pb_membersize(st, m) (sizeof ((st*)0)->m) -/* Number of entries in an array. */ -#define pb_arraysize(st, m) (pb_membersize(st, m) / pb_membersize(st, m[0])) -/* Delta from start of one member to the start of another member. */ -#define pb_delta(st, m1, m2) ((int)offsetof(st, m1) - (int)offsetof(st, m2)) -/* Marks the end of the field list */ -#define PB_LAST_FIELD {0,(pb_type_t) 0,0,0,0,0,0} - -/* Macros for filling in the data_offset field */ -/* data_offset for first field in a message */ -#define PB_DATAOFFSET_FIRST(st, m1, m2) (offsetof(st, m1)) -/* data_offset for subsequent fields */ -#define PB_DATAOFFSET_OTHER(st, m1, m2) (offsetof(st, m1) - offsetof(st, m2) - pb_membersize(st, m2)) -/* data offset for subsequent fields inside an union (oneof) */ -#define PB_DATAOFFSET_UNION(st, m1, m2) (PB_SIZE_MAX) -/* Choose first/other based on m1 == m2 (deprecated, remains for backwards compatibility) */ -#define PB_DATAOFFSET_CHOOSE(st, m1, m2) (int)(offsetof(st, m1) == offsetof(st, m2) \ - ? PB_DATAOFFSET_FIRST(st, m1, m2) \ - : PB_DATAOFFSET_OTHER(st, m1, m2)) - -/* Required fields are the simplest. They just have delta (padding) from - * previous field end, and the size of the field. Pointer is used for - * submessages and default values. - */ -#define PB_REQUIRED_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Optional fields add the delta to the has_ variable. */ -#define PB_OPTIONAL_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \ - fd, \ - pb_delta(st, has_ ## m, m), \ - pb_membersize(st, m), 0, ptr} - -#define PB_SINGULAR_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Repeated fields have a _count field and also the maximum number of entries. */ -#define PB_REPEATED_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REPEATED | ltype, \ - fd, \ - pb_delta(st, m ## _count, m), \ - pb_membersize(st, m[0]), \ - pb_arraysize(st, m), ptr} - -/* Allocated fields carry the size of the actual data, not the pointer */ -#define PB_REQUIRED_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Optional fields don't need a has_ variable, as information would be redundant */ -#define PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Same as optional fields*/ -#define PB_SINGULAR_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Repeated fields have a _count field and a pointer to array of pointers */ -#define PB_REPEATED_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_REPEATED | ltype, \ - fd, pb_delta(st, m ## _count, m), \ - pb_membersize(st, m[0]), 0, ptr} - -/* Callbacks are much like required fields except with special datatype. */ -#define PB_REQUIRED_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_SINGULAR_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_REPEATED_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REPEATED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Optional extensions don't have the has_ field, as that would be redundant. - * Furthermore, the combination of OPTIONAL without has_ field is used - * for indicating proto3 style fields. Extensions exist in proto2 mode only, - * so they should be encoded according to proto2 rules. To avoid the conflict, - * extensions are marked as REQUIRED instead. - */ -#define PB_OPTEXT_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | ltype, \ - 0, \ - 0, \ - pb_membersize(st, m), 0, ptr} - -#define PB_OPTEXT_POINTER(tag, st, m, fd, ltype, ptr) \ - PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr) - -#define PB_OPTEXT_CALLBACK(tag, st, m, fd, ltype, ptr) \ - PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr) - -/* The mapping from protobuf types to LTYPEs is done using these macros. */ -#define PB_LTYPE_MAP_BOOL PB_LTYPE_VARINT -#define PB_LTYPE_MAP_BYTES PB_LTYPE_BYTES -#define PB_LTYPE_MAP_DOUBLE PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_ENUM PB_LTYPE_VARINT -#define PB_LTYPE_MAP_UENUM PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_FIXED32 PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_FIXED64 PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_FLOAT PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_INT32 PB_LTYPE_VARINT -#define PB_LTYPE_MAP_INT64 PB_LTYPE_VARINT -#define PB_LTYPE_MAP_MESSAGE PB_LTYPE_SUBMESSAGE -#define PB_LTYPE_MAP_SFIXED32 PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_SFIXED64 PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_SINT32 PB_LTYPE_SVARINT -#define PB_LTYPE_MAP_SINT64 PB_LTYPE_SVARINT -#define PB_LTYPE_MAP_STRING PB_LTYPE_STRING -#define PB_LTYPE_MAP_UINT32 PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_UINT64 PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_EXTENSION PB_LTYPE_EXTENSION -#define PB_LTYPE_MAP_FIXED_LENGTH_BYTES PB_LTYPE_FIXED_LENGTH_BYTES - -/* This is the actual macro used in field descriptions. - * It takes these arguments: - * - Field tag number - * - Field type: BOOL, BYTES, DOUBLE, ENUM, UENUM, FIXED32, FIXED64, - * FLOAT, INT32, INT64, MESSAGE, SFIXED32, SFIXED64 - * SINT32, SINT64, STRING, UINT32, UINT64 or EXTENSION - * - Field rules: REQUIRED, OPTIONAL or REPEATED - * - Allocation: STATIC, CALLBACK or POINTER - * - Placement: FIRST or OTHER, depending on if this is the first field in structure. - * - Message name - * - Field name - * - Previous field name (or field name again for first field) - * - Pointer to default value or submsg fields. - */ - -#define PB_FIELD(tag, type, rules, allocation, placement, message, field, prevfield, ptr) \ - PB_ ## rules ## _ ## allocation(tag, message, field, \ - PB_DATAOFFSET_ ## placement(message, field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - -/* Field description for oneof fields. This requires taking into account the - * union name also, that's why a separate set of macros is needed. - */ -#define PB_ONEOF_STATIC(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, u.m), \ - pb_membersize(st, u.m), 0, ptr} - -#define PB_ONEOF_POINTER(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, u.m), \ - pb_membersize(st, u.m[0]), 0, ptr} - -#define PB_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \ - PB_ONEOF_ ## allocation(union_name, tag, message, field, \ - PB_DATAOFFSET_ ## placement(message, union_name.field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - -#define PB_ANONYMOUS_ONEOF_STATIC(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, m), \ - pb_membersize(st, m), 0, ptr} - -#define PB_ANONYMOUS_ONEOF_POINTER(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, m), \ - pb_membersize(st, m[0]), 0, ptr} - -#define PB_ANONYMOUS_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \ - PB_ANONYMOUS_ONEOF_ ## allocation(union_name, tag, message, field, \ - PB_DATAOFFSET_ ## placement(message, field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - -/* These macros are used for giving out error messages. - * They are mostly a debugging aid; the main error information - * is the true/false return value from functions. - * Some code space can be saved by disabling the error - * messages if not used. - * - * PB_SET_ERROR() sets the error message if none has been set yet. - * msg must be a constant string literal. - * PB_GET_ERROR() always returns a pointer to a string. - * PB_RETURN_ERROR() sets the error and returns false from current - * function. - */ -#ifdef PB_NO_ERRMSG -#define PB_SET_ERROR(stream, msg) PB_UNUSED(stream) -#define PB_GET_ERROR(stream) "(errmsg disabled)" -#else -#define PB_SET_ERROR(stream, msg) (stream->errmsg = (stream)->errmsg ? (stream)->errmsg : (msg)) -#define PB_GET_ERROR(stream) ((stream)->errmsg ? (stream)->errmsg : "(none)") -#endif - -#define PB_RETURN_ERROR(stream, msg) return PB_SET_ERROR(stream, msg), false - -#endif diff --git a/StoneIsland/platforms/ios/Pods/nanopb/pb_common.c b/StoneIsland/platforms/ios/Pods/nanopb/pb_common.c deleted file mode 100644 index 4fb7186b..00000000 --- a/StoneIsland/platforms/ios/Pods/nanopb/pb_common.c +++ /dev/null @@ -1,97 +0,0 @@ -/* pb_common.c: Common support functions for pb_encode.c and pb_decode.c. - * - * 2014 Petteri Aimonen <jpa@kapsi.fi> - */ - -#include "pb_common.h" - -bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_field_t *fields, void *dest_struct) -{ - iter->start = fields; - iter->pos = fields; - iter->required_field_index = 0; - iter->dest_struct = dest_struct; - iter->pData = (char*)dest_struct + iter->pos->data_offset; - iter->pSize = (char*)iter->pData + iter->pos->size_offset; - - return (iter->pos->tag != 0); -} - -bool pb_field_iter_next(pb_field_iter_t *iter) -{ - const pb_field_t *prev_field = iter->pos; - - if (prev_field->tag == 0) - { - /* Handle empty message types, where the first field is already the terminator. - * In other cases, the iter->pos never points to the terminator. */ - return false; - } - - iter->pos++; - - if (iter->pos->tag == 0) - { - /* Wrapped back to beginning, reinitialize */ - (void)pb_field_iter_begin(iter, iter->start, iter->dest_struct); - return false; - } - else - { - /* Increment the pointers based on previous field size */ - size_t prev_size = prev_field->data_size; - - if (PB_HTYPE(prev_field->type) == PB_HTYPE_ONEOF && - PB_HTYPE(iter->pos->type) == PB_HTYPE_ONEOF && - iter->pos->data_offset == PB_SIZE_MAX) - { - /* Don't advance pointers inside unions */ - return true; - } - else if (PB_ATYPE(prev_field->type) == PB_ATYPE_STATIC && - PB_HTYPE(prev_field->type) == PB_HTYPE_REPEATED) - { - /* In static arrays, the data_size tells the size of a single entry and - * array_size is the number of entries */ - prev_size *= prev_field->array_size; - } - else if (PB_ATYPE(prev_field->type) == PB_ATYPE_POINTER) - { - /* Pointer fields always have a constant size in the main structure. - * The data_size only applies to the dynamically allocated area. */ - prev_size = sizeof(void*); - } - - if (PB_HTYPE(prev_field->type) == PB_HTYPE_REQUIRED) - { - /* Count the required fields, in order to check their presence in the - * decoder. */ - iter->required_field_index++; - } - - iter->pData = (char*)iter->pData + prev_size + iter->pos->data_offset; - iter->pSize = (char*)iter->pData + iter->pos->size_offset; - return true; - } -} - -bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag) -{ - const pb_field_t *start = iter->pos; - - do { - if (iter->pos->tag == tag && - PB_LTYPE(iter->pos->type) != PB_LTYPE_EXTENSION) - { - /* Found the wanted field */ - return true; - } - - (void)pb_field_iter_next(iter); - } while (iter->pos != start); - - /* Searched all the way back to start, and found nothing. */ - return false; -} - - diff --git a/StoneIsland/platforms/ios/Pods/nanopb/pb_common.h b/StoneIsland/platforms/ios/Pods/nanopb/pb_common.h deleted file mode 100644 index 60b3d374..00000000 --- a/StoneIsland/platforms/ios/Pods/nanopb/pb_common.h +++ /dev/null @@ -1,42 +0,0 @@ -/* pb_common.h: Common support functions for pb_encode.c and pb_decode.c. - * These functions are rarely needed by applications directly. - */ - -#ifndef PB_COMMON_H_INCLUDED -#define PB_COMMON_H_INCLUDED - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Iterator for pb_field_t list */ -struct pb_field_iter_s { - const pb_field_t *start; /* Start of the pb_field_t array */ - const pb_field_t *pos; /* Current position of the iterator */ - unsigned required_field_index; /* Zero-based index that counts only the required fields */ - void *dest_struct; /* Pointer to start of the structure */ - void *pData; /* Pointer to current field value */ - void *pSize; /* Pointer to count/has field */ -}; -typedef struct pb_field_iter_s pb_field_iter_t; - -/* Initialize the field iterator structure to beginning. - * Returns false if the message type is empty. */ -bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_field_t *fields, void *dest_struct); - -/* Advance the iterator to the next field. - * Returns false when the iterator wraps back to the first field. */ -bool pb_field_iter_next(pb_field_iter_t *iter); - -/* Advance the iterator until it points at a field with the given tag. - * Returns false if no such field exists. */ -bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif - diff --git a/StoneIsland/platforms/ios/Pods/nanopb/pb_decode.c b/StoneIsland/platforms/ios/Pods/nanopb/pb_decode.c deleted file mode 100644 index e2e90caa..00000000 --- a/StoneIsland/platforms/ios/Pods/nanopb/pb_decode.c +++ /dev/null @@ -1,1379 +0,0 @@ -/* pb_decode.c -- decode a protobuf using minimal resources - * - * 2011 Petteri Aimonen <jpa@kapsi.fi> - */ - -/* Use the GCC warn_unused_result attribute to check that all return values - * are propagated correctly. On other compilers and gcc before 3.4.0 just - * ignore the annotation. - */ -#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) - #define checkreturn -#else - #define checkreturn __attribute__((warn_unused_result)) -#endif - -#include "pb.h" -#include "pb_decode.h" -#include "pb_common.h" - -/************************************** - * Declarations internal to this file * - **************************************/ - -typedef bool (*pb_decoder_t)(pb_istream_t *stream, const pb_field_t *field, void *dest) checkreturn; - -static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count); -static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size); -static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static void iter_from_extension(pb_field_iter_t *iter, pb_extension_t *extension); -static bool checkreturn default_extension_decoder(pb_istream_t *stream, pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type); -static bool checkreturn decode_extension(pb_istream_t *stream, uint32_t tag, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static bool checkreturn find_extension_field(pb_field_iter_t *iter); -static void pb_field_set_to_default(pb_field_iter_t *iter); -static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_struct); -static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed_length_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_skip_varint(pb_istream_t *stream); -static bool checkreturn pb_skip_string(pb_istream_t *stream); - -#ifdef PB_ENABLE_MALLOC -static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size); -static bool checkreturn pb_release_union_field(pb_istream_t *stream, pb_field_iter_t *iter); -static void pb_release_single_field(const pb_field_iter_t *iter); -#endif - -/* --- Function pointers to field decoders --- - * Order in the array must match pb_action_t LTYPE numbering. - */ -static const pb_decoder_t PB_DECODERS[PB_LTYPES_COUNT] = { - &pb_dec_varint, - &pb_dec_uvarint, - &pb_dec_svarint, - &pb_dec_fixed32, - &pb_dec_fixed64, - - &pb_dec_bytes, - &pb_dec_string, - &pb_dec_submessage, - NULL, /* extensions */ - &pb_dec_fixed_length_bytes -}; - -/******************************* - * pb_istream_t implementation * - *******************************/ - -static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count) -{ - size_t i; - const pb_byte_t *source = (const pb_byte_t*)stream->state; - stream->state = (pb_byte_t*)stream->state + count; - - if (buf != NULL) - { - for (i = 0; i < count; i++) - buf[i] = source[i]; - } - - return true; -} - -bool checkreturn pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count) -{ -#ifndef PB_BUFFER_ONLY - if (buf == NULL && stream->callback != buf_read) - { - /* Skip input bytes */ - pb_byte_t tmp[16]; - while (count > 16) - { - if (!pb_read(stream, tmp, 16)) - return false; - - count -= 16; - } - - return pb_read(stream, tmp, count); - } -#endif - - if (stream->bytes_left < count) - PB_RETURN_ERROR(stream, "end-of-stream"); - -#ifndef PB_BUFFER_ONLY - if (!stream->callback(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#else - if (!buf_read(stream, buf, count)) - return false; -#endif - - stream->bytes_left -= count; - return true; -} - -/* Read a single byte from input stream. buf may not be NULL. - * This is an optimization for the varint decoding. */ -static bool checkreturn pb_readbyte(pb_istream_t *stream, pb_byte_t *buf) -{ - if (stream->bytes_left == 0) - PB_RETURN_ERROR(stream, "end-of-stream"); - -#ifndef PB_BUFFER_ONLY - if (!stream->callback(stream, buf, 1)) - PB_RETURN_ERROR(stream, "io error"); -#else - *buf = *(const pb_byte_t*)stream->state; - stream->state = (pb_byte_t*)stream->state + 1; -#endif - - stream->bytes_left--; - - return true; -} - -pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize) -{ - pb_istream_t stream; - /* Cast away the const from buf without a compiler error. We are - * careful to use it only in a const manner in the callbacks. - */ - union { - void *state; - const void *c_state; - } state; -#ifdef PB_BUFFER_ONLY - stream.callback = NULL; -#else - stream.callback = &buf_read; -#endif - state.c_state = buf; - stream.state = state.state; - stream.bytes_left = bufsize; -#ifndef PB_NO_ERRMSG - stream.errmsg = NULL; -#endif - return stream; -} - -/******************** - * Helper functions * - ********************/ - -bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest) -{ - pb_byte_t byte; - uint32_t result; - - if (!pb_readbyte(stream, &byte)) - return false; - - if ((byte & 0x80) == 0) - { - /* Quick case, 1 byte value */ - result = byte; - } - else - { - /* Multibyte case */ - uint_fast8_t bitpos = 7; - result = byte & 0x7F; - - do - { - if (bitpos >= 32) - PB_RETURN_ERROR(stream, "varint overflow"); - - if (!pb_readbyte(stream, &byte)) - return false; - - result |= (uint32_t)(byte & 0x7F) << bitpos; - bitpos = (uint_fast8_t)(bitpos + 7); - } while (byte & 0x80); - } - - *dest = result; - return true; -} - -bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest) -{ - pb_byte_t byte; - uint_fast8_t bitpos = 0; - uint64_t result = 0; - - do - { - if (bitpos >= 64) - PB_RETURN_ERROR(stream, "varint overflow"); - - if (!pb_readbyte(stream, &byte)) - return false; - - result |= (uint64_t)(byte & 0x7F) << bitpos; - bitpos = (uint_fast8_t)(bitpos + 7); - } while (byte & 0x80); - - *dest = result; - return true; -} - -bool checkreturn pb_skip_varint(pb_istream_t *stream) -{ - pb_byte_t byte; - do - { - if (!pb_read(stream, &byte, 1)) - return false; - } while (byte & 0x80); - return true; -} - -bool checkreturn pb_skip_string(pb_istream_t *stream) -{ - uint32_t length; - if (!pb_decode_varint32(stream, &length)) - return false; - - return pb_read(stream, NULL, length); -} - -bool checkreturn pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof) -{ - uint32_t temp; - *eof = false; - *wire_type = (pb_wire_type_t) 0; - *tag = 0; - - if (!pb_decode_varint32(stream, &temp)) - { - if (stream->bytes_left == 0) - *eof = true; - - return false; - } - - if (temp == 0) - { - *eof = true; /* Special feature: allow 0-terminated messages. */ - return false; - } - - *tag = temp >> 3; - *wire_type = (pb_wire_type_t)(temp & 7); - return true; -} - -bool checkreturn pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type) -{ - switch (wire_type) - { - case PB_WT_VARINT: return pb_skip_varint(stream); - case PB_WT_64BIT: return pb_read(stream, NULL, 8); - case PB_WT_STRING: return pb_skip_string(stream); - case PB_WT_32BIT: return pb_read(stream, NULL, 4); - default: PB_RETURN_ERROR(stream, "invalid wire_type"); - } -} - -/* Read a raw value to buffer, for the purpose of passing it to callback as - * a substream. Size is maximum size on call, and actual size on return. - */ -static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size) -{ - size_t max_size = *size; - switch (wire_type) - { - case PB_WT_VARINT: - *size = 0; - do - { - (*size)++; - if (*size > max_size) return false; - if (!pb_read(stream, buf, 1)) return false; - } while (*buf++ & 0x80); - return true; - - case PB_WT_64BIT: - *size = 8; - return pb_read(stream, buf, 8); - - case PB_WT_32BIT: - *size = 4; - return pb_read(stream, buf, 4); - - default: PB_RETURN_ERROR(stream, "invalid wire_type"); - } -} - -/* Decode string length from stream and return a substream with limited length. - * Remember to close the substream using pb_close_string_substream(). - */ -bool checkreturn pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream) -{ - uint32_t size; - if (!pb_decode_varint32(stream, &size)) - return false; - - *substream = *stream; - if (substream->bytes_left < size) - PB_RETURN_ERROR(stream, "parent stream too short"); - - substream->bytes_left = size; - stream->bytes_left -= size; - return true; -} - -bool checkreturn pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream) -{ - if (substream->bytes_left) { - if (!pb_read(substream, NULL, substream->bytes_left)) - return false; - } - - stream->state = substream->state; - -#ifndef PB_NO_ERRMSG - stream->errmsg = substream->errmsg; -#endif - return true; -} - -/************************* - * Decode a single field * - *************************/ - -static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ - pb_type_t type; - pb_decoder_t func; - - type = iter->pos->type; - func = PB_DECODERS[PB_LTYPE(type)]; - - switch (PB_HTYPE(type)) - { - case PB_HTYPE_REQUIRED: - return func(stream, iter->pos, iter->pData); - - case PB_HTYPE_OPTIONAL: - if (iter->pSize != iter->pData) - *(bool*)iter->pSize = true; - return func(stream, iter->pos, iter->pData); - - case PB_HTYPE_REPEATED: - if (wire_type == PB_WT_STRING - && PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE) - { - /* Packed array */ - bool status = true; - pb_size_t *size = (pb_size_t*)iter->pSize; - pb_istream_t substream; - if (!pb_make_string_substream(stream, &substream)) - return false; - - while (substream.bytes_left > 0 && *size < iter->pos->array_size) - { - void *pItem = (char*)iter->pData + iter->pos->data_size * (*size); - if (!func(&substream, iter->pos, pItem)) - { - status = false; - break; - } - (*size)++; - } - - if (substream.bytes_left != 0) - PB_RETURN_ERROR(stream, "array overflow"); - if (!pb_close_string_substream(stream, &substream)) - return false; - - return status; - } - else - { - /* Repeated field */ - pb_size_t *size = (pb_size_t*)iter->pSize; - void *pItem = (char*)iter->pData + iter->pos->data_size * (*size); - if (*size >= iter->pos->array_size) - PB_RETURN_ERROR(stream, "array overflow"); - - (*size)++; - return func(stream, iter->pos, pItem); - } - - case PB_HTYPE_ONEOF: - *(pb_size_t*)iter->pSize = iter->pos->tag; - if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE) - { - /* We memset to zero so that any callbacks are set to NULL. - * Then set any default values. */ - memset(iter->pData, 0, iter->pos->data_size); - pb_message_set_to_defaults((const pb_field_t*)iter->pos->ptr, iter->pData); - } - return func(stream, iter->pos, iter->pData); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -#ifdef PB_ENABLE_MALLOC -/* Allocate storage for the field and store the pointer at iter->pData. - * array_size is the number of entries to reserve in an array. - * Zero size is not allowed, use pb_free() for releasing. - */ -static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size) -{ - void *ptr = *(void**)pData; - - if (data_size == 0 || array_size == 0) - PB_RETURN_ERROR(stream, "invalid size"); - - /* Check for multiplication overflows. - * This code avoids the costly division if the sizes are small enough. - * Multiplication is safe as long as only half of bits are set - * in either multiplicand. - */ - { - const size_t check_limit = (size_t)1 << (sizeof(size_t) * 4); - if (data_size >= check_limit || array_size >= check_limit) - { - const size_t size_max = (size_t)-1; - if (size_max / array_size < data_size) - { - PB_RETURN_ERROR(stream, "size too large"); - } - } - } - - /* Allocate new or expand previous allocation */ - /* Note: on failure the old pointer will remain in the structure, - * the message must be freed by caller also on error return. */ - ptr = pb_realloc(ptr, array_size * data_size); - if (ptr == NULL) - PB_RETURN_ERROR(stream, "realloc failed"); - - *(void**)pData = ptr; - return true; -} - -/* Clear a newly allocated item in case it contains a pointer, or is a submessage. */ -static void initialize_pointer_field(void *pItem, pb_field_iter_t *iter) -{ - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_STRING || - PB_LTYPE(iter->pos->type) == PB_LTYPE_BYTES) - { - *(void**)pItem = NULL; - } - else if (PB_LTYPE(iter->pos->type) == PB_LTYPE_SUBMESSAGE) - { - pb_message_set_to_defaults((const pb_field_t *) iter->pos->ptr, pItem); - } -} -#endif - -static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ -#ifndef PB_ENABLE_MALLOC - PB_UNUSED(wire_type); - PB_UNUSED(iter); - PB_RETURN_ERROR(stream, "no malloc support"); -#else - pb_type_t type; - pb_decoder_t func; - - type = iter->pos->type; - func = PB_DECODERS[PB_LTYPE(type)]; - - switch (PB_HTYPE(type)) - { - case PB_HTYPE_REQUIRED: - case PB_HTYPE_OPTIONAL: - case PB_HTYPE_ONEOF: - if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE && - *(void**)iter->pData != NULL) - { - /* Duplicate field, have to release the old allocation first. */ - pb_release_single_field(iter); - } - - if (PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - *(pb_size_t*)iter->pSize = iter->pos->tag; - } - - if (PB_LTYPE(type) == PB_LTYPE_STRING || - PB_LTYPE(type) == PB_LTYPE_BYTES) - { - return func(stream, iter->pos, iter->pData); - } - else - { - if (!allocate_field(stream, iter->pData, iter->pos->data_size, 1)) - return false; - - initialize_pointer_field(*(void**)iter->pData, iter); - return func(stream, iter->pos, *(void**)iter->pData); - } - - case PB_HTYPE_REPEATED: - if (wire_type == PB_WT_STRING - && PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE) - { - /* Packed array, multiple items come in at once. */ - bool status = true; - pb_size_t *size = (pb_size_t*)iter->pSize; - size_t allocated_size = *size; - void *pItem; - pb_istream_t substream; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - while (substream.bytes_left) - { - if ((size_t)*size + 1 > allocated_size) - { - /* Allocate more storage. This tries to guess the - * number of remaining entries. Round the division - * upwards. */ - allocated_size += (substream.bytes_left - 1) / iter->pos->data_size + 1; - - if (!allocate_field(&substream, iter->pData, iter->pos->data_size, allocated_size)) - { - status = false; - break; - } - } - - /* Decode the array entry */ - pItem = *(char**)iter->pData + iter->pos->data_size * (*size); - initialize_pointer_field(pItem, iter); - if (!func(&substream, iter->pos, pItem)) - { - status = false; - break; - } - - if (*size == PB_SIZE_MAX) - { -#ifndef PB_NO_ERRMSG - stream->errmsg = "too many array entries"; -#endif - status = false; - break; - } - - (*size)++; - } - if (!pb_close_string_substream(stream, &substream)) - return false; - - return status; - } - else - { - /* Normal repeated field, i.e. only one item at a time. */ - pb_size_t *size = (pb_size_t*)iter->pSize; - void *pItem; - - if (*size == PB_SIZE_MAX) - PB_RETURN_ERROR(stream, "too many array entries"); - - (*size)++; - if (!allocate_field(stream, iter->pData, iter->pos->data_size, *size)) - return false; - - pItem = *(char**)iter->pData + iter->pos->data_size * (*size - 1); - initialize_pointer_field(pItem, iter); - return func(stream, iter->pos, pItem); - } - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -#endif -} - -static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ - pb_callback_t *pCallback = (pb_callback_t*)iter->pData; - -#ifdef PB_OLD_CALLBACK_STYLE - void *arg = pCallback->arg; -#else - void **arg = &(pCallback->arg); -#endif - - if (pCallback->funcs.decode == NULL) - return pb_skip_field(stream, wire_type); - - if (wire_type == PB_WT_STRING) - { - pb_istream_t substream; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - do - { - if (!pCallback->funcs.decode(&substream, iter->pos, arg)) - PB_RETURN_ERROR(stream, "callback failed"); - } while (substream.bytes_left); - - if (!pb_close_string_substream(stream, &substream)) - return false; - - return true; - } - else - { - /* Copy the single scalar value to stack. - * This is required so that we can limit the stream length, - * which in turn allows to use same callback for packed and - * not-packed fields. */ - pb_istream_t substream; - pb_byte_t buffer[10]; - size_t size = sizeof(buffer); - - if (!read_raw_value(stream, wire_type, buffer, &size)) - return false; - substream = pb_istream_from_buffer(buffer, size); - - return pCallback->funcs.decode(&substream, iter->pos, arg); - } -} - -static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ -#ifdef PB_ENABLE_MALLOC - /* When decoding an oneof field, check if there is old data that must be - * released first. */ - if (PB_HTYPE(iter->pos->type) == PB_HTYPE_ONEOF) - { - if (!pb_release_union_field(stream, iter)) - return false; - } -#endif - - switch (PB_ATYPE(iter->pos->type)) - { - case PB_ATYPE_STATIC: - return decode_static_field(stream, wire_type, iter); - - case PB_ATYPE_POINTER: - return decode_pointer_field(stream, wire_type, iter); - - case PB_ATYPE_CALLBACK: - return decode_callback_field(stream, wire_type, iter); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -static void iter_from_extension(pb_field_iter_t *iter, pb_extension_t *extension) -{ - /* Fake a field iterator for the extension field. - * It is not actually safe to advance this iterator, but decode_field - * will not even try to. */ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - (void)pb_field_iter_begin(iter, field, extension->dest); - iter->pData = extension->dest; - iter->pSize = &extension->found; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { - /* For pointer extensions, the pointer is stored directly - * in the extension structure. This avoids having an extra - * indirection. */ - iter->pData = &extension->dest; - } -} - -/* Default handler for extension fields. Expects a pb_field_t structure - * in extension->type->arg. */ -static bool checkreturn default_extension_decoder(pb_istream_t *stream, - pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type) -{ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - pb_field_iter_t iter; - - if (field->tag != tag) - return true; - - iter_from_extension(&iter, extension); - extension->found = true; - return decode_field(stream, wire_type, &iter); -} - -/* Try to decode an unknown field as an extension field. Tries each extension - * decoder in turn, until one of them handles the field or loop ends. */ -static bool checkreturn decode_extension(pb_istream_t *stream, - uint32_t tag, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ - pb_extension_t *extension = *(pb_extension_t* const *)iter->pData; - size_t pos = stream->bytes_left; - - while (extension != NULL && pos == stream->bytes_left) - { - bool status; - if (extension->type->decode) - status = extension->type->decode(stream, extension, tag, wire_type); - else - status = default_extension_decoder(stream, extension, tag, wire_type); - - if (!status) - return false; - - extension = extension->next; - } - - return true; -} - -/* Step through the iterator until an extension field is found or until all - * entries have been checked. There can be only one extension field per - * message. Returns false if no extension field is found. */ -static bool checkreturn find_extension_field(pb_field_iter_t *iter) -{ - const pb_field_t *start = iter->pos; - - do { - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_EXTENSION) - return true; - (void)pb_field_iter_next(iter); - } while (iter->pos != start); - - return false; -} - -/* Initialize message fields to default values, recursively */ -static void pb_field_set_to_default(pb_field_iter_t *iter) -{ - pb_type_t type; - type = iter->pos->type; - - if (PB_LTYPE(type) == PB_LTYPE_EXTENSION) - { - pb_extension_t *ext = *(pb_extension_t* const *)iter->pData; - while (ext != NULL) - { - pb_field_iter_t ext_iter; - ext->found = false; - iter_from_extension(&ext_iter, ext); - pb_field_set_to_default(&ext_iter); - ext = ext->next; - } - } - else if (PB_ATYPE(type) == PB_ATYPE_STATIC) - { - bool init_data = true; - if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL && iter->pSize != iter->pData) - { - /* Set has_field to false. Still initialize the optional field - * itself also. */ - *(bool*)iter->pSize = false; - } - else if (PB_HTYPE(type) == PB_HTYPE_REPEATED || - PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - /* REPEATED: Set array count to 0, no need to initialize contents. - ONEOF: Set which_field to 0. */ - *(pb_size_t*)iter->pSize = 0; - init_data = false; - } - - if (init_data) - { - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_SUBMESSAGE) - { - /* Initialize submessage to defaults */ - pb_message_set_to_defaults((const pb_field_t *) iter->pos->ptr, iter->pData); - } - else if (iter->pos->ptr != NULL) - { - /* Initialize to default value */ - memcpy(iter->pData, iter->pos->ptr, iter->pos->data_size); - } - else - { - /* Initialize to zeros */ - memset(iter->pData, 0, iter->pos->data_size); - } - } - } - else if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - /* Initialize the pointer to NULL. */ - *(void**)iter->pData = NULL; - - /* Initialize array count to 0. */ - if (PB_HTYPE(type) == PB_HTYPE_REPEATED || - PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - *(pb_size_t*)iter->pSize = 0; - } - } - else if (PB_ATYPE(type) == PB_ATYPE_CALLBACK) - { - /* Don't overwrite callback */ - } -} - -static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_struct) -{ - pb_field_iter_t iter; - - if (!pb_field_iter_begin(&iter, fields, dest_struct)) - return; /* Empty message type */ - - do - { - pb_field_set_to_default(&iter); - } while (pb_field_iter_next(&iter)); -} - -/********************* - * Decode all fields * - *********************/ - -bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - uint32_t fields_seen[(PB_MAX_REQUIRED_FIELDS + 31) / 32] = {0, 0}; - const uint32_t allbits = ~(uint32_t)0; - uint32_t extension_range_start = 0; - pb_field_iter_t iter; - - /* Return value ignored, as empty message types will be correctly handled by - * pb_field_iter_find() anyway. */ - (void)pb_field_iter_begin(&iter, fields, dest_struct); - - while (stream->bytes_left) - { - uint32_t tag; - pb_wire_type_t wire_type; - bool eof; - - if (!pb_decode_tag(stream, &wire_type, &tag, &eof)) - { - if (eof) - break; - else - return false; - } - - if (!pb_field_iter_find(&iter, tag)) - { - /* No match found, check if it matches an extension. */ - if (tag >= extension_range_start) - { - if (!find_extension_field(&iter)) - extension_range_start = (uint32_t)-1; - else - extension_range_start = iter.pos->tag; - - if (tag >= extension_range_start) - { - size_t pos = stream->bytes_left; - - if (!decode_extension(stream, tag, wire_type, &iter)) - return false; - - if (pos != stream->bytes_left) - { - /* The field was handled */ - continue; - } - } - } - - /* No match found, skip data */ - if (!pb_skip_field(stream, wire_type)) - return false; - continue; - } - - if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REQUIRED - && iter.required_field_index < PB_MAX_REQUIRED_FIELDS) - { - uint32_t tmp = ((uint32_t)1 << (iter.required_field_index & 31)); - fields_seen[iter.required_field_index >> 5] |= tmp; - } - - if (!decode_field(stream, wire_type, &iter)) - return false; - } - - /* Check that all required fields were present. */ - { - /* First figure out the number of required fields by - * seeking to the end of the field array. Usually we - * are already close to end after decoding. - */ - unsigned req_field_count; - pb_type_t last_type; - unsigned i; - do { - req_field_count = iter.required_field_index; - last_type = iter.pos->type; - } while (pb_field_iter_next(&iter)); - - /* Fixup if last field was also required. */ - if (PB_HTYPE(last_type) == PB_HTYPE_REQUIRED && iter.pos->tag != 0) - req_field_count++; - - if (req_field_count > 0) - { - /* Check the whole words */ - for (i = 0; i < (req_field_count >> 5); i++) - { - if (fields_seen[i] != allbits) - PB_RETURN_ERROR(stream, "missing required field"); - } - - /* Check the remaining bits */ - if (fields_seen[req_field_count >> 5] != (allbits >> (32 - (req_field_count & 31)))) - PB_RETURN_ERROR(stream, "missing required field"); - } - } - - return true; -} - -bool checkreturn pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - bool status; - pb_message_set_to_defaults(fields, dest_struct); - status = pb_decode_noinit(stream, fields, dest_struct); - -#ifdef PB_ENABLE_MALLOC - if (!status) - pb_release(fields, dest_struct); -#endif - - return status; -} - -bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - pb_istream_t substream; - bool status; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - status = pb_decode(&substream, fields, dest_struct); - - if (!pb_close_string_substream(stream, &substream)) - return false; - return status; -} - -#ifdef PB_ENABLE_MALLOC -/* Given an oneof field, if there has already been a field inside this oneof, - * release it before overwriting with a different one. */ -static bool pb_release_union_field(pb_istream_t *stream, pb_field_iter_t *iter) -{ - pb_size_t old_tag = *(pb_size_t*)iter->pSize; /* Previous which_ value */ - pb_size_t new_tag = iter->pos->tag; /* New which_ value */ - - if (old_tag == 0) - return true; /* Ok, no old data in union */ - - if (old_tag == new_tag) - return true; /* Ok, old data is of same type => merge */ - - /* Release old data. The find can fail if the message struct contains - * invalid data. */ - if (!pb_field_iter_find(iter, old_tag)) - PB_RETURN_ERROR(stream, "invalid union tag"); - - pb_release_single_field(iter); - - /* Restore iterator to where it should be. - * This shouldn't fail unless the pb_field_t structure is corrupted. */ - if (!pb_field_iter_find(iter, new_tag)) - PB_RETURN_ERROR(stream, "iterator error"); - - return true; -} - -static void pb_release_single_field(const pb_field_iter_t *iter) -{ - pb_type_t type; - type = iter->pos->type; - - if (PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - if (*(pb_size_t*)iter->pSize != iter->pos->tag) - return; /* This is not the current field in the union */ - } - - /* Release anything contained inside an extension or submsg. - * This has to be done even if the submsg itself is statically - * allocated. */ - if (PB_LTYPE(type) == PB_LTYPE_EXTENSION) - { - /* Release fields from all extensions in the linked list */ - pb_extension_t *ext = *(pb_extension_t**)iter->pData; - while (ext != NULL) - { - pb_field_iter_t ext_iter; - iter_from_extension(&ext_iter, ext); - pb_release_single_field(&ext_iter); - ext = ext->next; - } - } - else if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE) - { - /* Release fields in submessage or submsg array */ - void *pItem = iter->pData; - pb_size_t count = 1; - - if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - pItem = *(void**)iter->pData; - } - - if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - count = *(pb_size_t*)iter->pSize; - - if (PB_ATYPE(type) == PB_ATYPE_STATIC && count > iter->pos->array_size) - { - /* Protect against corrupted _count fields */ - count = iter->pos->array_size; - } - } - - if (pItem) - { - while (count--) - { - pb_release((const pb_field_t*)iter->pos->ptr, pItem); - pItem = (char*)pItem + iter->pos->data_size; - } - } - } - - if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - if (PB_HTYPE(type) == PB_HTYPE_REPEATED && - (PB_LTYPE(type) == PB_LTYPE_STRING || - PB_LTYPE(type) == PB_LTYPE_BYTES)) - { - /* Release entries in repeated string or bytes array */ - void **pItem = *(void***)iter->pData; - pb_size_t count = *(pb_size_t*)iter->pSize; - while (count--) - { - pb_free(*pItem); - *pItem++ = NULL; - } - } - - if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - /* We are going to release the array, so set the size to 0 */ - *(pb_size_t*)iter->pSize = 0; - } - - /* Release main item */ - pb_free(*(void**)iter->pData); - *(void**)iter->pData = NULL; - } -} - -void pb_release(const pb_field_t fields[], void *dest_struct) -{ - pb_field_iter_t iter; - - if (!dest_struct) - return; /* Ignore NULL pointers, similar to free() */ - - if (!pb_field_iter_begin(&iter, fields, dest_struct)) - return; /* Empty message type */ - - do - { - pb_release_single_field(&iter); - } while (pb_field_iter_next(&iter)); -} -#endif - -/* Field decoders */ - -bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest) -{ - uint64_t value; - if (!pb_decode_varint(stream, &value)) - return false; - - if (value & 1) - *dest = (int64_t)(~(value >> 1)); - else - *dest = (int64_t)(value >> 1); - - return true; -} - -bool pb_decode_fixed32(pb_istream_t *stream, void *dest) -{ - pb_byte_t bytes[4]; - - if (!pb_read(stream, bytes, 4)) - return false; - - *(uint32_t*)dest = ((uint32_t)bytes[0] << 0) | - ((uint32_t)bytes[1] << 8) | - ((uint32_t)bytes[2] << 16) | - ((uint32_t)bytes[3] << 24); - return true; -} - -bool pb_decode_fixed64(pb_istream_t *stream, void *dest) -{ - pb_byte_t bytes[8]; - - if (!pb_read(stream, bytes, 8)) - return false; - - *(uint64_t*)dest = ((uint64_t)bytes[0] << 0) | - ((uint64_t)bytes[1] << 8) | - ((uint64_t)bytes[2] << 16) | - ((uint64_t)bytes[3] << 24) | - ((uint64_t)bytes[4] << 32) | - ((uint64_t)bytes[5] << 40) | - ((uint64_t)bytes[6] << 48) | - ((uint64_t)bytes[7] << 56); - - return true; -} - -static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint64_t value; - int64_t svalue; - int64_t clamped; - if (!pb_decode_varint(stream, &value)) - return false; - - /* See issue 97: Google's C++ protobuf allows negative varint values to - * be cast as int32_t, instead of the int64_t that should be used when - * encoding. Previous nanopb versions had a bug in encoding. In order to - * not break decoding of such messages, we cast <=32 bit fields to - * int32_t first to get the sign correct. - */ - if (field->data_size == sizeof(int64_t)) - svalue = (int64_t)value; - else - svalue = (int32_t)value; - - /* Cast to the proper field size, while checking for overflows */ - if (field->data_size == sizeof(int64_t)) - clamped = *(int64_t*)dest = svalue; - else if (field->data_size == sizeof(int32_t)) - clamped = *(int32_t*)dest = (int32_t)svalue; - else if (field->data_size == sizeof(int_least16_t)) - clamped = *(int_least16_t*)dest = (int_least16_t)svalue; - else if (field->data_size == sizeof(int_least8_t)) - clamped = *(int_least8_t*)dest = (int_least8_t)svalue; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - if (clamped != svalue) - PB_RETURN_ERROR(stream, "integer too large"); - - return true; -} - -static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint64_t value, clamped; - if (!pb_decode_varint(stream, &value)) - return false; - - /* Cast to the proper field size, while checking for overflows */ - if (field->data_size == sizeof(uint64_t)) - clamped = *(uint64_t*)dest = value; - else if (field->data_size == sizeof(uint32_t)) - clamped = *(uint32_t*)dest = (uint32_t)value; - else if (field->data_size == sizeof(uint_least16_t)) - clamped = *(uint_least16_t*)dest = (uint_least16_t)value; - else if (field->data_size == sizeof(uint_least8_t)) - clamped = *(uint_least8_t*)dest = (uint_least8_t)value; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - if (clamped != value) - PB_RETURN_ERROR(stream, "integer too large"); - - return true; -} - -static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - int64_t value, clamped; - if (!pb_decode_svarint(stream, &value)) - return false; - - /* Cast to the proper field size, while checking for overflows */ - if (field->data_size == sizeof(int64_t)) - clamped = *(int64_t*)dest = value; - else if (field->data_size == sizeof(int32_t)) - clamped = *(int32_t*)dest = (int32_t)value; - else if (field->data_size == sizeof(int_least16_t)) - clamped = *(int_least16_t*)dest = (int_least16_t)value; - else if (field->data_size == sizeof(int_least8_t)) - clamped = *(int_least8_t*)dest = (int_least8_t)value; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - if (clamped != value) - PB_RETURN_ERROR(stream, "integer too large"); - - return true; -} - -static bool checkreturn pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - PB_UNUSED(field); - return pb_decode_fixed32(stream, dest); -} - -static bool checkreturn pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - PB_UNUSED(field); - return pb_decode_fixed64(stream, dest); -} - -static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - size_t alloc_size; - pb_bytes_array_t *bdest; - - if (!pb_decode_varint32(stream, &size)) - return false; - - if (size > PB_SIZE_MAX) - PB_RETURN_ERROR(stream, "bytes overflow"); - - alloc_size = PB_BYTES_ARRAY_T_ALLOCSIZE(size); - if (size > alloc_size) - PB_RETURN_ERROR(stream, "size too large"); - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { -#ifndef PB_ENABLE_MALLOC - PB_RETURN_ERROR(stream, "no malloc support"); -#else - if (!allocate_field(stream, dest, alloc_size, 1)) - return false; - bdest = *(pb_bytes_array_t**)dest; -#endif - } - else - { - if (alloc_size > field->data_size) - PB_RETURN_ERROR(stream, "bytes overflow"); - bdest = (pb_bytes_array_t*)dest; - } - - bdest->size = (pb_size_t)size; - return pb_read(stream, bdest->bytes, size); -} - -static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - size_t alloc_size; - bool status; - if (!pb_decode_varint32(stream, &size)) - return false; - - /* Space for null terminator */ - alloc_size = size + 1; - - if (alloc_size < size) - PB_RETURN_ERROR(stream, "size too large"); - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { -#ifndef PB_ENABLE_MALLOC - PB_RETURN_ERROR(stream, "no malloc support"); -#else - if (!allocate_field(stream, dest, alloc_size, 1)) - return false; - dest = *(void**)dest; -#endif - } - else - { - if (alloc_size > field->data_size) - PB_RETURN_ERROR(stream, "string overflow"); - } - - status = pb_read(stream, (pb_byte_t*)dest, size); - *((pb_byte_t*)dest + size) = 0; - return status; -} - -static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - bool status; - pb_istream_t substream; - const pb_field_t* submsg_fields = (const pb_field_t*)field->ptr; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - if (field->ptr == NULL) - PB_RETURN_ERROR(stream, "invalid field descriptor"); - - /* New array entries need to be initialized, while required and optional - * submessages have already been initialized in the top-level pb_decode. */ - if (PB_HTYPE(field->type) == PB_HTYPE_REPEATED) - status = pb_decode(&substream, submsg_fields, dest); - else - status = pb_decode_noinit(&substream, submsg_fields, dest); - - if (!pb_close_string_substream(stream, &substream)) - return false; - return status; -} - -static bool checkreturn pb_dec_fixed_length_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - - if (!pb_decode_varint32(stream, &size)) - return false; - - if (size > PB_SIZE_MAX) - PB_RETURN_ERROR(stream, "bytes overflow"); - - if (size == 0) - { - /* As a special case, treat empty bytes string as all zeros for fixed_length_bytes. */ - memset(dest, 0, field->data_size); - return true; - } - - if (size != field->data_size) - PB_RETURN_ERROR(stream, "incorrect fixed length bytes size"); - - return pb_read(stream, (pb_byte_t*)dest, field->data_size); -} diff --git a/StoneIsland/platforms/ios/Pods/nanopb/pb_decode.h b/StoneIsland/platforms/ios/Pods/nanopb/pb_decode.h deleted file mode 100644 index a426bdd7..00000000 --- a/StoneIsland/platforms/ios/Pods/nanopb/pb_decode.h +++ /dev/null @@ -1,153 +0,0 @@ -/* pb_decode.h: Functions to decode protocol buffers. Depends on pb_decode.c. - * The main function is pb_decode. You also need an input stream, and the - * field descriptions created by nanopb_generator.py. - */ - -#ifndef PB_DECODE_H_INCLUDED -#define PB_DECODE_H_INCLUDED - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Structure for defining custom input streams. You will need to provide - * a callback function to read the bytes from your storage, which can be - * for example a file or a network socket. - * - * The callback must conform to these rules: - * - * 1) Return false on IO errors. This will cause decoding to abort. - * 2) You can use state to store your own data (e.g. buffer pointer), - * and rely on pb_read to verify that no-body reads past bytes_left. - * 3) Your callback may be used with substreams, in which case bytes_left - * is different than from the main stream. Don't use bytes_left to compute - * any pointers. - */ -struct pb_istream_s -{ -#ifdef PB_BUFFER_ONLY - /* Callback pointer is not used in buffer-only configuration. - * Having an int pointer here allows binary compatibility but - * gives an error if someone tries to assign callback function. - */ - int *callback; -#else - bool (*callback)(pb_istream_t *stream, pb_byte_t *buf, size_t count); -#endif - - void *state; /* Free field for use by callback implementation */ - size_t bytes_left; - -#ifndef PB_NO_ERRMSG - const char *errmsg; -#endif -}; - -/*************************** - * Main decoding functions * - ***************************/ - -/* Decode a single protocol buffers message from input stream into a C structure. - * Returns true on success, false on any failure. - * The actual struct pointed to by dest must match the description in fields. - * Callback fields of the destination structure must be initialized by caller. - * All other fields will be initialized by this function. - * - * Example usage: - * MyMessage msg = {}; - * uint8_t buffer[64]; - * pb_istream_t stream; - * - * // ... read some data into buffer ... - * - * stream = pb_istream_from_buffer(buffer, count); - * pb_decode(&stream, MyMessage_fields, &msg); - */ -bool pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode, except does not initialize the destination structure - * to default values. This is slightly faster if you need no default values - * and just do memset(struct, 0, sizeof(struct)) yourself. - * - * This can also be used for 'merging' two messages, i.e. update only the - * fields that exist in the new message. - * - * Note: If this function returns with an error, it will not release any - * dynamically allocated fields. You will need to call pb_release() yourself. - */ -bool pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode, except expects the stream to start with the message size - * encoded as varint. Corresponds to parseDelimitedFrom() in Google's - * protobuf API. - */ -bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -#ifdef PB_ENABLE_MALLOC -/* Release any allocated pointer fields. If you use dynamic allocation, you should - * call this for any successfully decoded message when you are done with it. If - * pb_decode() returns with an error, the message is already released. - */ -void pb_release(const pb_field_t fields[], void *dest_struct); -#endif - - -/************************************** - * Functions for manipulating streams * - **************************************/ - -/* Create an input stream for reading from a memory buffer. - * - * Alternatively, you can use a custom stream that reads directly from e.g. - * a file or a network socket. - */ -pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize); - -/* Function to read from a pb_istream_t. You can use this if you need to - * read some custom header data, or to read data in field callbacks. - */ -bool pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count); - - -/************************************************ - * Helper functions for writing field callbacks * - ************************************************/ - -/* Decode the tag for the next field in the stream. Gives the wire type and - * field tag. At end of the message, returns false and sets eof to true. */ -bool pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof); - -/* Skip the field payload data, given the wire type. */ -bool pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type); - -/* Decode an integer in the varint format. This works for bool, enum, int32, - * int64, uint32 and uint64 field types. */ -bool pb_decode_varint(pb_istream_t *stream, uint64_t *dest); - -/* Decode an integer in the varint format. This works for bool, enum, int32, - * and uint32 field types. */ -bool pb_decode_varint32(pb_istream_t *stream, uint32_t *dest); - -/* Decode an integer in the zig-zagged svarint format. This works for sint32 - * and sint64. */ -bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest); - -/* Decode a fixed32, sfixed32 or float value. You need to pass a pointer to - * a 4-byte wide C variable. */ -bool pb_decode_fixed32(pb_istream_t *stream, void *dest); - -/* Decode a fixed64, sfixed64 or double value. You need to pass a pointer to - * a 8-byte wide C variable. */ -bool pb_decode_fixed64(pb_istream_t *stream, void *dest); - -/* Make a limited-length substream for reading a PB_WT_STRING field. */ -bool pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream); -bool pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/StoneIsland/platforms/ios/Pods/nanopb/pb_encode.c b/StoneIsland/platforms/ios/Pods/nanopb/pb_encode.c deleted file mode 100644 index 30f60d83..00000000 --- a/StoneIsland/platforms/ios/Pods/nanopb/pb_encode.c +++ /dev/null @@ -1,777 +0,0 @@ -/* pb_encode.c -- encode a protobuf using minimal resources - * - * 2011 Petteri Aimonen <jpa@kapsi.fi> - */ - -#include "pb.h" -#include "pb_encode.h" -#include "pb_common.h" - -/* Use the GCC warn_unused_result attribute to check that all return values - * are propagated correctly. On other compilers and gcc before 3.4.0 just - * ignore the annotation. - */ -#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) - #define checkreturn -#else - #define checkreturn __attribute__((warn_unused_result)) -#endif - -/************************************** - * Declarations internal to this file * - **************************************/ -typedef bool (*pb_encoder_t)(pb_ostream_t *stream, const pb_field_t *field, const void *src) checkreturn; - -static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count); -static bool checkreturn encode_array(pb_ostream_t *stream, const pb_field_t *field, const void *pData, size_t count, pb_encoder_t func); -static bool checkreturn encode_field(pb_ostream_t *stream, const pb_field_t *field, const void *pData); -static bool checkreturn default_extension_encoder(pb_ostream_t *stream, const pb_extension_t *extension); -static bool checkreturn encode_extension_field(pb_ostream_t *stream, const pb_field_t *field, const void *pData); -static void *pb_const_cast(const void *p); -static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_uvarint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src); - -/* --- Function pointers to field encoders --- - * Order in the array must match pb_action_t LTYPE numbering. - */ -static const pb_encoder_t PB_ENCODERS[PB_LTYPES_COUNT] = { - &pb_enc_varint, - &pb_enc_uvarint, - &pb_enc_svarint, - &pb_enc_fixed32, - &pb_enc_fixed64, - - &pb_enc_bytes, - &pb_enc_string, - &pb_enc_submessage, - NULL, /* extensions */ - &pb_enc_fixed_length_bytes -}; - -/******************************* - * pb_ostream_t implementation * - *******************************/ - -static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count) -{ - size_t i; - pb_byte_t *dest = (pb_byte_t*)stream->state; - stream->state = dest + count; - - for (i = 0; i < count; i++) - dest[i] = buf[i]; - - return true; -} - -pb_ostream_t pb_ostream_from_buffer(pb_byte_t *buf, size_t bufsize) -{ - pb_ostream_t stream; -#ifdef PB_BUFFER_ONLY - stream.callback = (void*)1; /* Just a marker value */ -#else - stream.callback = &buf_write; -#endif - stream.state = buf; - stream.max_size = bufsize; - stream.bytes_written = 0; -#ifndef PB_NO_ERRMSG - stream.errmsg = NULL; -#endif - return stream; -} - -bool checkreturn pb_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count) -{ - if (stream->callback != NULL) - { - if (stream->bytes_written + count > stream->max_size) - PB_RETURN_ERROR(stream, "stream full"); - -#ifdef PB_BUFFER_ONLY - if (!buf_write(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#else - if (!stream->callback(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#endif - } - - stream->bytes_written += count; - return true; -} - -/************************* - * Encode a single field * - *************************/ - -/* Encode a static array. Handles the size calculations and possible packing. */ -static bool checkreturn encode_array(pb_ostream_t *stream, const pb_field_t *field, - const void *pData, size_t count, pb_encoder_t func) -{ - size_t i; - const void *p; - size_t size; - - if (count == 0) - return true; - - if (PB_ATYPE(field->type) != PB_ATYPE_POINTER && count > field->array_size) - PB_RETURN_ERROR(stream, "array max size exceeded"); - - /* We always pack arrays if the datatype allows it. */ - if (PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE) - { - if (!pb_encode_tag(stream, PB_WT_STRING, field->tag)) - return false; - - /* Determine the total size of packed array. */ - if (PB_LTYPE(field->type) == PB_LTYPE_FIXED32) - { - size = 4 * count; - } - else if (PB_LTYPE(field->type) == PB_LTYPE_FIXED64) - { - size = 8 * count; - } - else - { - pb_ostream_t sizestream = PB_OSTREAM_SIZING; - p = pData; - for (i = 0; i < count; i++) - { - if (!func(&sizestream, field, p)) - return false; - p = (const char*)p + field->data_size; - } - size = sizestream.bytes_written; - } - - if (!pb_encode_varint(stream, (uint64_t)size)) - return false; - - if (stream->callback == NULL) - return pb_write(stream, NULL, size); /* Just sizing.. */ - - /* Write the data */ - p = pData; - for (i = 0; i < count; i++) - { - if (!func(stream, field, p)) - return false; - p = (const char*)p + field->data_size; - } - } - else - { - p = pData; - for (i = 0; i < count; i++) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - /* Normally the data is stored directly in the array entries, but - * for pointer-type string and bytes fields, the array entries are - * actually pointers themselves also. So we have to dereference once - * more to get to the actual data. */ - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER && - (PB_LTYPE(field->type) == PB_LTYPE_STRING || - PB_LTYPE(field->type) == PB_LTYPE_BYTES)) - { - if (!func(stream, field, *(const void* const*)p)) - return false; - } - else - { - if (!func(stream, field, p)) - return false; - } - p = (const char*)p + field->data_size; - } - } - - return true; -} - -/* In proto3, all fields are optional and are only encoded if their value is "non-zero". - * This function implements the check for the zero value. */ -static bool pb_check_proto3_default_value(const pb_field_t *field, const void *pData) -{ - if (PB_ATYPE(field->type) == PB_ATYPE_STATIC) - { - if (PB_LTYPE(field->type) == PB_LTYPE_BYTES) - { - const pb_bytes_array_t *bytes = (const pb_bytes_array_t*)pData; - return bytes->size == 0; - } - else if (PB_LTYPE(field->type) == PB_LTYPE_STRING) - { - return *(const char*)pData == '\0'; - } - else if (PB_LTYPE(field->type) == PB_LTYPE_FIXED_LENGTH_BYTES) - { - /* Fixed length bytes is only empty if its length is fixed - * as 0. Which would be pretty strange, but we can check - * it anyway. */ - return field->data_size == 0; - } - else if (PB_LTYPE(field->type) == PB_LTYPE_SUBMESSAGE) - { - /* Check all fields in the submessage to find if any of them - * are non-zero. The comparison cannot be done byte-per-byte - * because the C struct may contain padding bytes that must - * be skipped. - */ - pb_field_iter_t iter; - if (pb_field_iter_begin(&iter, (const pb_field_t*)field->ptr, pb_const_cast(pData))) - { - do - { - if (!pb_check_proto3_default_value(iter.pos, iter.pData)) - { - return false; - } - } while (pb_field_iter_next(&iter)); - } - return true; - } - } - - { - /* Catch-all branch that does byte-per-byte comparison for zero value. - * - * This is for all pointer fields, and for static PB_LTYPE_VARINT, - * UVARINT, SVARINT, FIXED32, FIXED64, EXTENSION fields, and also - * callback fields. These all have integer or pointer value which - * can be compared with 0. - */ - pb_size_t i; - const char *p = (const char*)pData; - for (i = 0; i < field->data_size; i++) - { - if (p[i] != 0) - { - return false; - } - } - - return true; - } -} - -/* Encode a field with static or pointer allocation, i.e. one whose data - * is available to the encoder directly. */ -static bool checkreturn encode_basic_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - pb_encoder_t func; - bool implicit_has; - const void *pSize = &implicit_has; - - func = PB_ENCODERS[PB_LTYPE(field->type)]; - - if (field->size_offset) - { - /* Static optional, repeated or oneof field */ - pSize = (const char*)pData + field->size_offset; - } - else if (PB_HTYPE(field->type) == PB_HTYPE_OPTIONAL) - { - /* Proto3 style field, optional but without explicit has_ field. */ - implicit_has = !pb_check_proto3_default_value(field, pData); - } - else - { - /* Required field, always present */ - implicit_has = true; - } - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { - /* pData is a pointer to the field, which contains pointer to - * the data. If the 2nd pointer is NULL, it is interpreted as if - * the has_field was false. - */ - pData = *(const void* const*)pData; - implicit_has = (pData != NULL); - } - - switch (PB_HTYPE(field->type)) - { - case PB_HTYPE_REQUIRED: - if (!pData) - PB_RETURN_ERROR(stream, "missing required field"); - if (!pb_encode_tag_for_field(stream, field)) - return false; - if (!func(stream, field, pData)) - return false; - break; - - case PB_HTYPE_OPTIONAL: - if (*(const bool*)pSize) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - if (!func(stream, field, pData)) - return false; - } - break; - - case PB_HTYPE_REPEATED: - if (!encode_array(stream, field, pData, *(const pb_size_t*)pSize, func)) - return false; - break; - - case PB_HTYPE_ONEOF: - if (*(const pb_size_t*)pSize == field->tag) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - if (!func(stream, field, pData)) - return false; - } - break; - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } - - return true; -} - -/* Encode a field with callback semantics. This means that a user function is - * called to provide and encode the actual data. */ -static bool checkreturn encode_callback_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - const pb_callback_t *callback = (const pb_callback_t*)pData; - -#ifdef PB_OLD_CALLBACK_STYLE - const void *arg = callback->arg; -#else - void * const *arg = &(callback->arg); -#endif - - if (callback->funcs.encode != NULL) - { - if (!callback->funcs.encode(stream, field, arg)) - PB_RETURN_ERROR(stream, "callback error"); - } - return true; -} - -/* Encode a single field of any callback or static type. */ -static bool checkreturn encode_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - switch (PB_ATYPE(field->type)) - { - case PB_ATYPE_STATIC: - case PB_ATYPE_POINTER: - return encode_basic_field(stream, field, pData); - - case PB_ATYPE_CALLBACK: - return encode_callback_field(stream, field, pData); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -/* Default handler for extension fields. Expects to have a pb_field_t - * pointer in the extension->type->arg field. */ -static bool checkreturn default_extension_encoder(pb_ostream_t *stream, - const pb_extension_t *extension) -{ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { - /* For pointer extensions, the pointer is stored directly - * in the extension structure. This avoids having an extra - * indirection. */ - return encode_field(stream, field, &extension->dest); - } - else - { - return encode_field(stream, field, extension->dest); - } -} - -/* Walk through all the registered extensions and give them a chance - * to encode themselves. */ -static bool checkreturn encode_extension_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - const pb_extension_t *extension = *(const pb_extension_t* const *)pData; - PB_UNUSED(field); - - while (extension) - { - bool status; - if (extension->type->encode) - status = extension->type->encode(stream, extension); - else - status = default_extension_encoder(stream, extension); - - if (!status) - return false; - - extension = extension->next; - } - - return true; -} - -/********************* - * Encode all fields * - *********************/ - -static void *pb_const_cast(const void *p) -{ - /* Note: this casts away const, in order to use the common field iterator - * logic for both encoding and decoding. */ - union { - void *p1; - const void *p2; - } t; - t.p2 = p; - return t.p1; -} - -bool checkreturn pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - pb_field_iter_t iter; - if (!pb_field_iter_begin(&iter, fields, pb_const_cast(src_struct))) - return true; /* Empty message type */ - - do { - if (PB_LTYPE(iter.pos->type) == PB_LTYPE_EXTENSION) - { - /* Special case for the extension field placeholder */ - if (!encode_extension_field(stream, iter.pos, iter.pData)) - return false; - } - else - { - /* Regular field */ - if (!encode_field(stream, iter.pos, iter.pData)) - return false; - } - } while (pb_field_iter_next(&iter)); - - return true; -} - -bool pb_encode_delimited(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - return pb_encode_submessage(stream, fields, src_struct); -} - -bool pb_get_encoded_size(size_t *size, const pb_field_t fields[], const void *src_struct) -{ - pb_ostream_t stream = PB_OSTREAM_SIZING; - - if (!pb_encode(&stream, fields, src_struct)) - return false; - - *size = stream.bytes_written; - return true; -} - -/******************** - * Helper functions * - ********************/ -bool checkreturn pb_encode_varint(pb_ostream_t *stream, uint64_t value) -{ - pb_byte_t buffer[10]; - size_t i = 0; - - if (value <= 0x7F) - { - pb_byte_t v = (pb_byte_t)value; - return pb_write(stream, &v, 1); - } - - while (value) - { - buffer[i] = (pb_byte_t)((value & 0x7F) | 0x80); - value >>= 7; - i++; - } - buffer[i-1] &= 0x7F; /* Unset top bit on last byte */ - - return pb_write(stream, buffer, i); -} - -bool checkreturn pb_encode_svarint(pb_ostream_t *stream, int64_t value) -{ - uint64_t zigzagged; - if (value < 0) - zigzagged = ~((uint64_t)value << 1); - else - zigzagged = (uint64_t)value << 1; - - return pb_encode_varint(stream, zigzagged); -} - -bool checkreturn pb_encode_fixed32(pb_ostream_t *stream, const void *value) -{ - uint32_t val = *(const uint32_t*)value; - pb_byte_t bytes[4]; - bytes[0] = (pb_byte_t)(val & 0xFF); - bytes[1] = (pb_byte_t)((val >> 8) & 0xFF); - bytes[2] = (pb_byte_t)((val >> 16) & 0xFF); - bytes[3] = (pb_byte_t)((val >> 24) & 0xFF); - return pb_write(stream, bytes, 4); -} - -bool checkreturn pb_encode_fixed64(pb_ostream_t *stream, const void *value) -{ - uint64_t val = *(const uint64_t*)value; - pb_byte_t bytes[8]; - bytes[0] = (pb_byte_t)(val & 0xFF); - bytes[1] = (pb_byte_t)((val >> 8) & 0xFF); - bytes[2] = (pb_byte_t)((val >> 16) & 0xFF); - bytes[3] = (pb_byte_t)((val >> 24) & 0xFF); - bytes[4] = (pb_byte_t)((val >> 32) & 0xFF); - bytes[5] = (pb_byte_t)((val >> 40) & 0xFF); - bytes[6] = (pb_byte_t)((val >> 48) & 0xFF); - bytes[7] = (pb_byte_t)((val >> 56) & 0xFF); - return pb_write(stream, bytes, 8); -} - -bool checkreturn pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number) -{ - uint64_t tag = ((uint64_t)field_number << 3) | wiretype; - return pb_encode_varint(stream, tag); -} - -bool checkreturn pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field) -{ - pb_wire_type_t wiretype; - switch (PB_LTYPE(field->type)) - { - case PB_LTYPE_VARINT: - case PB_LTYPE_UVARINT: - case PB_LTYPE_SVARINT: - wiretype = PB_WT_VARINT; - break; - - case PB_LTYPE_FIXED32: - wiretype = PB_WT_32BIT; - break; - - case PB_LTYPE_FIXED64: - wiretype = PB_WT_64BIT; - break; - - case PB_LTYPE_BYTES: - case PB_LTYPE_STRING: - case PB_LTYPE_SUBMESSAGE: - case PB_LTYPE_FIXED_LENGTH_BYTES: - wiretype = PB_WT_STRING; - break; - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } - - return pb_encode_tag(stream, wiretype, field->tag); -} - -bool checkreturn pb_encode_string(pb_ostream_t *stream, const pb_byte_t *buffer, size_t size) -{ - if (!pb_encode_varint(stream, (uint64_t)size)) - return false; - - return pb_write(stream, buffer, size); -} - -bool checkreturn pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - /* First calculate the message size using a non-writing substream. */ - pb_ostream_t substream = PB_OSTREAM_SIZING; - size_t size; - bool status; - - if (!pb_encode(&substream, fields, src_struct)) - { -#ifndef PB_NO_ERRMSG - stream->errmsg = substream.errmsg; -#endif - return false; - } - - size = substream.bytes_written; - - if (!pb_encode_varint(stream, (uint64_t)size)) - return false; - - if (stream->callback == NULL) - return pb_write(stream, NULL, size); /* Just sizing */ - - if (stream->bytes_written + size > stream->max_size) - PB_RETURN_ERROR(stream, "stream full"); - - /* Use a substream to verify that a callback doesn't write more than - * what it did the first time. */ - substream.callback = stream->callback; - substream.state = stream->state; - substream.max_size = size; - substream.bytes_written = 0; -#ifndef PB_NO_ERRMSG - substream.errmsg = NULL; -#endif - - status = pb_encode(&substream, fields, src_struct); - - stream->bytes_written += substream.bytes_written; - stream->state = substream.state; -#ifndef PB_NO_ERRMSG - stream->errmsg = substream.errmsg; -#endif - - if (substream.bytes_written != size) - PB_RETURN_ERROR(stream, "submsg size changed"); - - return status; -} - -/* Field encoders */ - -static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - int64_t value = 0; - - if (field->data_size == sizeof(int_least8_t)) - value = *(const int_least8_t*)src; - else if (field->data_size == sizeof(int_least16_t)) - value = *(const int_least16_t*)src; - else if (field->data_size == sizeof(int32_t)) - value = *(const int32_t*)src; - else if (field->data_size == sizeof(int64_t)) - value = *(const int64_t*)src; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - return pb_encode_varint(stream, (uint64_t)value); -} - -static bool checkreturn pb_enc_uvarint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - uint64_t value = 0; - - if (field->data_size == sizeof(uint_least8_t)) - value = *(const uint_least8_t*)src; - else if (field->data_size == sizeof(uint_least16_t)) - value = *(const uint_least16_t*)src; - else if (field->data_size == sizeof(uint32_t)) - value = *(const uint32_t*)src; - else if (field->data_size == sizeof(uint64_t)) - value = *(const uint64_t*)src; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - return pb_encode_varint(stream, value); -} - -static bool checkreturn pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - int64_t value = 0; - - if (field->data_size == sizeof(int_least8_t)) - value = *(const int_least8_t*)src; - else if (field->data_size == sizeof(int_least16_t)) - value = *(const int_least16_t*)src; - else if (field->data_size == sizeof(int32_t)) - value = *(const int32_t*)src; - else if (field->data_size == sizeof(int64_t)) - value = *(const int64_t*)src; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - return pb_encode_svarint(stream, value); -} - -static bool checkreturn pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - PB_UNUSED(field); - return pb_encode_fixed64(stream, src); -} - -static bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - PB_UNUSED(field); - return pb_encode_fixed32(stream, src); -} - -static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - const pb_bytes_array_t *bytes = NULL; - - bytes = (const pb_bytes_array_t*)src; - - if (src == NULL) - { - /* Treat null pointer as an empty bytes field */ - return pb_encode_string(stream, NULL, 0); - } - - if (PB_ATYPE(field->type) == PB_ATYPE_STATIC && - PB_BYTES_ARRAY_T_ALLOCSIZE(bytes->size) > field->data_size) - { - PB_RETURN_ERROR(stream, "bytes size exceeded"); - } - - return pb_encode_string(stream, bytes->bytes, bytes->size); -} - -static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - size_t size = 0; - size_t max_size = field->data_size; - const char *p = (const char*)src; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - max_size = (size_t)-1; - - if (src == NULL) - { - size = 0; /* Treat null pointer as an empty string */ - } - else - { - /* strnlen() is not always available, so just use a loop */ - while (size < max_size && *p != '\0') - { - size++; - p++; - } - } - - return pb_encode_string(stream, (const pb_byte_t*)src, size); -} - -static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - if (field->ptr == NULL) - PB_RETURN_ERROR(stream, "invalid field descriptor"); - - return pb_encode_submessage(stream, (const pb_field_t*)field->ptr, src); -} - -static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - return pb_encode_string(stream, (const pb_byte_t*)src, field->data_size); -} - diff --git a/StoneIsland/platforms/ios/Pods/nanopb/pb_encode.h b/StoneIsland/platforms/ios/Pods/nanopb/pb_encode.h deleted file mode 100644 index d9909fb0..00000000 --- a/StoneIsland/platforms/ios/Pods/nanopb/pb_encode.h +++ /dev/null @@ -1,154 +0,0 @@ -/* pb_encode.h: Functions to encode protocol buffers. Depends on pb_encode.c. - * The main function is pb_encode. You also need an output stream, and the - * field descriptions created by nanopb_generator.py. - */ - -#ifndef PB_ENCODE_H_INCLUDED -#define PB_ENCODE_H_INCLUDED - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Structure for defining custom output streams. You will need to provide - * a callback function to write the bytes to your storage, which can be - * for example a file or a network socket. - * - * The callback must conform to these rules: - * - * 1) Return false on IO errors. This will cause encoding to abort. - * 2) You can use state to store your own data (e.g. buffer pointer). - * 3) pb_write will update bytes_written after your callback runs. - * 4) Substreams will modify max_size and bytes_written. Don't use them - * to calculate any pointers. - */ -struct pb_ostream_s -{ -#ifdef PB_BUFFER_ONLY - /* Callback pointer is not used in buffer-only configuration. - * Having an int pointer here allows binary compatibility but - * gives an error if someone tries to assign callback function. - * Also, NULL pointer marks a 'sizing stream' that does not - * write anything. - */ - int *callback; -#else - bool (*callback)(pb_ostream_t *stream, const pb_byte_t *buf, size_t count); -#endif - void *state; /* Free field for use by callback implementation. */ - size_t max_size; /* Limit number of output bytes written (or use SIZE_MAX). */ - size_t bytes_written; /* Number of bytes written so far. */ - -#ifndef PB_NO_ERRMSG - const char *errmsg; -#endif -}; - -/*************************** - * Main encoding functions * - ***************************/ - -/* Encode a single protocol buffers message from C structure into a stream. - * Returns true on success, false on any failure. - * The actual struct pointed to by src_struct must match the description in fields. - * All required fields in the struct are assumed to have been filled in. - * - * Example usage: - * MyMessage msg = {}; - * uint8_t buffer[64]; - * pb_ostream_t stream; - * - * msg.field1 = 42; - * stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); - * pb_encode(&stream, MyMessage_fields, &msg); - */ -bool pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -/* Same as pb_encode, but prepends the length of the message as a varint. - * Corresponds to writeDelimitedTo() in Google's protobuf API. - */ -bool pb_encode_delimited(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -/* Encode the message to get the size of the encoded data, but do not store - * the data. */ -bool pb_get_encoded_size(size_t *size, const pb_field_t fields[], const void *src_struct); - -/************************************** - * Functions for manipulating streams * - **************************************/ - -/* Create an output stream for writing into a memory buffer. - * The number of bytes written can be found in stream.bytes_written after - * encoding the message. - * - * Alternatively, you can use a custom stream that writes directly to e.g. - * a file or a network socket. - */ -pb_ostream_t pb_ostream_from_buffer(pb_byte_t *buf, size_t bufsize); - -/* Pseudo-stream for measuring the size of a message without actually storing - * the encoded data. - * - * Example usage: - * MyMessage msg = {}; - * pb_ostream_t stream = PB_OSTREAM_SIZING; - * pb_encode(&stream, MyMessage_fields, &msg); - * printf("Message size is %d\n", stream.bytes_written); - */ -#ifndef PB_NO_ERRMSG -#define PB_OSTREAM_SIZING {0,0,0,0,0} -#else -#define PB_OSTREAM_SIZING {0,0,0,0} -#endif - -/* Function to write into a pb_ostream_t stream. You can use this if you need - * to append or prepend some custom headers to the message. - */ -bool pb_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count); - - -/************************************************ - * Helper functions for writing field callbacks * - ************************************************/ - -/* Encode field header based on type and field number defined in the field - * structure. Call this from the callback before writing out field contents. */ -bool pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field); - -/* Encode field header by manually specifing wire type. You need to use this - * if you want to write out packed arrays from a callback field. */ -bool pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number); - -/* Encode an integer in the varint format. - * This works for bool, enum, int32, int64, uint32 and uint64 field types. */ -bool pb_encode_varint(pb_ostream_t *stream, uint64_t value); - -/* Encode an integer in the zig-zagged svarint format. - * This works for sint32 and sint64. */ -bool pb_encode_svarint(pb_ostream_t *stream, int64_t value); - -/* Encode a string or bytes type field. For strings, pass strlen(s) as size. */ -bool pb_encode_string(pb_ostream_t *stream, const pb_byte_t *buffer, size_t size); - -/* Encode a fixed32, sfixed32 or float value. - * You need to pass a pointer to a 4-byte wide C variable. */ -bool pb_encode_fixed32(pb_ostream_t *stream, const void *value); - -/* Encode a fixed64, sfixed64 or double value. - * You need to pass a pointer to a 8-byte wide C variable. */ -bool pb_encode_fixed64(pb_ostream_t *stream, const void *value); - -/* Encode a submessage field. - * You need to pass the pb_field_t array and pointer to struct, just like - * with pb_encode(). This internally encodes the submessage twice, first to - * calculate message size and then to actually write it out. - */ -bool pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Info.plist b/StoneIsland/platforms/ios/Stone Island.xcarchive/Info.plist deleted file mode 100644 index a2fb2bab..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Info.plist +++ /dev/null @@ -1,27 +0,0 @@ -<?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>ApplicationProperties</key> - <dict> - <key>ApplicationPath</key> - <string>Applications/Stone Island.app</string> - <key>CFBundleIdentifier</key> - <string>us.okfoc.stoneisland</string> - <key>CFBundleShortVersionString</key> - <string>0.9.1</string> - <key>CFBundleVersion</key> - <string>0.9.1</string> - <key>SigningIdentity</key> - <string>iPhone Developer: Francesca Agusani (3ECUPBTQ5W)</string> - </dict> - <key>ArchiveVersion</key> - <integer>2</integer> - <key>CreationDate</key> - <date>2017-09-26T00:25:58Z</date> - <key>Name</key> - <string>Stone Island</string> - <key>SchemeName</key> - <string>Stone Island</string> -</dict> -</plist> diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29.png Binary files differdeleted file mode 100644 index 1bc2ef3a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29@2x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29@2x.png Binary files differdeleted file mode 100644 index f2b09580..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29@2x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29@2x~ipad.png Binary files differdeleted file mode 100644 index f2b09580..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29@3x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29@3x.png Binary files differdeleted file mode 100644 index cd9d0c5b..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29@3x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29~ipad.png Binary files differdeleted file mode 100644 index 1bc2ef3a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon29x29~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40@2x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40@2x.png Binary files differdeleted file mode 100644 index e8748382..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40@2x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40@2x~ipad.png Binary files differdeleted file mode 100644 index e8748382..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40@3x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40@3x.png Binary files differdeleted file mode 100644 index cce0af8d..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40@3x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40~ipad.png Binary files differdeleted file mode 100644 index 3fbeff4f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon40x40~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon50x50@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon50x50@2x~ipad.png Binary files differdeleted file mode 100644 index d57ee90d..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon50x50@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon50x50~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon50x50~ipad.png Binary files differdeleted file mode 100644 index e54ea306..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon50x50~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon57x57.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon57x57.png Binary files differdeleted file mode 100644 index 90da1bf7..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon57x57.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon57x57@2x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon57x57@2x.png Binary files differdeleted file mode 100644 index 43a52b41..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon57x57@2x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon60x60@2x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon60x60@2x.png Binary files differdeleted file mode 100644 index cce0af8d..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon60x60@2x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon60x60@3x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon60x60@3x.png Binary files differdeleted file mode 100644 index 77bf6c1d..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon60x60@3x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon72x72@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon72x72@2x~ipad.png Binary files differdeleted file mode 100644 index 3fad3673..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon72x72@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon72x72~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon72x72~ipad.png Binary files differdeleted file mode 100644 index 5b99b007..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon72x72~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon76x76@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon76x76@2x~ipad.png Binary files differdeleted file mode 100644 index 2ca4f28f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon76x76@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon76x76~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon76x76~ipad.png Binary files differdeleted file mode 100644 index 5a7a3184..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon76x76~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon83.5x83.5@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon83.5x83.5@2x~ipad.png Binary files differdeleted file mode 100644 index ba9b6287..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/AppIcon83.5x83.5@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/Assets.car b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/Assets.car Binary files differdeleted file mode 100644 index 7801cf64..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/Assets.car +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVLaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVLaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib Binary files differdeleted file mode 100644 index e336c7c1..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVLaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVLaunchScreen.storyboardc/Info.plist b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVLaunchScreen.storyboardc/Info.plist Binary files differdeleted file mode 100644 index 32288e88..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVLaunchScreen.storyboardc/Info.plist +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVLaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVLaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib Binary files differdeleted file mode 100644 index b14290ac..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVLaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVNotification.bundle/beep.wav b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVNotification.bundle/beep.wav Binary files differdeleted file mode 100644 index 05f5997f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/CDVNotification.bundle/beep.wav +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/Info.plist b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/Info.plist Binary files differdeleted file mode 100644 index 27ba8ec9..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/Info.plist +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-568h@2x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-568h@2x.png Binary files differdeleted file mode 100644 index 7fdd75b1..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-568h@2x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-568h@2x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-568h@2x.png Binary files differdeleted file mode 100644 index 7fdd75b1..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-568h@2x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Landscape@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Landscape@2x~ipad.png Binary files differdeleted file mode 100644 index ecd0e167..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Landscape@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Landscape~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Landscape~ipad.png Binary files differdeleted file mode 100644 index 2ff86bb6..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Landscape~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Portrait@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Portrait@2x~ipad.png Binary files differdeleted file mode 100644 index 9bcb4a4a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Portrait@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Portrait~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Portrait~ipad.png Binary files differdeleted file mode 100644 index 858c3509..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700-Portrait~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700@2x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700@2x.png Binary files differdeleted file mode 100644 index 26f77e6a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-700@2x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-800-667h@2x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-800-667h@2x.png Binary files differdeleted file mode 100644 index c98b2486..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-800-667h@2x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-800-Landscape-736h@3x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-800-Landscape-736h@3x.png Binary files differdeleted file mode 100644 index 7dfc309c..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-800-Landscape-736h@3x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-800-Portrait-736h@3x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-800-Portrait-736h@3x.png Binary files differdeleted file mode 100644 index d6561fd7..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-800-Portrait-736h@3x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-Portrait@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-Portrait@2x~ipad.png Binary files differdeleted file mode 100644 index 9bcb4a4a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-Portrait@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-Portrait~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-Portrait~ipad.png Binary files differdeleted file mode 100644 index 858c3509..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage-Portrait~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage.png Binary files differdeleted file mode 100644 index be1bd783..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage@2x.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage@2x.png Binary files differdeleted file mode 100644 index 26f77e6a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/LaunchImage@2x.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/MainViewController.nib b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/MainViewController.nib Binary files differdeleted file mode 100644 index a43f8f57..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/MainViewController.nib +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/PkgInfo b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/PkgInfo deleted file mode 100644 index bd04210f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/PkgInfo +++ /dev/null @@ -1 +0,0 @@ -APPL????
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/Stone Island b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/Stone Island Binary files differdeleted file mode 100755 index 177512d2..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/Stone Island +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/_CodeSignature/CodeResources b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/_CodeSignature/CodeResources deleted file mode 100644 index a3926777..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/_CodeSignature/CodeResources +++ /dev/null @@ -1,2810 +0,0 @@ -<?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>files</key> - <dict> - <key>AppIcon29x29.png</key> - <data> - Is6VLMY4XWleZkWcLbcHYvQLtEk= - </data> - <key>AppIcon29x29@2x.png</key> - <data> - 4gqvmmThxGuR+05NtIXr5Ppfu/I= - </data> - <key>AppIcon29x29@2x~ipad.png</key> - <data> - 4gqvmmThxGuR+05NtIXr5Ppfu/I= - </data> - <key>AppIcon29x29@3x.png</key> - <data> - 34x3jkHPlzEFjwiLm8KS7t+JvIY= - </data> - <key>AppIcon29x29~ipad.png</key> - <data> - Is6VLMY4XWleZkWcLbcHYvQLtEk= - </data> - <key>AppIcon40x40@2x.png</key> - <data> - LeIV1eZoNuUJDTs/qhgVylBiRzs= - </data> - <key>AppIcon40x40@2x~ipad.png</key> - <data> - LeIV1eZoNuUJDTs/qhgVylBiRzs= - </data> - <key>AppIcon40x40@3x.png</key> - <data> - qEWfmlsV73kzUbX2cXG+CfBLDa8= - </data> - <key>AppIcon40x40~ipad.png</key> - <data> - BfrJs8fg9gDZfCk3YmssJmOtgmk= - </data> - <key>AppIcon50x50@2x~ipad.png</key> - <data> - OzeMJWcikSMMGOVldVzY1Dlw+OY= - </data> - <key>AppIcon50x50~ipad.png</key> - <data> - EHAZVskQFYgH6vjOsUHwdujCUZ4= - </data> - <key>AppIcon57x57.png</key> - <data> - rQB+5Bku/vInsAJhWWsR17i00ko= - </data> - <key>AppIcon57x57@2x.png</key> - <data> - jB03yEyAL00AGpbq/ZXJzAFWMRY= - </data> - <key>AppIcon60x60@2x.png</key> - <data> - qEWfmlsV73kzUbX2cXG+CfBLDa8= - </data> - <key>AppIcon60x60@3x.png</key> - <data> - n6ptVnfuiunMFRI0tO58YCR5mUI= - </data> - <key>AppIcon72x72@2x~ipad.png</key> - <data> - Kud0eilmgIYWXUjRTVvvq77WfWc= - </data> - <key>AppIcon72x72~ipad.png</key> - <data> - bR9bIHiTC8lSBVHRxDzuC0WOKzs= - </data> - <key>AppIcon76x76@2x~ipad.png</key> - <data> - ucEjmUt3wRwY8ZsUGGPM+DCV3gY= - </data> - <key>AppIcon76x76~ipad.png</key> - <data> - uWdap5QW+re3BS+RMlQ8LQktl10= - </data> - <key>AppIcon83.5x83.5@2x~ipad.png</key> - <data> - X2Z6kGsoxHnLhCoBbeIhFHAScMs= - </data> - <key>Assets.car</key> - <data> - j3XIGS0AOWm9CN+7YAnMPPKdCcQ= - </data> - <key>CDVLaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib</key> - <data> - a/gMVEDo/igdesy9Qmqr41WM4j0= - </data> - <key>CDVLaunchScreen.storyboardc/Info.plist</key> - <data> - n2t8gsDpfE6XkhG31p7IQJRxTxU= - </data> - <key>CDVLaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib</key> - <data> - f0suWQT3Sw78SVx6bHgyDYepvdE= - </data> - <key>CDVNotification.bundle/beep.wav</key> - <data> - /kSUVvLLJcbtfXnxFEolil3/NRk= - </data> - <key>Info.plist</key> - <data> - 9iyiByBCxU6Y0jPNuBVBJOllumQ= - </data> - <key>LaunchImage-568h@2x.png</key> - <data> - O7BTaeYy02zZ5Z1Io4P9qbW0GhI= - </data> - <key>LaunchImage-700-568h@2x.png</key> - <data> - O7BTaeYy02zZ5Z1Io4P9qbW0GhI= - </data> - <key>LaunchImage-700-Landscape@2x~ipad.png</key> - <data> - EShK0rbY/hX73zQlYBPjN7j7V2k= - </data> - <key>LaunchImage-700-Landscape~ipad.png</key> - <data> - iGeMgwhUrOx2h8Ma1F2C3HUzRbk= - </data> - <key>LaunchImage-700-Portrait@2x~ipad.png</key> - <data> - otkRNyorWpU7SNgjZfOOUJGsySs= - </data> - <key>LaunchImage-700-Portrait~ipad.png</key> - <data> - WGypni7nsuVcJryGUSh+OL4RyKE= - </data> - <key>LaunchImage-700@2x.png</key> - <data> - yI6y+H/t6sdofwdf70F120ErFrE= - </data> - <key>LaunchImage-800-667h@2x.png</key> - <data> - 4tBfXaUz4b31BBqG6M0aS0WPOTM= - </data> - <key>LaunchImage-800-Landscape-736h@3x.png</key> - <data> - wwM/Q+MMTFzMHV8MKCAeCifpsRM= - </data> - <key>LaunchImage-800-Portrait-736h@3x.png</key> - <data> - MpK2Hes1RkoIUvQGNXsKHRLbHQM= - </data> - <key>LaunchImage-Portrait@2x~ipad.png</key> - <data> - otkRNyorWpU7SNgjZfOOUJGsySs= - </data> - <key>LaunchImage-Portrait~ipad.png</key> - <data> - WGypni7nsuVcJryGUSh+OL4RyKE= - </data> - <key>LaunchImage.png</key> - <data> - O8VNFJ4huf4alLfKtKkSKMHM88A= - </data> - <key>LaunchImage@2x.png</key> - <data> - yI6y+H/t6sdofwdf70F120ErFrE= - </data> - <key>MainViewController.nib</key> - <data> - cdyprXlG8Bp7k3NJZR96ikcFEI8= - </data> - <key>PkgInfo</key> - <data> - n57qDP4tZfLD1rCS43W0B4LQjzE= - </data> - <key>archived-expanded-entitlements.xcent</key> - <data> - uVC4UsEAjsaAorNMAW+mHUKgk9o= - </data> - <key>config.xml</key> - <data> - SQpapncz+hIueHEFmGTkBC0yseQ= - </data> - <key>embedded.mobileprovision</key> - <data> - 6a29fgIuenXjxvHTXPZvMubF7Mk= - </data> - <key>www/cordova-js-src/exec.js</key> - <data> - 3QDPaUQrAr8Wq2XcQhqcl8DLabQ= - </data> - <key>www/cordova-js-src/platform.js</key> - <data> - s+KdzB0mMHQsQQTAofDqS0ApWpY= - </data> - <key>www/cordova.js</key> - <data> - U5qD+h8czHzRSMNDeKZnVmgA3ao= - </data> - <key>www/cordova_plugins.js</key> - <data> - ZLiJikY3+FWToLfZjEmru0f7jFE= - </data> - <key>www/css/account.css</key> - <data> - iqX2jg1B1fMIoMZ9UDOmdeXY5R4= - </data> - <key>www/css/blogs.css</key> - <data> - uoDbpZ20pX9gG/U1j4RiYqBz1oc= - </data> - <key>www/css/cart.css</key> - <data> - f8AmevHsGVmWkazWNR/SkQ8ctDE= - </data> - <key>www/css/fonts/andale_mono.ttf</key> - <data> - LNdqAJjPnsKnT1GghSkYxImlFvQ= - </data> - <key>www/css/fonts/andale_mono.woff</key> - <data> - uOPMweytjo+6Egyqhu+4GdPmgq8= - </data> - <key>www/css/fonts/fonts.css</key> - <data> - NKnz6tasTlqoICSI4V4YlOeHVJM= - </data> - <key>www/css/fonts/ionicons.css</key> - <data> - gzPAFostLVCiwxkgMsSWmTe+A/c= - </data> - <key>www/css/fonts/ionicons.eot</key> - <data> - YVMuieIS+N0WujHz6881wKczQDU= - </data> - <key>www/css/fonts/ionicons.svg</key> - <data> - Pxyij8sELSvMbuak492BflEy7uo= - </data> - <key>www/css/fonts/ionicons.ttf</key> - <data> - GwoN4ISQWUaiAwDKjDVIZd7EZ2Q= - </data> - <key>www/css/fonts/ionicons.woff</key> - <data> - 5GgZ6GOkZ1HWIsEZDE6Kg+vCBhI= - </data> - <key>www/css/fonts/pfdintextpro-bold-webfont.woff</key> - <data> - mDYay3ArKzHK+mu3l0GGL7AJYI8= - </data> - <key>www/css/fonts/pfdintextpro-italic-webfont.woff</key> - <data> - gtSnNX5Vtd1JOciHX7Q2IGnhYEk= - </data> - <key>www/css/fonts/pfdintextpro-light-webfont.woff</key> - <data> - 2ZQAPshoOfFBipDEgccDh0IDokQ= - </data> - <key>www/css/fonts/pfdintextpro-medium-webfont.woff</key> - <data> - KyUoyPHWVunK8heDhzHDUKbf1VA= - </data> - <key>www/css/fonts/pfdintextpro-regular-webfont.woff</key> - <data> - zn1xFRXWNWSV7oJEL0mt+0JLjNE= - </data> - <key>www/css/index.css</key> - <data> - sS5Z897GbFcFtJaWKk9Ft6T/Vtg= - </data> - <key>www/css/nav.css</key> - <data> - tNCurPA7ni1EDWw/jvw9w67DpVU= - </data> - <key>www/css/products.css</key> - <data> - bY2IfaCUQ+Rz5riamQVF0rOVe6A= - </data> - <key>www/css/vendor/flickity.css</key> - <data> - xW5wsn/T/+uaGvIT+Sl9WY/IM2k= - </data> - <key>www/db.json</key> - <data> - FHbZPD9DyP+Prfwo3urgg0f3pwo= - </data> - <key>www/img/Resources/CDVNotification.bundle/beep.wav</key> - <data> - /kSUVvLLJcbtfXnxFEolil3/NRk= - </data> - <key>www/img/Resources/splash/Default-568h@2x~iphone.png</key> - <data> - J8BakinXs4g2c3rjIlkaUKc1m3k= - </data> - <key>www/img/Resources/splash/Default-667h.png</key> - <data> - KeM+qh3e57f5eeltxETo6kNL/lk= - </data> - <key>www/img/Resources/splash/Default-736h.png</key> - <data> - 5egepTM4V7rMvBkpkxUc8RAcJaI= - </data> - <key>www/img/Resources/splash/Default-Landscape-736h.png</key> - <data> - OakZWPocy5SHfGOIcwCCOoHVEqA= - </data> - <key>www/img/Resources/splash/Default-Landscape@2x~ipad.png</key> - <data> - q8VJZgMwFNZmWGD/Lf1/2KJt42c= - </data> - <key>www/img/Resources/splash/Default-Landscape~ipad.png</key> - <data> - PhNiOU4rbDZLXNv3olAhvfd9XQk= - </data> - <key>www/img/Resources/splash/Default-Portrait@2x~ipad.png</key> - <data> - CwZQXSzj9Gai0+MUt1mGzHuYO4U= - </data> - <key>www/img/Resources/splash/Default-Portrait~ipad.png</key> - <data> - ONniQfICjQTe8yPDO4mhWp9I2pM= - </data> - <key>www/img/Resources/splash/Default@2x~iphone.png</key> - <data> - uMF7RsyJGko7JaycVJ1sdu4hN/A= - </data> - <key>www/img/Resources/splash/Default~iphone.png</key> - <data> - btYS0PqHlIXDTLPf+7ZkA8uadDw= - </data> - <key>www/img/angle-down.png</key> - <data> - I9z7X0QqPVunkk2Pp6QVBfjF/Ug= - </data> - <key>www/img/bottom-fade.png</key> - <data> - doxZCcQch8Yt0UXMMvPBppxacg0= - </data> - <key>www/img/cart-box.png</key> - <data> - 76PMCjdfolbYk9wB0iPxqaLwpzk= - </data> - <key>www/img/cart-handle.png</key> - <data> - DIrmugvltD/RB0iy1latRCJGUec= - </data> - <key>www/img/compass-logo.png</key> - <data> - hO/U4zzOyjwTppKJ9FKI73NPrGU= - </data> - <key>www/img/compass-logo.png.old</key> - <data> - vwVmYayeHMzxccFD/TN328PqiVk= - </data> - <key>www/img/fade-to-bottom-threshold.gif</key> - <data> - GR0zpcR8KMByQIz2FFd4chj4bGE= - </data> - <key>www/img/fade-to-bottom.png</key> - <data> - doxZCcQch8Yt0UXMMvPBppxacg0= - </data> - <key>www/img/left-arrow.png</key> - <data> - gJa/2uVfymH2Yxi4/cvGN+OdrWM= - </data> - <key>www/img/right-arrow.png</key> - <data> - MSgmEvsEIKkviNZIWWCPJeKdJqY= - </data> - <key>www/img/small-cart-box.png</key> - <data> - DJxx7Sxv9HGOumgrHLmIk1YfW7c= - </data> - <key>www/img/small-cart-handle.png</key> - <data> - SlZeorPNUiYlNNv0UCnVXxyNZPc= - </data> - <key>www/img/small-logo.png</key> - <data> - FRbH5vLd9Z1i4k0dBsW+I5+g4qo= - </data> - <key>www/img/spinner.gif</key> - <data> - oEyz0SzCG90twGaMhPwiIjXakkg= - </data> - <key>www/img/wide-logo.png</key> - <data> - WJ/FbJfrZcN2Pg0w6S5c202hwSs= - </data> - <key>www/index.html</key> - <data> - 3y6+VOdsGYg9Yra+PEvciIC8teE= - </data> - <key>www/js/index.js</key> - <data> - C8DUPKVibVPQVD9HXKKoIuRguHw= - </data> - <key>www/js/lib/_router.js</key> - <data> - O4eZM5nyghVF7WELlWxgCniAfZc= - </data> - <key>www/js/lib/account/AccountView.js</key> - <data> - g8Rl32cI413Hgc7ish5t2vtrS9k= - </data> - <key>www/js/lib/account/OrdersView.js</key> - <data> - zEEbcESh8kYxm6fkztCPSUnjOLI= - </data> - <key>www/js/lib/account/PaymentView.js</key> - <data> - cSoU0cfID6oqM8fLFH19k6OQ9Mo= - </data> - <key>www/js/lib/account/ProfileView.js</key> - <data> - g81ByC4WQ4lAdrDltz7b/C/MqNY= - </data> - <key>www/js/lib/account/SettingsView.js</key> - <data> - hXT8T0eaN6o3ERCH5Ai1nMlVrQI= - </data> - <key>www/js/lib/account/ShippingView.js</key> - <data> - +2iaJJaoZoD+N0LlfGHz6WzH5FM= - </data> - <key>www/js/lib/auth/LoginView.js</key> - <data> - 2nZGYC2LOCDPymoAm3yBxHwgYgY= - </data> - <key>www/js/lib/auth/LogoutView.js</key> - <data> - jhf/Pzr8A/yk68t3W15g32q4eQ4= - </data> - <key>www/js/lib/auth/SignupView.js</key> - <data> - n92NvoUdaRUMNZmUVqMCg77V/tM= - </data> - <key>www/js/lib/blogs/ArchiveView.js</key> - <data> - 0MoYu/cf89T9Yj3/GqkxVS5Kn0s= - </data> - <key>www/js/lib/blogs/BlogView.js</key> - <data> - XZ57l39rkb5nXmank50SQ81rtds= - </data> - <key>www/js/lib/blogs/HubView.js</key> - <data> - 4oI73qy2Z5DyyiA8Kz+k1+9vLnQ= - </data> - <key>www/js/lib/blogs/PageView.js</key> - <data> - fnTO0QKgJ08PPNTrTuT+hgmLtqc= - </data> - <key>www/js/lib/blogs/StoryView.js</key> - <data> - 0uCBjGnwq8xsO5chZu/C1rGZ/SQ= - </data> - <key>www/js/lib/cart/CartConfirm.js</key> - <data> - jqryKPHj843xlpHaPq2On9mfaeM= - </data> - <key>www/js/lib/cart/CartError.js</key> - <data> - AeAnmVjk6HP4fhuICpuG8nHnFuI= - </data> - <key>www/js/lib/cart/CartPayment.js</key> - <data> - 4SLlztcXjDFBhv19I8bRmWhUyd0= - </data> - <key>www/js/lib/cart/CartShipping.js</key> - <data> - 8O97NpkLXlSPzbhrgsE/a0tIGuY= - </data> - <key>www/js/lib/cart/CartSummary.js</key> - <data> - YYiOPlDBi/ESvBJZ+bBt5ElQ254= - </data> - <key>www/js/lib/cart/CartThanks.js</key> - <data> - JOo957U9zyzfOkwPIJ7K0oMB5SA= - </data> - <key>www/js/lib/cart/CartView.js</key> - <data> - +kmEZ9ukx0LiHKArz7oWZyBZr/4= - </data> - <key>www/js/lib/etc/backup_db.js</key> - <data> - LS64v8X6RPikJtQ057nQlmza3m4= - </data> - <key>www/js/lib/etc/deeplink.js</key> - <data> - Xjr3J9pMm16R4X4Ez0w2889N4Is= - </data> - <key>www/js/lib/etc/geo.js</key> - <data> - xaQ5M8Pao+Ewh6usOyD5UV/49gc= - </data> - <key>www/js/lib/etc/push.js</key> - <data> - +3CWZcxp1Ao9A/4KiM4nA82Hia8= - </data> - <key>www/js/lib/nav/AddressView.js</key> - <data> - JFoETIdARQvI5GU6tc1YJhhttEc= - </data> - <key>www/js/lib/nav/CreditCardView.js</key> - <data> - uV1Y5XohZktnJXSKPs/gt/vhlzk= - </data> - <key>www/js/lib/nav/CurtainView.js</key> - <data> - VHa9pwxWtQ31RhBknlTCAqrKA7c= - </data> - <key>www/js/lib/nav/FooterView.js</key> - <data> - WaOKgFizQ3W8RPEhwga57tf3sLM= - </data> - <key>www/js/lib/nav/HeaderView.js</key> - <data> - Ui2nti/7MEoaanRA/U1QuO6cVSQ= - </data> - <key>www/js/lib/nav/IntroView.js</key> - <data> - FSNPuiLwJs4MyLmkvAY6k3RPRF8= - </data> - <key>www/js/lib/nav/NavView.js</key> - <data> - vVy7+c8F2D+3VFixaG8D1GqdHL4= - </data> - <key>www/js/lib/nav/SearchView.js</key> - <data> - b8Xg3rQZIafOl+uBceHrk6yVqYU= - </data> - <key>www/js/lib/products/ClosedStoreView.js</key> - <data> - iDWe+pvx3vGBohpZ05biGudY71o= - </data> - <key>www/js/lib/products/CollectionView.js</key> - <data> - g7ama0ca186rxP6eho2Lcqqlaxo= - </data> - <key>www/js/lib/products/GalleryView.js</key> - <data> - CpqSBwnIKxV0wFGD8GdU82L9oqI= - </data> - <key>www/js/lib/products/ProductView.js</key> - <data> - y8oQIYrgG+mfj1RXFIyCOzFLNaU= - </data> - <key>www/js/lib/products/Selector.js</key> - <data> - QxR583tVoXxutmfsJwO9Trbb8QE= - </data> - <key>www/js/lib/products/filters/CategoryFilter.js</key> - <data> - z8glR9hNUq3u4RpoKJRCV6oag8o= - </data> - <key>www/js/lib/products/filters/DepartmentFilter.js</key> - <data> - 8NWvfVz9fG9fo5KCmaEw/J3WOjQ= - </data> - <key>www/js/lib/products/filters/SizeFilter.js</key> - <data> - o/z0F+RylPMY7gYqKn5AUSGjkGE= - </data> - <key>www/js/lib/view/Router.js</key> - <data> - nC19loTSWgo+YghXIQTdo2qViKw= - </data> - <key>www/js/lib/view/Scrollable.js</key> - <data> - w8k3ObVeDwNmo5N4RSbu094FfTk= - </data> - <key>www/js/lib/view/Serializable.js</key> - <data> - TZu3vDiiaHeg3ApJ+HZowCDsPvE= - </data> - <key>www/js/lib/view/View.js</key> - <data> - 1vOGv/o4d073vpU6t8Dn08nZsnY= - </data> - <key>www/js/sdk/_sdk.js</key> - <data> - +RIDPxfqUZwaTbuh+hEYSte1cv0= - </data> - <key>www/js/sdk/account.js</key> - <data> - iFcyfpZSqqeP8RQ80FNBdRFrjNI= - </data> - <key>www/js/sdk/address.js</key> - <data> - 58zTcGuj9yQkjVJYaxboOYe+LiI= - </data> - <key>www/js/sdk/auth.js</key> - <data> - +1ZjnlN26KDrimArQWfhljcz3CM= - </data> - <key>www/js/sdk/cart.js</key> - <data> - TWij8pn0/F4YBj04iBZzNX2NyuQ= - </data> - <key>www/js/sdk/payment.js</key> - <data> - j3efOwLU577n/V2UAVxVHU/0NB8= - </data> - <key>www/js/sdk/product.js</key> - <data> - ZYf0fQuZdLIS1ZXTJSingxo32Hs= - </data> - <key>www/js/sdk/shipping.js</key> - <data> - 04qsgSJ7isNdqyVfM1LQ7Q6wRwM= - </data> - <key>www/js/vendor/fastclick.js</key> - <data> - GsPVekcRLSRd6GYRskvAbulostc= - </data> - <key>www/js/vendor/flickity.pkgd.js</key> - <data> - 7+L7DJW+IWJnI8uOkBFuyww3Bk0= - </data> - <key>www/js/vendor/iscroll.js</key> - <data> - zmIJQRtMdsZHuPuHvHEe8K1HC7w= - </data> - <key>www/js/vendor/jquery-2.1.4.min.js</key> - <data> - Q9xVRgjfiFpZ3e7OFZjGrOQ010c= - </data> - <key>www/js/vendor/jquery.creditCardValidator.js</key> - <data> - Y27vkeRB6sxVVgVnzd82mRHab3g= - </data> - <key>www/js/vendor/loader.js</key> - <data> - MNfNXlpvgsuGkqhXhawkjJxwGGU= - </data> - <key>www/js/vendor/lodash.min.js</key> - <data> - QH5J71GV/YmbKvW8dOzPWmIy2Js= - </data> - <key>www/js/vendor/moment.js</key> - <data> - up6xZ/qvAr5h9VNpOTtzN9Jzv6Y= - </data> - <key>www/js/vendor/oktween.js</key> - <data> - IbqDpG6Qitgu8bvKthKC6hJyb1g= - </data> - <key>www/js/vendor/prefixfree.js</key> - <data> - ImNOjml3qilBB3P2Q+D2oh0XZlo= - </data> - <key>www/js/vendor/promise.js</key> - <data> - c/6/xZdHlYR9yLjMoxE3Tk2wdgc= - </data> - <key>www/js/vendor/util.js</key> - <data> - awGO8rHbB+UyNdCDbLXrp2nihQg= - </data> - <key>www/plugins/cordova-plugin-console/www/console-via-logger.js</key> - <data> - NyUkntRl9vFIiOC3onmXNsxpedU= - </data> - <key>www/plugins/cordova-plugin-console/www/logger.js</key> - <data> - tmAfmQQR8NZd7y+bTWuju4/TbY0= - </data> - <key>www/plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js</key> - <data> - 0NrlXTwBHUS5u9XaqkoSJ+waVDo= - </data> - <key>www/plugins/cordova-plugin-device/www/device.js</key> - <data> - DgD9WKGqlbNViEZBSi4Wenbl/uM= - </data> - <key>www/plugins/cordova-plugin-dialogs/www/notification.js</key> - <data> - 7DTImwpj5B7VCelKiHdmmFLX6h0= - </data> - <key>www/plugins/cordova-plugin-geolocation/www/Coordinates.js</key> - <data> - B+vlNAwNL/8E91a2w8xN/QZtP9o= - </data> - <key>www/plugins/cordova-plugin-geolocation/www/Position.js</key> - <data> - 1DZ/xrP/zFT+anCeCYYt+uuQIyU= - </data> - <key>www/plugins/cordova-plugin-geolocation/www/PositionError.js</key> - <data> - NZQ0MpOiURNiYMJS79+bdtSDnzI= - </data> - <key>www/plugins/cordova-plugin-geolocation/www/geolocation.js</key> - <data> - DBMSf1DRKjXfKMDgaSJHjnx+wgI= - </data> - <key>www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js</key> - <data> - EfUzmAcUagDDJeG2yHQTy4FngxU= - </data> - <key>www/plugins/cordova-plugin-network-information/www/Connection.js</key> - <data> - QP5YzumNbUCPIZ96Xkpu5RegRY0= - </data> - <key>www/plugins/cordova-plugin-network-information/www/network.js</key> - <data> - jxeuXL/JPk6C5eQC7iVThLg7NPc= - </data> - <key>www/plugins/cordova-plugin-splashscreen/www/splashscreen.js</key> - <data> - n2E0W8B/grOxM2ORx/haAYOWIcA= - </data> - <key>www/plugins/cordova-plugin-statusbar/www/statusbar.js</key> - <data> - hDT++3ZaOTp3t16AAFAibxtovj0= - </data> - <key>www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js</key> - <data> - p2ovf3IcCK49/GvqK+j7UmFu1zI= - </data> - <key>www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js</key> - <data> - gexyZjGUVvhbQiJbBzCrImXWv34= - </data> - <key>www/plugins/phonegap-plugin-push/www/push.js</key> - <data> - AF+WnBEprzr+ql8AKjlyCUKSiTI= - </data> - </dict> - <key>files2</key> - <dict> - <key>AppIcon29x29.png</key> - <dict> - <key>hash</key> - <data> - Is6VLMY4XWleZkWcLbcHYvQLtEk= - </data> - <key>hash2</key> - <data> - B335YAj6s7XMv/1E833Dg8f6gsJ1KuRtXQmsfHRxAvI= - </data> - </dict> - <key>AppIcon29x29@2x.png</key> - <dict> - <key>hash</key> - <data> - 4gqvmmThxGuR+05NtIXr5Ppfu/I= - </data> - <key>hash2</key> - <data> - CnKF0jydrQtaoddcpz6pxsEzDcKUn0vXo+CuFs4NYvs= - </data> - </dict> - <key>AppIcon29x29@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - 4gqvmmThxGuR+05NtIXr5Ppfu/I= - </data> - <key>hash2</key> - <data> - CnKF0jydrQtaoddcpz6pxsEzDcKUn0vXo+CuFs4NYvs= - </data> - </dict> - <key>AppIcon29x29@3x.png</key> - <dict> - <key>hash</key> - <data> - 34x3jkHPlzEFjwiLm8KS7t+JvIY= - </data> - <key>hash2</key> - <data> - ILfuARqTyA3SWNRU8D8qGDMwoS7kIxYKiVX9XpFnlbg= - </data> - </dict> - <key>AppIcon29x29~ipad.png</key> - <dict> - <key>hash</key> - <data> - Is6VLMY4XWleZkWcLbcHYvQLtEk= - </data> - <key>hash2</key> - <data> - B335YAj6s7XMv/1E833Dg8f6gsJ1KuRtXQmsfHRxAvI= - </data> - </dict> - <key>AppIcon40x40@2x.png</key> - <dict> - <key>hash</key> - <data> - LeIV1eZoNuUJDTs/qhgVylBiRzs= - </data> - <key>hash2</key> - <data> - Cs68urmuQk75aZI1ubqpLGbrIgq1ycRUlVprV5Z9ieI= - </data> - </dict> - <key>AppIcon40x40@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - LeIV1eZoNuUJDTs/qhgVylBiRzs= - </data> - <key>hash2</key> - <data> - Cs68urmuQk75aZI1ubqpLGbrIgq1ycRUlVprV5Z9ieI= - </data> - </dict> - <key>AppIcon40x40@3x.png</key> - <dict> - <key>hash</key> - <data> - qEWfmlsV73kzUbX2cXG+CfBLDa8= - </data> - <key>hash2</key> - <data> - qaLhWGCk5HFcWOT5PhOSw/vn84MmZVGS9WB7EOTh2jg= - </data> - </dict> - <key>AppIcon40x40~ipad.png</key> - <dict> - <key>hash</key> - <data> - BfrJs8fg9gDZfCk3YmssJmOtgmk= - </data> - <key>hash2</key> - <data> - wi5HOidnJoX8nwwgrXijerxiqxdrMpkMMq73DKq5YQI= - </data> - </dict> - <key>AppIcon50x50@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - OzeMJWcikSMMGOVldVzY1Dlw+OY= - </data> - <key>hash2</key> - <data> - HEblwClOX1fWKLUOwFSu2VKE12rZHBJY32bcoqg+bUs= - </data> - </dict> - <key>AppIcon50x50~ipad.png</key> - <dict> - <key>hash</key> - <data> - EHAZVskQFYgH6vjOsUHwdujCUZ4= - </data> - <key>hash2</key> - <data> - nfnbIxAobJY7zJnQ1BbIv6HI5UiddeprMQQLZ8l1RGQ= - </data> - </dict> - <key>AppIcon57x57.png</key> - <dict> - <key>hash</key> - <data> - rQB+5Bku/vInsAJhWWsR17i00ko= - </data> - <key>hash2</key> - <data> - Z6AAl5oxyywqIUAkaMagEZzOumh3bRb8Ybx6F7Bh/yk= - </data> - </dict> - <key>AppIcon57x57@2x.png</key> - <dict> - <key>hash</key> - <data> - jB03yEyAL00AGpbq/ZXJzAFWMRY= - </data> - <key>hash2</key> - <data> - kzCz1nkpfM9pninXy4mMRWZG22qrVz+LAEHL3SK2PlQ= - </data> - </dict> - <key>AppIcon60x60@2x.png</key> - <dict> - <key>hash</key> - <data> - qEWfmlsV73kzUbX2cXG+CfBLDa8= - </data> - <key>hash2</key> - <data> - qaLhWGCk5HFcWOT5PhOSw/vn84MmZVGS9WB7EOTh2jg= - </data> - </dict> - <key>AppIcon60x60@3x.png</key> - <dict> - <key>hash</key> - <data> - n6ptVnfuiunMFRI0tO58YCR5mUI= - </data> - <key>hash2</key> - <data> - B6jAjmSmuYvBgiXdpsQSrguJjHxFL0Lxxwdn/1wCM4A= - </data> - </dict> - <key>AppIcon72x72@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - Kud0eilmgIYWXUjRTVvvq77WfWc= - </data> - <key>hash2</key> - <data> - 9WhRCRC/iUpCIEXiwwkTYuhsp7h2UiTcVKEV0Pvpo/0= - </data> - </dict> - <key>AppIcon72x72~ipad.png</key> - <dict> - <key>hash</key> - <data> - bR9bIHiTC8lSBVHRxDzuC0WOKzs= - </data> - <key>hash2</key> - <data> - PiDu5TKAuOfLfBW9o4A8/MiLPeOIaNoCDBl40HruL5A= - </data> - </dict> - <key>AppIcon76x76@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - ucEjmUt3wRwY8ZsUGGPM+DCV3gY= - </data> - <key>hash2</key> - <data> - SgAwWn7JngXGGKnpn5eaPFHA0cqNZ2CPY8RD4y3BBfs= - </data> - </dict> - <key>AppIcon76x76~ipad.png</key> - <dict> - <key>hash</key> - <data> - uWdap5QW+re3BS+RMlQ8LQktl10= - </data> - <key>hash2</key> - <data> - AN/PK9BtVMFnYMvUdNfLBrju1yncLHGeQa+xB1ZFwTs= - </data> - </dict> - <key>AppIcon83.5x83.5@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - X2Z6kGsoxHnLhCoBbeIhFHAScMs= - </data> - <key>hash2</key> - <data> - 15Cm7tc8cAJKkYbrN6RdRBQO5Bh9xFr7kecMvjgJR2s= - </data> - </dict> - <key>Assets.car</key> - <dict> - <key>hash</key> - <data> - j3XIGS0AOWm9CN+7YAnMPPKdCcQ= - </data> - <key>hash2</key> - <data> - MD7nPimOIluVWUNbEeDxNDqAcYc5LLaiW7YgRYAl5lk= - </data> - </dict> - <key>CDVLaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib</key> - <dict> - <key>hash</key> - <data> - a/gMVEDo/igdesy9Qmqr41WM4j0= - </data> - <key>hash2</key> - <data> - sW+LF70tbPn5sngT0Vur2hUvwnZC/FqqYT4x7O1RdKU= - </data> - </dict> - <key>CDVLaunchScreen.storyboardc/Info.plist</key> - <dict> - <key>hash</key> - <data> - n2t8gsDpfE6XkhG31p7IQJRxTxU= - </data> - <key>hash2</key> - <data> - HyVdXMU7Ux4/KalAao30mpWOK/lEPT4gvYN09wf31cg= - </data> - </dict> - <key>CDVLaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib</key> - <dict> - <key>hash</key> - <data> - f0suWQT3Sw78SVx6bHgyDYepvdE= - </data> - <key>hash2</key> - <data> - 3TdP9o4nuganddFVBVEjYT1LmPqcUjq0nDLAS6lsyKs= - </data> - </dict> - <key>CDVNotification.bundle/beep.wav</key> - <dict> - <key>hash</key> - <data> - /kSUVvLLJcbtfXnxFEolil3/NRk= - </data> - <key>hash2</key> - <data> - KfYd4hFlyPwinBGKi4ruYae1MyeQ2TKrPJvIngKdC38= - </data> - </dict> - <key>LaunchImage-568h@2x.png</key> - <dict> - <key>hash</key> - <data> - O7BTaeYy02zZ5Z1Io4P9qbW0GhI= - </data> - <key>hash2</key> - <data> - 3yB+TvpsbLRHSe6MsvqKLnT+hxIqLdGVTx8+Slu6xas= - </data> - </dict> - <key>LaunchImage-700-568h@2x.png</key> - <dict> - <key>hash</key> - <data> - O7BTaeYy02zZ5Z1Io4P9qbW0GhI= - </data> - <key>hash2</key> - <data> - 3yB+TvpsbLRHSe6MsvqKLnT+hxIqLdGVTx8+Slu6xas= - </data> - </dict> - <key>LaunchImage-700-Landscape@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - EShK0rbY/hX73zQlYBPjN7j7V2k= - </data> - <key>hash2</key> - <data> - jZlmx2dzTd/zRbVAqyWoGWMu097ZBPtnMnpCsfU3u4k= - </data> - </dict> - <key>LaunchImage-700-Landscape~ipad.png</key> - <dict> - <key>hash</key> - <data> - iGeMgwhUrOx2h8Ma1F2C3HUzRbk= - </data> - <key>hash2</key> - <data> - VSyZwXMGID7Djb3Hv8IoZVMlW/M1WNjWmQ0ARPFWM+A= - </data> - </dict> - <key>LaunchImage-700-Portrait@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - otkRNyorWpU7SNgjZfOOUJGsySs= - </data> - <key>hash2</key> - <data> - X7YAT13G2HbvGhKWkMt4c1u38Ndx8MB0NdhBeZBaMyg= - </data> - </dict> - <key>LaunchImage-700-Portrait~ipad.png</key> - <dict> - <key>hash</key> - <data> - WGypni7nsuVcJryGUSh+OL4RyKE= - </data> - <key>hash2</key> - <data> - nzHoSI+eflawPHVT1I/kFhyw1HDCvmc2BozfmRUV0jA= - </data> - </dict> - <key>LaunchImage-700@2x.png</key> - <dict> - <key>hash</key> - <data> - yI6y+H/t6sdofwdf70F120ErFrE= - </data> - <key>hash2</key> - <data> - Kz5c0HxeKYKzsnJmmy8ctEh/DnJen+4EiuAunRCPsEc= - </data> - </dict> - <key>LaunchImage-800-667h@2x.png</key> - <dict> - <key>hash</key> - <data> - 4tBfXaUz4b31BBqG6M0aS0WPOTM= - </data> - <key>hash2</key> - <data> - Z0hOhUQUUrzsTIuUGx08TObi18hU8LRAAruKs4tEFtY= - </data> - </dict> - <key>LaunchImage-800-Landscape-736h@3x.png</key> - <dict> - <key>hash</key> - <data> - wwM/Q+MMTFzMHV8MKCAeCifpsRM= - </data> - <key>hash2</key> - <data> - 8Qpu0xsBl6Ydyf9I3CokAS//k6Eg66QMtm8wezC3EQ0= - </data> - </dict> - <key>LaunchImage-800-Portrait-736h@3x.png</key> - <dict> - <key>hash</key> - <data> - MpK2Hes1RkoIUvQGNXsKHRLbHQM= - </data> - <key>hash2</key> - <data> - GjJU+UZ0nON5M7H4HlApb7kI4Qg1IH5BvxFWEFkBS74= - </data> - </dict> - <key>LaunchImage-Portrait@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - otkRNyorWpU7SNgjZfOOUJGsySs= - </data> - <key>hash2</key> - <data> - X7YAT13G2HbvGhKWkMt4c1u38Ndx8MB0NdhBeZBaMyg= - </data> - </dict> - <key>LaunchImage-Portrait~ipad.png</key> - <dict> - <key>hash</key> - <data> - WGypni7nsuVcJryGUSh+OL4RyKE= - </data> - <key>hash2</key> - <data> - nzHoSI+eflawPHVT1I/kFhyw1HDCvmc2BozfmRUV0jA= - </data> - </dict> - <key>LaunchImage.png</key> - <dict> - <key>hash</key> - <data> - O8VNFJ4huf4alLfKtKkSKMHM88A= - </data> - <key>hash2</key> - <data> - 7zGpZrOb/lITBp0TKyhXRzOKNOPPO9fat+8NoIvD6U8= - </data> - </dict> - <key>LaunchImage@2x.png</key> - <dict> - <key>hash</key> - <data> - yI6y+H/t6sdofwdf70F120ErFrE= - </data> - <key>hash2</key> - <data> - Kz5c0HxeKYKzsnJmmy8ctEh/DnJen+4EiuAunRCPsEc= - </data> - </dict> - <key>MainViewController.nib</key> - <dict> - <key>hash</key> - <data> - cdyprXlG8Bp7k3NJZR96ikcFEI8= - </data> - <key>hash2</key> - <data> - 5u2ohEtpQiPZRGmKPEoflAv8qemJPs6p0nfWIq0WbSw= - </data> - </dict> - <key>archived-expanded-entitlements.xcent</key> - <dict> - <key>hash</key> - <data> - uVC4UsEAjsaAorNMAW+mHUKgk9o= - </data> - <key>hash2</key> - <data> - e/joE7ObU4L5jO1+1JUxZxM/FUkgLPoVg6yex5UVEFk= - </data> - </dict> - <key>config.xml</key> - <dict> - <key>hash</key> - <data> - SQpapncz+hIueHEFmGTkBC0yseQ= - </data> - <key>hash2</key> - <data> - 4zT1hAPT/UnVlRTVWU/tIdeLXU/jy5yFsKhZpy+g968= - </data> - </dict> - <key>embedded.mobileprovision</key> - <dict> - <key>hash</key> - <data> - 6a29fgIuenXjxvHTXPZvMubF7Mk= - </data> - <key>hash2</key> - <data> - bsbcK855Yy1AFdFbpZOEfNlwpqtrxpMeWJJkDULt+D8= - </data> - </dict> - <key>www/cordova-js-src/exec.js</key> - <dict> - <key>hash</key> - <data> - 3QDPaUQrAr8Wq2XcQhqcl8DLabQ= - </data> - <key>hash2</key> - <data> - 3k+JZ8ZeHITt5+/EQNMxMv9o6gJ7PJ7TdGiLTUKTJlU= - </data> - </dict> - <key>www/cordova-js-src/platform.js</key> - <dict> - <key>hash</key> - <data> - s+KdzB0mMHQsQQTAofDqS0ApWpY= - </data> - <key>hash2</key> - <data> - VC59qcohWe5Awbx7BGlb0BBJtIPuhBSwQNM2k5RQi/8= - </data> - </dict> - <key>www/cordova.js</key> - <dict> - <key>hash</key> - <data> - U5qD+h8czHzRSMNDeKZnVmgA3ao= - </data> - <key>hash2</key> - <data> - vvROt4nAghiz/nS7ekznMtV1kOKlu40f/Me6P8Npd+4= - </data> - </dict> - <key>www/cordova_plugins.js</key> - <dict> - <key>hash</key> - <data> - ZLiJikY3+FWToLfZjEmru0f7jFE= - </data> - <key>hash2</key> - <data> - wwWxpCP0qmAuV4RuUx2DnJnMTPMZAtjGSnrEH1SLn/E= - </data> - </dict> - <key>www/css/account.css</key> - <dict> - <key>hash</key> - <data> - iqX2jg1B1fMIoMZ9UDOmdeXY5R4= - </data> - <key>hash2</key> - <data> - gMqNEgIOHD+Z9Gy63ewBuCTkzHwIFKxy5ZoW5F8j34I= - </data> - </dict> - <key>www/css/blogs.css</key> - <dict> - <key>hash</key> - <data> - uoDbpZ20pX9gG/U1j4RiYqBz1oc= - </data> - <key>hash2</key> - <data> - QqQZ5BjyBPjGxiUx+SBuzLiem6repcQ61KRxr4s9fI0= - </data> - </dict> - <key>www/css/cart.css</key> - <dict> - <key>hash</key> - <data> - f8AmevHsGVmWkazWNR/SkQ8ctDE= - </data> - <key>hash2</key> - <data> - TnNnjg3PuKGERZhJmaiUD+YBWeRPFEwYC0zwkBHo1TE= - </data> - </dict> - <key>www/css/fonts/andale_mono.ttf</key> - <dict> - <key>hash</key> - <data> - LNdqAJjPnsKnT1GghSkYxImlFvQ= - </data> - <key>hash2</key> - <data> - ykNqjwf2aZEHVC6+GdzJR48SqmZpJ2men6EBFefS7pU= - </data> - </dict> - <key>www/css/fonts/andale_mono.woff</key> - <dict> - <key>hash</key> - <data> - uOPMweytjo+6Egyqhu+4GdPmgq8= - </data> - <key>hash2</key> - <data> - +E6sojOf4n4Euc8WeVtrjWQrtJ6yUKGjmLUrgURiacs= - </data> - </dict> - <key>www/css/fonts/fonts.css</key> - <dict> - <key>hash</key> - <data> - NKnz6tasTlqoICSI4V4YlOeHVJM= - </data> - <key>hash2</key> - <data> - 6whr8edBMPAq5ujWe3GmyVrDTPnYdaDkBaujq1xY2Ng= - </data> - </dict> - <key>www/css/fonts/ionicons.css</key> - <dict> - <key>hash</key> - <data> - gzPAFostLVCiwxkgMsSWmTe+A/c= - </data> - <key>hash2</key> - <data> - D3+gw6JE4hEJ9pnCs+BglSfZ2yG5gF+JGdPJ/v183fo= - </data> - </dict> - <key>www/css/fonts/ionicons.eot</key> - <dict> - <key>hash</key> - <data> - YVMuieIS+N0WujHz6881wKczQDU= - </data> - <key>hash2</key> - <data> - pIA9e960eKW5I4/nTYqqmNr+Lo5o/MvQ4/Tc7YI/J/A= - </data> - </dict> - <key>www/css/fonts/ionicons.svg</key> - <dict> - <key>hash</key> - <data> - Pxyij8sELSvMbuak492BflEy7uo= - </data> - <key>hash2</key> - <data> - pifZBowSNdmzyVxAXrbstkopCxWc9ekmwNltibJM1fw= - </data> - </dict> - <key>www/css/fonts/ionicons.ttf</key> - <dict> - <key>hash</key> - <data> - GwoN4ISQWUaiAwDKjDVIZd7EZ2Q= - </data> - <key>hash2</key> - <data> - K6fyCx2JkOF6R/49iOTHZmKKqiuvHdMPygoNtZg29fk= - </data> - </dict> - <key>www/css/fonts/ionicons.woff</key> - <dict> - <key>hash</key> - <data> - 5GgZ6GOkZ1HWIsEZDE6Kg+vCBhI= - </data> - <key>hash2</key> - <data> - cJ8nidqv9ECCDruXXTrkCa9FEhvexH456DUjSQsbwPw= - </data> - </dict> - <key>www/css/fonts/pfdintextpro-bold-webfont.woff</key> - <dict> - <key>hash</key> - <data> - mDYay3ArKzHK+mu3l0GGL7AJYI8= - </data> - <key>hash2</key> - <data> - Mr9MAjLLumdjs3kpKuEjOL20HLiXJZzLyNsL8wfwMlA= - </data> - </dict> - <key>www/css/fonts/pfdintextpro-italic-webfont.woff</key> - <dict> - <key>hash</key> - <data> - gtSnNX5Vtd1JOciHX7Q2IGnhYEk= - </data> - <key>hash2</key> - <data> - DZtjhCJwbqDykQhUD7a2pXF4SuaAPaBDEPgkWudYe+s= - </data> - </dict> - <key>www/css/fonts/pfdintextpro-light-webfont.woff</key> - <dict> - <key>hash</key> - <data> - 2ZQAPshoOfFBipDEgccDh0IDokQ= - </data> - <key>hash2</key> - <data> - F+hV+FwInuuHFMLsS4MZD1PdnQzw1vzXQVbCJFwlWsQ= - </data> - </dict> - <key>www/css/fonts/pfdintextpro-medium-webfont.woff</key> - <dict> - <key>hash</key> - <data> - KyUoyPHWVunK8heDhzHDUKbf1VA= - </data> - <key>hash2</key> - <data> - zPyc85Aaq/qrdWWmXzB/97AZAv+K3DClUoTfft2s8fE= - </data> - </dict> - <key>www/css/fonts/pfdintextpro-regular-webfont.woff</key> - <dict> - <key>hash</key> - <data> - zn1xFRXWNWSV7oJEL0mt+0JLjNE= - </data> - <key>hash2</key> - <data> - BPa4/HL0H3SjK3xPZ8/6nnn1s3soajNDFqHBlhuOJoo= - </data> - </dict> - <key>www/css/index.css</key> - <dict> - <key>hash</key> - <data> - sS5Z897GbFcFtJaWKk9Ft6T/Vtg= - </data> - <key>hash2</key> - <data> - qLqkLu+A+Gm5um2jDESMTABAps+BlbF8PY/8VBk4hRs= - </data> - </dict> - <key>www/css/nav.css</key> - <dict> - <key>hash</key> - <data> - tNCurPA7ni1EDWw/jvw9w67DpVU= - </data> - <key>hash2</key> - <data> - 2o4b/avhcyA5pKh3T6ScNPY7gsTaD0+B9b8rFdYm+Gc= - </data> - </dict> - <key>www/css/products.css</key> - <dict> - <key>hash</key> - <data> - bY2IfaCUQ+Rz5riamQVF0rOVe6A= - </data> - <key>hash2</key> - <data> - hPZUQWrlZ/hGqd0scKaIjhli7AmNraugdxjdk5UoORg= - </data> - </dict> - <key>www/css/vendor/flickity.css</key> - <dict> - <key>hash</key> - <data> - xW5wsn/T/+uaGvIT+Sl9WY/IM2k= - </data> - <key>hash2</key> - <data> - T95IzwnM3icXTFFGjaoJ60KBvjBZRIGdOLBHp6g1odc= - </data> - </dict> - <key>www/db.json</key> - <dict> - <key>hash</key> - <data> - FHbZPD9DyP+Prfwo3urgg0f3pwo= - </data> - <key>hash2</key> - <data> - QSN93k1zzgvbBpJ+82WBuRuad5jnucly7dhUFIsaWhw= - </data> - </dict> - <key>www/img/Resources/CDVNotification.bundle/beep.wav</key> - <dict> - <key>hash</key> - <data> - /kSUVvLLJcbtfXnxFEolil3/NRk= - </data> - <key>hash2</key> - <data> - KfYd4hFlyPwinBGKi4ruYae1MyeQ2TKrPJvIngKdC38= - </data> - </dict> - <key>www/img/Resources/splash/Default-568h@2x~iphone.png</key> - <dict> - <key>hash</key> - <data> - J8BakinXs4g2c3rjIlkaUKc1m3k= - </data> - <key>hash2</key> - <data> - uvT5oIiijLZlJapbQ9RysTS/jK0BcBTE5WiVsg7Uy4A= - </data> - </dict> - <key>www/img/Resources/splash/Default-667h.png</key> - <dict> - <key>hash</key> - <data> - KeM+qh3e57f5eeltxETo6kNL/lk= - </data> - <key>hash2</key> - <data> - TP25WIPiu3seh7We8uUKVM2XxyNxbYcSOIuPsC2/c8M= - </data> - </dict> - <key>www/img/Resources/splash/Default-736h.png</key> - <dict> - <key>hash</key> - <data> - 5egepTM4V7rMvBkpkxUc8RAcJaI= - </data> - <key>hash2</key> - <data> - f0PPi0IKMgqz/hNWp+nerz3Sinndoa+Y3UfQ70+Bpxw= - </data> - </dict> - <key>www/img/Resources/splash/Default-Landscape-736h.png</key> - <dict> - <key>hash</key> - <data> - OakZWPocy5SHfGOIcwCCOoHVEqA= - </data> - <key>hash2</key> - <data> - +25+atV9U37SxrS9VG7luxH2gf37etsNY9y41SPmRAg= - </data> - </dict> - <key>www/img/Resources/splash/Default-Landscape@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - q8VJZgMwFNZmWGD/Lf1/2KJt42c= - </data> - <key>hash2</key> - <data> - u/2vuEKdgIS+PhWktUxa01LpDF1+oj0R2alV8U77uoU= - </data> - </dict> - <key>www/img/Resources/splash/Default-Landscape~ipad.png</key> - <dict> - <key>hash</key> - <data> - PhNiOU4rbDZLXNv3olAhvfd9XQk= - </data> - <key>hash2</key> - <data> - k1DyhDTDnyEsp5CTBmXGFLb5GPUxtSz7DYuKH9VfPd4= - </data> - </dict> - <key>www/img/Resources/splash/Default-Portrait@2x~ipad.png</key> - <dict> - <key>hash</key> - <data> - CwZQXSzj9Gai0+MUt1mGzHuYO4U= - </data> - <key>hash2</key> - <data> - IrqXTW8vE/sSWrxeHHh+ogEUfLLh9S6UAb9O/Cv0mqU= - </data> - </dict> - <key>www/img/Resources/splash/Default-Portrait~ipad.png</key> - <dict> - <key>hash</key> - <data> - ONniQfICjQTe8yPDO4mhWp9I2pM= - </data> - <key>hash2</key> - <data> - VOUUyEtLaabk1zWFRoIpVJ2CT4HvyAAwJwP8PXCAoS8= - </data> - </dict> - <key>www/img/Resources/splash/Default@2x~iphone.png</key> - <dict> - <key>hash</key> - <data> - uMF7RsyJGko7JaycVJ1sdu4hN/A= - </data> - <key>hash2</key> - <data> - 3M1zeVVJGsu8AbH7VOeCoqVk3NPIi2/P614XXBm4fzw= - </data> - </dict> - <key>www/img/Resources/splash/Default~iphone.png</key> - <dict> - <key>hash</key> - <data> - btYS0PqHlIXDTLPf+7ZkA8uadDw= - </data> - <key>hash2</key> - <data> - cNB/ov2CcA7c5BelPGxHt5XRjwMhBMpvF+toOgTsuUE= - </data> - </dict> - <key>www/img/angle-down.png</key> - <dict> - <key>hash</key> - <data> - I9z7X0QqPVunkk2Pp6QVBfjF/Ug= - </data> - <key>hash2</key> - <data> - XTqh7PVCqKrR9bHekJv7T1AKLcaV5XqNHsDyip5gOfo= - </data> - </dict> - <key>www/img/bottom-fade.png</key> - <dict> - <key>hash</key> - <data> - doxZCcQch8Yt0UXMMvPBppxacg0= - </data> - <key>hash2</key> - <data> - Pff1Ybbi/LcFEr93RMVw5B9TNzY/InXaijmBXgbL8GM= - </data> - </dict> - <key>www/img/cart-box.png</key> - <dict> - <key>hash</key> - <data> - 76PMCjdfolbYk9wB0iPxqaLwpzk= - </data> - <key>hash2</key> - <data> - EOY/TzuWeRD2XbpDFRhcadQUenAHRKJYyZZ1OmE9168= - </data> - </dict> - <key>www/img/cart-handle.png</key> - <dict> - <key>hash</key> - <data> - DIrmugvltD/RB0iy1latRCJGUec= - </data> - <key>hash2</key> - <data> - CS+LvOUhp2HGJ6bbl2Em+uRul8MWYY+d8Q8O1S4Q/UA= - </data> - </dict> - <key>www/img/compass-logo.png</key> - <dict> - <key>hash</key> - <data> - hO/U4zzOyjwTppKJ9FKI73NPrGU= - </data> - <key>hash2</key> - <data> - q+hTZPeR3ZlnfIlbmw3qFgGx3U4+Gqw0lB9A8B1pa+o= - </data> - </dict> - <key>www/img/compass-logo.png.old</key> - <dict> - <key>hash</key> - <data> - vwVmYayeHMzxccFD/TN328PqiVk= - </data> - <key>hash2</key> - <data> - dL4FPsLS5KaresAAXchnvd8tLEGbseaQRSFPjwpKD6A= - </data> - </dict> - <key>www/img/fade-to-bottom-threshold.gif</key> - <dict> - <key>hash</key> - <data> - GR0zpcR8KMByQIz2FFd4chj4bGE= - </data> - <key>hash2</key> - <data> - EhYFmqatsT26q8SuaY5acyYcyhrxoXVH74n6mqmbkx0= - </data> - </dict> - <key>www/img/fade-to-bottom.png</key> - <dict> - <key>hash</key> - <data> - doxZCcQch8Yt0UXMMvPBppxacg0= - </data> - <key>hash2</key> - <data> - Pff1Ybbi/LcFEr93RMVw5B9TNzY/InXaijmBXgbL8GM= - </data> - </dict> - <key>www/img/left-arrow.png</key> - <dict> - <key>hash</key> - <data> - gJa/2uVfymH2Yxi4/cvGN+OdrWM= - </data> - <key>hash2</key> - <data> - kxHzwZ36AHmQA6dWhC8QcWWRtHfCDiGSgoU8qx2s67Q= - </data> - </dict> - <key>www/img/right-arrow.png</key> - <dict> - <key>hash</key> - <data> - MSgmEvsEIKkviNZIWWCPJeKdJqY= - </data> - <key>hash2</key> - <data> - 8Z+N/wNcrZ61JKyWhtE/lTCOTSB8l8ocMsRlVzjOltc= - </data> - </dict> - <key>www/img/small-cart-box.png</key> - <dict> - <key>hash</key> - <data> - DJxx7Sxv9HGOumgrHLmIk1YfW7c= - </data> - <key>hash2</key> - <data> - QCLuWju4XnHojaJKdRIz7mc/W8rzM52K8bN0C+xodhQ= - </data> - </dict> - <key>www/img/small-cart-handle.png</key> - <dict> - <key>hash</key> - <data> - SlZeorPNUiYlNNv0UCnVXxyNZPc= - </data> - <key>hash2</key> - <data> - Y0j22p39dCI1uo+wL9lRWYD93TqGGzY05TrYQ2+8mEQ= - </data> - </dict> - <key>www/img/small-logo.png</key> - <dict> - <key>hash</key> - <data> - FRbH5vLd9Z1i4k0dBsW+I5+g4qo= - </data> - <key>hash2</key> - <data> - Nf3Hre2AEyspVkhMOs9DjkoxjyPS5Z2A0gLcGxw+bAg= - </data> - </dict> - <key>www/img/spinner.gif</key> - <dict> - <key>hash</key> - <data> - oEyz0SzCG90twGaMhPwiIjXakkg= - </data> - <key>hash2</key> - <data> - UxUEYiPRNko3znL6nzrwY2Yb8GLH4ShsrH+my7nsPKU= - </data> - </dict> - <key>www/img/wide-logo.png</key> - <dict> - <key>hash</key> - <data> - WJ/FbJfrZcN2Pg0w6S5c202hwSs= - </data> - <key>hash2</key> - <data> - JcHH+opfUENsrDllQYVp4Z803WLSOfIBKRsdqUFeqEg= - </data> - </dict> - <key>www/index.html</key> - <dict> - <key>hash</key> - <data> - 3y6+VOdsGYg9Yra+PEvciIC8teE= - </data> - <key>hash2</key> - <data> - jZfMoE+wrnWv/uf/P1ANIH/CiY+m51GnNEPuB7yPZDc= - </data> - </dict> - <key>www/js/index.js</key> - <dict> - <key>hash</key> - <data> - C8DUPKVibVPQVD9HXKKoIuRguHw= - </data> - <key>hash2</key> - <data> - 3UXGHe/2SlMai39hVs8y22F61zarqDgmUSe+bmKbS3w= - </data> - </dict> - <key>www/js/lib/_router.js</key> - <dict> - <key>hash</key> - <data> - O4eZM5nyghVF7WELlWxgCniAfZc= - </data> - <key>hash2</key> - <data> - eiZImA/5F7g1thdb5LR3bhPmWAf53J6gAxt+2MsEw4c= - </data> - </dict> - <key>www/js/lib/account/AccountView.js</key> - <dict> - <key>hash</key> - <data> - g8Rl32cI413Hgc7ish5t2vtrS9k= - </data> - <key>hash2</key> - <data> - 4IJ+CAHsOandtDQ6bcHuxGfQMI7QbY+l7WTXtvp2c74= - </data> - </dict> - <key>www/js/lib/account/OrdersView.js</key> - <dict> - <key>hash</key> - <data> - zEEbcESh8kYxm6fkztCPSUnjOLI= - </data> - <key>hash2</key> - <data> - I66S9cwl0i9jb3niGM/5/M6lfKdz7nNlVHsKfvgq2TM= - </data> - </dict> - <key>www/js/lib/account/PaymentView.js</key> - <dict> - <key>hash</key> - <data> - cSoU0cfID6oqM8fLFH19k6OQ9Mo= - </data> - <key>hash2</key> - <data> - 1HGak3nqoYhz7z1MwA8T6yqQvjxJfXLvgAy2Tcpf3aM= - </data> - </dict> - <key>www/js/lib/account/ProfileView.js</key> - <dict> - <key>hash</key> - <data> - g81ByC4WQ4lAdrDltz7b/C/MqNY= - </data> - <key>hash2</key> - <data> - eV4PAhtf/St/MYaS5Koc1N1RUYoGLWjleg4o9+fh6cQ= - </data> - </dict> - <key>www/js/lib/account/SettingsView.js</key> - <dict> - <key>hash</key> - <data> - hXT8T0eaN6o3ERCH5Ai1nMlVrQI= - </data> - <key>hash2</key> - <data> - j8caL5+0diGO/X+OkO2DCzwDe0fKlnpDr11KIIear4E= - </data> - </dict> - <key>www/js/lib/account/ShippingView.js</key> - <dict> - <key>hash</key> - <data> - +2iaJJaoZoD+N0LlfGHz6WzH5FM= - </data> - <key>hash2</key> - <data> - FkxpG51ZUcofE8UXSuevfTY3EmOPAIdjs+kFKfjy66k= - </data> - </dict> - <key>www/js/lib/auth/LoginView.js</key> - <dict> - <key>hash</key> - <data> - 2nZGYC2LOCDPymoAm3yBxHwgYgY= - </data> - <key>hash2</key> - <data> - 3RDWoVVhjr+IH7U5MC5ADOe9jNo/zbo6u2kPV2PGtXo= - </data> - </dict> - <key>www/js/lib/auth/LogoutView.js</key> - <dict> - <key>hash</key> - <data> - jhf/Pzr8A/yk68t3W15g32q4eQ4= - </data> - <key>hash2</key> - <data> - WUOCYL3XOiQkxLTopAv/dlhluzFRrJM4HRU9NlkUw4Q= - </data> - </dict> - <key>www/js/lib/auth/SignupView.js</key> - <dict> - <key>hash</key> - <data> - n92NvoUdaRUMNZmUVqMCg77V/tM= - </data> - <key>hash2</key> - <data> - +5Rr9Rwd1h1h1A7Xy5ti7Pbdi03yjo0/h/089DV1UmY= - </data> - </dict> - <key>www/js/lib/blogs/ArchiveView.js</key> - <dict> - <key>hash</key> - <data> - 0MoYu/cf89T9Yj3/GqkxVS5Kn0s= - </data> - <key>hash2</key> - <data> - v3axxDFmZxOIUfaVfkbvZECsJNT7TIo2cw8PXjfm2P8= - </data> - </dict> - <key>www/js/lib/blogs/BlogView.js</key> - <dict> - <key>hash</key> - <data> - XZ57l39rkb5nXmank50SQ81rtds= - </data> - <key>hash2</key> - <data> - uDNYBYkepNo957b+bXnG0qorjTjFOskXi9r3zwnUEkY= - </data> - </dict> - <key>www/js/lib/blogs/HubView.js</key> - <dict> - <key>hash</key> - <data> - 4oI73qy2Z5DyyiA8Kz+k1+9vLnQ= - </data> - <key>hash2</key> - <data> - J7ZclyOypLHuMdugOZQJ1O372GtIB66AoF1qFr05X+c= - </data> - </dict> - <key>www/js/lib/blogs/PageView.js</key> - <dict> - <key>hash</key> - <data> - fnTO0QKgJ08PPNTrTuT+hgmLtqc= - </data> - <key>hash2</key> - <data> - VsXsi+sWVrMIqMfJaVbz1F8vRRBCjD2567f9s/CCY0o= - </data> - </dict> - <key>www/js/lib/blogs/StoryView.js</key> - <dict> - <key>hash</key> - <data> - 0uCBjGnwq8xsO5chZu/C1rGZ/SQ= - </data> - <key>hash2</key> - <data> - P24JvyHX4Qjfs2Qa+rzt0M9SmSftEC6wuXzTPYoun9k= - </data> - </dict> - <key>www/js/lib/cart/CartConfirm.js</key> - <dict> - <key>hash</key> - <data> - jqryKPHj843xlpHaPq2On9mfaeM= - </data> - <key>hash2</key> - <data> - hwM8ywf2UkBfn5K+v8iYkHBdURnsPGGwBs1vX47bskE= - </data> - </dict> - <key>www/js/lib/cart/CartError.js</key> - <dict> - <key>hash</key> - <data> - AeAnmVjk6HP4fhuICpuG8nHnFuI= - </data> - <key>hash2</key> - <data> - URcrCrG0fi/wB6NRqqTlI8g3la+JFFbmRBD/LWhctFM= - </data> - </dict> - <key>www/js/lib/cart/CartPayment.js</key> - <dict> - <key>hash</key> - <data> - 4SLlztcXjDFBhv19I8bRmWhUyd0= - </data> - <key>hash2</key> - <data> - ZXTk0vvbJFKlWQolPRcoel3J88qHqHdP3Ex0xNUFrCM= - </data> - </dict> - <key>www/js/lib/cart/CartShipping.js</key> - <dict> - <key>hash</key> - <data> - 8O97NpkLXlSPzbhrgsE/a0tIGuY= - </data> - <key>hash2</key> - <data> - bs4wuVl4Cq88V/xwSIbykmJ1NKUltTyCXtWHJt8q+7c= - </data> - </dict> - <key>www/js/lib/cart/CartSummary.js</key> - <dict> - <key>hash</key> - <data> - YYiOPlDBi/ESvBJZ+bBt5ElQ254= - </data> - <key>hash2</key> - <data> - ctAGdJM1VwXGTVUdpT9sXBETsIAdWS5Rbl/NGP/Qkic= - </data> - </dict> - <key>www/js/lib/cart/CartThanks.js</key> - <dict> - <key>hash</key> - <data> - JOo957U9zyzfOkwPIJ7K0oMB5SA= - </data> - <key>hash2</key> - <data> - l+oEvv8XpnQdQeuTutSxtdQZG0UBvlIjNvo8DtlPdec= - </data> - </dict> - <key>www/js/lib/cart/CartView.js</key> - <dict> - <key>hash</key> - <data> - +kmEZ9ukx0LiHKArz7oWZyBZr/4= - </data> - <key>hash2</key> - <data> - FQeeZlPKs/Ma/jhjSRzHRtl4LTWr5JJMQAyutOIbmbo= - </data> - </dict> - <key>www/js/lib/etc/backup_db.js</key> - <dict> - <key>hash</key> - <data> - LS64v8X6RPikJtQ057nQlmza3m4= - </data> - <key>hash2</key> - <data> - EBINa1CgwwZ0Apb2OjVvYgRgGx9qSqomyu1zDCNpwDU= - </data> - </dict> - <key>www/js/lib/etc/deeplink.js</key> - <dict> - <key>hash</key> - <data> - Xjr3J9pMm16R4X4Ez0w2889N4Is= - </data> - <key>hash2</key> - <data> - dwd1KWvpTJljBVWokg9OGGiAbSMHP2o5wW87A00AXLg= - </data> - </dict> - <key>www/js/lib/etc/geo.js</key> - <dict> - <key>hash</key> - <data> - xaQ5M8Pao+Ewh6usOyD5UV/49gc= - </data> - <key>hash2</key> - <data> - oxNHfAVByZZMvhua5IaksimLkMzcuIPc+KfyEM6tQm8= - </data> - </dict> - <key>www/js/lib/etc/push.js</key> - <dict> - <key>hash</key> - <data> - +3CWZcxp1Ao9A/4KiM4nA82Hia8= - </data> - <key>hash2</key> - <data> - 1kY0DEwWFQO8RFoncYf/51g2MWyKHwesCyP/Nt7xDXk= - </data> - </dict> - <key>www/js/lib/nav/AddressView.js</key> - <dict> - <key>hash</key> - <data> - JFoETIdARQvI5GU6tc1YJhhttEc= - </data> - <key>hash2</key> - <data> - tlqapPZSqJXPu1tVTEPiqafuJYdHnff/lCfnLeAzXrs= - </data> - </dict> - <key>www/js/lib/nav/CreditCardView.js</key> - <dict> - <key>hash</key> - <data> - uV1Y5XohZktnJXSKPs/gt/vhlzk= - </data> - <key>hash2</key> - <data> - kTv/+Lvcpehdpd3a6ZDzFFKSBtfBm5D77mIZwNOusHE= - </data> - </dict> - <key>www/js/lib/nav/CurtainView.js</key> - <dict> - <key>hash</key> - <data> - VHa9pwxWtQ31RhBknlTCAqrKA7c= - </data> - <key>hash2</key> - <data> - m1y+MtkztLia5cyx9E5WrAch10YftRlFUZnP0EtrmDs= - </data> - </dict> - <key>www/js/lib/nav/FooterView.js</key> - <dict> - <key>hash</key> - <data> - WaOKgFizQ3W8RPEhwga57tf3sLM= - </data> - <key>hash2</key> - <data> - Z2+GeBAj/oHQ6m3AxNvY8tIeLbh2Kv4ScrteiHlFdm8= - </data> - </dict> - <key>www/js/lib/nav/HeaderView.js</key> - <dict> - <key>hash</key> - <data> - Ui2nti/7MEoaanRA/U1QuO6cVSQ= - </data> - <key>hash2</key> - <data> - 6lCUODPVbVjct435xG/PZL/QEtmKxzMj702T2xVy5sU= - </data> - </dict> - <key>www/js/lib/nav/IntroView.js</key> - <dict> - <key>hash</key> - <data> - FSNPuiLwJs4MyLmkvAY6k3RPRF8= - </data> - <key>hash2</key> - <data> - Ex044mlBP+DCpAFwCDbsYSIAPyFSB8owff1K4+5gNx4= - </data> - </dict> - <key>www/js/lib/nav/NavView.js</key> - <dict> - <key>hash</key> - <data> - vVy7+c8F2D+3VFixaG8D1GqdHL4= - </data> - <key>hash2</key> - <data> - GZ1IlXF1CFdDOhLEAbLhaRC7+M6rji5WGXKoyWg0yS8= - </data> - </dict> - <key>www/js/lib/nav/SearchView.js</key> - <dict> - <key>hash</key> - <data> - b8Xg3rQZIafOl+uBceHrk6yVqYU= - </data> - <key>hash2</key> - <data> - JDO4vy0leucXMPsoEpMJ2/hXdJ9gIkGmarDk9ev5ZsY= - </data> - </dict> - <key>www/js/lib/products/ClosedStoreView.js</key> - <dict> - <key>hash</key> - <data> - iDWe+pvx3vGBohpZ05biGudY71o= - </data> - <key>hash2</key> - <data> - yQ+emjRXzZ9ubsvwSI6Uw3d8Msi7FA1HBrqOKErjK2g= - </data> - </dict> - <key>www/js/lib/products/CollectionView.js</key> - <dict> - <key>hash</key> - <data> - g7ama0ca186rxP6eho2Lcqqlaxo= - </data> - <key>hash2</key> - <data> - NcitCXjEiXmYPy2MrX5QRfk41qI0GFkD0kZTTx7uFr8= - </data> - </dict> - <key>www/js/lib/products/GalleryView.js</key> - <dict> - <key>hash</key> - <data> - CpqSBwnIKxV0wFGD8GdU82L9oqI= - </data> - <key>hash2</key> - <data> - n3fH37jyJVsN6JkJvkx3OIotptVwo/xM41D0vs6EefY= - </data> - </dict> - <key>www/js/lib/products/ProductView.js</key> - <dict> - <key>hash</key> - <data> - y8oQIYrgG+mfj1RXFIyCOzFLNaU= - </data> - <key>hash2</key> - <data> - q44Y3/AkLJes50oNASO7J22TPTk2wx71qMwVvXQF0Aw= - </data> - </dict> - <key>www/js/lib/products/Selector.js</key> - <dict> - <key>hash</key> - <data> - QxR583tVoXxutmfsJwO9Trbb8QE= - </data> - <key>hash2</key> - <data> - KDQ0bOdXozaa7mbPZwIkDY0Vm4va6sTjWqOg1TLsNPY= - </data> - </dict> - <key>www/js/lib/products/filters/CategoryFilter.js</key> - <dict> - <key>hash</key> - <data> - z8glR9hNUq3u4RpoKJRCV6oag8o= - </data> - <key>hash2</key> - <data> - fi59s2GbjQHohiAgsq3FrGeWsxe0gKfBjOnPcCqi69o= - </data> - </dict> - <key>www/js/lib/products/filters/DepartmentFilter.js</key> - <dict> - <key>hash</key> - <data> - 8NWvfVz9fG9fo5KCmaEw/J3WOjQ= - </data> - <key>hash2</key> - <data> - 6gaF1qrD9qw36meq0L5sR0tc8WHABwpqex19+ggSMu8= - </data> - </dict> - <key>www/js/lib/products/filters/SizeFilter.js</key> - <dict> - <key>hash</key> - <data> - o/z0F+RylPMY7gYqKn5AUSGjkGE= - </data> - <key>hash2</key> - <data> - 9bxD78h/TRL6HppSlXF3bc2mUsHW/YOCeWZAHPgtD90= - </data> - </dict> - <key>www/js/lib/view/Router.js</key> - <dict> - <key>hash</key> - <data> - nC19loTSWgo+YghXIQTdo2qViKw= - </data> - <key>hash2</key> - <data> - 6Y3/Vpzh9KunOo/v0vAvMT8rf25acj/6OB74XRISu4s= - </data> - </dict> - <key>www/js/lib/view/Scrollable.js</key> - <dict> - <key>hash</key> - <data> - w8k3ObVeDwNmo5N4RSbu094FfTk= - </data> - <key>hash2</key> - <data> - 8fhfyk4Wi6tf1yJbkt57+eNjgJpsGqWKvHM2hKIu4aM= - </data> - </dict> - <key>www/js/lib/view/Serializable.js</key> - <dict> - <key>hash</key> - <data> - TZu3vDiiaHeg3ApJ+HZowCDsPvE= - </data> - <key>hash2</key> - <data> - 8Ctj4kMul3md0vu7ihiR3Fz8H7X1/CcMMZ0Jctd4S2Q= - </data> - </dict> - <key>www/js/lib/view/View.js</key> - <dict> - <key>hash</key> - <data> - 1vOGv/o4d073vpU6t8Dn08nZsnY= - </data> - <key>hash2</key> - <data> - DHHSWtioHVLGu5C7QPQdLXBY5ufUvieTSsf2k19yLkw= - </data> - </dict> - <key>www/js/sdk/_sdk.js</key> - <dict> - <key>hash</key> - <data> - +RIDPxfqUZwaTbuh+hEYSte1cv0= - </data> - <key>hash2</key> - <data> - PjbBMjYeor9n8QefRZ4/bthUR0xgliIr5i1w89Wp7Ws= - </data> - </dict> - <key>www/js/sdk/account.js</key> - <dict> - <key>hash</key> - <data> - iFcyfpZSqqeP8RQ80FNBdRFrjNI= - </data> - <key>hash2</key> - <data> - 3ENHjzZacCXTS8uC2zYOnkx2MidichrC10T67Ydgop0= - </data> - </dict> - <key>www/js/sdk/address.js</key> - <dict> - <key>hash</key> - <data> - 58zTcGuj9yQkjVJYaxboOYe+LiI= - </data> - <key>hash2</key> - <data> - K0b2odCsO18fnoXffNL5d80Bcm3aZdP84y3cRjwDZIE= - </data> - </dict> - <key>www/js/sdk/auth.js</key> - <dict> - <key>hash</key> - <data> - +1ZjnlN26KDrimArQWfhljcz3CM= - </data> - <key>hash2</key> - <data> - HqJDZULqlG5IKEg7hjVHwXPq953Qvy5Lai7Q6ucCqdo= - </data> - </dict> - <key>www/js/sdk/cart.js</key> - <dict> - <key>hash</key> - <data> - TWij8pn0/F4YBj04iBZzNX2NyuQ= - </data> - <key>hash2</key> - <data> - V382WXrermJ4bUwIGFZPVpATsxPPKYP6wGf4eYf9D1M= - </data> - </dict> - <key>www/js/sdk/payment.js</key> - <dict> - <key>hash</key> - <data> - j3efOwLU577n/V2UAVxVHU/0NB8= - </data> - <key>hash2</key> - <data> - H1YwKYswGAw+HMPtyd1wps5fQFx3NoXd9sGW7IZbsmU= - </data> - </dict> - <key>www/js/sdk/product.js</key> - <dict> - <key>hash</key> - <data> - ZYf0fQuZdLIS1ZXTJSingxo32Hs= - </data> - <key>hash2</key> - <data> - 1pf0iSfyvVwyQgWo2RFIHGyYEGn/8ZszSzJ0MDZ4zNI= - </data> - </dict> - <key>www/js/sdk/shipping.js</key> - <dict> - <key>hash</key> - <data> - 04qsgSJ7isNdqyVfM1LQ7Q6wRwM= - </data> - <key>hash2</key> - <data> - 580ij6TiPbA/d/1bB4nVY6ooXNZevcTCExA0YQ9vJxc= - </data> - </dict> - <key>www/js/vendor/fastclick.js</key> - <dict> - <key>hash</key> - <data> - GsPVekcRLSRd6GYRskvAbulostc= - </data> - <key>hash2</key> - <data> - ZrSDQkfU6EtN7AI5A0E6m+oQPEubPVStTwGmPXfwGTk= - </data> - </dict> - <key>www/js/vendor/flickity.pkgd.js</key> - <dict> - <key>hash</key> - <data> - 7+L7DJW+IWJnI8uOkBFuyww3Bk0= - </data> - <key>hash2</key> - <data> - vF2sYxgNn4r/4NnhBHz/44B9O8nWsxHRUd0Gf1FOK3w= - </data> - </dict> - <key>www/js/vendor/iscroll.js</key> - <dict> - <key>hash</key> - <data> - zmIJQRtMdsZHuPuHvHEe8K1HC7w= - </data> - <key>hash2</key> - <data> - 9xQKJ2r3WFI2Tu+IDxNHP9R5FFW6LNZQt0RuZWJ0Kp0= - </data> - </dict> - <key>www/js/vendor/jquery-2.1.4.min.js</key> - <dict> - <key>hash</key> - <data> - Q9xVRgjfiFpZ3e7OFZjGrOQ010c= - </data> - <key>hash2</key> - <data> - 8WqyJLuWKRBVhxXIL1jBDD7SDxU936oZkCnxQbWwJVw= - </data> - </dict> - <key>www/js/vendor/jquery.creditCardValidator.js</key> - <dict> - <key>hash</key> - <data> - Y27vkeRB6sxVVgVnzd82mRHab3g= - </data> - <key>hash2</key> - <data> - FfTayl3QgyS4UvFgbGlNPSlDtkC28Q3RUhSVQV0CwKg= - </data> - </dict> - <key>www/js/vendor/loader.js</key> - <dict> - <key>hash</key> - <data> - MNfNXlpvgsuGkqhXhawkjJxwGGU= - </data> - <key>hash2</key> - <data> - +OqOjwnNrePNGE3Ysj4ZPjCFUTgVSlnMDU0NxGVQwWs= - </data> - </dict> - <key>www/js/vendor/lodash.min.js</key> - <dict> - <key>hash</key> - <data> - QH5J71GV/YmbKvW8dOzPWmIy2Js= - </data> - <key>hash2</key> - <data> - v2PESRFA3ocCdVenwVx0H2XIPZgnQ0exBaBqIOBc540= - </data> - </dict> - <key>www/js/vendor/moment.js</key> - <dict> - <key>hash</key> - <data> - up6xZ/qvAr5h9VNpOTtzN9Jzv6Y= - </data> - <key>hash2</key> - <data> - 9ZXOLpTlQ1GMKN+vOTmxc+Vm4sRw7L9QDtZ50hJI+sc= - </data> - </dict> - <key>www/js/vendor/oktween.js</key> - <dict> - <key>hash</key> - <data> - IbqDpG6Qitgu8bvKthKC6hJyb1g= - </data> - <key>hash2</key> - <data> - 6y0dV3eCnszS6gNMOt5VQ7k92tajbtVRGERxEVEp8No= - </data> - </dict> - <key>www/js/vendor/prefixfree.js</key> - <dict> - <key>hash</key> - <data> - ImNOjml3qilBB3P2Q+D2oh0XZlo= - </data> - <key>hash2</key> - <data> - mGlBZZ4/+6zoe8Imph39ztEQhANPhQDDew+fggkgXso= - </data> - </dict> - <key>www/js/vendor/promise.js</key> - <dict> - <key>hash</key> - <data> - c/6/xZdHlYR9yLjMoxE3Tk2wdgc= - </data> - <key>hash2</key> - <data> - TPK5MrYxjIfzZUK1ZamFwPo26qfMm+jiEB2C9FoWMRQ= - </data> - </dict> - <key>www/js/vendor/util.js</key> - <dict> - <key>hash</key> - <data> - awGO8rHbB+UyNdCDbLXrp2nihQg= - </data> - <key>hash2</key> - <data> - abyzwamkkJLDbsXnk/TE74wXjj9SlJX9kA+53MuezZA= - </data> - </dict> - <key>www/plugins/cordova-plugin-console/www/console-via-logger.js</key> - <dict> - <key>hash</key> - <data> - NyUkntRl9vFIiOC3onmXNsxpedU= - </data> - <key>hash2</key> - <data> - cCcOHB0gfKqE6bS4NoAZMvlzcHaWDemJfOWOOw+cI/8= - </data> - </dict> - <key>www/plugins/cordova-plugin-console/www/logger.js</key> - <dict> - <key>hash</key> - <data> - tmAfmQQR8NZd7y+bTWuju4/TbY0= - </data> - <key>hash2</key> - <data> - ESzk4H7ypO9esEfCCJl4Sw+BH3M31e0OkRdbsNe0Wcc= - </data> - </dict> - <key>www/plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js</key> - <dict> - <key>hash</key> - <data> - 0NrlXTwBHUS5u9XaqkoSJ+waVDo= - </data> - <key>hash2</key> - <data> - SbvHr9WKyz3ru8I7xjp3L/R4cE0LwxQb91YQEXPQIi4= - </data> - </dict> - <key>www/plugins/cordova-plugin-device/www/device.js</key> - <dict> - <key>hash</key> - <data> - DgD9WKGqlbNViEZBSi4Wenbl/uM= - </data> - <key>hash2</key> - <data> - 75fkIus2+MF7kZSUTo0HFvPQWqyneMrHDoQXHcvK/fk= - </data> - </dict> - <key>www/plugins/cordova-plugin-dialogs/www/notification.js</key> - <dict> - <key>hash</key> - <data> - 7DTImwpj5B7VCelKiHdmmFLX6h0= - </data> - <key>hash2</key> - <data> - OY9J4siJjz0x+SKUjBVqdprLf2olxAVAx0TuQi2zSHg= - </data> - </dict> - <key>www/plugins/cordova-plugin-geolocation/www/Coordinates.js</key> - <dict> - <key>hash</key> - <data> - B+vlNAwNL/8E91a2w8xN/QZtP9o= - </data> - <key>hash2</key> - <data> - OMLyPkrlZ2a8QPIWTLVOYtPW/6JKdiOvR5V4pO/Covs= - </data> - </dict> - <key>www/plugins/cordova-plugin-geolocation/www/Position.js</key> - <dict> - <key>hash</key> - <data> - 1DZ/xrP/zFT+anCeCYYt+uuQIyU= - </data> - <key>hash2</key> - <data> - bajmSfpMjHjoSzrL1TPI1J8K3SrZyVFPoU11T0if/Y8= - </data> - </dict> - <key>www/plugins/cordova-plugin-geolocation/www/PositionError.js</key> - <dict> - <key>hash</key> - <data> - NZQ0MpOiURNiYMJS79+bdtSDnzI= - </data> - <key>hash2</key> - <data> - W7UeIudqey1Q4CAafAS1HMHib9BAeyvfD0Kj20Dx0m0= - </data> - </dict> - <key>www/plugins/cordova-plugin-geolocation/www/geolocation.js</key> - <dict> - <key>hash</key> - <data> - DBMSf1DRKjXfKMDgaSJHjnx+wgI= - </data> - <key>hash2</key> - <data> - c0FvNwJUoj6DTFiJbDJ//4pUO/Nc0Pmmq+lh9eVocuE= - </data> - </dict> - <key>www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js</key> - <dict> - <key>hash</key> - <data> - EfUzmAcUagDDJeG2yHQTy4FngxU= - </data> - <key>hash2</key> - <data> - CKuxAFfWQy3W36zfMt2eAc22BRQLnyWoCbuM+jlEBuk= - </data> - </dict> - <key>www/plugins/cordova-plugin-network-information/www/Connection.js</key> - <dict> - <key>hash</key> - <data> - QP5YzumNbUCPIZ96Xkpu5RegRY0= - </data> - <key>hash2</key> - <data> - e+LNrLCJeaza8OmeupCA7JOSHM6BaBjmEt95Z5DDRZo= - </data> - </dict> - <key>www/plugins/cordova-plugin-network-information/www/network.js</key> - <dict> - <key>hash</key> - <data> - jxeuXL/JPk6C5eQC7iVThLg7NPc= - </data> - <key>hash2</key> - <data> - 6BrhkQ/LskQvmM1rbhciH8KThNK7PeYwvje9PZsZIro= - </data> - </dict> - <key>www/plugins/cordova-plugin-splashscreen/www/splashscreen.js</key> - <dict> - <key>hash</key> - <data> - n2E0W8B/grOxM2ORx/haAYOWIcA= - </data> - <key>hash2</key> - <data> - YSn19P0zRIG9MxdesT37iqYB1WqXVOFIXyjmnTn6foU= - </data> - </dict> - <key>www/plugins/cordova-plugin-statusbar/www/statusbar.js</key> - <dict> - <key>hash</key> - <data> - hDT++3ZaOTp3t16AAFAibxtovj0= - </data> - <key>hash2</key> - <data> - JVFddhH/G0jM/7U0DOdpW1CvUNswIGcQB9WylyRtCBM= - </data> - </dict> - <key>www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js</key> - <dict> - <key>hash</key> - <data> - p2ovf3IcCK49/GvqK+j7UmFu1zI= - </data> - <key>hash2</key> - <data> - vaAJBb/wNtJKRgYT7sxU/Sv+fqB5bfWIw3SyBSUukCI= - </data> - </dict> - <key>www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js</key> - <dict> - <key>hash</key> - <data> - gexyZjGUVvhbQiJbBzCrImXWv34= - </data> - <key>hash2</key> - <data> - s8oy4VvWgJx67mjrcY9CWo7fZ0VqTuZEyLnykDMBTXs= - </data> - </dict> - <key>www/plugins/phonegap-plugin-push/www/push.js</key> - <dict> - <key>hash</key> - <data> - AF+WnBEprzr+ql8AKjlyCUKSiTI= - </data> - <key>hash2</key> - <data> - DM9CphyuhWhvXVU7i7uP/StHfzN+/Qa2dT8+dOaab6I= - </data> - </dict> - </dict> - <key>rules</key> - <dict> - <key>^</key> - <true/> - <key>^.*\.lproj/</key> - <dict> - <key>optional</key> - <true/> - <key>weight</key> - <real>1000</real> - </dict> - <key>^.*\.lproj/locversion.plist$</key> - <dict> - <key>omit</key> - <true/> - <key>weight</key> - <real>1100</real> - </dict> - <key>^Base\.lproj/</key> - <dict> - <key>weight</key> - <real>1010</real> - </dict> - <key>^version.plist$</key> - <true/> - </dict> - <key>rules2</key> - <dict> - <key>.*\.dSYM($|/)</key> - <dict> - <key>weight</key> - <real>11</real> - </dict> - <key>^</key> - <dict> - <key>weight</key> - <real>20</real> - </dict> - <key>^(.*/)?\.DS_Store$</key> - <dict> - <key>omit</key> - <true/> - <key>weight</key> - <real>2000</real> - </dict> - <key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key> - <dict> - <key>nested</key> - <true/> - <key>weight</key> - <real>10</real> - </dict> - <key>^.*</key> - <true/> - <key>^.*\.lproj/</key> - <dict> - <key>optional</key> - <true/> - <key>weight</key> - <real>1000</real> - </dict> - <key>^.*\.lproj/locversion.plist$</key> - <dict> - <key>omit</key> - <true/> - <key>weight</key> - <real>1100</real> - </dict> - <key>^Base\.lproj/</key> - <dict> - <key>weight</key> - <real>1010</real> - </dict> - <key>^Info\.plist$</key> - <dict> - <key>omit</key> - <true/> - <key>weight</key> - <real>20</real> - </dict> - <key>^PkgInfo$</key> - <dict> - <key>omit</key> - <true/> - <key>weight</key> - <real>20</real> - </dict> - <key>^[^/]+$</key> - <dict> - <key>nested</key> - <true/> - <key>weight</key> - <real>10</real> - </dict> - <key>^embedded\.provisionprofile$</key> - <dict> - <key>weight</key> - <real>20</real> - </dict> - <key>^version\.plist$</key> - <dict> - <key>weight</key> - <real>20</real> - </dict> - </dict> -</dict> -</plist> diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/archived-expanded-entitlements.xcent b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/archived-expanded-entitlements.xcent deleted file mode 100644 index 903def2a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/archived-expanded-entitlements.xcent +++ /dev/null @@ -1,8 +0,0 @@ -<?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>aps-environment</key> - <string>development</string> -</dict> -</plist> diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/config.xml b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/config.xml deleted file mode 100755 index eec4a35a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/config.xml +++ /dev/null @@ -1,93 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<widget android-versionCode="6091" id="us.okfoc.stoneisland" version="0.9.1" 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> - <feature name="HandleOpenUrl"> - <param name="ios-package" value="CDVHandleOpenURL" /> - <param name="onload" value="true" /> - </feature> - <feature name="IntentAndNavigationFilter"> - <param name="ios-package" value="CDVIntentAndNavigationFilter" /> - <param name="onload" value="true" /> - </feature> - <feature name="GestureHandler"> - <param name="ios-package" value="CDVGestureHandler" /> - <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="SplashScreen"> - <param name="ios-package" value="CDVSplashScreen" /> - <param name="onload" value="true" /> - </feature> - <feature name="StatusBar"> - <param name="ios-package" value="CDVStatusBar" /> - <param name="onload" value="true" /> - </feature> - <feature name="SocialSharing"> - <param name="ios-package" value="SocialSharing" /> - <param name="onload" value="true" /> - </feature> - <feature name="Keyboard"> - <param name="ios-package" onload="true" value="IonicKeyboard" /> - </feature> - <feature name="PushNotification"> - <param name="ios-package" value="PushPlugin" /> - </feature> - <name>Stone Island</name> - <description> - Stone Island - </description> - <author email="julescarbon@gmail.com" href="http://asdf.us/"> - Jules Laplace - </author> - <content src="index.html" /> - <access origin="*" /> - <allow-intent href="http://*/*" /> - <allow-intent href="https://*/*" /> - <allow-intent href="tel:*" /> - <allow-intent href="sms:*" /> - <allow-intent href="mailto:*" /> - <allow-intent href="geo:*" /> - <allow-intent href="itms:*" /> - <allow-intent href="itms-apps:*" /> - <preference name="AllowInlineMediaPlayback" value="true" /> - <preference name="BackupWebStorage" value="local" /> - <preference name="DisallowOverscroll" value="true" /> - <preference name="EnableViewportScale" value="true" /> - <preference name="KeyboardDisplayRequiresUserAction" value="false" /> - <preference name="MediaPlaybackRequiresUserAction" value="false" /> - <preference name="SuppressesIncrementalRendering" value="true" /> - <preference name="SuppressesLongPressGesture" value="false" /> - <preference name="Suppresses3DTouchGesture" value="false" /> - <preference name="GapBetweenPages" value="0" /> - <preference name="PageLength" value="0" /> - <preference name="PaginationBreakingMode" value="page" /> - <preference name="PaginationMode" value="unpaginated" /> - <preference name="StatusBarOverlaysWebView" value="false" /> - <preference name="StatusBarStyle" value="default" /> - <preference name="TopActivityIndicator" value="white" /> - <preference name="HideKeyboardFormAccessoryBar" value="false" /> - <preference name="orientation" value="portrait" /> - <preference name="StatusBarBackgroundColor" value="#ffffff" /> - <preference name="SplashMaintainAspectRatio" value="true" /> - <preference name="ShowSplashScreenSpinner" value="false" /> - <preference name="AutoHideSplashScreen" value="false" /> -</widget> diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/embedded.mobileprovision b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/embedded.mobileprovision Binary files differdeleted file mode 100644 index 7ef37a30..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/embedded.mobileprovision +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova-js-src/exec.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova-js-src/exec.js deleted file mode 100644 index 3fb7fa19..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova-js-src/exec.js +++ /dev/null @@ -1,262 +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 require, module, atob, document */ - -/** - * Creates a gap bridge iframe used to notify the native code about queued - * commands. - */ -var cordova = require('cordova'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'), - execIframe, - commandQueue = [], // Contains pending JS->Native messages. - isInContextOfEvalJs = 0, - failSafeTimerId = 0; - -function massageArgsJsToNative(args) { - if (!args || utils.typeName(args) != 'Array') { - return args; - } - var ret = []; - args.forEach(function(arg, i) { - if (utils.typeName(arg) == 'ArrayBuffer') { - ret.push({ - 'CDVType': 'ArrayBuffer', - 'data': base64.fromArrayBuffer(arg) - }); - } else { - ret.push(arg); - } - }); - return ret; -} - -function massageMessageNativeToJs(message) { - if (message.CDVType == 'ArrayBuffer') { - var stringToArrayBuffer = function(str) { - var ret = new Uint8Array(str.length); - for (var i = 0; i < str.length; i++) { - ret[i] = str.charCodeAt(i); - } - return ret.buffer; - }; - var base64ToArrayBuffer = function(b64) { - return stringToArrayBuffer(atob(b64)); - }; - message = base64ToArrayBuffer(message.data); - } - return message; -} - -function convertMessageToArgsNativeToJs(message) { - var args = []; - if (!message || !message.hasOwnProperty('CDVType')) { - args.push(message); - } else if (message.CDVType == 'MultiPart') { - message.messages.forEach(function(e) { - args.push(massageMessageNativeToJs(e)); - }); - } else { - args.push(massageMessageNativeToJs(message)); - } - return args; -} - -function iOSExec() { - - var successCallback, failCallback, service, action, actionArgs; - var callbackId = null; - if (typeof arguments[0] !== 'string') { - // FORMAT ONE - successCallback = arguments[0]; - failCallback = arguments[1]; - service = arguments[2]; - action = arguments[3]; - actionArgs = arguments[4]; - - // Since we need to maintain backwards compatibility, we have to pass - // an invalid callbackId even if no callback was provided since plugins - // will be expecting it. The Cordova.exec() implementation allocates - // an invalid callbackId and passes it even if no callbacks were given. - callbackId = 'INVALID'; - } else { - throw new Error('The old format of this exec call has been removed (deprecated since 2.1). Change to: ' + - 'cordova.exec(null, null, \'Service\', \'action\', [ arg1, arg2 ]);' - ); - } - - // If actionArgs is not provided, default to an empty array - actionArgs = actionArgs || []; - - // Register the callbacks and add the callbackId to the positional - // arguments if given. - if (successCallback || failCallback) { - callbackId = service + cordova.callbackId++; - cordova.callbacks[callbackId] = - {success:successCallback, fail:failCallback}; - } - - actionArgs = massageArgsJsToNative(actionArgs); - - var command = [callbackId, service, action, actionArgs]; - - // Stringify and queue the command. We stringify to command now to - // effectively clone the command arguments in case they are mutated before - // the command is executed. - commandQueue.push(JSON.stringify(command)); - - // If we're in the context of a stringByEvaluatingJavaScriptFromString call, - // then the queue will be flushed when it returns; no need for a poke. - // Also, if there is already a command in the queue, then we've already - // poked the native side, so there is no reason to do so again. - if (!isInContextOfEvalJs && commandQueue.length == 1) { - pokeNative(); - } -} - -// CB-10530 -function proxyChanged() { - var cexec = cordovaExec(); - - return (execProxy !== cexec && // proxy objects are different - iOSExec !== cexec // proxy object is not the current iOSExec - ); -} - -// CB-10106 -function handleBridgeChange() { - if (proxyChanged()) { - var commandString = commandQueue.shift(); - while(commandString) { - var command = JSON.parse(commandString); - var callbackId = command[0]; - var service = command[1]; - var action = command[2]; - var actionArgs = command[3]; - var callbacks = cordova.callbacks[callbackId] || {}; - - execProxy(callbacks.success, callbacks.fail, service, action, actionArgs); - - commandString = commandQueue.shift(); - }; - return true; - } - - return false; -} - -function pokeNative() { - // CB-5488 - Don't attempt to create iframe before document.body is available. - if (!document.body) { - setTimeout(pokeNative); - return; - } - - // Check if they've removed it from the DOM, and put it back if so. - if (execIframe && execIframe.contentWindow) { - execIframe.contentWindow.location = 'gap://ready'; - } else { - execIframe = document.createElement('iframe'); - execIframe.style.display = 'none'; - execIframe.src = 'gap://ready'; - document.body.appendChild(execIframe); - } - // Use a timer to protect against iframe being unloaded during the poke (CB-7735). - // This makes the bridge ~ 7% slower, but works around the poke getting lost - // when the iframe is removed from the DOM. - // An onunload listener could be used in the case where the iframe has just been - // created, but since unload events fire only once, it doesn't work in the normal - // case of iframe reuse (where unload will have already fired due to the attempted - // navigation of the page). - failSafeTimerId = setTimeout(function() { - if (commandQueue.length) { - // CB-10106 - flush the queue on bridge change - if (!handleBridgeChange()) { - pokeNative(); - } - } - }, 50); // Making this > 0 improves performance (marginally) in the normal case (where it doesn't fire). -} - -iOSExec.nativeFetchMessages = function() { - // Stop listing for window detatch once native side confirms poke. - if (failSafeTimerId) { - clearTimeout(failSafeTimerId); - failSafeTimerId = 0; - } - // Each entry in commandQueue is a JSON string already. - if (!commandQueue.length) { - return ''; - } - var json = '[' + commandQueue.join(',') + ']'; - commandQueue.length = 0; - return json; -}; - -iOSExec.nativeCallback = function(callbackId, status, message, keepCallback, debug) { - return iOSExec.nativeEvalAndFetch(function() { - var success = status === 0 || status === 1; - var args = convertMessageToArgsNativeToJs(message); - function nc2() { - cordova.callbackFromNative(callbackId, success, status, args, keepCallback); - } - setTimeout(nc2, 0); - }); -}; - -iOSExec.nativeEvalAndFetch = function(func) { - // This shouldn't be nested, but better to be safe. - isInContextOfEvalJs++; - try { - func(); - return iOSExec.nativeFetchMessages(); - } finally { - isInContextOfEvalJs--; - } -}; - -// Proxy the exec for bridge changes. See CB-10106 - -function cordovaExec() { - var cexec = require('cordova/exec'); - var cexec_valid = (typeof cexec.nativeFetchMessages === 'function') && (typeof cexec.nativeEvalAndFetch === 'function') && (typeof cexec.nativeCallback === 'function'); - return (cexec_valid && execProxy !== cexec)? cexec : iOSExec; -} - -function execProxy() { - cordovaExec().apply(null, arguments); -}; - -execProxy.nativeFetchMessages = function() { - return cordovaExec().nativeFetchMessages.apply(null, arguments); -}; - -execProxy.nativeEvalAndFetch = function() { - return cordovaExec().nativeEvalAndFetch.apply(null, arguments); -}; - -execProxy.nativeCallback = function() { - return cordovaExec().nativeCallback.apply(null, arguments); -}; - -module.exports = execProxy; diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova-js-src/platform.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova-js-src/platform.js deleted file mode 100644 index 36529ba5..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova-js-src/platform.js +++ /dev/null @@ -1,28 +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. - * -*/ - -module.exports = { - id: 'ios', - bootstrap: function() { - require('cordova/channel').onNativeReady.fire(); - } -}; - diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova.js deleted file mode 100644 index 3540a020..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova.js +++ /dev/null @@ -1,1938 +0,0 @@ -// Platform: ios -// 7c5fcc5a5adfbf3fb8ceaf36fbdd4bd970bd9c20 -/* - 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. -*/ -;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '4.4.0'; -// file: src/scripts/require.js - -/*jshint -W079 */ -/*jshint -W020 */ - -var require, - define; - -(function () { - var modules = {}, - // Stack of moduleIds currently being built. - requireStack = [], - // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; - - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; - module.exports = {}; - delete module.factory; - factory(localRequire, module.exports, module); - return module.exports; - } - - require = function (id) { - if (!modules[id]) { - throw "module " + id + " not found"; - } else if (id in inProgressModules) { - var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; - } - if (modules[id].factory) { - try { - inProgressModules[id] = requireStack.length; - requireStack.push(id); - return build(modules[id]); - } finally { - delete inProgressModules[id]; - requireStack.pop(); - } - } - return modules[id].exports; - }; - - define = function (id, factory) { - if (modules[id]) { - throw "module " + id + " already defined"; - } - - modules[id] = { - id: id, - factory: factory - }; - }; - - define.remove = function (id) { - delete modules[id]; - }; - - define.moduleMap = modules; -})(); - -//Export for use in node -if (typeof module === "object" && typeof require === "function") { - module.exports.require = require; - module.exports.define = define; -} - -// file: src/cordova.js -define("cordova", function(require, exports, module) { - -// Workaround for Windows 10 in hosted environment case -// http://www.w3.org/html/wg/drafts/html/master/browsers.html#named-access-on-the-window-object -if (window.cordova && !(window.cordova instanceof HTMLElement)) { - throw new Error("cordova already defined"); -} - - -var channel = require('cordova/channel'); -var platform = require('cordova/platform'); - - -/** - * Intercept calls to addEventListener + removeEventListener and handle deviceready, - * resume, and pause events. - */ -var m_document_addEventListener = document.addEventListener; -var m_document_removeEventListener = document.removeEventListener; -var m_window_addEventListener = window.addEventListener; -var m_window_removeEventListener = window.removeEventListener; - -/** - * Houses custom event handlers to intercept on document + window event listeners. - */ -var documentEventHandlers = {}, - windowEventHandlers = {}; - -document.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { - documentEventHandlers[e].subscribe(handler); - } else { - m_document_addEventListener.call(document, evt, handler, capture); - } -}; - -window.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { - windowEventHandlers[e].subscribe(handler); - } else { - m_window_addEventListener.call(window, evt, handler, capture); - } -}; - -document.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { - documentEventHandlers[e].unsubscribe(handler); - } else { - m_document_removeEventListener.call(document, evt, handler, capture); - } -}; - -window.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { - windowEventHandlers[e].unsubscribe(handler); - } else { - m_window_removeEventListener.call(window, evt, handler, capture); - } -}; - -function createEvent(type, data) { - var event = document.createEvent('Events'); - event.initEvent(type, false, false); - if (data) { - for (var i in data) { - if (data.hasOwnProperty(i)) { - event[i] = data[i]; - } - } - } - return event; -} - - -var cordova = { - define:define, - require:require, - version:PLATFORM_VERSION_BUILD_LABEL, - platformVersion:PLATFORM_VERSION_BUILD_LABEL, - platformId:platform.id, - /** - * Methods to add/remove your own addEventListener hijacking on document + window. - */ - addWindowEventHandler:function(event) { - return (windowEventHandlers[event] = channel.create(event)); - }, - addStickyDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.createSticky(event)); - }, - addDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.create(event)); - }, - removeWindowEventHandler:function(event) { - delete windowEventHandlers[event]; - }, - removeDocumentEventHandler:function(event) { - delete documentEventHandlers[event]; - }, - /** - * Retrieve original event handlers that were replaced by Cordova - * - * @return object - */ - getOriginalHandlers: function() { - return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; - }, - /** - * Method to fire event from native code - * bNoDetach is required for events which cause an exception which needs to be caught in native code - */ - fireDocumentEvent: function(type, data, bNoDetach) { - var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { - documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { - // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { - document.dispatchEvent(evt); - } - documentEventHandlers[type].fire(evt); - }, 0); - } - } else { - document.dispatchEvent(evt); - } - }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { - windowEventHandlers[type].fire(evt); - }, 0); - } else { - window.dispatchEvent(evt); - } - }, - - /** - * Plugin callback mechanism. - */ - // Randomize the starting callbackId to avoid collisions after refreshing or navigating. - // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. - callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, - callbackStatus: { - NO_RESULT: 0, - OK: 1, - CLASS_NOT_FOUND_EXCEPTION: 2, - ILLEGAL_ACCESS_EXCEPTION: 3, - INSTANTIATION_EXCEPTION: 4, - MALFORMED_URL_EXCEPTION: 5, - IO_EXCEPTION: 6, - INVALID_ACTION: 7, - JSON_EXCEPTION: 8, - ERROR: 9 - }, - - /** - * Called by native code when returning successful result from an action. - */ - callbackSuccess: function(callbackId, args) { - cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); - }, - - /** - * Called by native code when returning error result from an action. - */ - callbackError: function(callbackId, args) { - // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. - // Derive success from status. - cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); - }, - - /** - * Called by native code when returning the result from an action. - */ - callbackFromNative: function(callbackId, isSuccess, status, args, keepCallback) { - try { - var callback = cordova.callbacks[callbackId]; - if (callback) { - if (isSuccess && status == cordova.callbackStatus.OK) { - callback.success && callback.success.apply(null, args); - } else if (!isSuccess) { - callback.fail && callback.fail.apply(null, args); - } - /* - else - Note, this case is intentionally not caught. - this can happen if isSuccess is true, but callbackStatus is NO_RESULT - which is used to remove a callback from the list without calling the callbacks - typically keepCallback is false in this case - */ - // Clear callback if not expecting any more results - if (!keepCallback) { - delete cordova.callbacks[callbackId]; - } - } - } - catch (err) { - var msg = "Error in " + (isSuccess ? "Success" : "Error") + " callbackId: " + callbackId + " : " + err; - console && console.log && console.log(msg); - cordova.fireWindowEvent("cordovacallbackerror", { 'message': msg }); - throw err; - } - }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { - try { - func(); - } catch(e) { - console.log("Failed to run constructor: " + e); - } - }); - } -}; - - -module.exports = cordova; - -}); - -// file: src/common/argscheck.js -define("cordova/argscheck", function(require, exports, module) { - -var utils = require('cordova/utils'); - -var moduleExports = module.exports; - -var typeMap = { - 'A': 'Array', - 'D': 'Date', - 'N': 'Number', - 'S': 'String', - 'F': 'Function', - 'O': 'Object' -}; - -function extractParamName(callee, argIndex) { - return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; -} - -function checkArgs(spec, functionName, args, opt_callee) { - if (!moduleExports.enableChecks) { - return; - } - var errMsg = null; - var typeName; - for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; - // Asterix means allow anything. - if (c == '*') { - continue; - } - typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { - continue; - } - if (typeName != typeMap[cUpper]) { - errMsg = 'Expected ' + typeMap[cUpper]; - break; - } - } - if (errMsg) { - errMsg += ', but got ' + typeName + '.'; - errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; - // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { - console.error(errMsg); - } - throw TypeError(errMsg); - } -} - -function getValue(value, defaultValue) { - return value === undefined ? defaultValue : value; -} - -moduleExports.checkArgs = checkArgs; -moduleExports.getValue = getValue; -moduleExports.enableChecks = true; - - -}); - -// file: src/common/base64.js -define("cordova/base64", function(require, exports, module) { - -var base64 = exports; - -base64.fromArrayBuffer = function(arrayBuffer) { - var array = new Uint8Array(arrayBuffer); - return uint8ToBase64(array); -}; - -base64.toArrayBuffer = function(str) { - var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary'); - var arrayBuffer = new ArrayBuffer(decodedStr.length); - var array = new Uint8Array(arrayBuffer); - for (var i=0, len=decodedStr.length; i < len; i++) { - array[i] = decodedStr.charCodeAt(i); - } - return arrayBuffer; -}; - -//------------------------------------------------------------------------------ - -/* This code is based on the performance tests at http://jsperf.com/b64tests - * This 12-bit-at-a-time algorithm was the best performing version on all - * platforms tested. - */ - -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64_12bit; - -var b64_12bitTable = function() { - b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; - } - } - b64_12bitTable = function() { return b64_12bit; }; - return b64_12bit; -}; - -function uint8ToBase64(rawData) { - var numBytes = rawData.byteLength; - var output=""; - var segment; - var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; - output += table[segment >> 12]; - output += table[segment & 0xfff]; - } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); - output += table[segment >> 12]; - output += b64_6bit[(segment & 0xfff) >> 6]; - output += '='; - } else if (numBytes - i == 1) { - segment = (rawData[i] << 16); - output += table[segment >> 12]; - output += '=='; - } - return output; -} - -}); - -// file: src/common/builder.js -define("cordova/builder", function(require, exports, module) { - -var utils = require('cordova/utils'); - -function each(objects, func, context) { - for (var prop in objects) { - if (objects.hasOwnProperty(prop)) { - func.apply(context, [objects[prop], prop]); - } - } -} - -function clobber(obj, key, value) { - exports.replaceHookForTesting(obj, key); - var needsProperty = false; - try { - obj[key] = value; - } catch (e) { - needsProperty = true; - } - // Getters can only be overridden by getters. - if (needsProperty || obj[key] !== value) { - utils.defineGetter(obj, key, function() { - return value; - }); - } -} - -function assignOrWrapInDeprecateGetter(obj, key, value, message) { - if (message) { - utils.defineGetter(obj, key, function() { - console.log(message); - delete obj[key]; - clobber(obj, key, value); - return value; - }); - } else { - clobber(obj, key, value); - } -} - -function include(parent, objects, clobber, merge) { - each(objects, function (obj, key) { - try { - var result = obj.path ? require(obj.path) : {}; - - if (clobber) { - // Clobber if it doesn't exist. - if (typeof parent[key] === 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else if (typeof obj.path !== 'undefined') { - // If merging, merge properties onto parent, otherwise, clobber. - if (merge) { - recursiveMerge(parent[key], result); - } else { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } - } - result = parent[key]; - } else { - // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else { - // Set result to what already exists, so we can build children into it if they exist. - result = parent[key]; - } - } - - if (obj.children) { - include(result, obj.children, clobber, merge); - } - } catch(e) { - utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); - } - }); -} - -/** - * Merge properties from one object onto another recursively. Properties from - * the src object will overwrite existing target property. - * - * @param target Object to merge properties into. - * @param src Object to merge properties from. - */ -function recursiveMerge(target, src) { - for (var prop in src) { - if (src.hasOwnProperty(prop)) { - if (target.prototype && target.prototype.constructor === target) { - // If the target object is a constructor override off prototype. - clobber(target.prototype, prop, src[prop]); - } else { - if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { - recursiveMerge(target[prop], src[prop]); - } else { - clobber(target, prop, src[prop]); - } - } - } - } -} - -exports.buildIntoButDoNotClobber = function(objects, target) { - include(target, objects, false, false); -}; -exports.buildIntoAndClobber = function(objects, target) { - include(target, objects, true, false); -}; -exports.buildIntoAndMerge = function(objects, target) { - include(target, objects, true, true); -}; -exports.recursiveMerge = recursiveMerge; -exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; - -}); - -// file: src/common/channel.js -define("cordova/channel", function(require, exports, module) { - -var utils = require('cordova/utils'), - nextGuid = 1; - -/** - * Custom pub-sub "channel" that can have functions subscribed to it - * This object is used to define and control firing of events for - * cordova initialization, as well as for custom events thereafter. - * - * The order of events during page load and Cordova startup is as follows: - * - * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. - * onNativeReady* Internal event that indicates the Cordova native side is ready. - * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. - * onDeviceReady* User event fired to indicate that Cordova is ready - * onResume User event fired to indicate a start/resume lifecycle event - * onPause User event fired to indicate a pause lifecycle event - * - * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. - * All listeners that subscribe after the event is fired will be executed right away. - * - * The only Cordova events that user code should register for are: - * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript - * pause App has moved to background - * resume App has returned to foreground - * - * Listeners can be registered as: - * document.addEventListener("deviceready", myDeviceReadyListener, false); - * document.addEventListener("resume", myResumeListener, false); - * document.addEventListener("pause", myPauseListener, false); - * - * The DOM lifecycle events should be used for saving and restoring state - * window.onload - * window.onunload - * - */ - -/** - * Channel - * @constructor - * @param type String the channel name - */ -var Channel = function(type, sticky) { - this.type = type; - // Map of guid -> function. - this.handlers = {}; - // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. - this.state = sticky ? 1 : 0; - // Used in sticky mode to remember args passed to fire(). - this.fireArgs = null; - // Used by onHasSubscribersChange to know if there are any listeners. - this.numHandlers = 0; - // Function that is called when the first listener is subscribed, or when - // the last listener is unsubscribed. - this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); - } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, - - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, - - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } - } - }; - -function checkSubscriptionArgument(argument) { - if (typeof argument !== "function" && typeof argument.handleEvent !== "function") { - throw new Error( - "Must provide a function or an EventListener object " + - "implementing the handleEvent interface." - ); - } -} - -/** - * Subscribes the given function to the channel. Any time that - * Channel.fire is called so too will the function. - * Optionally specify an execution context for the function - * and a guid that can be used to stop subscribing to the channel. - * Returns the guid. - */ -Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { - checkSubscriptionArgument(eventListenerOrFunction); - var handleEvent, guid; - - if (eventListenerOrFunction && typeof eventListenerOrFunction === "object") { - // Received an EventListener object implementing the handleEvent interface - handleEvent = eventListenerOrFunction.handleEvent; - eventListener = eventListenerOrFunction; - } else { - // Received a function to handle event - handleEvent = eventListenerOrFunction; - } - - if (this.state == 2) { - handleEvent.apply(eventListener || this, this.fireArgs); - return; - } - - guid = eventListenerOrFunction.observer_guid; - if (typeof eventListener === "object") { - handleEvent = utils.close(eventListener, handleEvent); - } - - if (!guid) { - // First time any channel has seen this subscriber - guid = '' + nextGuid++; - } - handleEvent.observer_guid = guid; - eventListenerOrFunction.observer_guid = guid; - - // Don't add the same handler more than once. - if (!this.handlers[guid]) { - this.handlers[guid] = handleEvent; - this.numHandlers++; - if (this.numHandlers == 1) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Unsubscribes the function with the given guid from the channel. - */ -Channel.prototype.unsubscribe = function(eventListenerOrFunction) { - checkSubscriptionArgument(eventListenerOrFunction); - var handleEvent, guid, handler; - - if (eventListenerOrFunction && typeof eventListenerOrFunction === "object") { - // Received an EventListener object implementing the handleEvent interface - handleEvent = eventListenerOrFunction.handleEvent; - } else { - // Received a function to handle event - handleEvent = eventListenerOrFunction; - } - - guid = handleEvent.observer_guid; - handler = this.handlers[guid]; - if (handler) { - delete this.handlers[guid]; - this.numHandlers--; - if (this.numHandlers === 0) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Calls all functions subscribed to this channel. - */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); - // Apply stickiness. - if (this.state == 1) { - this.state = 2; - this.fireArgs = fireArgs; - } - if (this.numHandlers) { - // Copy the values first so that it is safe to modify it from within - // callbacks. - var toCall = []; - for (var item in this.handlers) { - toCall.push(this.handlers[item]); - } - for (var i = 0; i < toCall.length; ++i) { - toCall[i].apply(this, fireArgs); - } - if (this.state == 2 && this.numHandlers) { - this.numHandlers = 0; - this.handlers = {}; - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - - -// defining them here so they are ready super fast! -// DOM event that is received when the web page is loaded and parsed. -channel.createSticky('onDOMContentLoaded'); - -// Event to indicate the Cordova native side is ready. -channel.createSticky('onNativeReady'); - -// Event to indicate that all Cordova JavaScript objects have been created -// and it's time to run plugin constructors. -channel.createSticky('onCordovaReady'); - -// Event to indicate that all automatically loaded JS plugins are loaded and ready. -// FIXME remove this -channel.createSticky('onPluginsReady'); - -// Event to indicate that Cordova is ready -channel.createSticky('onDeviceReady'); - -// Event to indicate a resume lifecycle event -channel.create('onResume'); - -// Event to indicate a pause lifecycle event -channel.create('onPause'); - -// Channels that must fire before "deviceready" is fired. -channel.waitForInitialization('onCordovaReady'); -channel.waitForInitialization('onDOMContentLoaded'); - -module.exports = channel; - -}); - -// file: /Users/shazron/Documents/git/apache/cordova-ios/cordova-js-src/exec.js -define("cordova/exec", function(require, exports, module) { - -/*global require, module, atob, document */ - -/** - * Creates a gap bridge iframe used to notify the native code about queued - * commands. - */ -var cordova = require('cordova'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'), - execIframe, - commandQueue = [], // Contains pending JS->Native messages. - isInContextOfEvalJs = 0, - failSafeTimerId = 0; - -function massageArgsJsToNative(args) { - if (!args || utils.typeName(args) != 'Array') { - return args; - } - var ret = []; - args.forEach(function(arg, i) { - if (utils.typeName(arg) == 'ArrayBuffer') { - ret.push({ - 'CDVType': 'ArrayBuffer', - 'data': base64.fromArrayBuffer(arg) - }); - } else { - ret.push(arg); - } - }); - return ret; -} - -function massageMessageNativeToJs(message) { - if (message.CDVType == 'ArrayBuffer') { - var stringToArrayBuffer = function(str) { - var ret = new Uint8Array(str.length); - for (var i = 0; i < str.length; i++) { - ret[i] = str.charCodeAt(i); - } - return ret.buffer; - }; - var base64ToArrayBuffer = function(b64) { - return stringToArrayBuffer(atob(b64)); - }; - message = base64ToArrayBuffer(message.data); - } - return message; -} - -function convertMessageToArgsNativeToJs(message) { - var args = []; - if (!message || !message.hasOwnProperty('CDVType')) { - args.push(message); - } else if (message.CDVType == 'MultiPart') { - message.messages.forEach(function(e) { - args.push(massageMessageNativeToJs(e)); - }); - } else { - args.push(massageMessageNativeToJs(message)); - } - return args; -} - -function iOSExec() { - - var successCallback, failCallback, service, action, actionArgs; - var callbackId = null; - if (typeof arguments[0] !== 'string') { - // FORMAT ONE - successCallback = arguments[0]; - failCallback = arguments[1]; - service = arguments[2]; - action = arguments[3]; - actionArgs = arguments[4]; - - // Since we need to maintain backwards compatibility, we have to pass - // an invalid callbackId even if no callback was provided since plugins - // will be expecting it. The Cordova.exec() implementation allocates - // an invalid callbackId and passes it even if no callbacks were given. - callbackId = 'INVALID'; - } else { - throw new Error('The old format of this exec call has been removed (deprecated since 2.1). Change to: ' + - 'cordova.exec(null, null, \'Service\', \'action\', [ arg1, arg2 ]);' - ); - } - - // If actionArgs is not provided, default to an empty array - actionArgs = actionArgs || []; - - // Register the callbacks and add the callbackId to the positional - // arguments if given. - if (successCallback || failCallback) { - callbackId = service + cordova.callbackId++; - cordova.callbacks[callbackId] = - {success:successCallback, fail:failCallback}; - } - - actionArgs = massageArgsJsToNative(actionArgs); - - var command = [callbackId, service, action, actionArgs]; - - // Stringify and queue the command. We stringify to command now to - // effectively clone the command arguments in case they are mutated before - // the command is executed. - commandQueue.push(JSON.stringify(command)); - - // If we're in the context of a stringByEvaluatingJavaScriptFromString call, - // then the queue will be flushed when it returns; no need for a poke. - // Also, if there is already a command in the queue, then we've already - // poked the native side, so there is no reason to do so again. - if (!isInContextOfEvalJs && commandQueue.length == 1) { - pokeNative(); - } -} - -// CB-10530 -function proxyChanged() { - var cexec = cordovaExec(); - - return (execProxy !== cexec && // proxy objects are different - iOSExec !== cexec // proxy object is not the current iOSExec - ); -} - -// CB-10106 -function handleBridgeChange() { - if (proxyChanged()) { - var commandString = commandQueue.shift(); - while(commandString) { - var command = JSON.parse(commandString); - var callbackId = command[0]; - var service = command[1]; - var action = command[2]; - var actionArgs = command[3]; - var callbacks = cordova.callbacks[callbackId] || {}; - - execProxy(callbacks.success, callbacks.fail, service, action, actionArgs); - - commandString = commandQueue.shift(); - }; - return true; - } - - return false; -} - -function pokeNative() { - // CB-5488 - Don't attempt to create iframe before document.body is available. - if (!document.body) { - setTimeout(pokeNative); - return; - } - - // Check if they've removed it from the DOM, and put it back if so. - if (execIframe && execIframe.contentWindow) { - execIframe.contentWindow.location = 'gap://ready'; - } else { - execIframe = document.createElement('iframe'); - execIframe.style.display = 'none'; - execIframe.src = 'gap://ready'; - document.body.appendChild(execIframe); - } - // Use a timer to protect against iframe being unloaded during the poke (CB-7735). - // This makes the bridge ~ 7% slower, but works around the poke getting lost - // when the iframe is removed from the DOM. - // An onunload listener could be used in the case where the iframe has just been - // created, but since unload events fire only once, it doesn't work in the normal - // case of iframe reuse (where unload will have already fired due to the attempted - // navigation of the page). - failSafeTimerId = setTimeout(function() { - if (commandQueue.length) { - // CB-10106 - flush the queue on bridge change - if (!handleBridgeChange()) { - pokeNative(); - } - } - }, 50); // Making this > 0 improves performance (marginally) in the normal case (where it doesn't fire). -} - -iOSExec.nativeFetchMessages = function() { - // Stop listing for window detatch once native side confirms poke. - if (failSafeTimerId) { - clearTimeout(failSafeTimerId); - failSafeTimerId = 0; - } - // Each entry in commandQueue is a JSON string already. - if (!commandQueue.length) { - return ''; - } - var json = '[' + commandQueue.join(',') + ']'; - commandQueue.length = 0; - return json; -}; - -iOSExec.nativeCallback = function(callbackId, status, message, keepCallback, debug) { - return iOSExec.nativeEvalAndFetch(function() { - var success = status === 0 || status === 1; - var args = convertMessageToArgsNativeToJs(message); - function nc2() { - cordova.callbackFromNative(callbackId, success, status, args, keepCallback); - } - setTimeout(nc2, 0); - }); -}; - -iOSExec.nativeEvalAndFetch = function(func) { - // This shouldn't be nested, but better to be safe. - isInContextOfEvalJs++; - try { - func(); - return iOSExec.nativeFetchMessages(); - } finally { - isInContextOfEvalJs--; - } -}; - -// Proxy the exec for bridge changes. See CB-10106 - -function cordovaExec() { - var cexec = require('cordova/exec'); - var cexec_valid = (typeof cexec.nativeFetchMessages === 'function') && (typeof cexec.nativeEvalAndFetch === 'function') && (typeof cexec.nativeCallback === 'function'); - return (cexec_valid && execProxy !== cexec)? cexec : iOSExec; -} - -function execProxy() { - cordovaExec().apply(null, arguments); -}; - -execProxy.nativeFetchMessages = function() { - return cordovaExec().nativeFetchMessages.apply(null, arguments); -}; - -execProxy.nativeEvalAndFetch = function() { - return cordovaExec().nativeEvalAndFetch.apply(null, arguments); -}; - -execProxy.nativeCallback = function() { - return cordovaExec().nativeCallback.apply(null, arguments); -}; - -module.exports = execProxy; - -}); - -// file: src/common/exec/proxy.js -define("cordova/exec/proxy", function(require, exports, module) { - - -// internal map of proxy function -var CommandProxyMap = {}; - -module.exports = { - - // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); - CommandProxyMap[id] = proxyObj; - return proxyObj; - }, - - // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { - var proxy = CommandProxyMap[id]; - delete CommandProxyMap[id]; - CommandProxyMap[id] = null; - return proxy; - }, - - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); - } -}; -}); - -// file: src/common/init.js -define("cordova/init", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); -var utils = require('cordova/utils'); - -var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { - return origNavigator[k]; - }); - })(key); - } - } - } - return newNavigator; -} - -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onActivated = cordova.addDocumentEventHandler('activated'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -modulemapper.clobbers('cordova', 'cordova'); -modulemapper.clobbers('cordova/exec', 'cordova.exec'); -modulemapper.clobbers('cordova/exec', 'Cordova.exec'); - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. -// The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { - channel.onPluginsReady.fire(); - }); -}, 0); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - - -}); - -// file: src/common/init_b.js -define("cordova/init_b", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); -var utils = require('cordova/utils'); - -var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady, channel.onPluginsReady]; - -// setting exec -cordova.exec = require('cordova/exec'); - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { - return origNavigator[k]; - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onActivated = cordova.addDocumentEventHandler('activated'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. -// The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { - channel.onPluginsReady.fire(); - }); -}, 0); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - -}); - -// file: src/common/modulemapper.js -define("cordova/modulemapper", function(require, exports, module) { - -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - if (!(moduleName in moduleMap)) { - throw new Error('Module ' + moduleName + ' does not exist.'); - } - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: src/common/modulemapper_b.js -define("cordova/modulemapper_b", function(require, exports, module) { - -var builder = require('cordova/builder'), - symbolList = [], - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: /Users/shazron/Documents/git/apache/cordova-ios/cordova-js-src/platform.js -define("cordova/platform", function(require, exports, module) { - -module.exports = { - id: 'ios', - bootstrap: function() { - require('cordova/channel').onNativeReady.fire(); - } -}; - - -}); - -// file: src/common/pluginloader.js -define("cordova/pluginloader", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); - -// Helper function to inject a <script> tag. -// Exported for testing. -exports.injectScript = function(url, onload, onerror) { - var script = document.createElement("script"); - // onload fires even when script fails loads with an error. - script.onload = onload; - // onerror fires for malformed URLs. - script.onerror = onerror; - script.src = url; - document.head.appendChild(script); -}; - -function injectIfNecessary(id, url, onload, onerror) { - onerror = onerror || onload; - if (id in define.moduleMap) { - onload(); - } else { - exports.injectScript(url, function() { - if (id in define.moduleMap) { - onload(); - } else { - onerror(); - } - }, onerror); - } -} - -function onScriptLoadingComplete(moduleList, finishPluginLoading) { - // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - if (module.runs) { - modulemapper.runs(module.id); - } - } - - finishPluginLoading(); -} - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -// This function is only called if the really is a plugins array that isn't empty. -// Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { - // Now inject the scripts. - var scriptCounter = moduleList.length; - - if (!scriptCounter) { - finishPluginLoading(); - return; - } - function scriptLoadedCallback() { - if (!--scriptCounter) { - onScriptLoadingComplete(moduleList, finishPluginLoading); - } - } - - for (var i = 0; i < moduleList.length; i++) { - injectIfNecessary(moduleList[i].id, path + moduleList[i].file, scriptLoadedCallback); - } -} - -function findCordovaPath() { - var path = null; - var scripts = document.getElementsByTagName('script'); - var term = '/cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { - var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007). - if (src.indexOf(term) == (src.length - term.length)) { - path = src.substring(0, src.length - term.length) + '/'; - break; - } - } - return path; -} - -// Tries to load all plugins' js-modules. -// This is an async process, but onDeviceReady is blocked on onPluginsReady. -// onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { - var pathPrefix = findCordovaPath(); - if (pathPrefix === null) { - console.log('Could not find cordova.js script tag. Plugin loading may fail.'); - pathPrefix = ''; - } - injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(pathPrefix, moduleList, callback); - }, callback); -}; - - -}); - -// file: src/common/pluginloader_b.js -define("cordova/pluginloader_b", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -function handlePluginsObject(moduleList) { - // if moduleList is not defined or empty, we've nothing to do - if (!moduleList || !moduleList.length) { - return; - } - - // Loop through all the modules and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - if (module.runs) { - modulemapper.runs(module.id); - } - } -} - -// Loads all plugins' js-modules. Plugin loading is syncronous in browserified bundle -// but the method accepts callback to be compatible with non-browserify flow. -// onDeviceReady is blocked on onPluginsReady. onPluginsReady is fired when there are -// no plugins to load, or they are all done. -exports.load = function(callback) { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(moduleList); - - callback(); -}; - - -}); - -// file: src/common/urlutil.js -define("cordova/urlutil", function(require, exports, module) { - - -/** - * For already absolute URLs, returns what is passed in. - * For relative URLs, converts them to absolute ones. - */ -exports.makeAbsolute = function makeAbsolute(url) { - var anchorEl = document.createElement('a'); - anchorEl.href = url; - return anchorEl.href; -}; - - -}); - -// file: src/common/utils.js -define("cordova/utils", function(require, exports, module) { - -var utils = exports; - -/** - * Defines a property getter / setter for obj[key]. - */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { - if (Object.defineProperty) { - var desc = { - get: getFunc, - configurable: true - }; - if (opt_setFunc) { - desc.set = opt_setFunc; - } - Object.defineProperty(obj, key, desc); - } else { - obj.__defineGetter__(key, getFunc); - if (opt_setFunc) { - obj.__defineSetter__(key, opt_setFunc); - } - } -}; - -/** - * Defines a property getter for obj[key]. - */ -utils.defineGetter = utils.defineGetterSetter; - -utils.arrayIndexOf = function(a, item) { - if (a.indexOf) { - return a.indexOf(item); - } - var len = a.length; - for (var i = 0; i < len; ++i) { - if (a[i] == item) { - return i; - } - } - return -1; -}; - -/** - * Returns whether the item was found in the array. - */ -utils.arrayRemove = function(a, item) { - var index = utils.arrayIndexOf(a, item); - if (index != -1) { - a.splice(index, 1); - } - return index != -1; -}; - -utils.typeName = function(val) { - return Object.prototype.toString.call(val).slice(8, -1); -}; - -/** - * Returns an indication of whether the argument is an array or not - */ -utils.isArray = Array.isArray || - function(a) {return utils.typeName(a) == 'Array';}; - -/** - * Returns an indication of whether the argument is a Date or not - */ -utils.isDate = function(d) { - return (d instanceof Date); -}; - -/** - * Does a deep clone of the object. - */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { - return obj; - } - - var retVal, i; - - if(utils.isArray(obj)){ - retVal = []; - for(i = 0; i < obj.length; ++i){ - retVal.push(utils.clone(obj[i])); - } - return retVal; - } - - retVal = {}; - for(i in obj){ - // https://issues.apache.org/jira/browse/CB-11522 'unknown' type may be returned in - // custom protocol activation case on Windows Phone 8.1 causing "No such interface supported" exception - // on cloning. - if((!(i in retVal) || retVal[i] != obj[i]) && typeof obj[i] != 'undefined' && typeof obj[i] != 'unknown') { - retVal[i] = utils.clone(obj[i]); - } - } - return retVal; -}; - -/** - * Returns a wrapped version of the function - */ -utils.close = function(context, func, params) { - return function() { - var args = params || arguments; - return func.apply(context, args); - }; -}; - -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { - var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; - } - uuidpart += uuidchar; - } - return uuidpart; -} - -/** - * Create a UUID - */ -utils.createUUID = function() { - return UUIDcreatePart(4) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(6); -}; - - -/** - * Extends a child object from a parent object using classical inheritance - * pattern. - */ -utils.extend = (function() { - // proxy used to establish prototype chain - var F = function() {}; - // extend Child from Parent - return function(Child, Parent) { - - F.prototype = Parent.prototype; - Child.prototype = new F(); - Child.__super__ = Parent.prototype; - Child.prototype.constructor = Child; - }; -}()); - -/** - * Alerts a message in any available way: alert or console.log. - */ -utils.alert = function(msg) { - if (window.alert) { - window.alert(msg); - } else if (console && console.log) { - console.log(msg); - } -}; - - - - - -}); - -window.cordova = require('cordova'); -// file: src/scripts/bootstrap.js - -require('cordova/init'); - -})();
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova_plugins.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova_plugins.js deleted file mode 100644 index 5d4c04be..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/cordova_plugins.js +++ /dev/null @@ -1,163 +0,0 @@ -cordova.define('cordova/plugin_list', function(require, exports, module) { -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-customurlscheme.LaunchMyApp", - "file": "plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js", - "pluginId": "cordova-plugin-customurlscheme", - "clobbers": [ - "window.plugins.launchmyapp" - ] - }, - { - "id": "cordova-plugin-device.device", - "file": "plugins/cordova-plugin-device/www/device.js", - "pluginId": "cordova-plugin-device", - "clobbers": [ - "device" - ] - }, - { - "id": "cordova-plugin-dialogs.notification", - "file": "plugins/cordova-plugin-dialogs/www/notification.js", - "pluginId": "cordova-plugin-dialogs", - "merges": [ - "navigator.notification" - ] - }, - { - "id": "cordova-plugin-geolocation.Coordinates", - "file": "plugins/cordova-plugin-geolocation/www/Coordinates.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "Coordinates" - ] - }, - { - "id": "cordova-plugin-geolocation.PositionError", - "file": "plugins/cordova-plugin-geolocation/www/PositionError.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "PositionError" - ] - }, - { - "id": "cordova-plugin-geolocation.Position", - "file": "plugins/cordova-plugin-geolocation/www/Position.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "Position" - ] - }, - { - "id": "cordova-plugin-geolocation.geolocation", - "file": "plugins/cordova-plugin-geolocation/www/geolocation.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "navigator.geolocation" - ] - }, - { - "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", - "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-statusbar.statusbar", - "file": "plugins/cordova-plugin-statusbar/www/statusbar.js", - "pluginId": "cordova-plugin-statusbar", - "clobbers": [ - "window.StatusBar" - ] - }, - { - "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": "ionic-plugin-keyboard.keyboard", - "file": "plugins/ionic-plugin-keyboard/www/ios/keyboard.js", - "pluginId": "ionic-plugin-keyboard", - "clobbers": [ - "cordova.plugins.Keyboard" - ], - "runs": true - }, - { - "id": "phonegap-plugin-push.PushNotification", - "file": "plugins/phonegap-plugin-push/www/push.js", - "pluginId": "phonegap-plugin-push", - "clobbers": [ - "PushNotification" - ] - } -]; -module.exports.metadata = -// TOP OF METADATA -{ - "cordova-plugin-app-name": "1.0.4", - "cordova-plugin-compat": "1.1.0", - "cordova-plugin-console": "1.0.4", - "cordova-plugin-customurlscheme": "4.2.0", - "cordova-plugin-device": "1.1.3", - "cordova-plugin-dialogs": "1.3.0", - "cordova-plugin-geolocation": "2.4.0", - "cordova-plugin-inappbrowser": "1.5.0", - "cordova-plugin-network-information": "1.3.0", - "cordova-plugin-splashscreen": "4.0.0", - "cordova-plugin-statusbar": "2.2.3", - "cordova-plugin-whitelist": "1.3.0", - "cordova-plugin-x-socialsharing": "5.1.3", - "ionic-plugin-keyboard": "2.2.1", - "phonegap-plugin-push": "2.0.0" -}; -// BOTTOM OF METADATA -});
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/account.css b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/account.css deleted file mode 100755 index da710fd7..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/account.css +++ /dev/null @@ -1,534 +0,0 @@ -.login #login { display: block } -#login { - display: none; -} - - -.logout #logout { display: block } -#logout { - display: none; -} - - -.signup #signup { display: block } -#signup { - display: none; -} - - -.profile #profile { display: block } -#profile { - display: none; -} - - -.payment #payment { display: block } -#payment { - display: none; -} - - -.shipping #shipping { display: block } -#shipping { - display: none; -} - - -.orders #orders { display: block } -#orders { - display: none; -} -#orders #order_list { - display: block; -} -#orders #single_order { - display: none; -} -#orders.single #order_list { - display: none; -} -#orders.single #single_order { - display: block; -} - -#order_list { - width: calc(100vw - 40px); - position:relative; - margin:0 auto; - box-sizing:border-box; -} - -#order_list .list { - padding:15px 0; - position:relative; -} - -.images:after { - content:''; - width:calc(100% + 100px); - height:1px; - background:#bbb; - position:absolute; - bottom:0; - left:-50px; -} - -.details-container { - position:relative; - font-weight:bold; - letter-spacing:0.2px; - font-size:11px; - margin-bottom:10px; - width:100%; - box-sizing:border-box; -} - -.details-container .details { - position:absolute; - display:block; - bottom:0; - right:0; - box-sizing:border-box; -} - -.details-container .txt { - position:relative; - display:block; - bottom:0; - left:0; - box-sizing:border-box; -} - -.details-container .txt span { - display:block; - box-sizing:border-box; -} - -#orders .item img { - max-width:120px; - box-sizing:border-box; -} - -.settings #settings { display: block } -#settings { - display: none; -} - - - - - -.form h2 { - text-align: center; - margin: 0; - padding: 20px 10px 8px 10px; - font-size: 14px; - color: #000; - letter-spacing: 1px; - font-weight: bold; -} - -input[type=text], input[type=password], input[type=number], input[type=date], input[type=email] { - font-family:pfd, sans-serif; - font-size:14px; - outline:none!important; - color:#000; - letter-spacing:1px; - text-transform:uppercase; - height:35px; - text-align:center; - margin: 0px auto; - display:block; - margin-top:4px; - width: calc(100vw - 10px); - border:1px solid #a9a9a9; - padding: 0; - border-radius: 0; -} - -input[type=text], input[type=password], input[type=number], input[type=email] { - -webkit-appearance: none; -} - -.half-input { - margin: 0px auto; - display: block; - margin-top: 4px; - width: calc(100vw - 10px); - border: 1px solid #a9a9a9; - overflow: auto; -} - -.half-input input, .half-input select { - position: relative; - margin: 0; - border:none; - box-sizing: border-box; - float: left; - width: 50%; -} - -.half-input > input:first-child { - border-right: 1px solid #a9a9a9; -} - -#signup .toggle-container, #profile .toggle-container { - margin: 0px auto; - display: table; - margin-top: 0px; - width: calc(100vw - 10px); - box-sizing: border-box; - padding:0px 18px 2px; - font-size:14px; -} - -#settings .toggle-container { - margin: 0px auto; - display: table; - margin-top: 10px; - width: calc(100vw - 10px); - box-sizing: border-box; - padding:10px 18px 2px; - font-size:14px; -} - -.toggle-row { - display:block; - padding-bottom:16px; -} - -.toggle-container .caption { - display:table-cell; - vertical-align:middle; - width:100%; -} - -.toggle-container .toggle { - display: table-cell; - vertical-align: middle; - text-align: right; - position: relative; - right: 12px; -} - -.toggle-container h3 { - margin:0; -} - -input.switch { - height: 50px; - width: 50px; - opacity: 0; - z-index: 9999999; - position: relative; -} - -input.switch + label { - display: inline-block; - box-shadow: inset 0 0 0px 1px rgba(0,0,0,.7); - text-indent: -5000px; - height: 30px; - width: 50px; - border-radius: 15px; - position: absolute; - top: 50%; - left: 25px; - transform: translateX(-50%) translateY(-50%); -} - -input.switch + label:before { - content: ""; - position: absolute; - display: block; - height: 30px; - width: 30px; - top: 0; - left: 0; - border-radius: 15px; - background: rgba(19, 191, 17, 0); - -moz-transition: .25s ease-in-out; - -webkit-transition: .25s ease-in-out; - transition: .25s ease-in-out; -} - -input.switch + label:after { - content: ""; - position: absolute; - display: block; - height: 30px; - width: 30px; - top: 0; - left: 0px; - border-radius: 15px; - background: white; - box-shadow: inset 0 0 0 1px rgba(0,0,0,.7); - -moz-transition: .25s ease-in-out; - -webkit-transition: .25s ease-in-out; - transition: .25s ease-in-out; -} - -input.switch:checked + label:before { - width: 50px; - background: #136f11; -} - -input.switch:checked + label:after { - left: 20px; - box-shadow: inset 0 0 0 1px rgba(0,0,0,.7); -} - -.container { - position:relative; - min-height:calc(100vh - 154px); - width:100vw; - box-sizing:border-box; - display: flex; - flex-direction: column; - margin:0; - left:0; - right:0; - top: 0; -} - -.container-row { - box-sizing:border-box; -} - -.container-fill { - min-height:80px; - flex: 1; - align-items: center; - justify-content: center; - position:relative; -} - -.container-fill-condensed { - min-height:38px!important; -} - -.container-row .container-message { - color:#000; - text-align:center; - width:calc(100vw - 10px); - box-sizing:border-box; - margin:10px auto 0; - position:relative -} - -.container-row .container-message-condensed { - margin: 2px auto!important -} -.container-fill .container-message { - font-size:12px; - letter-spacing:0.5px; - text-align:center; - position:absolute; - top:50%; - left:50%; - width:100%; - -webkit-transform: translateX(-50%) translateY(-50%); - transform: translateX(-50%) translateY(-50%); - color:#000; -} - - - -.premessage { - top:calc(50% - 20px)!important; -} - -.submessage { - top:75%!important; -} - -.alert-notice { - color:red!important -} - -.checkbox-container { - font-size:11px; - width:calc(100vw - 10px); - display:table; - box-sizing:border-box; - margin:0 auto; -} - -#signup .checkbox-container { - margin-top:12px!important -} - -.checkbox-toggle { - display:table-cell; - box-sizing:border-box; - padding-right:0px; - position:relative; -} - -.checkbox-toggle input { - width: 45px; - height: 35px; - opacity: 0; - z-index: 99999; - position: relative; -} - -.checkbox-caption { - vertical-align:middle; - display:table-cell; - box-sizing:border-box; -} - -.checkbox-row { - margin:6px 0 0; - box-sizing:border-box; -} - -.checkbox-row:first-child { - margin:0; -} - - -.checkbox-toggle label { - position:absolute; - top:50%; - transform:translateY(-50%); - cursor: pointer; - width: 36px; - height: 36px; - left: 0; - background: #fff; - border:1px solid #000; - box-sizing:border-box; -} - -.checkbox-toggle label:after { - opacity: 0; - content: ""; - top:50%; - position:absolute; - left:50%; - transform:translateX(-50%) translateY(-50%) rotate(45deg); - width:2px; - height:36px; - background:black; - transition: opacity .2s; -} - -.checkbox-toggle label:before { - opacity: 0; - content: ""; - top:50%; - position:absolute; - left:50%; - transform:translateX(-50%) translateY(-50%) rotate(-45deg); - width:2px; - height:36px; - background:black; - transition: opacity .2s; -} - -.checkbox-toggle input[type=checkbox]:checked + label:after, .checkbox-toggle input[type=checkbox]:checked + label:before, -.checkbox-toggle input[type=radio]:checked + label:after, .checkbox-toggle input[type=radio]:checked + label:before { - opacity: 1; -} - -.privacy-msg { - left: 50%; - display: inline-block; - position: relative; - transform: translateX(-50%); - padding-top: 15px; - padding-bottom: 80px; -} - -.select-wrapper { - position: relative; - text-align: center; - - overflow: hidden; - font-size: 14px; - outline: none !important; - color: #000; - letter-spacing: 1px; - text-transform: uppercase; - height: 35px; - text-align: center; - margin: 0px auto; - display: block; - margin-top: 4px; - width: calc(100vw - 10px); - border: 1px solid #a9a9a9; -} -.date-wrapper span { - display: block; -} -.half-input .select-wrapper { - width: 50%; - border: 0; - margin-top: -1px; - float: left; -} -.half-input .select-wrapper span { - top: 9px; - color: #aaa; -} -.select-wrapper [type=date] { - opacity: 0; - width: 100%; - height: 35px; - line-height: 35px; - position: absolute; - top: -5px; - left: -1px; - width: 1px; height: 1px; -} -.select-wrapper select { - opacity: 0; - width: 100%; - height: 35px; - line-height: 35px; - position: absolute; - top: 0; left: 0; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - border: 10px solid; -} -.select-wrapper span { - position: relative; - top: 8px; - color: #888; -} -.select-wrapper.picked span { - color: #000; -} - -.country-wrapper-static { - text-align: center; - color: #a9a9a9; - padding-top: 9px; - font-size: 14px; -} - -.container-row input:first-child { -margin-top:10px -} - -.container-row .half-input input { -margin-top:0px -} - -#login .container-row input:first-child { -margin-bottom:9px!important -} - -.newuser { - display:inline-block; - padding:14px; - text-decoration:underline -} - -.forgotpassword { - padding:14px; - text-decoration:underline -}
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/blogs.css b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/blogs.css deleted file mode 100755 index 4823fbef..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/blogs.css +++ /dev/null @@ -1,352 +0,0 @@ -.story #story { display: block } -#story { - display: none; -} -#story .links { - margin: 15px 0 0; - text-align: center; - text-transform:uppercase; -} -#story .links li { - padding: 10px; - list-style-type: none; - display: inline-block; -} -#story .links li:before { - content: ' | ', -} -#story .links li:first-child:before { - content: '', -} -#story .links li.active { - font-weight: bold; - text-decoration: underline; -} -#story .content > div { -display:none; -} -#story .content div.active { -display:block; -animation: mfadein 0.6s; -} - -.hub #hub { display: block } -#hub { - display: none; -} - -.archive #archive { display: block } -#archive { - display: none; -} - -/* FAQ */ - -.privacy #privacy { display: block } -.terms #terms { display: block } -.returns #returns { display: block } -.care #care { display: block } -.page { - display: none; -} - -.page .content { - padding: 10px; -} - -#hub .content .body, #story .content .body { - letter-spacing:0.35px; - font-size:12px; - width:calc(100vw - 40px); - box-sizing:border-box; - margin:10px auto 20px; - clear:both -} - -#hub .content .body:last-child { - margin:10px auto 100px; -} - -#story .content .body:last-child { - margin:10px auto 50px; -} - -.hub_item { - position: relative; -} - -.content-header { - width:calc(100vw - 40px); - box-sizing:border-box; - margin:20px auto 0px; -} - -.content-header .title, .content-header .subtitle { - display:block; - font-weight:bold; - font-size:14px; - text-transform:uppercase -} - -.content-header .title { - margin:0; - padding:0; - line-height:13px; -} - -.content-header .subtitle { - padding-bottom:10px -} - -.content-share { - border:1px solid black; - padding:4px 8px 2px; - float:right -} - -.content-header span.date, .content-header span.store { - font-size:10px; -} - -/* NOTE: optional arrows */ - -.gallery-left { - border:1px solid black; - background:rgba(255,255,255,1); - background-image:url(../img/left-arrow.png); - background-size:5px 10px; - background-repeat:no-repeat; - background-position:center; - width:15px; - height:30px; - top:26vh; - content:''; - transform:translateY(-50%); - transform-origin:top right; - left:20px; - font-size:18px; - padding:3px 3px 3px 1px; - z-index:2; - position:absolute; - display:block; - animation: gallery-fade 4s forwards; -} -.gallery-right { - border:1px solid black; - background:rgba(255,255,255,1); - background-image:url(../img/right-arrow.png); - background-size:5px 10px; - background-repeat:no-repeat; - background-position:center; - width:15px; - height:30px; - top:26vh; - content:''; - transform:translateY(-50%); - transform-origin:top right; - right:20px; - font-size:18px; - padding:3px 1px 3px 3px; - z-index:2; - position:absolute; - display:block; - animation: gallery-fade 4s forwards; -} - -@-webkit-keyframes gallery-fade { - 0%{opacity:0} - 20%{opacity:1} - 78% {opacity:1} - 100% {opacity:0} -} -/* NOTE: not sure if this down arrow is necessary.. the fade - might do..? what do you think? it can be removed - with javascript when the body hits the bottom of - the page */ - -.fade-cover { - background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1)); - position:fixed; - bottom:0; - width:100vw; - height:100px; - box-sizing:border-box -} - -/* -.fade-cover::before { - border:1px solid black; - top:50%; - left:50%; - margin-left:-24px; - transform:scale(1,.5) translateY(-50%); - transform-origin:bottom right; - content:'\25BC'; - font-size:17px; - padding:9px 11px; - z-index:999; - position:absolute; - display:block; - background:rgba(255,255,255,1); -} -*/ - -#story img { - box-sizing:border-box; - width:calc(100vw + 150px); - max-height:100vw; - position:relative; - left:-75px; -} - -ul.links { - -webkit-padding-start: 0px!important -} - -.archive h1 { - font-size:26px; - border-bottom:0; - margin-top:8px; - padding-bottom:0; - line-height:24px; -} - -.archive .subtitle { - box-sizing:border-box; - width:calc(100vw - 10px); - position:relative; - text-align:center; - margin:0 0 12px; - padding:0; - font-weight:bold; - font-size:14px; -} - - -.archive h2 { - font-size: 25px; - font-weight: normal; -} -.archive h2 b { - font-size: 28px; -} -.archive .body { - font-size: 14px; - line-height: 1.2em; - font-weight: 100; -} - -#archive .heading { - position: absolute; - top: 0; left: 0; - width: 100%; - pointer-events: none; -} -#archive .menu .items, -#archive .row .image, -#archive .row .text { - position: absolute; - top: 50%; left: 50%; - transform-origin: 50% 50%; - transform: translateZ(0) translateX(-50%) translateY(-50%); -} - -#archive .menu .items { - border-top: 1px solid transparent; -} - -#archive.menu .menu { - opacity: 1; - pointer-events: auto; -} -#archive .menu { - background: rgba(255,255,255,0.8); - position: absolute; - top: 0; left: 0; - height: 100%; - width: 100%; - opacity: 0; - pointer-events: none; - transition: opacity 0.2s; -} -#archive .menu .items { - width: 100%; -} -#archive .menu .item:first-of-type { - border-top: 1px solid black; -} -#archive .menu .item { - width: 100%; - text-align: center; - border-bottom: 1px solid black; - background: white; - padding:12px 0; - font-size:14px; - letter-spacing:0.7px -} - -#archive .scroll { - top: 0; left: 0; - height: calc(100% - 125px); -} -#archive .row:first-of-type { - margin-top: 7em; -} -#archive .row:last-of-type { - margin-bottom: 150px; -} -#archive .row { - position: relative; - min-height: 80vh; - -webkit-perspective: 500px; - perspective: 500px; - margin-bottom: 5em; -} -#archive .row .image { - width: 100%; height: 100%; - background-repeat: no-repeat; - background-size: contain; - background-position: center center; -} -#archive .row.loading .image { - background-repeat: no-repeat; - background-size: auto auto; - background-position: center center; - background-image: url('../img/spinner.gif') !important; -} -#archive .row .text { - width: 80%; -} - -.gallery-video-post { - position:relative; -} - -.gallery-video-post .play { - width:60px; - height:60px; - border-radius:100px; - background:white; - box-shadow:0px 0px 2px #000; - position:absolute; - transform:translateY(-50%) translateX(-50%); - top:50%; - left:50%; -} - -.gallery-video-post .play:before { - content:''; - width: 0; - height: 0; - border-top: 8px solid transparent; - border-bottom: 8px solid transparent; - border-left: 8px solid black; - position:absolute; - top:50%; - left:50%; - transform:translateY(-50%) translateX(-50%); -} - -#archive { - box-sizing:border-box -} diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/cart.css b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/cart.css deleted file mode 100755 index 58e712b0..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/cart.css +++ /dev/null @@ -1,362 +0,0 @@ - -.cart #cart { display: block; } -#cart { - display: none; -} - -#cart .steps { - width: 100%; - border-bottom: 1px solid #bbb; - font-size: 0; -} -#cart .steps span { - display: inline-block; - font-size: 13px; - text-align: center; - padding: 11px 0 10px; - color: #bbb; - width: 33%; - position:relative; -} -.summary_step, .shipping_step { - border-right: 1px solid #bbb -} - -#cart.summary .summary_step, -#cart.payment .payment_step, -#cart.shipping .shipping_step { - color: #000; -} - -#cart_summary, -#cart_shipping, -#cart_payment, -#cart_confirm, -#cart_thanks, -#cart_error { - height: calc(100vh - 187px); - overflow: hidden; - position: relative; -} - -#cart.summary #cart_summary { display: block } -#cart_summary { - display: none; -} - -.full .cart_body { display: block; } -.empty .cart_empty { display: block; } -#cart h1 .full_msg, -#cart h1 .empty_msg { display: none } -.cart_body { - display: none; -} -.cart_empty { - display: none; - text-align: center; - margin: 0; -} - -#cart.payment #cart_payment { display: block } -#cart_payment { - display: none; -} - -#cart.shipping #cart_shipping { display: block } -#cart_shipping { - display: none; -} - -#cart.confirm #cart_confirm { display: block } -#cart_confirm { - display: none; -} - -#cart_thanks { - display: none; -} -#cart_error { - display: none; -} -#cart.thanks #cart_thanks, -#cart.error #cart_error { - display: flex; - align-items: center; - justify-content: center; -} -#cart .copy { - min-height:50px; - max-width: 50%; - text-align: center; - font-size: 18px; -} - -.summary-container { - top:0px; -} - -.billing-container { - min-height:calc(100vh - 210px); - top:16px; -} - -#cart h3 { - padding-left: 5px; - font-size:12px; -} - -.cart_item_row { -display:table; -position:relative; -width:calc(100vw - 30px); -margin:0 auto; -box-sizing:border-box; -padding-top:20px; -} - -.cart_item_info, .cart_item_price { -display:table-cell; -vertical-align:bottom; -box-sizing:border-box -} - -.cart_item_image { -display:table-cell; -vertical-align:middle; -box-sizing:border-box -} - -.cart_item_image img { -max-width:calc(33vw - 25px); -padding-right:30px; -} - -.cart_item_info { -padding-bottom:5px; -position:relative; -width:100% -} - -.cart_item_price { -text-align:right; -position:relative; -padding-bottom:5px; -padding-left:5px; -} - -.cart_item_price .remove { -display:block; -width:20px; -height:20px; -border:1px solid #d2d2d2; -float:right; -margin-bottom:10px; -position:relative; -} - -.cart_item_price .remove:after { -content:''; -width:1px; -height:22px; -background:#bbb; -position:absolute; -top:50%; -left:50%; -z-index:3; -transform-origin:top left; -transform:rotate(45deg) translateX(-50%) translateY(-50%) -} - -.cart_item_price .remove:before { - content:''; - width:1px; - height:22px; - background:#bbb; - position:absolute; - top:50%; - left:50%; - z-index:3; - transform-origin:top left; - transform:rotate(-45deg) translateX(-50%) translateY(-50%) -} - -.cart_item_price .price { - font-size:11px; - font-weight:bold; - display:block -} - -.cart_item_info .sku { - font-size:10px; - font-weight:bold; - display:block -} - -.cart_item_info .title { - font-size:10px; - font-weight:bold; - display:block; - line-height:12px; - text-transform:uppercase; -} - -.cart_item_info .type { - font-size:10px; - font-weight:bold; - display:block; - text-transform:capitalize; -} - -.cart_item_info .meta { - padding-top:5px; - letter-spacing:.75px; - font-size:8px; -} - -.order_section .rows { - width:calc(100vw - 30px); - margin:0 auto; -} - -.order_section h2 { - width:calc(100vw - 30px); - margin:15px auto; - text-decoration:underline; - font-size:11px; -} - -.order_section_container { - width:calc(100vw - 30px); - margin:15px auto 2px; -} - -.cart-summary { - width:calc(100vw - 30px); - margin:0 auto; - display:table; - color:#bbb; - font-size:11px; -} - -.cart-summary-row { - display:table-row; -} - -.cart-summary span { - display:table-cell; - padding-top:20px; - vertical-align:bottom; -} - -.order_section .cart-summary-row span { - padding-top:1px; -} - -.order_section .cart-summary { - padding-top:15px; -} - -.order_section .cart-summary-row:last-child > span { - padding-top:15px!important; - font-weight:bold!important; -} - -.order_section .cart-summary .cart-summary-row span:nth-of-type(2) { - color:#000; -} - -#orders .order_section { - padding-bottom: 16px; - border-bottom: 1px solid #bbb; -} - - -.cart-summary-row span:not(.label) { -text-align:right -} - -.cart-summary-row .label { -font-weight:bold -} - -.cart-summary-row:last-child { -color:#000; -} - -.dropdown-wrapper { - position:relative; - text-align:right; - width:calc(100vw - 10px); - margin:0 auto; - box-sizing:border-box; - -} - -.dropdown-wrapper .add_edit { - padding:10px; - letter-spacing:0.5px; - font-size:12px; - color:#a9a9a9; - box-sizing:border-box; -} - -.dropdown-wrapper .dropdown { - font-size:14px; - box-sizing:border-box; - align-items: center; - text-align: center; - padding:10px 0; - border:1px solid #a9a9a9; - position:relative; -} - -.dropdown-wrapper .dropdown::before { - content:''; - box-sizing:border-box; - right:25px; - width:1px; - top:50%; - transform:translateY(-50%) rotate(45deg); - height:12px; - background:#a9a9a9; - position:absolute; - z-index:999; - transform-origin:bottom left; -} - -.dropdown-wrapper .dropdown::after { - content:''; - box-sizing:border-box; - right:25px; - width:1px; - top:50%; - transform:translateY(-50%) rotate(-45deg); - transform-origin:bottom right; - height:12px; - background:#a9a9a9; - position:absolute; - z-index:999; -} -#cart_shipping .address { - display: none; -} -.address .save_as_default { - display: none; -} - -#cart_shipping h3 { - margin-left:5px; - margin-bottom:6px; -} - -#cart_shipping input:first-child { - margin-top:10px -} - -#cart_shipping .half-input input { - margin-top:0px -} - -#cart .scroll, #payment .scroll, #shipping .scroll, #signup .scroll { - min-height:calc(100% + 250px) -}
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/andale_mono.ttf b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/andale_mono.ttf Binary files differdeleted file mode 100755 index e766a6e1..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/andale_mono.ttf +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/andale_mono.woff b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/andale_mono.woff Binary files differdeleted file mode 100755 index 9b0372de..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/andale_mono.woff +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/fonts.css b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/fonts.css deleted file mode 100755 index 8ddce654..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/fonts.css +++ /dev/null @@ -1,37 +0,0 @@ -@font-face { - font-family: andale; - src: url(andale_mono.woff); - font-style: normal; - font-weight: normal; -} - -@font-face { - font-family: pfd; - src: url(pfdintextpro-regular-webfont.woff); - font-style: normal; - font-weight: normal; -} -@font-face { - font-family: pfd; - src: url(pfdintextpro-bold-webfont.woff); - font-style: normal; - font-weight: bold; -} -@font-face { - font-family: pfd; - src: url(pfdintextpro-medium-webfont.woff); - font-style: normal; - font-weight: 300; -} -@font-face { - font-family: pfd; - src: url(pfdintextpro-light-webfont.woff); - font-style: normal; - font-weight: 100; -} -@font-face { - font-family: pfd; - src: url(pfdintextpro-italic-webfont.woff); - font-style: italic; - font-weight: normal; -} diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.css b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.css deleted file mode 100755 index 885aa6bd..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.css +++ /dev/null @@ -1,1480 +0,0 @@ -@charset "UTF-8"; -/*! - Ionicons, v2.0.0 - Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ - https://twitter.com/benjsperry https://twitter.com/ionicframework - MIT License: https://github.com/driftyco/ionicons - - Android-style icons originally built by Google’s - Material Design Icons: https://github.com/google/material-design-icons - used under CC BY http://creativecommons.org/licenses/by/4.0/ - Modified icons to fit ionicon’s grid from original. -*/ -@font-face { font-family: "Ionicons"; src: url("../fonts/ionicons.eot?v=2.0.0"); src: url("../fonts/ionicons.eot?v=2.0.0#iefix") format("embedded-opentype"), url("../fonts/ionicons.ttf?v=2.0.0") format("truetype"), url("../fonts/ionicons.woff?v=2.0.0") format("woff"), url("../fonts/ionicons.svg?v=2.0.0#Ionicons") format("svg"); font-weight: normal; font-style: normal; } -.ion, .ionicons, .ion-alert:before, .ion-alert-circled:before, .ion-android-add:before, .ion-android-add-circle:before, .ion-android-alarm-clock:before, .ion-android-alert:before, .ion-android-apps:before, .ion-android-archive:before, .ion-android-arrow-back:before, .ion-android-arrow-down:before, .ion-android-arrow-dropdown:before, .ion-android-arrow-dropdown-circle:before, .ion-android-arrow-dropleft:before, .ion-android-arrow-dropleft-circle:before, .ion-android-arrow-dropright:before, .ion-android-arrow-dropright-circle:before, .ion-android-arrow-dropup:before, .ion-android-arrow-dropup-circle:before, .ion-android-arrow-forward:before, .ion-android-arrow-up:before, .ion-android-attach:before, .ion-android-bar:before, .ion-android-bicycle:before, .ion-android-boat:before, .ion-android-bookmark:before, .ion-android-bulb:before, .ion-android-bus:before, .ion-android-calendar:before, .ion-android-call:before, .ion-android-camera:before, .ion-android-cancel:before, .ion-android-car:before, .ion-android-cart:before, .ion-android-chat:before, .ion-android-checkbox:before, .ion-android-checkbox-blank:before, .ion-android-checkbox-outline:before, .ion-android-checkbox-outline-blank:before, .ion-android-checkmark-circle:before, .ion-android-clipboard:before, .ion-android-close:before, .ion-android-cloud:before, .ion-android-cloud-circle:before, .ion-android-cloud-done:before, .ion-android-cloud-outline:before, .ion-android-color-palette:before, .ion-android-compass:before, .ion-android-contact:before, .ion-android-contacts:before, .ion-android-contract:before, .ion-android-create:before, .ion-android-delete:before, .ion-android-desktop:before, .ion-android-document:before, .ion-android-done:before, .ion-android-done-all:before, .ion-android-download:before, .ion-android-drafts:before, .ion-android-exit:before, .ion-android-expand:before, .ion-android-favorite:before, .ion-android-favorite-outline:before, .ion-android-film:before, .ion-android-folder:before, .ion-android-folder-open:before, .ion-android-funnel:before, .ion-android-globe:before, .ion-android-hand:before, .ion-android-hangout:before, .ion-android-happy:before, .ion-android-home:before, .ion-android-image:before, .ion-android-laptop:before, .ion-android-list:before, .ion-android-locate:before, .ion-android-lock:before, .ion-android-mail:before, .ion-android-map:before, .ion-android-menu:before, .ion-android-microphone:before, .ion-android-microphone-off:before, .ion-android-more-horizontal:before, .ion-android-more-vertical:before, .ion-android-navigate:before, .ion-android-notifications:before, .ion-android-notifications-none:before, .ion-android-notifications-off:before, .ion-android-open:before, .ion-android-options:before, .ion-android-people:before, .ion-android-person:before, .ion-android-person-add:before, .ion-android-phone-landscape:before, .ion-android-phone-portrait:before, .ion-android-pin:before, .ion-android-plane:before, .ion-android-playstore:before, .ion-android-print:before, .ion-android-radio-button-off:before, .ion-android-radio-button-on:before, .ion-android-refresh:before, .ion-android-remove:before, .ion-android-remove-circle:before, .ion-android-restaurant:before, .ion-android-sad:before, .ion-android-search:before, .ion-android-send:before, .ion-android-settings:before, .ion-android-share:before, .ion-android-share-alt:before, .ion-android-star:before, .ion-android-star-half:before, .ion-android-star-outline:before, .ion-android-stopwatch:before, .ion-android-subway:before, .ion-android-sunny:before, .ion-android-sync:before, .ion-android-textsms:before, .ion-android-time:before, .ion-android-train:before, .ion-android-unlock:before, .ion-android-upload:before, .ion-android-volume-down:before, .ion-android-volume-mute:before, .ion-android-volume-off:before, .ion-android-volume-up:before, .ion-android-walk:before, .ion-android-warning:before, .ion-android-watch:before, .ion-android-wifi:before, .ion-aperture:before, .ion-archive:before, .ion-arrow-down-a:before, .ion-arrow-down-b:before, .ion-arrow-down-c:before, .ion-arrow-expand:before, .ion-arrow-graph-down-left:before, .ion-arrow-graph-down-right:before, .ion-arrow-graph-up-left:before, .ion-arrow-graph-up-right:before, .ion-arrow-left-a:before, .ion-arrow-left-b:before, .ion-arrow-left-c:before, .ion-arrow-move:before, .ion-arrow-resize:before, .ion-arrow-return-left:before, .ion-arrow-return-right:before, .ion-arrow-right-a:before, .ion-arrow-right-b:before, .ion-arrow-right-c:before, .ion-arrow-shrink:before, .ion-arrow-swap:before, .ion-arrow-up-a:before, .ion-arrow-up-b:before, .ion-arrow-up-c:before, .ion-asterisk:before, .ion-at:before, .ion-backspace:before, .ion-backspace-outline:before, .ion-bag:before, .ion-battery-charging:before, .ion-battery-empty:before, .ion-battery-full:before, .ion-battery-half:before, .ion-battery-low:before, .ion-beaker:before, .ion-beer:before, .ion-bluetooth:before, .ion-bonfire:before, .ion-bookmark:before, .ion-bowtie:before, .ion-briefcase:before, .ion-bug:before, .ion-calculator:before, .ion-calendar:before, .ion-camera:before, .ion-card:before, .ion-cash:before, .ion-chatbox:before, .ion-chatbox-working:before, .ion-chatboxes:before, .ion-chatbubble:before, .ion-chatbubble-working:before, .ion-chatbubbles:before, .ion-checkmark:before, .ion-checkmark-circled:before, .ion-checkmark-round:before, .ion-chevron-down:before, .ion-chevron-left:before, .ion-chevron-right:before, .ion-chevron-up:before, .ion-clipboard:before, .ion-clock:before, .ion-close:before, .ion-close-circled:before, .ion-close-round:before, .ion-closed-captioning:before, .ion-cloud:before, .ion-code:before, .ion-code-download:before, .ion-code-working:before, .ion-coffee:before, .ion-compass:before, .ion-compose:before, .ion-connection-bars:before, .ion-contrast:before, .ion-crop:before, .ion-cube:before, .ion-disc:before, .ion-document:before, .ion-document-text:before, .ion-drag:before, .ion-earth:before, .ion-easel:before, .ion-edit:before, .ion-egg:before, .ion-eject:before, .ion-email:before, .ion-email-unread:before, .ion-erlenmeyer-flask:before, .ion-erlenmeyer-flask-bubbles:before, .ion-eye:before, .ion-eye-disabled:before, .ion-female:before, .ion-filing:before, .ion-film-marker:before, .ion-fireball:before, .ion-flag:before, .ion-flame:before, .ion-flash:before, .ion-flash-off:before, .ion-folder:before, .ion-fork:before, .ion-fork-repo:before, .ion-forward:before, .ion-funnel:before, .ion-gear-a:before, .ion-gear-b:before, .ion-grid:before, .ion-hammer:before, .ion-happy:before, .ion-happy-outline:before, .ion-headphone:before, .ion-heart:before, .ion-heart-broken:before, .ion-help:before, .ion-help-buoy:before, .ion-help-circled:before, .ion-home:before, .ion-icecream:before, .ion-image:before, .ion-images:before, .ion-information:before, .ion-information-circled:before, .ion-ionic:before, .ion-ios-alarm:before, .ion-ios-alarm-outline:before, .ion-ios-albums:before, .ion-ios-albums-outline:before, .ion-ios-americanfootball:before, .ion-ios-americanfootball-outline:before, .ion-ios-analytics:before, .ion-ios-analytics-outline:before, .ion-ios-arrow-back:before, .ion-ios-arrow-down:before, .ion-ios-arrow-forward:before, .ion-ios-arrow-left:before, .ion-ios-arrow-right:before, .ion-ios-arrow-thin-down:before, .ion-ios-arrow-thin-left:before, .ion-ios-arrow-thin-right:before, .ion-ios-arrow-thin-up:before, .ion-ios-arrow-up:before, .ion-ios-at:before, .ion-ios-at-outline:before, .ion-ios-barcode:before, .ion-ios-barcode-outline:before, .ion-ios-baseball:before, .ion-ios-baseball-outline:before, .ion-ios-basketball:before, .ion-ios-basketball-outline:before, .ion-ios-bell:before, .ion-ios-bell-outline:before, .ion-ios-body:before, .ion-ios-body-outline:before, .ion-ios-bolt:before, .ion-ios-bolt-outline:before, .ion-ios-book:before, .ion-ios-book-outline:before, .ion-ios-bookmarks:before, .ion-ios-bookmarks-outline:before, .ion-ios-box:before, .ion-ios-box-outline:before, .ion-ios-briefcase:before, .ion-ios-briefcase-outline:before, .ion-ios-browsers:before, .ion-ios-browsers-outline:before, .ion-ios-calculator:before, .ion-ios-calculator-outline:before, .ion-ios-calendar:before, .ion-ios-calendar-outline:before, .ion-ios-camera:before, .ion-ios-camera-outline:before, .ion-ios-cart:before, .ion-ios-cart-outline:before, .ion-ios-chatboxes:before, .ion-ios-chatboxes-outline:before, .ion-ios-chatbubble:before, .ion-ios-chatbubble-outline:before, .ion-ios-checkmark:before, .ion-ios-checkmark-empty:before, .ion-ios-checkmark-outline:before, .ion-ios-circle-filled:before, .ion-ios-circle-outline:before, .ion-ios-clock:before, .ion-ios-clock-outline:before, .ion-ios-close:before, .ion-ios-close-empty:before, .ion-ios-close-outline:before, .ion-ios-cloud:before, .ion-ios-cloud-download:before, .ion-ios-cloud-download-outline:before, .ion-ios-cloud-outline:before, .ion-ios-cloud-upload:before, .ion-ios-cloud-upload-outline:before, .ion-ios-cloudy:before, .ion-ios-cloudy-night:before, .ion-ios-cloudy-night-outline:before, .ion-ios-cloudy-outline:before, .ion-ios-cog:before, .ion-ios-cog-outline:before, .ion-ios-color-filter:before, .ion-ios-color-filter-outline:before, .ion-ios-color-wand:before, .ion-ios-color-wand-outline:before, .ion-ios-compose:before, .ion-ios-compose-outline:before, .ion-ios-contact:before, .ion-ios-contact-outline:before, .ion-ios-copy:before, .ion-ios-copy-outline:before, .ion-ios-crop:before, .ion-ios-crop-strong:before, .ion-ios-download:before, .ion-ios-download-outline:before, .ion-ios-drag:before, .ion-ios-email:before, .ion-ios-email-outline:before, .ion-ios-eye:before, .ion-ios-eye-outline:before, .ion-ios-fastforward:before, .ion-ios-fastforward-outline:before, .ion-ios-filing:before, .ion-ios-filing-outline:before, .ion-ios-film:before, .ion-ios-film-outline:before, .ion-ios-flag:before, .ion-ios-flag-outline:before, .ion-ios-flame:before, .ion-ios-flame-outline:before, .ion-ios-flask:before, .ion-ios-flask-outline:before, .ion-ios-flower:before, .ion-ios-flower-outline:before, .ion-ios-folder:before, .ion-ios-folder-outline:before, .ion-ios-football:before, .ion-ios-football-outline:before, .ion-ios-game-controller-a:before, .ion-ios-game-controller-a-outline:before, .ion-ios-game-controller-b:before, .ion-ios-game-controller-b-outline:before, .ion-ios-gear:before, .ion-ios-gear-outline:before, .ion-ios-glasses:before, .ion-ios-glasses-outline:before, .ion-ios-grid-view:before, .ion-ios-grid-view-outline:before, .ion-ios-heart:before, .ion-ios-heart-outline:before, .ion-ios-help:before, .ion-ios-help-empty:before, .ion-ios-help-outline:before, .ion-ios-home:before, .ion-ios-home-outline:before, .ion-ios-infinite:before, .ion-ios-infinite-outline:before, .ion-ios-information:before, .ion-ios-information-empty:before, .ion-ios-information-outline:before, .ion-ios-ionic-outline:before, .ion-ios-keypad:before, .ion-ios-keypad-outline:before, .ion-ios-lightbulb:before, .ion-ios-lightbulb-outline:before, .ion-ios-list:before, .ion-ios-list-outline:before, .ion-ios-location:before, .ion-ios-location-outline:before, .ion-ios-locked:before, .ion-ios-locked-outline:before, .ion-ios-loop:before, .ion-ios-loop-strong:before, .ion-ios-medical:before, .ion-ios-medical-outline:before, .ion-ios-medkit:before, .ion-ios-medkit-outline:before, .ion-ios-mic:before, .ion-ios-mic-off:before, .ion-ios-mic-outline:before, .ion-ios-minus:before, .ion-ios-minus-empty:before, .ion-ios-minus-outline:before, .ion-ios-monitor:before, .ion-ios-monitor-outline:before, .ion-ios-moon:before, .ion-ios-moon-outline:before, .ion-ios-more:before, .ion-ios-more-outline:before, .ion-ios-musical-note:before, .ion-ios-musical-notes:before, .ion-ios-navigate:before, .ion-ios-navigate-outline:before, .ion-ios-nutrition:before, .ion-ios-nutrition-outline:before, .ion-ios-paper:before, .ion-ios-paper-outline:before, .ion-ios-paperplane:before, .ion-ios-paperplane-outline:before, .ion-ios-partlysunny:before, .ion-ios-partlysunny-outline:before, .ion-ios-pause:before, .ion-ios-pause-outline:before, .ion-ios-paw:before, .ion-ios-paw-outline:before, .ion-ios-people:before, .ion-ios-people-outline:before, .ion-ios-person:before, .ion-ios-person-outline:before, .ion-ios-personadd:before, .ion-ios-personadd-outline:before, .ion-ios-photos:before, .ion-ios-photos-outline:before, .ion-ios-pie:before, .ion-ios-pie-outline:before, .ion-ios-pint:before, .ion-ios-pint-outline:before, .ion-ios-play:before, .ion-ios-play-outline:before, .ion-ios-plus:before, .ion-ios-plus-empty:before, .ion-ios-plus-outline:before, .ion-ios-pricetag:before, .ion-ios-pricetag-outline:before, .ion-ios-pricetags:before, .ion-ios-pricetags-outline:before, .ion-ios-printer:before, .ion-ios-printer-outline:before, .ion-ios-pulse:before, .ion-ios-pulse-strong:before, .ion-ios-rainy:before, .ion-ios-rainy-outline:before, .ion-ios-recording:before, .ion-ios-recording-outline:before, .ion-ios-redo:before, .ion-ios-redo-outline:before, .ion-ios-refresh:before, .ion-ios-refresh-empty:before, .ion-ios-refresh-outline:before, .ion-ios-reload:before, .ion-ios-reverse-camera:before, .ion-ios-reverse-camera-outline:before, .ion-ios-rewind:before, .ion-ios-rewind-outline:before, .ion-ios-rose:before, .ion-ios-rose-outline:before, .ion-ios-search:before, .ion-ios-search-strong:before, .ion-ios-settings:before, .ion-ios-settings-strong:before, .ion-ios-shuffle:before, .ion-ios-shuffle-strong:before, .ion-ios-skipbackward:before, .ion-ios-skipbackward-outline:before, .ion-ios-skipforward:before, .ion-ios-skipforward-outline:before, .ion-ios-snowy:before, .ion-ios-speedometer:before, .ion-ios-speedometer-outline:before, .ion-ios-star:before, .ion-ios-star-half:before, .ion-ios-star-outline:before, .ion-ios-stopwatch:before, .ion-ios-stopwatch-outline:before, .ion-ios-sunny:before, .ion-ios-sunny-outline:before, .ion-ios-telephone:before, .ion-ios-telephone-outline:before, .ion-ios-tennisball:before, .ion-ios-tennisball-outline:before, .ion-ios-thunderstorm:before, .ion-ios-thunderstorm-outline:before, .ion-ios-time:before, .ion-ios-time-outline:before, .ion-ios-timer:before, .ion-ios-timer-outline:before, .ion-ios-toggle:before, .ion-ios-toggle-outline:before, .ion-ios-trash:before, .ion-ios-trash-outline:before, .ion-ios-undo:before, .ion-ios-undo-outline:before, .ion-ios-unlocked:before, .ion-ios-unlocked-outline:before, .ion-ios-upload:before, .ion-ios-upload-outline:before, .ion-ios-videocam:before, .ion-ios-videocam-outline:before, .ion-ios-volume-high:before, .ion-ios-volume-low:before, .ion-ios-wineglass:before, .ion-ios-wineglass-outline:before, .ion-ios-world:before, .ion-ios-world-outline:before, .ion-ipad:before, .ion-iphone:before, .ion-ipod:before, .ion-jet:before, .ion-key:before, .ion-knife:before, .ion-laptop:before, .ion-leaf:before, .ion-levels:before, .ion-lightbulb:before, .ion-link:before, .ion-load-a:before, .ion-load-b:before, .ion-load-c:before, .ion-load-d:before, .ion-location:before, .ion-lock-combination:before, .ion-locked:before, .ion-log-in:before, .ion-log-out:before, .ion-loop:before, .ion-magnet:before, .ion-male:before, .ion-man:before, .ion-map:before, .ion-medkit:before, .ion-merge:before, .ion-mic-a:before, .ion-mic-b:before, .ion-mic-c:before, .ion-minus:before, .ion-minus-circled:before, .ion-minus-round:before, .ion-model-s:before, .ion-monitor:before, .ion-more:before, .ion-mouse:before, .ion-music-note:before, .ion-navicon:before, .ion-navicon-round:before, .ion-navigate:before, .ion-network:before, .ion-no-smoking:before, .ion-nuclear:before, .ion-outlet:before, .ion-paintbrush:before, .ion-paintbucket:before, .ion-paper-airplane:before, .ion-paperclip:before, .ion-pause:before, .ion-person:before, .ion-person-add:before, .ion-person-stalker:before, .ion-pie-graph:before, .ion-pin:before, .ion-pinpoint:before, .ion-pizza:before, .ion-plane:before, .ion-planet:before, .ion-play:before, .ion-playstation:before, .ion-plus:before, .ion-plus-circled:before, .ion-plus-round:before, .ion-podium:before, .ion-pound:before, .ion-power:before, .ion-pricetag:before, .ion-pricetags:before, .ion-printer:before, .ion-pull-request:before, .ion-qr-scanner:before, .ion-quote:before, .ion-radio-waves:before, .ion-record:before, .ion-refresh:before, .ion-reply:before, .ion-reply-all:before, .ion-ribbon-a:before, .ion-ribbon-b:before, .ion-sad:before, .ion-sad-outline:before, .ion-scissors:before, .ion-search:before, .ion-settings:before, .ion-share:before, .ion-shuffle:before, .ion-skip-backward:before, .ion-skip-forward:before, .ion-social-android:before, .ion-social-android-outline:before, .ion-social-angular:before, .ion-social-angular-outline:before, .ion-social-apple:before, .ion-social-apple-outline:before, .ion-social-bitcoin:before, .ion-social-bitcoin-outline:before, .ion-social-buffer:before, .ion-social-buffer-outline:before, .ion-social-chrome:before, .ion-social-chrome-outline:before, .ion-social-codepen:before, .ion-social-codepen-outline:before, .ion-social-css3:before, .ion-social-css3-outline:before, .ion-social-designernews:before, .ion-social-designernews-outline:before, .ion-social-dribbble:before, .ion-social-dribbble-outline:before, .ion-social-dropbox:before, .ion-social-dropbox-outline:before, .ion-social-euro:before, .ion-social-euro-outline:before, .ion-social-facebook:before, .ion-social-facebook-outline:before, .ion-social-foursquare:before, .ion-social-foursquare-outline:before, .ion-social-freebsd-devil:before, .ion-social-github:before, .ion-social-github-outline:before, .ion-social-google:before, .ion-social-google-outline:before, .ion-social-googleplus:before, .ion-social-googleplus-outline:before, .ion-social-hackernews:before, .ion-social-hackernews-outline:before, .ion-social-html5:before, .ion-social-html5-outline:before, .ion-social-instagram:before, .ion-social-instagram-outline:before, .ion-social-javascript:before, .ion-social-javascript-outline:before, .ion-social-linkedin:before, .ion-social-linkedin-outline:before, .ion-social-markdown:before, .ion-social-nodejs:before, .ion-social-octocat:before, .ion-social-pinterest:before, .ion-social-pinterest-outline:before, .ion-social-python:before, .ion-social-reddit:before, .ion-social-reddit-outline:before, .ion-social-rss:before, .ion-social-rss-outline:before, .ion-social-sass:before, .ion-social-skype:before, .ion-social-skype-outline:before, .ion-social-snapchat:before, .ion-social-snapchat-outline:before, .ion-social-tumblr:before, .ion-social-tumblr-outline:before, .ion-social-tux:before, .ion-social-twitch:before, .ion-social-twitch-outline:before, .ion-social-twitter:before, .ion-social-twitter-outline:before, .ion-social-usd:before, .ion-social-usd-outline:before, .ion-social-vimeo:before, .ion-social-vimeo-outline:before, .ion-social-whatsapp:before, .ion-social-whatsapp-outline:before, .ion-social-windows:before, .ion-social-windows-outline:before, .ion-social-wordpress:before, .ion-social-wordpress-outline:before, .ion-social-yahoo:before, .ion-social-yahoo-outline:before, .ion-social-yen:before, .ion-social-yen-outline:before, .ion-social-youtube:before, .ion-social-youtube-outline:before, .ion-soup-can:before, .ion-soup-can-outline:before, .ion-speakerphone:before, .ion-speedometer:before, .ion-spoon:before, .ion-star:before, .ion-stats-bars:before, .ion-steam:before, .ion-stop:before, .ion-thermometer:before, .ion-thumbsdown:before, .ion-thumbsup:before, .ion-toggle:before, .ion-toggle-filled:before, .ion-transgender:before, .ion-trash-a:before, .ion-trash-b:before, .ion-trophy:before, .ion-tshirt:before, .ion-tshirt-outline:before, .ion-umbrella:before, .ion-university:before, .ion-unlocked:before, .ion-upload:before, .ion-usb:before, .ion-videocamera:before, .ion-volume-high:before, .ion-volume-low:before, .ion-volume-medium:before, .ion-volume-mute:before, .ion-wand:before, .ion-waterdrop:before, .ion-wifi:before, .ion-wineglass:before, .ion-woman:before, .ion-wrench:before, .ion-xbox:before { display: inline-block; font-family: "Ionicons"; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; text-rendering: auto; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } - -.ion-alert:before { content: "\f101"; } - -.ion-alert-circled:before { content: "\f100"; } - -.ion-android-add:before { content: "\f2c7"; } - -.ion-android-add-circle:before { content: "\f359"; } - -.ion-android-alarm-clock:before { content: "\f35a"; } - -.ion-android-alert:before { content: "\f35b"; } - -.ion-android-apps:before { content: "\f35c"; } - -.ion-android-archive:before { content: "\f2c9"; } - -.ion-android-arrow-back:before { content: "\f2ca"; } - -.ion-android-arrow-down:before { content: "\f35d"; } - -.ion-android-arrow-dropdown:before { content: "\f35f"; } - -.ion-android-arrow-dropdown-circle:before { content: "\f35e"; } - -.ion-android-arrow-dropleft:before { content: "\f361"; } - -.ion-android-arrow-dropleft-circle:before { content: "\f360"; } - -.ion-android-arrow-dropright:before { content: "\f363"; } - -.ion-android-arrow-dropright-circle:before { content: "\f362"; } - -.ion-android-arrow-dropup:before { content: "\f365"; } - -.ion-android-arrow-dropup-circle:before { content: "\f364"; } - -.ion-android-arrow-forward:before { content: "\f30f"; } - -.ion-android-arrow-up:before { content: "\f366"; } - -.ion-android-attach:before { content: "\f367"; } - -.ion-android-bar:before { content: "\f368"; } - -.ion-android-bicycle:before { content: "\f369"; } - -.ion-android-boat:before { content: "\f36a"; } - -.ion-android-bookmark:before { content: "\f36b"; } - -.ion-android-bulb:before { content: "\f36c"; } - -.ion-android-bus:before { content: "\f36d"; } - -.ion-android-calendar:before { content: "\f2d1"; } - -.ion-android-call:before { content: "\f2d2"; } - -.ion-android-camera:before { content: "\f2d3"; } - -.ion-android-cancel:before { content: "\f36e"; } - -.ion-android-car:before { content: "\f36f"; } - -.ion-android-cart:before { content: "\f370"; } - -.ion-android-chat:before { content: "\f2d4"; } - -.ion-android-checkbox:before { content: "\f374"; } - -.ion-android-checkbox-blank:before { content: "\f371"; } - -.ion-android-checkbox-outline:before { content: "\f373"; } - -.ion-android-checkbox-outline-blank:before { content: "\f372"; } - -.ion-android-checkmark-circle:before { content: "\f375"; } - -.ion-android-clipboard:before { content: "\f376"; } - -.ion-android-close:before { content: "\f2d7"; } - -.ion-android-cloud:before { content: "\f37a"; } - -.ion-android-cloud-circle:before { content: "\f377"; } - -.ion-android-cloud-done:before { content: "\f378"; } - -.ion-android-cloud-outline:before { content: "\f379"; } - -.ion-android-color-palette:before { content: "\f37b"; } - -.ion-android-compass:before { content: "\f37c"; } - -.ion-android-contact:before { content: "\f2d8"; } - -.ion-android-contacts:before { content: "\f2d9"; } - -.ion-android-contract:before { content: "\f37d"; } - -.ion-android-create:before { content: "\f37e"; } - -.ion-android-delete:before { content: "\f37f"; } - -.ion-android-desktop:before { content: "\f380"; } - -.ion-android-document:before { content: "\f381"; } - -.ion-android-done:before { content: "\f383"; } - -.ion-android-done-all:before { content: "\f382"; } - -.ion-android-download:before { content: "\f2dd"; } - -.ion-android-drafts:before { content: "\f384"; } - -.ion-android-exit:before { content: "\f385"; } - -.ion-android-expand:before { content: "\f386"; } - -.ion-android-favorite:before { content: "\f388"; } - -.ion-android-favorite-outline:before { content: "\f387"; } - -.ion-android-film:before { content: "\f389"; } - -.ion-android-folder:before { content: "\f2e0"; } - -.ion-android-folder-open:before { content: "\f38a"; } - -.ion-android-funnel:before { content: "\f38b"; } - -.ion-android-globe:before { content: "\f38c"; } - -.ion-android-hand:before { content: "\f2e3"; } - -.ion-android-hangout:before { content: "\f38d"; } - -.ion-android-happy:before { content: "\f38e"; } - -.ion-android-home:before { content: "\f38f"; } - -.ion-android-image:before { content: "\f2e4"; } - -.ion-android-laptop:before { content: "\f390"; } - -.ion-android-list:before { content: "\f391"; } - -.ion-android-locate:before { content: "\f2e9"; } - -.ion-android-lock:before { content: "\f392"; } - -.ion-android-mail:before { content: "\f2eb"; } - -.ion-android-map:before { content: "\f393"; } - -.ion-android-menu:before { content: "\f394"; } - -.ion-android-microphone:before { content: "\f2ec"; } - -.ion-android-microphone-off:before { content: "\f395"; } - -.ion-android-more-horizontal:before { content: "\f396"; } - -.ion-android-more-vertical:before { content: "\f397"; } - -.ion-android-navigate:before { content: "\f398"; } - -.ion-android-notifications:before { content: "\f39b"; } - -.ion-android-notifications-none:before { content: "\f399"; } - -.ion-android-notifications-off:before { content: "\f39a"; } - -.ion-android-open:before { content: "\f39c"; } - -.ion-android-options:before { content: "\f39d"; } - -.ion-android-people:before { content: "\f39e"; } - -.ion-android-person:before { content: "\f3a0"; } - -.ion-android-person-add:before { content: "\f39f"; } - -.ion-android-phone-landscape:before { content: "\f3a1"; } - -.ion-android-phone-portrait:before { content: "\f3a2"; } - -.ion-android-pin:before { content: "\f3a3"; } - -.ion-android-plane:before { content: "\f3a4"; } - -.ion-android-playstore:before { content: "\f2f0"; } - -.ion-android-print:before { content: "\f3a5"; } - -.ion-android-radio-button-off:before { content: "\f3a6"; } - -.ion-android-radio-button-on:before { content: "\f3a7"; } - -.ion-android-refresh:before { content: "\f3a8"; } - -.ion-android-remove:before { content: "\f2f4"; } - -.ion-android-remove-circle:before { content: "\f3a9"; } - -.ion-android-restaurant:before { content: "\f3aa"; } - -.ion-android-sad:before { content: "\f3ab"; } - -.ion-android-search:before { content: "\f2f5"; } - -.ion-android-send:before { content: "\f2f6"; } - -.ion-android-settings:before { content: "\f2f7"; } - -.ion-android-share:before { content: "\f2f8"; } - -.ion-android-share-alt:before { content: "\f3ac"; } - -.ion-android-star:before { content: "\f2fc"; } - -.ion-android-star-half:before { content: "\f3ad"; } - -.ion-android-star-outline:before { content: "\f3ae"; } - -.ion-android-stopwatch:before { content: "\f2fd"; } - -.ion-android-subway:before { content: "\f3af"; } - -.ion-android-sunny:before { content: "\f3b0"; } - -.ion-android-sync:before { content: "\f3b1"; } - -.ion-android-textsms:before { content: "\f3b2"; } - -.ion-android-time:before { content: "\f3b3"; } - -.ion-android-train:before { content: "\f3b4"; } - -.ion-android-unlock:before { content: "\f3b5"; } - -.ion-android-upload:before { content: "\f3b6"; } - -.ion-android-volume-down:before { content: "\f3b7"; } - -.ion-android-volume-mute:before { content: "\f3b8"; } - -.ion-android-volume-off:before { content: "\f3b9"; } - -.ion-android-volume-up:before { content: "\f3ba"; } - -.ion-android-walk:before { content: "\f3bb"; } - -.ion-android-warning:before { content: "\f3bc"; } - -.ion-android-watch:before { content: "\f3bd"; } - -.ion-android-wifi:before { content: "\f305"; } - -.ion-aperture:before { content: "\f313"; } - -.ion-archive:before { content: "\f102"; } - -.ion-arrow-down-a:before { content: "\f103"; } - -.ion-arrow-down-b:before { content: "\f104"; } - -.ion-arrow-down-c:before { content: "\f105"; } - -.ion-arrow-expand:before { content: "\f25e"; } - -.ion-arrow-graph-down-left:before { content: "\f25f"; } - -.ion-arrow-graph-down-right:before { content: "\f260"; } - -.ion-arrow-graph-up-left:before { content: "\f261"; } - -.ion-arrow-graph-up-right:before { content: "\f262"; } - -.ion-arrow-left-a:before { content: "\f106"; } - -.ion-arrow-left-b:before { content: "\f107"; } - -.ion-arrow-left-c:before { content: "\f108"; } - -.ion-arrow-move:before { content: "\f263"; } - -.ion-arrow-resize:before { content: "\f264"; } - -.ion-arrow-return-left:before { content: "\f265"; } - -.ion-arrow-return-right:before { content: "\f266"; } - -.ion-arrow-right-a:before { content: "\f109"; } - -.ion-arrow-right-b:before { content: "\f10a"; } - -.ion-arrow-right-c:before { content: "\f10b"; } - -.ion-arrow-shrink:before { content: "\f267"; } - -.ion-arrow-swap:before { content: "\f268"; } - -.ion-arrow-up-a:before { content: "\f10c"; } - -.ion-arrow-up-b:before { content: "\f10d"; } - -.ion-arrow-up-c:before { content: "\f10e"; } - -.ion-asterisk:before { content: "\f314"; } - -.ion-at:before { content: "\f10f"; } - -.ion-backspace:before { content: "\f3bf"; } - -.ion-backspace-outline:before { content: "\f3be"; } - -.ion-bag:before { content: "\f110"; } - -.ion-battery-charging:before { content: "\f111"; } - -.ion-battery-empty:before { content: "\f112"; } - -.ion-battery-full:before { content: "\f113"; } - -.ion-battery-half:before { content: "\f114"; } - -.ion-battery-low:before { content: "\f115"; } - -.ion-beaker:before { content: "\f269"; } - -.ion-beer:before { content: "\f26a"; } - -.ion-bluetooth:before { content: "\f116"; } - -.ion-bonfire:before { content: "\f315"; } - -.ion-bookmark:before { content: "\f26b"; } - -.ion-bowtie:before { content: "\f3c0"; } - -.ion-briefcase:before { content: "\f26c"; } - -.ion-bug:before { content: "\f2be"; } - -.ion-calculator:before { content: "\f26d"; } - -.ion-calendar:before { content: "\f117"; } - -.ion-camera:before { content: "\f118"; } - -.ion-card:before { content: "\f119"; } - -.ion-cash:before { content: "\f316"; } - -.ion-chatbox:before { content: "\f11b"; } - -.ion-chatbox-working:before { content: "\f11a"; } - -.ion-chatboxes:before { content: "\f11c"; } - -.ion-chatbubble:before { content: "\f11e"; } - -.ion-chatbubble-working:before { content: "\f11d"; } - -.ion-chatbubbles:before { content: "\f11f"; } - -.ion-checkmark:before { content: "\f122"; } - -.ion-checkmark-circled:before { content: "\f120"; } - -.ion-checkmark-round:before { content: "\f121"; } - -.ion-chevron-down:before { content: "\f123"; } - -.ion-chevron-left:before { content: "\f124"; } - -.ion-chevron-right:before { content: "\f125"; } - -.ion-chevron-up:before { content: "\f126"; } - -.ion-clipboard:before { content: "\f127"; } - -.ion-clock:before { content: "\f26e"; } - -.ion-close:before { content: "\f12a"; } - -.ion-close-circled:before { content: "\f128"; } - -.ion-close-round:before { content: "\f129"; } - -.ion-closed-captioning:before { content: "\f317"; } - -.ion-cloud:before { content: "\f12b"; } - -.ion-code:before { content: "\f271"; } - -.ion-code-download:before { content: "\f26f"; } - -.ion-code-working:before { content: "\f270"; } - -.ion-coffee:before { content: "\f272"; } - -.ion-compass:before { content: "\f273"; } - -.ion-compose:before { content: "\f12c"; } - -.ion-connection-bars:before { content: "\f274"; } - -.ion-contrast:before { content: "\f275"; } - -.ion-crop:before { content: "\f3c1"; } - -.ion-cube:before { content: "\f318"; } - -.ion-disc:before { content: "\f12d"; } - -.ion-document:before { content: "\f12f"; } - -.ion-document-text:before { content: "\f12e"; } - -.ion-drag:before { content: "\f130"; } - -.ion-earth:before { content: "\f276"; } - -.ion-easel:before { content: "\f3c2"; } - -.ion-edit:before { content: "\f2bf"; } - -.ion-egg:before { content: "\f277"; } - -.ion-eject:before { content: "\f131"; } - -.ion-email:before { content: "\f132"; } - -.ion-email-unread:before { content: "\f3c3"; } - -.ion-erlenmeyer-flask:before { content: "\f3c5"; } - -.ion-erlenmeyer-flask-bubbles:before { content: "\f3c4"; } - -.ion-eye:before { content: "\f133"; } - -.ion-eye-disabled:before { content: "\f306"; } - -.ion-female:before { content: "\f278"; } - -.ion-filing:before { content: "\f134"; } - -.ion-film-marker:before { content: "\f135"; } - -.ion-fireball:before { content: "\f319"; } - -.ion-flag:before { content: "\f279"; } - -.ion-flame:before { content: "\f31a"; } - -.ion-flash:before { content: "\f137"; } - -.ion-flash-off:before { content: "\f136"; } - -.ion-folder:before { content: "\f139"; } - -.ion-fork:before { content: "\f27a"; } - -.ion-fork-repo:before { content: "\f2c0"; } - -.ion-forward:before { content: "\f13a"; } - -.ion-funnel:before { content: "\f31b"; } - -.ion-gear-a:before { content: "\f13d"; } - -.ion-gear-b:before { content: "\f13e"; } - -.ion-grid:before { content: "\f13f"; } - -.ion-hammer:before { content: "\f27b"; } - -.ion-happy:before { content: "\f31c"; } - -.ion-happy-outline:before { content: "\f3c6"; } - -.ion-headphone:before { content: "\f140"; } - -.ion-heart:before { content: "\f141"; } - -.ion-heart-broken:before { content: "\f31d"; } - -.ion-help:before { content: "\f143"; } - -.ion-help-buoy:before { content: "\f27c"; } - -.ion-help-circled:before { content: "\f142"; } - -.ion-home:before { content: "\f144"; } - -.ion-icecream:before { content: "\f27d"; } - -.ion-image:before { content: "\f147"; } - -.ion-images:before { content: "\f148"; } - -.ion-information:before { content: "\f14a"; } - -.ion-information-circled:before { content: "\f149"; } - -.ion-ionic:before { content: "\f14b"; } - -.ion-ios-alarm:before { content: "\f3c8"; } - -.ion-ios-alarm-outline:before { content: "\f3c7"; } - -.ion-ios-albums:before { content: "\f3ca"; } - -.ion-ios-albums-outline:before { content: "\f3c9"; } - -.ion-ios-americanfootball:before { content: "\f3cc"; } - -.ion-ios-americanfootball-outline:before { content: "\f3cb"; } - -.ion-ios-analytics:before { content: "\f3ce"; } - -.ion-ios-analytics-outline:before { content: "\f3cd"; } - -.ion-ios-arrow-back:before { content: "\f3cf"; } - -.ion-ios-arrow-down:before { content: "\f3d0"; } - -.ion-ios-arrow-forward:before { content: "\f3d1"; } - -.ion-ios-arrow-left:before { content: "\f3d2"; } - -.ion-ios-arrow-right:before { content: "\f3d3"; } - -.ion-ios-arrow-thin-down:before { content: "\f3d4"; } - -.ion-ios-arrow-thin-left:before { content: "\f3d5"; } - -.ion-ios-arrow-thin-right:before { content: "\f3d6"; } - -.ion-ios-arrow-thin-up:before { content: "\f3d7"; } - -.ion-ios-arrow-up:before { content: "\f3d8"; } - -.ion-ios-at:before { content: "\f3da"; } - -.ion-ios-at-outline:before { content: "\f3d9"; } - -.ion-ios-barcode:before { content: "\f3dc"; } - -.ion-ios-barcode-outline:before { content: "\f3db"; } - -.ion-ios-baseball:before { content: "\f3de"; } - -.ion-ios-baseball-outline:before { content: "\f3dd"; } - -.ion-ios-basketball:before { content: "\f3e0"; } - -.ion-ios-basketball-outline:before { content: "\f3df"; } - -.ion-ios-bell:before { content: "\f3e2"; } - -.ion-ios-bell-outline:before { content: "\f3e1"; } - -.ion-ios-body:before { content: "\f3e4"; } - -.ion-ios-body-outline:before { content: "\f3e3"; } - -.ion-ios-bolt:before { content: "\f3e6"; } - -.ion-ios-bolt-outline:before { content: "\f3e5"; } - -.ion-ios-book:before { content: "\f3e8"; } - -.ion-ios-book-outline:before { content: "\f3e7"; } - -.ion-ios-bookmarks:before { content: "\f3ea"; } - -.ion-ios-bookmarks-outline:before { content: "\f3e9"; } - -.ion-ios-box:before { content: "\f3ec"; } - -.ion-ios-box-outline:before { content: "\f3eb"; } - -.ion-ios-briefcase:before { content: "\f3ee"; } - -.ion-ios-briefcase-outline:before { content: "\f3ed"; } - -.ion-ios-browsers:before { content: "\f3f0"; } - -.ion-ios-browsers-outline:before { content: "\f3ef"; } - -.ion-ios-calculator:before { content: "\f3f2"; } - -.ion-ios-calculator-outline:before { content: "\f3f1"; } - -.ion-ios-calendar:before { content: "\f3f4"; } - -.ion-ios-calendar-outline:before { content: "\f3f3"; } - -.ion-ios-camera:before { content: "\f3f6"; } - -.ion-ios-camera-outline:before { content: "\f3f5"; } - -.ion-ios-cart:before { content: "\f3f8"; } - -.ion-ios-cart-outline:before { content: "\f3f7"; } - -.ion-ios-chatboxes:before { content: "\f3fa"; } - -.ion-ios-chatboxes-outline:before { content: "\f3f9"; } - -.ion-ios-chatbubble:before { content: "\f3fc"; } - -.ion-ios-chatbubble-outline:before { content: "\f3fb"; } - -.ion-ios-checkmark:before { content: "\f3ff"; } - -.ion-ios-checkmark-empty:before { content: "\f3fd"; } - -.ion-ios-checkmark-outline:before { content: "\f3fe"; } - -.ion-ios-circle-filled:before { content: "\f400"; } - -.ion-ios-circle-outline:before { content: "\f401"; } - -.ion-ios-clock:before { content: "\f403"; } - -.ion-ios-clock-outline:before { content: "\f402"; } - -.ion-ios-close:before { content: "\f406"; } - -.ion-ios-close-empty:before { content: "\f404"; } - -.ion-ios-close-outline:before { content: "\f405"; } - -.ion-ios-cloud:before { content: "\f40c"; } - -.ion-ios-cloud-download:before { content: "\f408"; } - -.ion-ios-cloud-download-outline:before { content: "\f407"; } - -.ion-ios-cloud-outline:before { content: "\f409"; } - -.ion-ios-cloud-upload:before { content: "\f40b"; } - -.ion-ios-cloud-upload-outline:before { content: "\f40a"; } - -.ion-ios-cloudy:before { content: "\f410"; } - -.ion-ios-cloudy-night:before { content: "\f40e"; } - -.ion-ios-cloudy-night-outline:before { content: "\f40d"; } - -.ion-ios-cloudy-outline:before { content: "\f40f"; } - -.ion-ios-cog:before { content: "\f412"; } - -.ion-ios-cog-outline:before { content: "\f411"; } - -.ion-ios-color-filter:before { content: "\f414"; } - -.ion-ios-color-filter-outline:before { content: "\f413"; } - -.ion-ios-color-wand:before { content: "\f416"; } - -.ion-ios-color-wand-outline:before { content: "\f415"; } - -.ion-ios-compose:before { content: "\f418"; } - -.ion-ios-compose-outline:before { content: "\f417"; } - -.ion-ios-contact:before { content: "\f41a"; } - -.ion-ios-contact-outline:before { content: "\f419"; } - -.ion-ios-copy:before { content: "\f41c"; } - -.ion-ios-copy-outline:before { content: "\f41b"; } - -.ion-ios-crop:before { content: "\f41e"; } - -.ion-ios-crop-strong:before { content: "\f41d"; } - -.ion-ios-download:before { content: "\f420"; } - -.ion-ios-download-outline:before { content: "\f41f"; } - -.ion-ios-drag:before { content: "\f421"; } - -.ion-ios-email:before { content: "\f423"; } - -.ion-ios-email-outline:before { content: "\f422"; } - -.ion-ios-eye:before { content: "\f425"; } - -.ion-ios-eye-outline:before { content: "\f424"; } - -.ion-ios-fastforward:before { content: "\f427"; } - -.ion-ios-fastforward-outline:before { content: "\f426"; } - -.ion-ios-filing:before { content: "\f429"; } - -.ion-ios-filing-outline:before { content: "\f428"; } - -.ion-ios-film:before { content: "\f42b"; } - -.ion-ios-film-outline:before { content: "\f42a"; } - -.ion-ios-flag:before { content: "\f42d"; } - -.ion-ios-flag-outline:before { content: "\f42c"; } - -.ion-ios-flame:before { content: "\f42f"; } - -.ion-ios-flame-outline:before { content: "\f42e"; } - -.ion-ios-flask:before { content: "\f431"; } - -.ion-ios-flask-outline:before { content: "\f430"; } - -.ion-ios-flower:before { content: "\f433"; } - -.ion-ios-flower-outline:before { content: "\f432"; } - -.ion-ios-folder:before { content: "\f435"; } - -.ion-ios-folder-outline:before { content: "\f434"; } - -.ion-ios-football:before { content: "\f437"; } - -.ion-ios-football-outline:before { content: "\f436"; } - -.ion-ios-game-controller-a:before { content: "\f439"; } - -.ion-ios-game-controller-a-outline:before { content: "\f438"; } - -.ion-ios-game-controller-b:before { content: "\f43b"; } - -.ion-ios-game-controller-b-outline:before { content: "\f43a"; } - -.ion-ios-gear:before { content: "\f43d"; } - -.ion-ios-gear-outline:before { content: "\f43c"; } - -.ion-ios-glasses:before { content: "\f43f"; } - -.ion-ios-glasses-outline:before { content: "\f43e"; } - -.ion-ios-grid-view:before { content: "\f441"; } - -.ion-ios-grid-view-outline:before { content: "\f440"; } - -.ion-ios-heart:before { content: "\f443"; } - -.ion-ios-heart-outline:before { content: "\f442"; } - -.ion-ios-help:before { content: "\f446"; } - -.ion-ios-help-empty:before { content: "\f444"; } - -.ion-ios-help-outline:before { content: "\f445"; } - -.ion-ios-home:before { content: "\f448"; } - -.ion-ios-home-outline:before { content: "\f447"; } - -.ion-ios-infinite:before { content: "\f44a"; } - -.ion-ios-infinite-outline:before { content: "\f449"; } - -.ion-ios-information:before { content: "\f44d"; } - -.ion-ios-information-empty:before { content: "\f44b"; } - -.ion-ios-information-outline:before { content: "\f44c"; } - -.ion-ios-ionic-outline:before { content: "\f44e"; } - -.ion-ios-keypad:before { content: "\f450"; } - -.ion-ios-keypad-outline:before { content: "\f44f"; } - -.ion-ios-lightbulb:before { content: "\f452"; } - -.ion-ios-lightbulb-outline:before { content: "\f451"; } - -.ion-ios-list:before { content: "\f454"; } - -.ion-ios-list-outline:before { content: "\f453"; } - -.ion-ios-location:before { content: "\f456"; } - -.ion-ios-location-outline:before { content: "\f455"; } - -.ion-ios-locked:before { content: "\f458"; } - -.ion-ios-locked-outline:before { content: "\f457"; } - -.ion-ios-loop:before { content: "\f45a"; } - -.ion-ios-loop-strong:before { content: "\f459"; } - -.ion-ios-medical:before { content: "\f45c"; } - -.ion-ios-medical-outline:before { content: "\f45b"; } - -.ion-ios-medkit:before { content: "\f45e"; } - -.ion-ios-medkit-outline:before { content: "\f45d"; } - -.ion-ios-mic:before { content: "\f461"; } - -.ion-ios-mic-off:before { content: "\f45f"; } - -.ion-ios-mic-outline:before { content: "\f460"; } - -.ion-ios-minus:before { content: "\f464"; } - -.ion-ios-minus-empty:before { content: "\f462"; } - -.ion-ios-minus-outline:before { content: "\f463"; } - -.ion-ios-monitor:before { content: "\f466"; } - -.ion-ios-monitor-outline:before { content: "\f465"; } - -.ion-ios-moon:before { content: "\f468"; } - -.ion-ios-moon-outline:before { content: "\f467"; } - -.ion-ios-more:before { content: "\f46a"; } - -.ion-ios-more-outline:before { content: "\f469"; } - -.ion-ios-musical-note:before { content: "\f46b"; } - -.ion-ios-musical-notes:before { content: "\f46c"; } - -.ion-ios-navigate:before { content: "\f46e"; } - -.ion-ios-navigate-outline:before { content: "\f46d"; } - -.ion-ios-nutrition:before { content: "\f470"; } - -.ion-ios-nutrition-outline:before { content: "\f46f"; } - -.ion-ios-paper:before { content: "\f472"; } - -.ion-ios-paper-outline:before { content: "\f471"; } - -.ion-ios-paperplane:before { content: "\f474"; } - -.ion-ios-paperplane-outline:before { content: "\f473"; } - -.ion-ios-partlysunny:before { content: "\f476"; } - -.ion-ios-partlysunny-outline:before { content: "\f475"; } - -.ion-ios-pause:before { content: "\f478"; } - -.ion-ios-pause-outline:before { content: "\f477"; } - -.ion-ios-paw:before { content: "\f47a"; } - -.ion-ios-paw-outline:before { content: "\f479"; } - -.ion-ios-people:before { content: "\f47c"; } - -.ion-ios-people-outline:before { content: "\f47b"; } - -.ion-ios-person:before { content: "\f47e"; } - -.ion-ios-person-outline:before { content: "\f47d"; } - -.ion-ios-personadd:before { content: "\f480"; } - -.ion-ios-personadd-outline:before { content: "\f47f"; } - -.ion-ios-photos:before { content: "\f482"; } - -.ion-ios-photos-outline:before { content: "\f481"; } - -.ion-ios-pie:before { content: "\f484"; } - -.ion-ios-pie-outline:before { content: "\f483"; } - -.ion-ios-pint:before { content: "\f486"; } - -.ion-ios-pint-outline:before { content: "\f485"; } - -.ion-ios-play:before { content: "\f488"; } - -.ion-ios-play-outline:before { content: "\f487"; } - -.ion-ios-plus:before { content: "\f48b"; } - -.ion-ios-plus-empty:before { content: "\f489"; } - -.ion-ios-plus-outline:before { content: "\f48a"; } - -.ion-ios-pricetag:before { content: "\f48d"; } - -.ion-ios-pricetag-outline:before { content: "\f48c"; } - -.ion-ios-pricetags:before { content: "\f48f"; } - -.ion-ios-pricetags-outline:before { content: "\f48e"; } - -.ion-ios-printer:before { content: "\f491"; } - -.ion-ios-printer-outline:before { content: "\f490"; } - -.ion-ios-pulse:before { content: "\f493"; } - -.ion-ios-pulse-strong:before { content: "\f492"; } - -.ion-ios-rainy:before { content: "\f495"; } - -.ion-ios-rainy-outline:before { content: "\f494"; } - -.ion-ios-recording:before { content: "\f497"; } - -.ion-ios-recording-outline:before { content: "\f496"; } - -.ion-ios-redo:before { content: "\f499"; } - -.ion-ios-redo-outline:before { content: "\f498"; } - -.ion-ios-refresh:before { content: "\f49c"; } - -.ion-ios-refresh-empty:before { content: "\f49a"; } - -.ion-ios-refresh-outline:before { content: "\f49b"; } - -.ion-ios-reload:before { content: "\f49d"; } - -.ion-ios-reverse-camera:before { content: "\f49f"; } - -.ion-ios-reverse-camera-outline:before { content: "\f49e"; } - -.ion-ios-rewind:before { content: "\f4a1"; } - -.ion-ios-rewind-outline:before { content: "\f4a0"; } - -.ion-ios-rose:before { content: "\f4a3"; } - -.ion-ios-rose-outline:before { content: "\f4a2"; } - -.ion-ios-search:before { content: "\f4a5"; } - -.ion-ios-search-strong:before { content: "\f4a4"; } - -.ion-ios-settings:before { content: "\f4a7"; } - -.ion-ios-settings-strong:before { content: "\f4a6"; } - -.ion-ios-shuffle:before { content: "\f4a9"; } - -.ion-ios-shuffle-strong:before { content: "\f4a8"; } - -.ion-ios-skipbackward:before { content: "\f4ab"; } - -.ion-ios-skipbackward-outline:before { content: "\f4aa"; } - -.ion-ios-skipforward:before { content: "\f4ad"; } - -.ion-ios-skipforward-outline:before { content: "\f4ac"; } - -.ion-ios-snowy:before { content: "\f4ae"; } - -.ion-ios-speedometer:before { content: "\f4b0"; } - -.ion-ios-speedometer-outline:before { content: "\f4af"; } - -.ion-ios-star:before { content: "\f4b3"; } - -.ion-ios-star-half:before { content: "\f4b1"; } - -.ion-ios-star-outline:before { content: "\f4b2"; } - -.ion-ios-stopwatch:before { content: "\f4b5"; } - -.ion-ios-stopwatch-outline:before { content: "\f4b4"; } - -.ion-ios-sunny:before { content: "\f4b7"; } - -.ion-ios-sunny-outline:before { content: "\f4b6"; } - -.ion-ios-telephone:before { content: "\f4b9"; } - -.ion-ios-telephone-outline:before { content: "\f4b8"; } - -.ion-ios-tennisball:before { content: "\f4bb"; } - -.ion-ios-tennisball-outline:before { content: "\f4ba"; } - -.ion-ios-thunderstorm:before { content: "\f4bd"; } - -.ion-ios-thunderstorm-outline:before { content: "\f4bc"; } - -.ion-ios-time:before { content: "\f4bf"; } - -.ion-ios-time-outline:before { content: "\f4be"; } - -.ion-ios-timer:before { content: "\f4c1"; } - -.ion-ios-timer-outline:before { content: "\f4c0"; } - -.ion-ios-toggle:before { content: "\f4c3"; } - -.ion-ios-toggle-outline:before { content: "\f4c2"; } - -.ion-ios-trash:before { content: "\f4c5"; } - -.ion-ios-trash-outline:before { content: "\f4c4"; } - -.ion-ios-undo:before { content: "\f4c7"; } - -.ion-ios-undo-outline:before { content: "\f4c6"; } - -.ion-ios-unlocked:before { content: "\f4c9"; } - -.ion-ios-unlocked-outline:before { content: "\f4c8"; } - -.ion-ios-upload:before { content: "\f4cb"; } - -.ion-ios-upload-outline:before { content: "\f4ca"; } - -.ion-ios-videocam:before { content: "\f4cd"; } - -.ion-ios-videocam-outline:before { content: "\f4cc"; } - -.ion-ios-volume-high:before { content: "\f4ce"; } - -.ion-ios-volume-low:before { content: "\f4cf"; } - -.ion-ios-wineglass:before { content: "\f4d1"; } - -.ion-ios-wineglass-outline:before { content: "\f4d0"; } - -.ion-ios-world:before { content: "\f4d3"; } - -.ion-ios-world-outline:before { content: "\f4d2"; } - -.ion-ipad:before { content: "\f1f9"; } - -.ion-iphone:before { content: "\f1fa"; } - -.ion-ipod:before { content: "\f1fb"; } - -.ion-jet:before { content: "\f295"; } - -.ion-key:before { content: "\f296"; } - -.ion-knife:before { content: "\f297"; } - -.ion-laptop:before { content: "\f1fc"; } - -.ion-leaf:before { content: "\f1fd"; } - -.ion-levels:before { content: "\f298"; } - -.ion-lightbulb:before { content: "\f299"; } - -.ion-link:before { content: "\f1fe"; } - -.ion-load-a:before { content: "\f29a"; } - -.ion-load-b:before { content: "\f29b"; } - -.ion-load-c:before { content: "\f29c"; } - -.ion-load-d:before { content: "\f29d"; } - -.ion-location:before { content: "\f1ff"; } - -.ion-lock-combination:before { content: "\f4d4"; } - -.ion-locked:before { content: "\f200"; } - -.ion-log-in:before { content: "\f29e"; } - -.ion-log-out:before { content: "\f29f"; } - -.ion-loop:before { content: "\f201"; } - -.ion-magnet:before { content: "\f2a0"; } - -.ion-male:before { content: "\f2a1"; } - -.ion-man:before { content: "\f202"; } - -.ion-map:before { content: "\f203"; } - -.ion-medkit:before { content: "\f2a2"; } - -.ion-merge:before { content: "\f33f"; } - -.ion-mic-a:before { content: "\f204"; } - -.ion-mic-b:before { content: "\f205"; } - -.ion-mic-c:before { content: "\f206"; } - -.ion-minus:before { content: "\f209"; } - -.ion-minus-circled:before { content: "\f207"; } - -.ion-minus-round:before { content: "\f208"; } - -.ion-model-s:before { content: "\f2c1"; } - -.ion-monitor:before { content: "\f20a"; } - -.ion-more:before { content: "\f20b"; } - -.ion-mouse:before { content: "\f340"; } - -.ion-music-note:before { content: "\f20c"; } - -.ion-navicon:before { content: "\f20e"; } - -.ion-navicon-round:before { content: "\f20d"; } - -.ion-navigate:before { content: "\f2a3"; } - -.ion-network:before { content: "\f341"; } - -.ion-no-smoking:before { content: "\f2c2"; } - -.ion-nuclear:before { content: "\f2a4"; } - -.ion-outlet:before { content: "\f342"; } - -.ion-paintbrush:before { content: "\f4d5"; } - -.ion-paintbucket:before { content: "\f4d6"; } - -.ion-paper-airplane:before { content: "\f2c3"; } - -.ion-paperclip:before { content: "\f20f"; } - -.ion-pause:before { content: "\f210"; } - -.ion-person:before { content: "\f213"; } - -.ion-person-add:before { content: "\f211"; } - -.ion-person-stalker:before { content: "\f212"; } - -.ion-pie-graph:before { content: "\f2a5"; } - -.ion-pin:before { content: "\f2a6"; } - -.ion-pinpoint:before { content: "\f2a7"; } - -.ion-pizza:before { content: "\f2a8"; } - -.ion-plane:before { content: "\f214"; } - -.ion-planet:before { content: "\f343"; } - -.ion-play:before { content: "\f215"; } - -.ion-playstation:before { content: "\f30a"; } - -.ion-plus:before { content: "\f218"; } - -.ion-plus-circled:before { content: "\f216"; } - -.ion-plus-round:before { content: "\f217"; } - -.ion-podium:before { content: "\f344"; } - -.ion-pound:before { content: "\f219"; } - -.ion-power:before { content: "\f2a9"; } - -.ion-pricetag:before { content: "\f2aa"; } - -.ion-pricetags:before { content: "\f2ab"; } - -.ion-printer:before { content: "\f21a"; } - -.ion-pull-request:before { content: "\f345"; } - -.ion-qr-scanner:before { content: "\f346"; } - -.ion-quote:before { content: "\f347"; } - -.ion-radio-waves:before { content: "\f2ac"; } - -.ion-record:before { content: "\f21b"; } - -.ion-refresh:before { content: "\f21c"; } - -.ion-reply:before { content: "\f21e"; } - -.ion-reply-all:before { content: "\f21d"; } - -.ion-ribbon-a:before { content: "\f348"; } - -.ion-ribbon-b:before { content: "\f349"; } - -.ion-sad:before { content: "\f34a"; } - -.ion-sad-outline:before { content: "\f4d7"; } - -.ion-scissors:before { content: "\f34b"; } - -.ion-search:before { content: "\f21f"; } - -.ion-settings:before { content: "\f2ad"; } - -.ion-share:before { content: "\f220"; } - -.ion-shuffle:before { content: "\f221"; } - -.ion-skip-backward:before { content: "\f222"; } - -.ion-skip-forward:before { content: "\f223"; } - -.ion-social-android:before { content: "\f225"; } - -.ion-social-android-outline:before { content: "\f224"; } - -.ion-social-angular:before { content: "\f4d9"; } - -.ion-social-angular-outline:before { content: "\f4d8"; } - -.ion-social-apple:before { content: "\f227"; } - -.ion-social-apple-outline:before { content: "\f226"; } - -.ion-social-bitcoin:before { content: "\f2af"; } - -.ion-social-bitcoin-outline:before { content: "\f2ae"; } - -.ion-social-buffer:before { content: "\f229"; } - -.ion-social-buffer-outline:before { content: "\f228"; } - -.ion-social-chrome:before { content: "\f4db"; } - -.ion-social-chrome-outline:before { content: "\f4da"; } - -.ion-social-codepen:before { content: "\f4dd"; } - -.ion-social-codepen-outline:before { content: "\f4dc"; } - -.ion-social-css3:before { content: "\f4df"; } - -.ion-social-css3-outline:before { content: "\f4de"; } - -.ion-social-designernews:before { content: "\f22b"; } - -.ion-social-designernews-outline:before { content: "\f22a"; } - -.ion-social-dribbble:before { content: "\f22d"; } - -.ion-social-dribbble-outline:before { content: "\f22c"; } - -.ion-social-dropbox:before { content: "\f22f"; } - -.ion-social-dropbox-outline:before { content: "\f22e"; } - -.ion-social-euro:before { content: "\f4e1"; } - -.ion-social-euro-outline:before { content: "\f4e0"; } - -.ion-social-facebook:before { content: "\f231"; } - -.ion-social-facebook-outline:before { content: "\f230"; } - -.ion-social-foursquare:before { content: "\f34d"; } - -.ion-social-foursquare-outline:before { content: "\f34c"; } - -.ion-social-freebsd-devil:before { content: "\f2c4"; } - -.ion-social-github:before { content: "\f233"; } - -.ion-social-github-outline:before { content: "\f232"; } - -.ion-social-google:before { content: "\f34f"; } - -.ion-social-google-outline:before { content: "\f34e"; } - -.ion-social-googleplus:before { content: "\f235"; } - -.ion-social-googleplus-outline:before { content: "\f234"; } - -.ion-social-hackernews:before { content: "\f237"; } - -.ion-social-hackernews-outline:before { content: "\f236"; } - -.ion-social-html5:before { content: "\f4e3"; } - -.ion-social-html5-outline:before { content: "\f4e2"; } - -.ion-social-instagram:before { content: "\f351"; } - -.ion-social-instagram-outline:before { content: "\f350"; } - -.ion-social-javascript:before { content: "\f4e5"; } - -.ion-social-javascript-outline:before { content: "\f4e4"; } - -.ion-social-linkedin:before { content: "\f239"; } - -.ion-social-linkedin-outline:before { content: "\f238"; } - -.ion-social-markdown:before { content: "\f4e6"; } - -.ion-social-nodejs:before { content: "\f4e7"; } - -.ion-social-octocat:before { content: "\f4e8"; } - -.ion-social-pinterest:before { content: "\f2b1"; } - -.ion-social-pinterest-outline:before { content: "\f2b0"; } - -.ion-social-python:before { content: "\f4e9"; } - -.ion-social-reddit:before { content: "\f23b"; } - -.ion-social-reddit-outline:before { content: "\f23a"; } - -.ion-social-rss:before { content: "\f23d"; } - -.ion-social-rss-outline:before { content: "\f23c"; } - -.ion-social-sass:before { content: "\f4ea"; } - -.ion-social-skype:before { content: "\f23f"; } - -.ion-social-skype-outline:before { content: "\f23e"; } - -.ion-social-snapchat:before { content: "\f4ec"; } - -.ion-social-snapchat-outline:before { content: "\f4eb"; } - -.ion-social-tumblr:before { content: "\f241"; } - -.ion-social-tumblr-outline:before { content: "\f240"; } - -.ion-social-tux:before { content: "\f2c5"; } - -.ion-social-twitch:before { content: "\f4ee"; } - -.ion-social-twitch-outline:before { content: "\f4ed"; } - -.ion-social-twitter:before { content: "\f243"; } - -.ion-social-twitter-outline:before { content: "\f242"; } - -.ion-social-usd:before { content: "\f353"; } - -.ion-social-usd-outline:before { content: "\f352"; } - -.ion-social-vimeo:before { content: "\f245"; } - -.ion-social-vimeo-outline:before { content: "\f244"; } - -.ion-social-whatsapp:before { content: "\f4f0"; } - -.ion-social-whatsapp-outline:before { content: "\f4ef"; } - -.ion-social-windows:before { content: "\f247"; } - -.ion-social-windows-outline:before { content: "\f246"; } - -.ion-social-wordpress:before { content: "\f249"; } - -.ion-social-wordpress-outline:before { content: "\f248"; } - -.ion-social-yahoo:before { content: "\f24b"; } - -.ion-social-yahoo-outline:before { content: "\f24a"; } - -.ion-social-yen:before { content: "\f4f2"; } - -.ion-social-yen-outline:before { content: "\f4f1"; } - -.ion-social-youtube:before { content: "\f24d"; } - -.ion-social-youtube-outline:before { content: "\f24c"; } - -.ion-soup-can:before { content: "\f4f4"; } - -.ion-soup-can-outline:before { content: "\f4f3"; } - -.ion-speakerphone:before { content: "\f2b2"; } - -.ion-speedometer:before { content: "\f2b3"; } - -.ion-spoon:before { content: "\f2b4"; } - -.ion-star:before { content: "\f24e"; } - -.ion-stats-bars:before { content: "\f2b5"; } - -.ion-steam:before { content: "\f30b"; } - -.ion-stop:before { content: "\f24f"; } - -.ion-thermometer:before { content: "\f2b6"; } - -.ion-thumbsdown:before { content: "\f250"; } - -.ion-thumbsup:before { content: "\f251"; } - -.ion-toggle:before { content: "\f355"; } - -.ion-toggle-filled:before { content: "\f354"; } - -.ion-transgender:before { content: "\f4f5"; } - -.ion-trash-a:before { content: "\f252"; } - -.ion-trash-b:before { content: "\f253"; } - -.ion-trophy:before { content: "\f356"; } - -.ion-tshirt:before { content: "\f4f7"; } - -.ion-tshirt-outline:before { content: "\f4f6"; } - -.ion-umbrella:before { content: "\f2b7"; } - -.ion-university:before { content: "\f357"; } - -.ion-unlocked:before { content: "\f254"; } - -.ion-upload:before { content: "\f255"; } - -.ion-usb:before { content: "\f2b8"; } - -.ion-videocamera:before { content: "\f256"; } - -.ion-volume-high:before { content: "\f257"; } - -.ion-volume-low:before { content: "\f258"; } - -.ion-volume-medium:before { content: "\f259"; } - -.ion-volume-mute:before { content: "\f25a"; } - -.ion-wand:before { content: "\f358"; } - -.ion-waterdrop:before { content: "\f25b"; } - -.ion-wifi:before { content: "\f25c"; } - -.ion-wineglass:before { content: "\f2b9"; } - -.ion-woman:before { content: "\f25d"; } - -.ion-wrench:before { content: "\f2ba"; } - -.ion-xbox:before { content: "\f30c"; } diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.eot b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.eot Binary files differdeleted file mode 100755 index 92a3f20a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.eot +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.svg b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.svg deleted file mode 100755 index 49fc8f36..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.svg +++ /dev/null @@ -1,2230 +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" > -<!-- -2014-12-4: Created. ---> -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata> -Created by FontForge 20120731 at Thu Dec 4 09:51:48 2014 - By Adam Bradley -Created by Adam Bradley with FontForge 2.0 (http://fontforge.sf.net) -</metadata> -<defs> -<font id="Ionicons" horiz-adv-x="448" > - <font-face - font-family="Ionicons" - font-weight="500" - font-stretch="normal" - units-per-em="512" - panose-1="2 0 6 3 0 0 0 0 0 0" - ascent="448" - descent="-64" - bbox="-0.54049 -64 512.487 448" - underline-thickness="25.6" - underline-position="-51.2" - unicode-range="U+F100-F4F7" - /> - <missing-glyph /> - <glyph glyph-name="ion-alert-circled" unicode="" -d="M445 26c3 -5 5 -13 2 -18s-8 -8 -14 -8h-418c-6 0 -11 3 -14 8s-1 13 2 18l207 349c3 5 8 9 14 9s11 -4 14 -9zM256 48v48h-64v-48h64zM256 128v144h-64v-144h64z" /> - <glyph glyph-name="ion-alert" unicode="" horiz-adv-x="128" -d="M128 -32h-128v96h128v-96zM112 128h-96l-16 288h128z" /> - <glyph glyph-name="ion-android-add-circle" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM315 171v42h-86v86h-42v-86h-86v-42h86v-86h42v86h86z" /> - <glyph glyph-name="ion-android-add" unicode="" horiz-adv-x="320" -d="M320 171h-139v-139h-42v139h-139v42h139v139h42v-139h139v-42z" /> - <glyph glyph-name="ion-android-alarm-clock" unicode="" horiz-adv-x="428" -d="M428 323l-28 -33l-98 82l28 33zM125 373l-97 -83l-28 33l97 83zM225 275v0v-111l85 -50l-16 -27l-101 61v127h32zM214 360c106 0 193 -86 193 -191s-87 -191 -193 -191c-107 0 -193 86 -193 191s86 191 193 191zM214 20c82 0 150 66 150 149c0 82 -68 149 -150 149 -s-150 -67 -150 -149s68 -149 150 -149z" /> - <glyph glyph-name="ion-android-alert" unicode="" horiz-adv-x="416" -d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM232 88v40h-48v-40h48zM232 176v128h-48v-128h48z" /> - <glyph glyph-name="ion-android-apps" unicode="" horiz-adv-x="320" -d="M0 272v80h80v-80h-80zM120 32v80h80v-80h-80zM0 32v80h80v-80h-80zM0 152v80h80v-80h-80zM120 152v80h80v-80h-80zM240 352h80v-80h-80v80zM120 272v80h80v-80h-80zM240 152v80h80v-80h-80zM240 32v80h80v-80h-80z" /> - <glyph glyph-name="ion-android-archive" unicode="" horiz-adv-x="416" -d="M406 348c7 -7 10 -17 10 -29v-289c0 -25 -21 -46 -46 -46h-324c-25 0 -46 21 -46 46v289c0 12 3 22 10 29l33 39c6 8 16 13 26 13h278c10 0 20 -5 26 -13zM208 65l127 127h-81v46h-92v-46h-81zM49 354h317l-22 23h-277z" /> - <glyph glyph-name="ion-android-arrow-back" unicode="" horiz-adv-x="342" -d="M342 213v-42h-260l119 -120l-30 -30l-171 171l171 171l31 -30l-120 -120h260z" /> - <glyph glyph-name="ion-android-arrow-down" unicode="" horiz-adv-x="342" -d="M192 363v-260l120 120l30 -31l-171 -171l-171 171l30 30l120 -119v260h42z" /> - <glyph glyph-name="ion-android-arrow-dropdown-circle" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 128l96 96h-192z" /> - <glyph glyph-name="ion-android-arrow-dropdown" unicode="" horiz-adv-x="256" -d="M0 256h256l-128 -128z" /> - <glyph glyph-name="ion-android-arrow-dropleft-circle" unicode="" horiz-adv-x="416" -d="M416 192c0 -115 -93 -208 -208 -208s-208 93 -208 208s93 208 208 208s208 -93 208 -208zM144 192l96 -96v192z" /> - <glyph glyph-name="ion-android-arrow-dropleft" unicode="" horiz-adv-x="128" -d="M128 320v-256l-128 128z" /> - <glyph glyph-name="ion-android-arrow-dropright-circle" unicode="" horiz-adv-x="416" -d="M208 -16c-115 0 -208 93 -208 208s93 208 208 208s208 -93 208 -208s-93 -208 -208 -208zM176 96l96 96l-96 96v-192z" /> - <glyph glyph-name="ion-android-arrow-dropright" unicode="" horiz-adv-x="128" -d="M0 320l128 -128l-128 -128v256z" /> - <glyph glyph-name="ion-android-arrow-dropup-circle" unicode="" horiz-adv-x="416" -d="M416 192c0 -115 -93 -208 -208 -208s-208 93 -208 208s93 208 208 208s208 -93 208 -208zM304 160l-96 96l-96 -96h192z" /> - <glyph glyph-name="ion-android-arrow-dropup" unicode="" horiz-adv-x="256" -d="M0 128l128 128l128 -128h-256z" /> - <glyph glyph-name="ion-android-arrow-forward" unicode="" horiz-adv-x="342" -d="M0 171v42h260l-119 120l30 30l171 -171l-171 -171l-31 30l120 120h-260z" /> - <glyph glyph-name="ion-android-arrow-up" unicode="" horiz-adv-x="342" -d="M192 21h-42v260l-120 -119l-30 30l171 171l171 -171l-30 -31l-120 120v-260z" /> - <glyph glyph-name="ion-android-attach" unicode="" horiz-adv-x="235" -d="M203 320h32v-235c0 -65 -53 -117 -118 -117s-117 52 -117 117v246c0 47 38 85 85 85s86 -38 86 -85v-246c0 -30 -24 -53 -54 -53s-53 23 -53 53v203h32v-203c0 -12 9 -21 21 -21s22 9 22 21v246c0 30 -24 53 -54 53s-53 -23 -53 -53v-246c0 -47 38 -85 85 -85 -s86 38 86 85v235z" /> - <glyph glyph-name="ion-android-bar" unicode="" horiz-adv-x="384" -d="M171 171l-171 170v43h384v-43l-171 -170v-131h107v-40h-256v40h107v131zM96 299h192l43 42h-278z" /> - <glyph glyph-name="ion-android-bicycle" unicode="" -d="M299 317c-19 0 -34 14 -34 33s15 34 34 34s33 -15 33 -34s-14 -33 -33 -33zM355 187c51 0 93 -43 93 -94s-42 -93 -93 -93s-94 42 -94 93s43 94 94 94zM355 28c36 0 65 29 65 65s-29 66 -65 66s-66 -30 -66 -66s30 -65 66 -65zM274 224l-30 45l-43 -45l39 -32v-112h-32 -v86l-61 38c-9 6 -19 15 -19 27c0 8 3 17 9 23l72 69c6 6 14 9 22 9c11 0 22 -7 28 -16l34 -60h59v-32h-78zM93 187c51 0 94 -43 94 -94s-43 -93 -94 -93s-93 42 -93 93s42 94 93 94zM93 28c36 0 66 29 66 65s-30 66 -66 66s-65 -30 -65 -66s29 -65 65 -65z" /> - <glyph glyph-name="ion-android-boat" unicode="" -d="M52 35l-51 139c-2 6 -1 12 1 17s8 8 13 10l38 13v98c0 23 20 43 43 43h64l16 53h96l16 -53h64c23 0 43 -20 43 -43v-98l38 -13c5 -2 11 -5 13 -10s3 -12 1 -17l-51 -139h-1c-34 0 -65 20 -86 43c-21 -23 -51 -43 -85 -43s-64 19 -85 42c-21 -23 -52 -42 -86 -42h-1z -M96 312v-84l128 41l128 -41v84h-256zM309 40c0 0 59 -64 107 -64h-21c-30 0 -59 12 -86 26c-53 -28 -117 -28 -170 0c-27 -14 -56 -26 -86 -26h-21c49 0 107 64 107 64c52 -36 118 -36 170 0z" /> - <glyph glyph-name="ion-android-bookmark" unicode="" horiz-adv-x="288" -d="M248 384c22 0 40 -18 40 -40v-344l-144 64l-144 -64v344c0 22 18 40 40 40h208z" /> - <glyph glyph-name="ion-android-bulb" unicode="" -d="M224 278c-25 0 -50 -10 -68 -28s-28 -43 -28 -68c0 -34 18 -66 48 -83l16 -10v-18v-71h64v71v18l16 10c15 8 27 20 35 34c9 15 13 31 13 49c0 25 -10 50 -28 68s-43 28 -68 28zM245 416v0v-64h-42v64h42zM374 362v0l30 -30l-38 -38l-30 30zM74 362v0l38 -38l-30 -30 -l-38 38zM224 310v0c70 0 128 -58 128 -128c0 -48 -26 -89 -64 -111v-103h-128v103c-38 22 -64 64 -64 111c0 70 58 128 128 128zM448 203v0v-42h-64v42h64zM64 203v0v-42h-64v42h64z" /> - <glyph glyph-name="ion-android-bus" unicode="" horiz-adv-x="352" -d="M0 96v204c0 75 82 84 176 84s176 -9 176 -84v-204c0 -18 -14 -24 -27 -36v-39c0 -12 -9 -21 -21 -21h-21c-12 0 -22 9 -22 21v22h-170v-22c0 -12 -10 -21 -22 -21h-21c-12 0 -21 9 -21 21v39c-13 12 -27 17 -27 36zM80 80c18 0 32 14 32 32s-14 32 -32 32 -s-32 -14 -32 -32s14 -32 32 -32zM272 80c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM304 203v106h-256v-106h256z" /> - <glyph glyph-name="ion-android-calendar" unicode="" horiz-adv-x="384" -d="M304 176v-96h-96v96h96zM272 384h48v-32h24c22 0 40 -18 40 -40v-272c0 -22 -18 -40 -40 -40h-304c-22 0 -40 18 -40 40v272c0 22 18 40 40 40h24v32h48v-32h160v32zM344 40v212h-304v-212h304z" /> - <glyph glyph-name="ion-android-call" unicode="" horiz-adv-x="384" -d="M363 117c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-201 0 -363 162 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 13 -77c2 -7 0 -16 -5 -21l-47 -47c31 -61 80 -110 141 -141l47 47c5 6 14 7 21 5c23 -7 49 -12 76 -12z" /> - <glyph glyph-name="ion-android-camera" unicode="" -d="M161 168c0 42 21 63 63 63s63 -21 63 -63s-21 -63 -63 -63s-63 21 -63 63zM408 352c11 0 20 -4 28 -12s12 -17 12 -28v-272c0 -11 -4 -20 -12 -28s-17 -12 -28 -12h-368c-11 0 -20 4 -28 12s-12 17 -12 28v272c0 11 4 20 12 28s17 12 28 12h88l32 32h128l32 -32h88z -M224 56c31 0 57 11 79 33s33 48 33 79s-11 57 -33 79s-48 33 -79 33s-57 -11 -79 -33s-33 -48 -33 -79s11 -57 33 -79s48 -33 79 -33z" /> - <glyph glyph-name="ion-android-cancel" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM312 117l-75 75l75 75l-29 29l-75 -75l-75 75l-29 -29l75 -75l-75 -75l29 -29l75 75l75 -75z" /> - <glyph glyph-name="ion-android-car" unicode="" horiz-adv-x="384" -d="M339 331l45 -118v-160c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v11h-256v-11c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v160l45 118c4 13 16 21 30 21h234c14 0 26 -8 30 -21zM75 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM309 128 -c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM43 235h298l-32 85h-234z" /> - <glyph glyph-name="ion-android-cart" unicode="" horiz-adv-x="416" -d="M122 70c23 0 41 -18 41 -41s-18 -42 -41 -42s-42 19 -42 42s19 41 42 41zM0 397h68l19 -42h308c11 0 21 -9 21 -20c0 -4 -1 -8 -2 -10l-75 -129c-7 -14 -20 -22 -36 -22h-155l-21 -32s-2 -5 -2 -6c0 -3 2 -5 5 -5h238v-40h-243c-26 0 -45 14 -45 42c0 7 2 15 5 20l31 51 -l-74 151h-42v42zM326 70c23 0 42 -18 42 -41s-19 -42 -42 -42s-41 19 -41 42s18 41 41 41z" /> - <glyph glyph-name="ion-android-chat" unicode="" horiz-adv-x="416" -d="M344 384c4 0 7 -4 7 -8v-214c0 -4 -3 -9 -7 -9h-187l-90 -89v89h-57c-4 0 -10 5 -10 9v214c0 4 6 8 10 8h334zM408 321c4 0 8 -5 8 -9v-214c0 -4 -4 -9 -8 -9h-57v-89l-90 89h-130l39 39h181c18 0 25 10 25 26v167h32z" /> - <glyph glyph-name="ion-android-checkbox-blank" unicode="" horiz-adv-x="384" -d="M341 384c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" /> - <glyph glyph-name="ion-android-checkbox-outline-blank" unicode="" horiz-adv-x="384" -d="M341 341h-298v-298h298v298zM341 384v0c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" /> - <glyph glyph-name="ion-android-checkbox-outline" unicode="" horiz-adv-x="384" -d="M105 233l66 -66l183 183l30 -30l-213 -213l-96 96zM341 43v170h43v-170c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h213v-43h-213v-298h298z" /> - <glyph glyph-name="ion-android-checkbox" unicode="" horiz-adv-x="384" -d="M341 384c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM149 85l192 192l-30 30l-162 -162l-76 77l-30 -30z" /> - <glyph glyph-name="ion-android-checkmark-circle" unicode="" horiz-adv-x="416" -d="M123 232l64 -64l179 178l29 -29l-208 -208l-93 93zM374 192h42c0 -114 -94 -208 -208 -208s-208 94 -208 208s94 208 208 208c28 0 54 -6 78 -16l-32 -32c-15 4 -30 6 -46 6c-92 0 -166 -74 -166 -166s74 -166 166 -166s166 74 166 166z" /> - <glyph glyph-name="ion-android-clipboard" unicode="" horiz-adv-x="384" -d="M341 368c23 0 43 -20 43 -43v-314c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v314c0 23 20 43 43 43h87c7 28 32 48 62 48s55 -20 62 -48h87zM192 368c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM344 8v320h-40v-72h-224v72h-40v-320h304z" /> - <glyph glyph-name="ion-android-close" unicode="" horiz-adv-x="298" -d="M298 311l-119 -119l119 -119l-30 -30l-119 119l-119 -119l-30 30l119 119l-119 119l30 30l119 -119l119 119z" /> - <glyph glyph-name="ion-android-cloud-circle" unicode="" horiz-adv-x="416" -d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM302 109c29 0 52 23 52 52s-23 52 -52 52h-11c0 46 -37 83 -83 83c-38 0 -71 -26 -80 -62h-3c-34 0 -63 -29 -63 -63s29 -62 63 -62h177z" /> - <glyph glyph-name="ion-android-cloud-done" unicode="" horiz-adv-x="480" -d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM197 85l141 141l-30 30l-111 -111l-44 45l-30 -30z" /> - <glyph glyph-name="ion-android-cloud-outline" unicode="" horiz-adv-x="480" -d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM380 72c33 0 60 27 60 60s-27 60 -60 60h-30v10c0 61 -49 110 -110 110c-51 0 -93 -34 -106 -80h-14 -c-44 0 -80 -36 -80 -80s36 -80 80 -80h260z" /> - <glyph glyph-name="ion-android-cloud" unicode="" horiz-adv-x="480" -d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121z" /> - <glyph glyph-name="ion-android-color-palette" unicode="" horiz-adv-x="384" -d="M192 384c106 0 192 -77 192 -171c0 -59 -48 -106 -107 -106h-38c-18 0 -32 -14 -32 -32c0 -9 3 -17 8 -22s9 -12 9 -21c0 -18 -14 -32 -32 -32c-106 0 -192 86 -192 192s86 192 192 192zM75 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 277 -c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM245 277c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM309 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" /> - <glyph glyph-name="ion-android-compass" unicode="" -d="M224 217c13 0 25 -12 25 -25s-12 -25 -25 -25s-25 12 -25 25s12 25 25 25zM224 416c123 0 224 -101 224 -224s-101 -224 -224 -224s-224 101 -224 224s101 224 224 224zM273 143l85 183l-183 -85l-85 -183z" /> - <glyph glyph-name="ion-android-contact" unicode="" horiz-adv-x="384" -d="M267 110c59 -18 104 -58 117 -110h-384c13 52 58 92 117 110c22 -13 48 -20 75 -20s53 7 75 20zM192 384c73 0 132 -59 132 -132s-59 -132 -132 -132s-132 59 -132 132s59 132 132 132zM192 153c42 0 78 26 92 63h-184c14 -37 50 -63 92 -63z" /> - <glyph glyph-name="ion-android-contacts" unicode="" -d="M207 104c47 -14 76 -62 87 -104h-294c11 42 40 90 87 104c18 -10 38 -16 60 -16s42 6 60 16zM147 328c58 0 106 -48 106 -106s-48 -106 -106 -106s-106 48 -106 106s48 106 106 106zM147 141c34 0 62 23 74 51h-148c12 -28 40 -51 74 -51zM291 64c-13 20 -34 43 -60 53 -c11 9 21 23 28 35c13 -5 27 -8 42 -8c22 0 42 6 60 16c47 -14 76 -54 87 -96h-157zM275 248c-8 37 -31 69 -63 87c19 29 52 49 89 49c58 0 106 -48 106 -106s-48 -106 -106 -106c-11 0 -22 2 -32 5c3 8 6 16 7 25c8 -3 16 -4 25 -4c34 0 62 22 74 50h-100z" /> - <glyph glyph-name="ion-android-contract" unicode="" horiz-adv-x="384" -d="M0 77v51h128v-128h-51v77h-77zM77 307v77h51v-128h-128v51h77zM256 0v128h128v-51h-77v-77h-51zM307 307h77v-51h-128v128h51v-77z" /> - <glyph glyph-name="ion-android-create" unicode="" horiz-adv-x="384" -d="M0 80l236 236l80 -80l-236 -236h-80v80zM378 298l-40 -40l-80 80l40 40c9 9 20 9 29 0l51 -51c9 -9 9 -20 0 -29z" /> - <glyph glyph-name="ion-android-delete" unicode="" horiz-adv-x="320" -d="M32 43v245h256v-245c0 -23 -20 -43 -43 -43h-170c-23 0 -43 20 -43 43zM320 352v-32h-320v32h80l27 32h106l27 -32h80z" /> - <glyph glyph-name="ion-android-desktop" unicode="" -d="M405 416c23 0 43 -20 43 -43v-282c0 -23 -20 -43 -43 -43h-138l42 -48v-32h-170v32l42 48h-138c-23 0 -43 20 -43 43v282c0 23 20 43 43 43h362zM405 128v245h-362v-245h362z" /> - <glyph glyph-name="ion-android-document" unicode="" horiz-adv-x="320" -d="M192 400l128 -128v-248c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v336c0 22 18 40 40 40h152zM176 256h112l-112 112v-112z" /> - <glyph glyph-name="ion-android-done-all" unicode="" horiz-adv-x="512" -d="M388 308l-140 -139l-31 31l140 139zM481 339l31 -31l-264 -263l-122 123l30 31l92 -91zM0 168l32 31l122 -123l-31 -31z" /> - <glyph glyph-name="ion-android-done" unicode="" horiz-adv-x="384" -d="M122 108l230 230l32 -31l-262 -261l-122 122l32 31z" /> - <glyph glyph-name="ion-android-download" unicode="" horiz-adv-x="480" -d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM208 180h-68l100 -100l100 100h-68v76h-64v-76z" /> - <glyph glyph-name="ion-android-drafts" unicode="" -d="M448 246v-203c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v203c0 15 8 30 20 37l204 101l204 -101c13 -7 20 -22 20 -37zM224 144l171 112l-171 85l-171 -85z" /> - <glyph glyph-name="ion-android-exit" unicode="" horiz-adv-x="384" -d="M151 115l55 56h-206v42h207l-56 56l30 30l107 -107l-107 -107zM341 384c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v85h43v-85h298v298h-298v-85h-43v85c0 23 20 43 43 43h298z" /> - <glyph glyph-name="ion-android-expand" unicode="" horiz-adv-x="384" -d="M333 51v77h51v-128h-128v51h77zM333 333h-77v51h128v-128h-51v77zM51 333v-77h-51v128h128v-51h-77zM51 51h77v-51h-128v128h51v-77z" /> - <glyph glyph-name="ion-android-favorite-outline" unicode="" horiz-adv-x="416" -d="M302 384c64 0 114 -50 114 -115c0 -80 -71 -144 -178 -242l-30 -27l-30 27c-107 98 -178 162 -178 242c0 65 50 115 114 115c36 0 71 -17 94 -44c23 27 58 44 94 44zM221 55c50 46 94 86 123 122c28 35 40 63 40 92c0 23 -9 44 -24 59s-35 24 -58 24 -c-26 0 -53 -13 -70 -33l-24 -29l-24 29c-17 20 -44 33 -70 33c-23 0 -43 -9 -58 -24s-24 -36 -24 -59c0 -29 12 -57 40 -92c29 -36 73 -76 123 -122l4 -4l9 -8l9 8z" /> - <glyph glyph-name="ion-android-favorite" unicode="" horiz-adv-x="416" -d="M208 0l-30 27c-107 98 -178 162 -178 242c0 65 50 115 114 115c36 0 71 -17 94 -44c23 27 58 44 94 44c64 0 114 -50 114 -115c0 -80 -71 -144 -178 -242z" /> - <glyph glyph-name="ion-android-film" unicode="" horiz-adv-x="320" -d="M280 384h40v-384h-40v43h-40v-43h-160v43h-40v-43h-40v384h40v-43h40v43h160v-43h40v43zM80 85v43h-40v-43h40zM80 171v42h-40v-42h40zM80 256v43h-40v-43h40zM280 85v43h-40v-43h40zM280 171v42h-40v-42h40zM280 256v43h-40v-43h40z" /> - <glyph glyph-name="ion-android-folder-open" unicode="" -d="M405 304c23 0 43 -20 43 -43v-186c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v234c0 23 20 43 43 43h138l43 -48h181zM416 75v186c0 6 -5 11 -11 11h-373v-197c0 -6 5 -11 11 -11h362c6 0 11 5 11 11z" /> - <glyph glyph-name="ion-android-folder" unicode="" -d="M181 352l43 -48h181c23 0 43 -20 43 -43v-186c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v234c0 23 20 43 43 43h138z" /> - <glyph glyph-name="ion-android-funnel" unicode="" -d="M176 48v48h96v-48h-96zM0 336h448v-48h-448v48zM80 167v50h288v-50h-288z" /> - <glyph glyph-name="ion-android-globe" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM186 15c6 15 21 29 8 39c-8 7 -16 14 -23 21c-2 2 -11 20 -9 23c5 9 6 14 8 24c3 12 -3 16 -13 22c-15 10 -29 23 -43 34c-7 5 -17 10 -20 19s-5 20 -10 28c-14 20 -12 34 -10 58 -c0 7 -1 16 -2 25c-28 -32 -42 -73 -42 -116c0 -48 18 -92 52 -126c29 -29 65 -46 104 -51zM334 66c23 23 39 51 47 82c-8 -1 -19 2 -19 2s-21 24 -23 45c-2 22 0 39 -3 57c-3 16 -20 31 -27 46c-7 14 -13 28 -20 42c2 -1 5 -2 7 -3c5 1 10 2 14 2c-23 16 -49 25 -76 29v-8 -l4 -9l-14 -13l-9 3l-10 10l-10 12l-14 5c-16 -2 -31 -7 -45 -13v-7c7 3 16 5 23 8c3 1 13 -7 16 -9c-4 -5 -21 -15 -22 -21c0 -2 7 -6 7 -10c0 -6 -1 -11 -1 -17c3 3 20 21 22 21c13 3 35 -19 37 -26s-22 -24 -33 -34c-8 -8 -25 -12 -20 -24c2 -4 10 -20 5 -24 -c-6 -5 -14 9 -17 12c-8 10 -26 7 -38 7c0 -17 -1 -31 15 -43c15 -11 30 -25 47 -33c13 -6 36 7 47 -1c16 -11 29 -21 47 -29c8 -3 33 -20 26 -31c-5 -8 -10 -15 -14 -23s-13 -20 -20 -25c-8 -6 -16 -17 -21 -29c35 7 66 23 92 49z" /> - <glyph glyph-name="ion-android-hand" unicode="" horiz-adv-x="414" -d="M401 174c15 -15 18 -36 3 -51c0 0 -96 -103 -126 -121v0c-28 -21 -65 -34 -100 -34c-55 0 -101 36 -117 85v0v1c0 1 -1 2 -1 3l-58 189c-5 15 2 32 17 37s30 -3 35 -18l34 -88c1 -4 2 -2 2 1l-22 161c-3 15 7 30 22 33s30 -8 33 -23l25 -138c0 -2 2 -2 2 0v177 -c0 15 13 28 28 28s28 -13 28 -28l8 -175c0 -5 3 -4 4 -1l23 135c2 15 16 27 31 25s27 -17 25 -32l-21 -172c-1 -12 -3 -30 2 -36c8 -9 20 -9 31 2l42 42c15 15 35 13 50 -2z" /> - <glyph glyph-name="ion-android-hangout" unicode="" horiz-adv-x="352" -d="M176 400c97 0 176 -77 176 -172c0 -91 -76 -196 -176 -244v71c-97 0 -176 78 -176 173s79 172 176 172zM166 217v61h-62v-61h31l-21 -40h31zM248 217v61h-62v-61h31l-20 -40h31z" /> - <glyph glyph-name="ion-android-happy" unicode="" horiz-adv-x="416" -d="M208 400c114 0 208 -94 208 -208s-93 -208 -208 -208s-208 94 -208 208s93 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166zM281 213c-18 0 -31 13 -31 31s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31zM135 213 -c-18 0 -31 13 -31 31s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31zM208 78c-49 0 -89 29 -106 72h212c-17 -43 -57 -72 -106 -72z" /> - <glyph glyph-name="ion-android-home" unicode="" horiz-adv-x="416" -d="M160 0h-98v192h-62l208 192l208 -192h-62v-192h-98v128h-96v-128z" /> - <glyph glyph-name="ion-android-image" unicode="" horiz-adv-x="384" -d="M384 43c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298c23 0 43 -20 43 -43v-298zM117 160l-74 -96h298l-96 128l-74 -96z" /> - <glyph glyph-name="ion-android-laptop" unicode="" horiz-adv-x="512" -d="M437 32h75c0 -23 -64 -32 -96 -32h-320c-32 0 -96 9 -96 32h75c-23 0 -43 20 -43 43v266c0 23 20 43 43 43h362c23 0 43 -20 43 -43v-266c0 -23 -20 -43 -43 -43zM75 341v-272h362v272h-362zM256 13c12 0 21 10 21 22s-9 21 -21 21s-21 -9 -21 -21s9 -22 21 -22z" /> - <glyph glyph-name="ion-android-list" unicode="" horiz-adv-x="384" -d="M344 384c22 0 40 -18 40 -40v-304c0 -22 -18 -40 -40 -40h-304c-22 0 -40 18 -40 40v304c0 22 18 40 40 40h304zM240 80v48h-160v-48h160zM304 168v48h-224v-48h224zM304 256v48h-224v-48h224z" /> - <glyph glyph-name="ion-android-locate" unicode="" -d="M224 272c44 0 80 -36 80 -80s-36 -80 -80 -80s-80 36 -80 80s36 80 80 80zM415 213h33v-42h-33c-10 -89 -81 -160 -170 -170v-33h-42v33c-89 10 -160 81 -170 170h-33v42h33c10 89 81 160 170 170v33h42v-33c89 -10 160 -81 170 -170zM224 43c82 0 149 67 149 149 -s-67 149 -149 149s-149 -67 -149 -149s67 -149 149 -149z" /> - <glyph glyph-name="ion-android-lock" unicode="" horiz-adv-x="320" -d="M280 262c22 0 40 -18 40 -40v-200c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v200c0 22 18 40 40 40h20v40c0 55 45 100 100 100s100 -45 100 -100v-40h20zM160 80c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40zM222 262v40c0 34 -28 62 -62 62 -s-62 -28 -62 -62v-40h124z" /> - <glyph glyph-name="ion-android-mail" unicode="" -d="M405 368c23 0 43 -20 43 -43v-266c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v266c0 23 20 43 43 43h362zM400 277v43l-176 -117l-176 117v-43l176 -117z" /> - <glyph glyph-name="ion-android-map" unicode="" horiz-adv-x="384" -d="M373 384c6 0 11 -5 11 -11v-322c0 -5 -3 -9 -7 -10l-121 -41l-128 45s-105 -41 -108 -42s-7 -3 -9 -3c-6 0 -11 5 -11 11v322c0 5 3 9 7 10l121 41l128 -45s103 40 108 42s7 3 9 3zM256 43v254l-128 44v-254z" /> - <glyph glyph-name="ion-android-menu" unicode="" horiz-adv-x="384" -d="M0 64v43h384v-43h-384zM0 171v42h384v-42h-384zM0 320h384v-43h-384v43z" /> - <glyph glyph-name="ion-android-microphone-off" unicode="" horiz-adv-x="408" -d="M316 93l58 -58l-58 58l58 -58l34 -33l-24 -24l-95 95c-19 -11 -40 -20 -62 -23v-82h-46v82c-75 10 -137 76 -137 153h39c0 -68 58 -117 121 -117c20 0 40 5 57 14l-32 33c-8 -3 -16 -5 -25 -5c-38 0 -69 31 -69 69v29l-135 134l24 24l111 -110v0l140 -140l5 -5l9 -9z -M273 197c0 -4 0 -8 -1 -12l-137 137v25c0 38 31 69 69 69s69 -31 69 -69v-150zM365 203c0 -31 -10 -60 -27 -84l-27 28c9 17 15 36 15 56h39zM408 2v0l-34 33z" /> - <glyph glyph-name="ion-android-microphone" unicode="" horiz-adv-x="320" -d="M160 128c-38 0 -69 31 -69 69v150c0 38 31 69 69 69s69 -31 69 -69v-150c0 -38 -31 -69 -69 -69zM281 203h39c0 -78 -62 -142 -137 -153v-82h-46v82c-75 10 -137 75 -137 153h39c0 -69 58 -116 121 -116s121 47 121 116z" /> - <glyph glyph-name="ion-android-more-horizontal" unicode="" horiz-adv-x="320" -d="M40 232c22 0 40 -18 40 -40s-18 -40 -40 -40s-40 18 -40 40s18 40 40 40zM280 232c22 0 40 -18 40 -40s-18 -40 -40 -40s-40 18 -40 40s18 40 40 40zM160 232c22 0 40 -18 40 -40s-18 -40 -40 -40s-40 18 -40 40s18 40 40 40z" /> - <glyph glyph-name="ion-android-more-vertical" unicode="" horiz-adv-x="80" -d="M80 312c0 -22 -18 -40 -40 -40s-40 18 -40 40s18 40 40 40s40 -18 40 -40zM80 72c0 -22 -18 -40 -40 -40s-40 18 -40 40s18 40 40 40s40 -18 40 -40zM80 192c0 -22 -18 -40 -40 -40s-40 18 -40 40s18 40 40 40s40 -18 40 -40z" /> - <glyph glyph-name="ion-android-navigate" unicode="" horiz-adv-x="320" -d="M160 384l160 -369l-15 -15l-145 64l-145 -64l-15 15z" /> - <glyph glyph-name="ion-android-notifications-none" unicode="" horiz-adv-x="352" -d="M177 328h-2c-6 0 -24 -5 -24 -5c-46 -10 -78 -53 -78 -100v-114v-13l-9 -10l-8 -8h240l-8 8l-9 10v13v114c0 47 -32 90 -78 100c0 0 -17 5 -24 5zM176 400v0c18 0 31 -13 31 -31v-15c59 -14 104 -68 104 -131v-114l41 -42v-21h-352v21l41 42v114c0 63 45 117 104 131v15 -c0 18 13 31 31 31zM217 26v0c0 -23 -18 -42 -41 -42s-41 19 -41 42h82z" /> - <glyph glyph-name="ion-android-notifications-off" unicode="" horiz-adv-x="364" -d="M182 -16c-23 0 -41 19 -41 42h82c0 -23 -18 -42 -41 -42zM57 341l295 -295v0l12 -12l-24 -24l-36 36h-298v21l41 41v115c0 23 6 44 16 63l-63 64l24 24l33 -33v0zM317 223v-94l-208 207c13 8 27 15 42 18v15c0 18 13 31 31 31s31 -13 31 -31v-15c59 -14 104 -67 104 -131 -z" /> - <glyph glyph-name="ion-android-notifications" unicode="" horiz-adv-x="352" -d="M176 -16c-23 0 -41 19 -41 42h82c0 -23 -18 -42 -41 -42zM311 109l41 -42v-21h-352v21l41 42v114c0 63 45 117 104 131v15c0 18 13 31 31 31s31 -13 31 -31v-15c59 -14 104 -68 104 -131v-114z" /> - <glyph glyph-name="ion-android-open" unicode="" horiz-adv-x="384" -d="M341 43v133h43v-133c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h133v-43h-133v-298h298zM224 384h160v-160h-43v87l-215 -215l-30 30l215 215h-87v43z" /> - <glyph glyph-name="ion-android-options" unicode="" -d="M0 32v32h272v-32h-272zM368 32v32h80v-32h-80zM352 0c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96zM0 176v32h80v-32h-80zM176 176v32h272v-32h-272zM160 144c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96 -c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96zM0 320v32h272v-32h-272zM368 320v32h80v-32h-80zM352 288c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96z" /> - <glyph glyph-name="ion-android-people" unicode="" -d="M305 216c-34 0 -61 27 -61 60s27 60 61 60s62 -27 62 -60s-28 -60 -62 -60zM143 216c-34 0 -62 27 -62 60s28 60 62 60s61 -27 61 -60s-27 -60 -61 -60zM143 172c48 0 145 -23 145 -70v-54h-288v54c0 47 95 70 143 70zM305 161c48 0 143 -12 143 -59v-54h-128v54 -c0 30 -9 41 -32 58c7 1 11 1 17 1z" /> - <glyph glyph-name="ion-android-person-add" unicode="" horiz-adv-x="480" -d="M288 192c-53 0 -96 43 -96 96s43 96 96 96s96 -43 96 -96s-43 -96 -96 -96zM288 144c64 0 192 -32 192 -96v-48h-384v48c0 64 128 96 192 96zM96 224h64v-32h-64v-64h-32v64h-64v32h64v64h32v-64z" /> - <glyph glyph-name="ion-android-person" unicode="" horiz-adv-x="384" -d="M192 192c-53 0 -96 43 -96 96s43 96 96 96s96 -43 96 -96s-43 -96 -96 -96zM192 144c64 0 192 -32 192 -96v-48h-384v48c0 64 128 96 192 96z" /> - <glyph glyph-name="ion-android-phone-landscape" unicode="" -d="M448 89c0 -23 -19 -41 -41 -41h-366c-22 0 -41 18 -41 41v206c0 23 19 41 41 41h366c22 0 41 -18 41 -41v-206zM80 84h288v216h-288v-216z" /> - <glyph glyph-name="ion-android-phone-portrait" unicode="" horiz-adv-x="288" -d="M247 416c23 0 41 -19 41 -41v-366c0 -22 -18 -41 -41 -41h-206c-23 0 -41 19 -41 41v366c0 22 18 41 41 41h206zM252 48v288h-216v-288h216z" /> - <glyph glyph-name="ion-android-pin" unicode="" horiz-adv-x="320" -d="M160 416c88 0 160 -71 160 -157c0 -118 -160 -291 -160 -291s-160 173 -160 291c0 86 72 157 160 157zM160 203c32 0 57 25 57 56s-25 56 -57 56s-57 -25 -57 -56s25 -56 57 -56z" /> - <glyph glyph-name="ion-android-plane" unicode="" horiz-adv-x="384" -d="M384 112l-160 48v-114l48 -31v-31l-80 16l-80 -16v31l48 31v114l-160 -48v40l160 104v113c0 18 15 31 32 31s32 -13 32 -31v-113l160 -104v-40z" /> - <glyph glyph-name="ion-android-playstore" unicode="" horiz-adv-x="416" -d="M416 296c-19 -214 -13 -312 -13 -312h-390s6 96 -13 312h104c0 57 47 104 104 104s104 -47 104 -104h104zM208 374c-43 0 -78 -35 -78 -78h156c0 43 -35 78 -78 78zM156 50l143 85l-143 84v-169z" /> - <glyph glyph-name="ion-android-print" unicode="" horiz-adv-x="416" -d="M352 288c35 0 64 -29 64 -64v-139h-80v-85h-256v85h-80v139c0 35 29 64 64 64h288zM304 32v128h-192v-128h192zM336 384v0v-80h-256v80h256z" /> - <glyph glyph-name="ion-android-radio-button-off" unicode="" horiz-adv-x="416" -d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166z" /> - <glyph glyph-name="ion-android-radio-button-on" unicode="" horiz-adv-x="416" -d="M208 296c57 0 104 -47 104 -104s-47 -104 -104 -104s-104 47 -104 104s47 104 104 104zM208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166z" /> - <glyph glyph-name="ion-android-refresh" unicode="" horiz-adv-x="352" -d="M176 60c56 0 104 34 123 84h46c-21 -74 -88 -128 -169 -128c-98 0 -176 79 -176 176s79 176 176 176c48 0 92 -20 124 -52l52 52v-154h-154l70 70c-23 24 -56 40 -92 40c-73 0 -132 -59 -132 -132s59 -132 132 -132z" /> - <glyph glyph-name="ion-android-remove-circle" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM315 171v42h-214v-42h214z" /> - <glyph glyph-name="ion-android-remove" unicode="" horiz-adv-x="320" -d="M0 171v42h320v-42h-320z" /> - <glyph glyph-name="ion-android-restaurant" unicode="" horiz-adv-x="415" -d="M116 168l-91 89c-34 33 -34 86 0 119l153 -148zM264 206l-33 -31l150 -145l-30 -30l-150 146l-150 -146l-30 30s163 159 211 207c-15 32 -4 77 31 111c41 40 101 49 132 17c33 -31 24 -89 -17 -129c-34 -34 -80 -45 -114 -30z" /> - <glyph glyph-name="ion-android-sad" unicode="" horiz-adv-x="416" -d="M208 160c45 0 83 -26 102 -64h-204c19 38 57 64 102 64zM208 400c114 0 208 -94 208 -208s-93 -208 -208 -208s-208 94 -208 208s93 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166zM281 213c-18 0 -31 13 -31 31 -s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31zM135 213c-18 0 -31 13 -31 31s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31z" /> - <glyph glyph-name="ion-android-search" unicode="" horiz-adv-x="384" -d="M274 143l110 -110l-33 -33l-109 110v17l-7 6c-25 -21 -58 -34 -93 -34c-79 0 -142 63 -142 142s63 143 141 143c79 0 142 -64 142 -143c0 -36 -13 -68 -34 -93l7 -5h18zM142 143c55 0 99 43 99 98s-44 99 -99 99s-98 -44 -98 -99s43 -98 98 -98z" /> - <glyph glyph-name="ion-android-send" unicode="" horiz-adv-x="416" -d="M0 0v149l298 43l-298 43v149l416 -192z" /> - <glyph glyph-name="ion-android-settings" unicode="" horiz-adv-x="416" -d="M366 171l47 -34c3 -3 4 -10 2 -14l-43 -71c-2 -4 -7 -7 -12 -5l-54 21c-12 -8 -23 -16 -36 -21l-8 -55c-1 -4 -6 -8 -11 -8h-85c-5 0 -10 3 -11 8l-8 55c-13 5 -25 13 -36 21l-54 -21c-4 -2 -10 1 -12 5l-43 71c-3 5 -2 11 2 14l45 34c0 7 -1 14 -1 21s1 14 1 21l-46 34 -c-3 3 -4 10 -2 14l43 71c2 4 7 7 12 5l54 -21c12 8 23 16 36 21l8 55c1 4 6 8 11 8h85c5 0 10 -4 11 -8l7 -55c13 -5 25 -13 36 -21l53 21c4 2 11 -1 13 -5l43 -71c3 -5 2 -11 -2 -14l-45 -34c0 -7 1 -14 1 -21s0 -15 -1 -21zM207 119c41 0 75 32 75 73s-34 73 -75 73 -s-74 -32 -74 -73s33 -73 74 -73z" /> - <glyph glyph-name="ion-android-share-alt" unicode="" horiz-adv-x="384" -d="M320 104c34 0 62 -28 62 -62s-28 -62 -62 -62s-62 28 -62 62c0 5 1 10 2 14l-152 88c-12 -11 -27 -17 -44 -17c-35 0 -64 29 -64 64s28 64 63 64c17 0 32 -6 44 -17l151 87c-1 5 -2 10 -2 15c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64c-17 0 -32 6 -44 17 -l-151 -87c1 -5 2 -10 2 -15s-1 -10 -2 -15l153 -88c11 11 26 16 42 16z" /> - <glyph glyph-name="ion-android-share" unicode="" horiz-adv-x="384" -d="M384 200l-160 -147v88c-107 0 -171 -34 -224 -109c21 107 75 214 224 235v85z" /> - <glyph glyph-name="ion-android-star-half" unicode="" horiz-adv-x="404" -d="M404 238l-110 -96l33 -142l-125 75l-125 -75l33 142l-110 96l145 12l57 134l57 -134zM219 103l60 -36l-16 68l-5 19l15 12l53 46l-70 6l-19 2l-8 18l-27 64v-189z" /> - <glyph glyph-name="ion-android-star-outline" unicode="" horiz-adv-x="404" -d="M404 238l-110 -96l33 -142l-125 75l-125 -75l33 142l-110 96l145 12l57 134l57 -134zM219 103l60 -36l-16 68l-5 19l15 12l53 46l-70 6l-19 2l-8 18l-27 64l-27 -64l-8 -18l-19 -2l-70 -6l53 -46l15 -12l-5 -19l-16 -68l60 36l17 10z" /> - <glyph glyph-name="ion-android-star" unicode="" horiz-adv-x="404" -d="M202 75l-125 -75l33 142l-110 96l145 12l57 134l57 -134l145 -12l-110 -96l33 -142z" /> - <glyph glyph-name="ion-android-stopwatch" unicode="" horiz-adv-x="384" -d="M168 141v131h48v-131h-48zM344 278c25 -33 40 -74 40 -118c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192c44 0 85 -15 118 -40l31 30l33 -33zM298 54c28 28 44 66 44 106s-16 78 -44 106s-66 44 -106 44s-78 -16 -106 -44s-44 -66 -44 -106 -s16 -78 44 -106s66 -44 106 -44s78 16 106 44zM128 368v48h128v-48h-128z" /> - <glyph glyph-name="ion-android-subway" unicode="" horiz-adv-x="352" -d="M176 400c94 0 176 -10 176 -85v-214c0 -42 -33 -74 -75 -74l27 -27v-16h-256v16l27 27c-42 0 -75 32 -75 74v214c0 75 82 85 176 85zM80 64c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM160 208v96h-112v-96h112zM272 64c18 0 32 14 32 32 -s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM304 208v96h-112v-96h112z" /> - <glyph glyph-name="ion-android-sunny" unicode="" -d="M224 288c-25 0 -50 -10 -68 -28s-28 -43 -28 -68s10 -50 28 -68s43 -28 68 -28s50 10 68 28s28 43 28 68s-10 50 -28 68s-43 28 -68 28zM245 416v0v-64h-42v64h42zM374 372v0l30 -30l-38 -38l-30 30zM74 372v0l38 -38l-30 -30l-38 38zM224 320v0c70 0 128 -58 128 -128 -s-58 -128 -128 -128s-128 58 -128 128s58 128 128 128zM448 213v0v-42h-64v42h64zM64 213v0v-42h-64v42h64zM366 80v0l38 -38l-30 -30l-38 38zM82 80v0l30 -30l-38 -38l-30 30zM245 32v0v-64h-42v64h42z" /> - <glyph glyph-name="ion-android-sync" unicode="" horiz-adv-x="320" -d="M160 355c88 0 160 -73 160 -163c0 -32 -9 -62 -25 -87l-29 30c9 17 14 37 14 57c0 67 -54 122 -120 122v-61l-80 82l80 81v-61zM160 70v61l80 -82l-80 -81v61c-88 0 -160 73 -160 163c0 32 9 63 25 87l29 -30c-9 -17 -14 -37 -14 -57c0 -67 54 -122 120 -122z" /> - <glyph glyph-name="ion-android-textsms" unicode="" horiz-adv-x="384" -d="M344 384c22 0 40 -18 40 -40v-240c0 -22 -18 -40 -40 -40h-280l-64 -64v344c0 22 10 40 32 40h312zM134 206v40h-38v-40h38zM211 206v40h-38v-40h38zM288 206v40h-38v-40h38z" /> - <glyph glyph-name="ion-android-time" unicode="" horiz-adv-x="426" -d="M213 405c117 0 213 -96 213 -213s-95 -213 -213 -213s-213 96 -213 213s95 213 213 213zM213 22c94 0 170 76 170 170s-76 170 -170 170s-170 -76 -170 -170s76 -170 170 -170zM224 298v-111l96 -57l-16 -26l-112 67v127h32z" /> - <glyph glyph-name="ion-android-train" unicode="" horiz-adv-x="352" -d="M0 101v214c0 75 82 85 176 85s176 -10 176 -85v-214c0 -42 -33 -74 -75 -74l27 -27v-16h-256v16l27 27c-42 0 -75 32 -75 74zM176 72c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40zM304 224v96h-256v-96h256z" /> - <glyph glyph-name="ion-android-unlock" unicode="" horiz-adv-x="320" -d="M280 262c22 0 40 -18 40 -40v-200c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v200c0 22 18 40 40 40h182v40v0c0 34 -28 62 -62 62s-62 -28 -62 -62h-38c0 55 45 100 100 100s100 -45 100 -100v-40h20zM160 80c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40 -s18 -40 40 -40z" /> - <glyph glyph-name="ion-android-upload" unicode="" horiz-adv-x="480" -d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM272 172h68l-100 100l-100 -100h68v-76h64v76z" /> - <glyph glyph-name="ion-android-volume-down" unicode="" horiz-adv-x="288" -d="M0 256h85l107 112v-352l-107 112h-85v128zM288 192c0 -38 -21 -73 -53 -88v177c32 -16 53 -51 53 -89z" /> - <glyph glyph-name="ion-android-volume-mute" unicode="" horiz-adv-x="192" -d="M0 256h85l107 112v-352l-107 112h-85v128z" /> - <glyph glyph-name="ion-android-volume-off" unicode="" horiz-adv-x="384" -d="M342 192c0 69 -45 128 -107 147v45c85 -20 149 -99 149 -192c0 -35 -8 -68 -24 -96l-32 32c9 19 14 41 14 64zM192 368v-104l-51 51zM357 51v0l24 -24l-24 -24l-40 40c-23 -21 -51 -36 -82 -43v45c19 6 37 15 52 28l-95 95v-152l-107 112h-85v128h85l9 10l-91 91l24 24z -M288 192c0 -7 0 -15 -2 -22l-51 51v60c32 -16 53 -51 53 -89z" /> - <glyph glyph-name="ion-android-volume-up" unicode="" horiz-adv-x="384" -d="M0 256h85l107 112v-352l-107 112h-85v128zM288 192c0 -38 -21 -73 -53 -88v177c32 -16 53 -51 53 -89zM235 384c85 -20 149 -99 149 -192s-64 -172 -149 -192v45c62 19 106 78 106 147s-44 128 -106 147v45z" /> - <glyph glyph-name="ion-android-walk" unicode="" horiz-adv-x="272" -d="M168 336c-22 0 -40 18 -40 40s18 40 40 40s40 -18 40 -40s-18 -40 -40 -40zM168 216l-20 38l-20 -62l57 -96v-128h-38v96l-50 68l-57 -164h-40l81 320l-41 -16v-80h-40v112l111 38c4 1 10 1 13 1c13 0 23 -6 31 -18l45 -69h72v-40h-104z" /> - <glyph glyph-name="ion-android-warning" unicode="" -d="M0 -16l224 416l224 -416h-448zM248 48v48h-48v-48h48zM248 128v96h-48v-96h48z" /> - <glyph glyph-name="ion-android-watch" unicode="" horiz-adv-x="320" -d="M320 192c0 -51 -24 -96 -61 -125l-19 -115h-160l-19 115c-37 29 -61 74 -61 125s24 96 61 125l19 115h160l19 -115c37 -29 61 -74 61 -125zM40 192c0 -66 54 -120 120 -120s120 54 120 120s-54 120 -120 120s-120 -54 -120 -120z" /> - <glyph glyph-name="ion-android-wifi" unicode="" horiz-adv-x="416" -d="M208 219c23 0 42 -18 42 -41s-19 -41 -42 -41s-42 18 -42 41s19 41 42 41zM333 178c0 -45 -26 -85 -63 -107l-20 36c25 14 41 40 41 71c0 45 -37 82 -83 82s-83 -37 -83 -82c0 -31 16 -57 41 -71l-20 -36c-37 22 -63 62 -63 107c0 68 56 124 125 124s125 -56 125 -124z -M208 384c114 0 208 -93 208 -206c0 -76 -42 -142 -104 -178l-21 36c50 28 83 81 83 142c0 91 -74 165 -166 165s-166 -74 -166 -165c0 -61 33 -113 83 -142l-21 -36c-62 36 -104 102 -104 178c0 113 94 206 208 206z" /> - <glyph glyph-name="ion-aperture" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136s85 -56 136 -56s100 20 136 56zM168 342l56 -86h-147 -c17 40 50 71 91 86zM381 160h-102l72 129c21 -27 33 -60 33 -97c0 -11 -1 -22 -3 -32zM328 314l-49 -90l-78 126c8 1 15 2 23 2c40 0 76 -14 104 -38zM67 224h102l-72 -129c-21 27 -33 60 -33 97c0 11 1 22 3 32zM280 42l-56 86h147c-17 -40 -50 -71 -91 -86zM120 70l49 90 -l78 -126c-8 -1 -15 -2 -23 -2c-40 0 -76 14 -104 38z" /> - <glyph glyph-name="ion-archive" unicode="" -d="M224 140l-128 116h80v96h96v-96h80zM433 151c11 -6 17 -19 15 -32l-9 -67c-2 -13 -9 -20 -28 -20h-374c-18 0 -26 7 -28 20l-9 67c-2 13 3 26 14 32l72 55h42l-62 -62h50c2 0 5 -1 6 -3l18 -45h168l18 45c1 2 3 3 5 3h51l-62 62h42z" /> - <glyph glyph-name="ion-arrow-down-a" unicode="" horiz-adv-x="384" -d="M192 -0l-192 192h112v192h160v-192h112z" /> - <glyph glyph-name="ion-arrow-down-b" unicode="" horiz-adv-x="320" -d="M3 263c-2 2 -3 6 -3 9c0 9 8 16 17 16v0h286v0c9 0 17 -7 17 -16c0 -3 -1 -6 -3 -8l-2 -3l-136 -156c-5 -5 -11 -9 -19 -9s-14 4 -19 9l-136 156z" /> - <glyph glyph-name="ion-arrow-down-c" unicode="" horiz-adv-x="274" -d="M265 125l-105 -100c-6 -6 -14 -9 -23 -9s-16 3 -22 9l-106 100c-12 12 -12 31 0 43s34 12 46 0l50 -48v217c0 17 14 31 32 31s32 -14 32 -31v-217l50 48c12 12 34 12 46 0s12 -31 0 -43z" /> - <glyph glyph-name="ion-arrow-expand" unicode="" horiz-adv-x="320" -d="M178 238l64 64l-50 50h128v-128l-50 50l-64 -64zM178 146l28 28l64 -64l50 50v-128h-128l50 50zM142 146l-64 -64l50 -50h-128v128l50 -50l64 64zM142 238l-28 -28l-64 64l-50 -50v128h128l-50 -50z" /> - <glyph glyph-name="ion-arrow-graph-down-left" unicode="" -d="M0 64v160l61 -61l131 141l107 -112l149 128l-149 -203l-107 107l-94 -98l62 -62h-160z" /> - <glyph glyph-name="ion-arrow-graph-down-right" unicode="" -d="M288 64l62 62l-94 98l-107 -107l-149 203l149 -128l107 112l131 -141l61 61v-160h-160z" /> - <glyph glyph-name="ion-arrow-graph-up-left" unicode="" -d="M160 320l-62 -62l94 -98l107 107l149 -203l-149 128l-107 -112l-131 141l-61 -61v160h160z" /> - <glyph glyph-name="ion-arrow-graph-up-right" unicode="" -d="M288 320h160v-160l-61 61l-131 -141l-107 112l-149 -128l149 203l107 -107l94 98z" /> - <glyph glyph-name="ion-arrow-left-a" unicode="" horiz-adv-x="384" -d="M0 192l192 192v-112h192v-160h-192v-112z" /> - <glyph glyph-name="ion-arrow-left-b" unicode="" horiz-adv-x="192" -d="M167 349c2 2 6 3 9 3c9 0 16 -8 16 -17v0v-286v0c0 -9 -7 -17 -16 -17c-3 0 -7 1 -9 3l-2 2l-156 136c-5 5 -9 11 -9 19s4 14 9 19l156 136z" /> - <glyph glyph-name="ion-arrow-left-c" unicode="" horiz-adv-x="352" -d="M109 320c12 12 32 12 44 0s12 -34 0 -46l-49 -50h217c17 0 31 -14 31 -32s-14 -32 -31 -32h-217l48 -50c12 -12 12 -34 0 -46s-31 -12 -43 0l-100 106c-6 6 -9 13 -9 22s3 17 9 23z" /> - <glyph glyph-name="ion-arrow-move" unicode="" -d="M448 192l-96 -96v76h-109l1 -108h76l-96 -96l-96 96h76v108h-108v-76l-96 96l96 96v-76h108v108h-76l96 96l96 -96h-76v-108h108v76z" /> - <glyph glyph-name="ion-arrow-resize" unicode="" horiz-adv-x="320" -d="M192 352h128v-128l-50 50l-9 -9l-183 -183l50 -50h-128v128l50 -50l128 128v0l64 64z" /> - <glyph glyph-name="ion-arrow-return-left" unicode="" horiz-adv-x="384" -d="M128 352v-64h248c4 0 8 -4 8 -8v-240c0 -4 -4 -8 -8 -8h-304c-4 0 -8 4 -8 8v48c0 4 4 8 8 8h248v128h-192v-64l-128 96z" /> - <glyph glyph-name="ion-arrow-return-right" unicode="" horiz-adv-x="384" -d="M384 256l-128 -96v64h-192v-128h248c4 0 8 -4 8 -8v-48c0 -4 -4 -8 -8 -8h-304c-4 0 -8 4 -8 8v240c0 4 4 8 8 8h248v64z" /> - <glyph glyph-name="ion-arrow-right-a" unicode="" horiz-adv-x="384" -d="M384 192l-192 -192v112h-192v160h192v112z" /> - <glyph glyph-name="ion-arrow-right-b" unicode="" horiz-adv-x="192" -d="M25 35c-2 -2 -6 -3 -9 -3c-9 0 -16 8 -16 17v0v286v0c0 9 7 17 16 17c3 0 6 -1 8 -3l3 -2l156 -136c5 -5 9 -11 9 -19s-4 -14 -9 -19l-156 -136z" /> - <glyph glyph-name="ion-arrow-right-c" unicode="" horiz-adv-x="352" -d="M243 320l100 -105c6 -6 9 -14 9 -23s-3 -16 -9 -22l-100 -106c-12 -12 -31 -12 -43 0s-12 34 0 46l48 50h-217c-17 0 -31 14 -31 32s14 32 31 32h217l-49 50c-12 12 -12 34 0 46s32 12 44 0z" /> - <glyph glyph-name="ion-arrow-shrink" unicode="" horiz-adv-x="384" -d="M384 356l-82 -82l50 -50h-128v128l50 -50l82 82zM384 28l-28 -28l-82 82l-50 -50v128h128l-50 -50zM0 28l82 82l-50 50h128v-128l-50 50l-82 -82zM0 356l28 28l82 -82l50 50v-128h-128l50 50z" /> - <glyph glyph-name="ion-arrow-swap" unicode="" horiz-adv-x="384" -d="M0 120c0 4 4 8 8 8h248v64l128 -96l-128 -96v64h-248c-4 0 -8 4 -8 8v48zM384 264c0 -4 -4 -8 -8 -8h-248v-64l-128 96l128 96v-64h248c4 0 8 -4 8 -8v-48z" /> - <glyph glyph-name="ion-arrow-up-a" unicode="" horiz-adv-x="384" -d="M192 384l192 -192h-112v-192h-160v192h-112z" /> - <glyph glyph-name="ion-arrow-up-b" unicode="" horiz-adv-x="320" -d="M317 121c2 -2 3 -6 3 -9c0 -9 -8 -16 -17 -16v0h-286v0c-9 0 -17 7 -17 16c0 3 1 6 3 8l2 3l136 156c5 5 11 9 19 9s14 -4 19 -9l136 -156z" /> - <glyph glyph-name="ion-arrow-up-c" unicode="" horiz-adv-x="274" -d="M9 259l105 100c6 6 14 9 23 9s16 -3 22 -9l106 -100c12 -12 12 -31 0 -43s-34 -12 -46 0l-50 48v-217c0 -17 -14 -31 -32 -31s-32 14 -32 31v217l-50 -49c-12 -12 -34 -12 -46 0s-12 32 0 44z" /> - <glyph glyph-name="ion-asterisk" unicode="" -d="M448 224v-64l-186 10l104 -170l-56 -32l-86 176l-86 -176l-56 32l104 170l-186 -10v64l187 -7l-109 167l60 32l86 -176l86 176l60 -32l-109 -167z" /> - <glyph glyph-name="ion-at" unicode="" -d="M422 41c-24 -25 -52 -43 -85 -55s-69 -18 -105 -18c-35 0 -66 6 -95 17s-53 26 -73 46s-36 43 -47 71s-17 58 -17 90s6 62 18 89s29 51 50 71s46 35 74 47c28 11 58 17 90 17c28 0 55 -4 81 -12s49 -20 69 -36s36 -36 48 -60s18 -53 18 -85c0 -24 -3 -46 -10 -64 -s-16 -34 -27 -46s-24 -22 -38 -28s-29 -10 -45 -10s-29 4 -39 12s-15 17 -15 29h-3c-6 -10 -15 -19 -28 -28s-28 -13 -46 -13c-28 0 -49 9 -64 27s-23 42 -23 71c0 17 3 34 9 50s14 31 24 44s23 23 38 31s31 12 49 12c15 0 27 -4 38 -10c10 -6 18 -15 21 -24h1l5 24h54 -l-24 -113c-1 -6 -2 -12 -3 -19s-2 -13 -2 -19c0 -7 1 -13 4 -18s7 -7 15 -7c16 0 29 9 39 26s16 40 16 68c0 24 -4 45 -12 64s-20 34 -34 47s-32 23 -52 29s-41 9 -65 9c-26 0 -49 -4 -70 -13s-39 -22 -54 -38s-27 -34 -35 -56c-8 -21 -13 -44 -13 -69c0 -26 4 -51 13 -72 -s21 -39 37 -54s35 -27 57 -35s46 -12 72 -12c33 0 61 6 85 16s45 25 65 43zM231 260c-10 0 -18 -2 -25 -8s-14 -13 -19 -22s-8 -18 -11 -28s-4 -20 -4 -30c0 -5 0 -10 1 -16c1 -5 3 -10 6 -15s7 -8 12 -11s11 -5 19 -5c11 0 20 3 28 8s14 13 19 21s9 16 11 26s3 19 3 27 -c0 6 0 13 -1 19s-4 12 -7 17s-7 9 -12 12s-12 5 -20 5z" /> - <glyph glyph-name="ion-backspace-outline" unicode="" horiz-adv-x="512" -d="M413 116c2 -2 3 -4 3 -6s-1 -4 -3 -6l-21 -22c-2 -2 -4 -2 -6 -2s-4 0 -6 2l-76 77l-76 -77c-2 -2 -4 -2 -6 -2s-4 0 -6 2l-21 22c-2 2 -3 4 -3 6s1 4 3 6l76 76l-77 76c-3 3 -3 9 0 12l22 22c2 2 4 2 6 2s4 0 6 -2l76 -76l76 76c2 2 4 2 6 2s4 0 6 -2l22 -22 -c3 -3 3 -9 0 -12l-77 -76zM499 354c9 -9 13 -20 13 -33v-256c0 -27 -20 -49 -46 -49h-298c-13 0 -24 3 -34 9c-9 5 -16 11 -23 20v0l-1 1l-110 146l110 148c14 19 34 28 58 28h298c13 0 24 -5 33 -14zM480 65v256c0 9 -5 15 -14 15h-298c-11 0 -22 -3 -32 -16l-96 -128 -l96 -128c8 -10 17 -16 32 -16h298c9 0 14 8 14 17z" /> - <glyph glyph-name="ion-backspace" unicode="" horiz-adv-x="512" -d="M499 354c9 -9 13 -20 13 -33v-256c0 -27 -20 -49 -46 -49h-298c-13 0 -24 3 -34 9c-9 5 -16 11 -23 20v0l-1 1l-110 146l110 148c14 19 34 28 58 28h298c13 0 24 -5 33 -14zM413 116l-76 76l77 76c3 3 3 9 0 12l-22 22c-2 2 -4 2 -6 2s-4 0 -6 -2l-76 -76l-76 76 -c-2 2 -4 2 -6 2s-4 0 -6 -2l-22 -22c-3 -3 -3 -9 0 -12l77 -76l-76 -76c-2 -2 -3 -4 -3 -6s1 -4 3 -6l21 -22c2 -2 4 -2 6 -2s4 0 6 2l76 77l76 -77c2 -2 4 -2 6 -2s4 0 6 2l21 22c2 2 3 4 3 6s-1 4 -3 6z" /> - <glyph glyph-name="ion-bag" unicode="" -d="M416 288l32 -320h-448l32 320h64v4c0 68 56 124 124 124h8c68 0 124 -56 124 -124v-4h64zM128 292v-4h192v4c0 51 -41 92 -92 92v0h-8c-51 0 -92 -41 -92 -92zM36 0h376l-25 256h-35v-36c10 -6 16 -16 16 -28c0 -18 -14 -32 -32 -32s-32 14 -32 32c0 12 6 22 16 28v36 -h-192v-36c10 -6 16 -16 16 -28c0 -18 -14 -32 -32 -32s-32 14 -32 32c0 12 6 22 16 28v36h-35z" /> - <glyph glyph-name="ion-battery-charging" unicode="" -d="M10 64c-6 0 -10 4 -10 10v236c0 6 4 10 10 10h381c6 0 10 -4 10 -10v-54h37c6 0 10 -4 10 -10v-108c0 -6 -4 -10 -10 -10h-37v-54c0 -6 -4 -10 -10 -10h-381zM225 288l-100 -111h61l-27 -81l100 111h-61z" /> - <glyph glyph-name="ion-battery-empty" unicode="" -d="M438 256c6 0 10 -4 10 -10v-108c0 -6 -4 -10 -10 -10h-37v-54c0 -6 -4 -10 -10 -10h-381c-6 0 -10 4 -10 10v236c0 6 4 10 10 10h381c6 0 10 -4 10 -10v-54h37zM416 160v64h-15h-32v32v32h-337v-192h337v32v32h32h15z" /> - <glyph glyph-name="ion-battery-full" unicode="" -d="M438 256c6 0 10 -4 10 -10v-108c0 -6 -4 -10 -10 -10h-37v-54c0 -6 -4 -10 -10 -10h-381c-6 0 -10 4 -10 10v236c0 6 4 10 10 10h381c6 0 10 -4 10 -10v-54h37z" /> - <glyph glyph-name="ion-battery-half" unicode="" -d="M438 256c6 0 10 -4 10 -10v-108c0 -6 -4 -10 -10 -10h-37v-54c0 -6 -4 -10 -10 -10h-381c-6 0 -10 4 -10 10v236c0 6 4 10 10 10h381c6 0 10 -4 10 -10v-54h37zM416 160v64h-15h-32v32v32h-81l32 -192h49v32v32h32h15z" /> - <glyph glyph-name="ion-battery-low" unicode="" -d="M10 64c-6 0 -10 4 -10 10v236c0 6 4 10 10 10h381c6 0 10 -4 10 -10v-54h37c6 0 10 -4 10 -10v-108c0 -6 -4 -10 -10 -10h-37v-54c0 -6 -4 -10 -10 -10h-381zM369 288h-209l32 -192h177v32v32h32h15v64h-15h-32v32v32z" /> - <glyph glyph-name="ion-beaker" unicode="" horiz-adv-x="384" -d="M80 256h240v-224c0 -9 -7 -16 -16 -16h-208c-9 0 -16 7 -16 16v224zM296 104v48c0 4 -4 8 -8 8s-8 -4 -8 -8v-48c0 -4 4 -8 8 -8s8 4 8 8zM288 176c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM381 416c3 0 3 -2 3 -3s-2 -3 -3 -5s-13 -20 -13 -40v-336 -c0 -35 -29 -64 -64 -64h-208c-35 0 -64 29 -64 64v307c0 32 -2 33 -32 37c0 12 11 40 65 40h316zM336 368c0 5 0 16 1 16h-273c-1 0 -3 0 -4 -1c5 -7 4 -32 4 -44v-307c0 -18 14 -32 32 -32h210c17 0 30 14 30 32v336z" /> - <glyph glyph-name="ion-beer" unicode="" -d="M384 288c35 0 64 -29 64 -64v-96c0 -35 -29 -64 -64 -64h-32v-80c0 -9 -7 -16 -16 -16h-256c-9 0 -16 7 -16 16v223c-26 0 -48 22 -48 48v54v1c-10 11 -16 26 -16 42c0 35 29 64 64 64c18 0 34 -8 46 -20c10 12 26 20 43 20c14 0 27 -6 37 -14c12 9 26 14 42 14 -c17 0 34 -6 46 -16c11 10 26 16 42 16c35 0 64 -29 64 -64c0 -24 -18 -44 -32 -48v-16h32zM296 144c4 0 8 3 8 8v0v48c0 4 -4 8 -8 8s-8 -4 -8 -8v-48c0 -3 2 -6 4 -7c1 -1 2 -1 4 -1zM303 220c1 2 1 4 1 6s-1 4 -3 5s-4 1 -6 1s-4 -2 -5 -4s-2 -4 -2 -6s2 -4 4 -5 -s4 -1 6 -1s4 2 5 4zM320 288v32h-20c-3 -8 -7 -16 -13 -23c-13 -16 -33 -25 -55 -25c-26 0 -48 13 -61 33c-6 -2 -12 -3 -18 -3c-12 0 -23 4 -32 10c-2 1 -3 3 -5 4c-1 -2 -2 -3 -3 -5c-5 -6 -11 -10 -17 -14v-32v-9h80c0 4 4 8 8 8s8 -4 8 -8h128v32zM351 343c1 3 1 6 1 9 -c0 18 -14 32 -32 32c-9 0 -17 -4 -23 -10c-2 -2 -6 -5 -16 -6h-8c-6 1 -12 3 -14 5c-7 7 -16 11 -27 11c-9 0 -18 -4 -25 -9l-7 -7c0 -1 0 -1 -1 -2c-3 -3 -7 -5 -11 -5c-5 0 -8 3 -11 6c-1 2 -2 3 -3 5s-3 4 -5 6c-4 4 -10 6 -16 6c-10 0 -18 -9 -25 -16 -c-7 -8 -27 -8 -34 0s-18 16 -30 16c-18 0 -32 -14 -32 -32c0 -2 1 -5 1 -7c2 -9 7 -17 15 -21v-34v-35c0 -9 7 -16 16 -16v26v23v32c10 0 18 4 24 11c2 2 3 4 4 6c0 0 6 10 12 11s20 6 30 -5c4 -5 11 -9 19 -9c3 0 5 1 7 2c3 1 7 2 9 4v0c3 2 6 4 10 4c7 0 12 -4 14 -10 -c0 0 1 -1 1 -2c1 -3 1 -5 3 -8c7 -12 20 -20 35 -20c13 0 25 6 32 16c5 7 8 15 8 24s9 8 9 8h7h48c6 0 13 -3 15 -9zM416 128v96c0 18 -14 32 -32 32h-32v-160h32c18 0 32 14 32 32zM128 280c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM288 280c0 5 3 8 8 8s8 -3 8 -8 -s-3 -8 -8 -8s-8 3 -8 8z" /> - <glyph glyph-name="ion-bluetooth" unicode="" horiz-adv-x="256" -d="M12 304c16 16 18 13 19 12l68 -65v0v0c2 -2 10 -10 10 -3v156v0v2c0 6 6 10 12 10c4 0 7 -2 9 -4v0s117 -113 122 -117s5 -10 1 -14l-84 -81s-4 -4 -4 -8s4 -8 4 -8l84 -81c4 -4 4 -10 -1 -14s-122 -117 -122 -117v0c-2 -2 -5 -4 -9 -4c-6 0 -12 4 -12 10v2v0v156 -s-8 -1 -10 -3v0v-1l-68 -64c-1 -1 -3 -4 -19 12s-12 17 -11 18s90 86 90 86s4 3 4 8v0c0 5 -4 8 -4 8s-89 85 -90 86s-5 2 11 18zM152 328v-79c0 -8 8 -1 10 1l30 30s3 5 3 7s-1 5 -3 7l-30 30c-2 2 -10 11 -10 4zM152 135v-79s8 2 10 4l30 30c2 2 3 5 3 7s-1 5 -3 7l-30 30 -c-2 2 -10 9 -10 1z" /> - <glyph glyph-name="ion-bonfire" unicode="" horiz-adv-x="384" -d="M207 97l15 -89c1 -3 1 -5 1 -8c0 -18 -14 -32 -32 -32s-32 14 -32 32c0 2 0 5 1 7l15 92v0c2 7 8 13 16 13s15 -7 16 -15zM242 93v0v0v0zM329 58c9 -8 10 -25 0 -35s-27 -9 -35 0c-1 1 -2 3 -3 4l-49 66c-3 5 -2 11 2 15c5 5 10 5 16 1l64 -47c2 -1 3 -3 5 -4zM309 113v0 -v0v0zM371 126c9 -1 13 -7 13 -19c0 -9 -10 -14 -18 -12l-57 18v0v0c-3 2 -6 5 -5 9s4 7 8 6zM75 113v0v0v0zM75 113v0l-58 -18c-8 -2 -17 3 -17 12c0 12 3 18 12 19l60 2c4 1 7 -2 8 -6s-2 -7 -5 -9v0zM124 109c5 4 11 4 16 -1c4 -4 5 -10 2 -15l-49 -66c-1 -1 -2 -3 -3 -4 -c-10 -10 -25 -10 -35 0s-10 25 0 35c2 2 3 3 5 4zM288 320c0 -32 -9 -58 -50 -86c-37 -26 -94 -46 -110 -106c0 0 -58 24 -48 96s124 106 112 192c24 0 96 -35 96 -96zM288 192c-16 -50 -44 -64 -80 -64c-15 0 -32 9 -43 26c12 15 28 26 47 37c9 5 20 10 29 16 -c21 14 38 31 47 49c5 -15 5 -48 0 -64zM88 288c-6 4 -9 14 -8 27c2 22 34 39 32 69c14 2 31 -3 42 -24c-5 -11 -15 -21 -28 -34s-26 -22 -38 -38z" /> - <glyph glyph-name="ion-bookmark" unicode="" horiz-adv-x="192" -d="M184 384c4 0 8 -4 8 -8v-56h-192v56c0 4 4 8 8 8h176zM0 0v304h192v-304l-96 96z" /> - <glyph glyph-name="ion-bowtie" unicode="" -d="M192 236c0 0 8 5 20 7c21 4 39 5 47 -9c10 -17 19 -53 17 -85c-1 -17 -5 -22 -5 -22s-15 -10 -47 -7c-35 3 -40 15 -40 15s5 12 8 43s0 58 0 58zM152 163c-17 -4 -38 -10 -38 -10s45 4 64 9c-4 -21 -10 -34 -10 -34s-83 -80 -116 -80c-28 0 -52 68 -52 144s26 144 52 144 -c35 0 106 -57 128 -97c0 0 3 -16 2 -32c-10 5 -24 10 -44 14c-28 6 -42 3 -42 3s18 -4 57 -17c15 -5 22 -8 29 -10c0 -3 -1 -7 -1 -10c0 -5 0 -10 -1 -15c-5 -2 -15 -6 -28 -9zM396 336c26 0 52 -68 52 -144s-24 -144 -52 -144c-37 0 -104 68 -112 79c0 0 4 5 5 22v9 -c16 -7 70 -13 70 -13s-21 6 -40 11c-13 4 -25 8 -30 10c-1 11 -2 23 -4 33c17 11 69 34 69 34s-15 -2 -35 -9c-14 -5 -29 -11 -37 -14c-3 10 -7 18 -10 24c0 1 -1 4 -1 4v1c22 40 89 97 125 97z" /> - <glyph glyph-name="ion-briefcase" unicode="" -d="M240 176v8h208v-176c0 -4 -4 -8 -8 -8h-432c-4 0 -8 4 -8 8v176h208v-8h32zM440 304c4 0 8 -4 8 -8v-96h-208v8h-32v-8h-208v96c0 4 4 8 8 8h120v31c1 28 22 49 51 49h90c30 0 50 -21 51 -49v-31h120zM288 332v1c0 10 -9 19 -19 19h-90c-10 0 -19 -9 -19 -19v-1v-1v-27 -h128v27v1z" /> - <glyph glyph-name="ion-bug" unicode="" -d="M343 321c-6 -16 -16 -31 -28 -43c-24 -24 -57 -37 -91 -37s-67 13 -91 37c-12 12 -22 27 -28 43c29 39 72 63 119 63s90 -24 119 -63zM95 305c22 -45 68 -77 121 -80v-225c-40 2 -77 22 -104 54c-7 -6 -10 -9 -13 -15c8 -9 7 -22 -1 -31c-9 -10 -24 -11 -34 -2 -s-11 24 -2 34l3 3s2 1 2 1c4 13 13 25 27 36c-15 26 -26 57 -29 90c-7 0 -12 -2 -17 -3c-1 -13 -11 -23 -24 -23s-24 11 -24 24s11 24 24 24h3c4 2 8 5 12 6c7 2 14 4 25 4c1 23 6 45 13 65c-6 4 -11 7 -15 11c-6 5 -11 13 -14 19c-1 0 -3 1 -4 2c-12 6 -15 21 -9 33 -s21 15 33 9c11 -6 15 -20 10 -31c2 -3 3 -7 4 -8c2 -2 5 -3 8 -5c2 3 3 5 5 8zM424 192c13 0 24 -11 24 -24s-11 -24 -24 -24s-23 10 -24 23c-5 1 -10 3 -17 3c-3 -33 -14 -64 -29 -90c14 -11 23 -23 27 -36c0 0 1 0 2 -1l3 -3c9 -10 8 -25 -2 -34s-25 -8 -34 2 -c-8 9 -9 22 -1 31c-3 6 -6 9 -13 15c-27 -32 -64 -52 -104 -54v225c53 3 99 35 121 80c2 -3 3 -5 5 -8c3 2 6 3 8 5c1 1 2 5 4 8c-5 11 -1 25 10 31c12 6 27 3 33 -9s3 -27 -9 -33c-1 -1 -3 -2 -4 -2c-3 -6 -8 -14 -14 -19c-4 -4 -9 -7 -15 -11c7 -20 12 -42 13 -65 -c11 0 18 -2 25 -4c4 -1 8 -4 12 -6h3z" /> - <glyph glyph-name="ion-calculator" unicode="" horiz-adv-x="320" -d="M304 416c9 0 16 -7 16 -16v-416c0 -9 -7 -16 -16 -16h-288c-9 0 -16 7 -16 16v416c0 9 7 16 16 16h288zM48 240v-32h32v32h-32zM48 176v-32h32v32h-32zM48 112v-32h32v32h-32zM144 16v32h-96v-32h96zM144 80v32h-32v-32h32zM144 144v32h-32v-32h32zM144 208v32h-32v-32 -h32zM208 16v32h-32v-32h32zM208 80v32h-32v-32h32zM208 144v32h-32v-32h32zM208 208v32h-32v-32h32zM272 16v96h-32v-96h32zM272 144v32h-32v-32h32zM272 208v32h-32v-32h32zM272 288v80h-224v-80h224z" /> - <glyph glyph-name="ion-calendar" unicode="" -d="M112 320c-18 0 -32 14 -32 32v32c0 18 14 32 32 32s32 -14 32 -32v-32c0 -18 -14 -32 -32 -32zM336 320c-18 0 -32 14 -32 32v32c0 18 14 32 32 32s32 -14 32 -32v-32c0 -18 -14 -32 -32 -32zM440 384c4 0 8 -4 8 -8v-400c0 -4 -4 -8 -8 -8h-432c-4 0 -8 4 -8 8v400 -c0 4 4 8 8 8h56v-41c0 -22 24 -39 48 -39s48 17 48 39v41h128v-41c0 -22 25 -39 49 -39s47 17 47 39v41h56zM400 16v256h-352v-256h352z" /> - <glyph glyph-name="ion-camera" unicode="" horiz-adv-x="416" -d="M382 301c18 0 34 -14 34 -33v-202c0 -19 -16 -34 -34 -34h-348c-19 0 -34 15 -34 34v202c0 19 15 33 34 33h69l39 40v0c6 7 15 11 25 11h84c9 0 17 -4 23 -10v0v0v0l41 -41h67zM208 82c51 0 92 42 92 93s-41 93 -92 93s-92 -42 -92 -93s41 -93 92 -93zM376 248 -c8 0 14 6 14 14s-6 14 -14 14s-14 -6 -14 -14s6 -14 14 -14zM208 245c38 0 70 -31 70 -70s-32 -70 -70 -70c-39 0 -70 31 -70 70s31 70 70 70z" /> - <glyph glyph-name="ion-card" unicode="" -d="M420 352c16 0 28 -12 28 -28v0v-264v0c0 -16 -12 -28 -28 -28h-392c-16 0 -28 12 -28 28v0v0v264v0v0c0 16 12 28 28 28h392zM45 320c-7 0 -12 -5 -13 -12v-20h384v20c-1 7 -6 12 -13 12h-358zM403 64c7 0 12 5 13 12v116h-384v-116c1 -7 6 -12 13 -12h358zM64 128v16 -h192v-16h-192zM64 96v16h96v-16h-96zM320 96v48h64v-48h-64z" /> - <glyph glyph-name="ion-cash" unicode="" horiz-adv-x="512" -d="M0 352h512v-256h-512v256zM193 128c-20 23 -33 58 -33 96s13 73 33 96h-97c0 -35 -29 -64 -64 -64v-80c27 0 48 -21 48 -48h113zM298 187c3 4 4 9 4 15c0 3 0 5 -1 8s-2 6 -4 8s-4 4 -7 6s-6 4 -10 5c-1 0 -4 1 -7 2s-5 0 -8 1v31c2 -1 5 -2 7 -3c4 -3 6 -7 7 -13h20 -c0 5 -2 9 -4 13s-5 8 -9 11s-9 5 -14 6c-2 1 -5 2 -7 2v9h-18v-9c-2 0 -4 -1 -6 -2c-5 -1 -10 -2 -14 -5s-7 -6 -9 -10s-4 -9 -4 -14c0 -3 0 -5 1 -8s2 -5 4 -7s5 -5 8 -7s7 -4 12 -5c3 -1 6 0 8 -1v-35c-3 1 -6 2 -9 4s-5 4 -6 7s-2 6 -2 9h-20c0 -5 2 -11 4 -16 -c3 -5 6 -8 10 -11s9 -6 15 -7c3 -1 5 -2 8 -2v-9h18v9c3 0 6 1 9 2c5 1 10 2 14 5s7 7 10 11zM480 176v80c-35 0 -64 29 -64 64h-97c20 -23 33 -58 33 -96s-13 -73 -33 -96h113c0 27 22 48 48 48zM64 224c0 21 11 32 32 32s32 -11 32 -32s-11 -32 -32 -32s-32 11 -32 32z -M384 224c0 21 11 32 32 32s32 -11 32 -32s-11 -32 -32 -32s-32 11 -32 32zM273 213c2 -1 4 -2 6 -4s3 -5 3 -9c0 -2 0 -4 -1 -6s-2 -4 -4 -5s-5 -3 -8 -4c-1 0 -2 -1 -4 -1v31c3 -1 6 -1 8 -2zM236 257c1 2 3 3 5 4s4 2 6 2v-26c-4 1 -7 3 -9 5s-4 4 -4 8c0 3 1 5 2 7zM0 32 -v32h512v-32h-512z" /> - <glyph glyph-name="ion-chatbox-working" unicode="" horiz-adv-x="416" -d="M76 48c-42 0 -76 31 -76 71v209c0 40 34 72 76 72h264c42 0 76 -32 76 -72v-209c0 -40 -34 -71 -76 -71h-4v-64s-79 54 -86 59s-7 5 -21 5h-153zM304 256c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM208 256c-18 0 -32 -14 -32 -32s14 -32 32 -32 -s32 14 32 32s-14 32 -32 32zM112 256c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32z" /> - <glyph glyph-name="ion-chatbox" unicode="" horiz-adv-x="416" -d="M76 48c-42 0 -76 31 -76 71v209c0 40 34 72 76 72h264c42 0 76 -32 76 -72v-209c0 -40 -34 -71 -76 -71h-4v-64s-79 54 -86 59s-7 5 -21 5h-153z" /> - <glyph glyph-name="ion-chatboxes" unicode="" horiz-adv-x="416" -d="M246 82l26 -18c-4 -21 -29 -32 -52 -32h-90c-8 0 -11 -2 -13 -3l-53 -45v48h-16c-26 0 -48 16 -48 41v129c0 25 20 45 46 45h2v-101c0 -33 29 -59 64 -59h117c10 0 14 -3 17 -5zM353 400c35 0 63 -27 63 -60v-168c0 -33 -28 -60 -63 -60h-17v-64l-75 60c-2 2 -7 4 -17 4 -h-101c-35 0 -63 27 -63 60v98v70c0 33 21 60 56 60h217z" /> - <glyph glyph-name="ion-chatbubble-working" unicode="" horiz-adv-x="416" -d="M208 -1c-115 0 -208 89 -208 200s93 201 208 201s208 -90 208 -201c0 -40 -12 -77 -33 -108c-1 -1 -2 -3 -3 -4v0c-2 -4 -4 -10 -4 -15l22 -88l-84 31c-4 2 -8 2 -12 2s-7 -1 -11 -2v0c-1 0 -1 -1 -2 -1c-25 -10 -52 -15 -81 -15zM304 224c-18 0 -32 -14 -32 -32 -s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM208 224c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM112 224c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32z" /> - <glyph glyph-name="ion-chatbubble" unicode="" horiz-adv-x="416" -d="M208 -1c-115 0 -208 89 -208 200s93 201 208 201s208 -90 208 -201c0 -40 -12 -77 -33 -108c-1 -1 -2 -3 -3 -4v0c-2 -4 -4 -10 -4 -15l22 -88l-84 31c-4 2 -8 2 -12 2s-7 -1 -11 -2v0c-1 0 -1 -1 -2 -1c-25 -10 -52 -15 -81 -15z" /> - <glyph glyph-name="ion-chatbubbles" unicode="" horiz-adv-x="416" -d="M25 57c-1 1 0 2 -1 3c-15 22 -24 49 -24 77c0 42 19 80 49 106c-2 -11 -4 -22 -4 -34c0 -92 78 -168 174 -168c15 0 30 2 44 6c-27 -32 -69 -53 -115 -53c-20 0 -40 5 -58 12h-1v0c-2 1 -5 2 -8 2s-6 -1 -9 -2l-56 -22l12 63c0 4 -1 7 -3 10v0zM242 400 -c96 0 174 -76 174 -168c0 -33 -11 -64 -28 -90c-1 -1 -1 -2 -2 -3v0c-2 -4 -3 -8 -3 -12l17 -74l-69 26c-3 1 -6 2 -10 2c-3 0 -6 -1 -9 -2v0l-2 -1c-8 -3 -16 -5 -24 -7c-14 -4 -29 -6 -44 -6c-96 0 -173 75 -173 167c0 12 1 24 3 35c16 76 86 133 170 133z" /> - <glyph glyph-name="ion-checkmark-circled" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM339 267c1 1 1 2 1 3s0 3 -1 4l-31 24c-1 1 -3 1 -4 1s-2 0 -3 -1l-111 -143s-44 42 -45 43s-4 3 -6 3s-3 -2 -4 -3l-25 -25l-1 -1c-1 -1 -1 -3 -1 -4s0 -2 1 -3l2 -1 -s78 -75 79 -76s3 -3 5 -3s4 2 5 3z" /> - <glyph glyph-name="ion-checkmark-round" unicode="" horiz-adv-x="416" -d="M400 376c17 -13 22 -39 9 -57l-207 -302c-13 -18 -37 -22 -54 -9s-137 147 -137 147c-15 16 -15 42 1 58s40 15 55 -2l99 -107l180 263c13 18 37 22 54 9z" /> - <glyph glyph-name="ion-checkmark" unicode="" horiz-adv-x="416" -d="M414 338c1 -2 2 -4 2 -6s-1 -4 -2 -6l-249 -320c-2 -2 -5 -6 -9 -6s-8 3 -10 5s-141 136 -141 136l-3 3c-1 2 -2 4 -2 6s1 3 2 5l2 2c14 15 42 44 44 46s4 6 8 6s8 -4 10 -6s80 -78 80 -78l200 257c2 2 4 2 6 2s5 -1 7 -2z" /> - <glyph glyph-name="ion-chevron-down" unicode="" -d="M224 150v0v0l174 167c4 4 12 4 16 0l31 -30c4 -4 4 -12 0 -16l-213 -204c-2 -2 -5 -3 -8 -3s-6 1 -8 3l-213 204c-4 4 -4 12 0 16l31 30c4 4 12 4 16 0z" /> - <glyph glyph-name="ion-chevron-left" unicode="" horiz-adv-x="256" -d="M86 192l167 -174c4 -4 4 -12 0 -16l-30 -31c-4 -4 -12 -4 -16 0l-204 213c-2 2 -3 5 -3 8s1 6 3 8l204 213c4 4 12 3 16 -1l30 -30c4 -4 4 -12 0 -16l-167 -174v0v0z" /> - <glyph glyph-name="ion-chevron-right" unicode="" horiz-adv-x="256" -d="M170 192v0v0l-167 174c-4 4 -4 12 0 16l30 30c4 4 12 5 16 1l204 -213c2 -2 3 -5 3 -8s-1 -6 -3 -8l-204 -213c-4 -4 -12 -4 -16 0l-30 31c-4 4 -4 12 0 16z" /> - <glyph glyph-name="ion-chevron-up" unicode="" -d="M224 234l-174 -167c-4 -4 -12 -4 -16 0l-31 30c-4 4 -4 12 0 16l213 204c2 2 5 3 8 3s6 -1 8 -3l213 -204c4 -4 4 -12 0 -16l-31 -30c-4 -4 -12 -4 -16 0l-174 167v0v0z" /> - <glyph glyph-name="ion-clipboard" unicode="" horiz-adv-x="352" -d="M80 288c2 20 10 35 28 40l1 1c12 3 21 7 21 20v21c0 26 21 46 46 46s46 -20 46 -46v-21c0 -13 9 -18 21 -21h2c18 -5 25 -20 27 -40h-192zM176 384c-8 0 -13 -6 -13 -14s5 -14 13 -14s14 6 14 14s-6 14 -14 14zM325 384c15 0 27 -12 27 -28v-360c0 -16 -12 -28 -27 -28 -h-149h-148c-15 0 -28 12 -28 28v360c0 16 13 28 28 28h73v-13c0 -11 -9 -19 -19 -19h-37c-7 0 -12 -6 -12 -13v-327c0 -6 5 -12 11 -12h265c6 0 11 6 11 12v327c0 7 -5 13 -12 13h-37c-10 0 -20 8 -20 19v13h74zM64 224v32h112v-32h-112zM64 32v32h160v-32h-160zM64 96v32 -h129v-32h-129zM64 160v32h208v-32h-208z" /> - <glyph glyph-name="ion-clock" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c10 10 19 21 26 33l-27 16l8 14l27 -16c13 25 21 52 22 81h-32v16h32c-1 29 -9 56 -22 81l-27 -16l-8 14l27 16c-7 12 -16 23 -26 33s-21 19 -33 26l-16 -27l-14 8 -l16 27c-25 13 -52 21 -81 22v-32h-16v32c-29 -1 -56 -9 -81 -22l16 -27l-14 -8l-16 27c-12 -7 -23 -16 -33 -26s-19 -21 -26 -33l27 -16l-8 -14l-27 16c-13 -25 -21 -52 -22 -81h32v-16h-32c1 -29 9 -56 22 -81l27 16l8 -14l-27 -16c7 -12 16 -23 26 -33s21 -19 33 -26 -l16 27l14 -8l-16 -27c25 -13 52 -21 81 -22v32h16v-32c29 1 56 9 81 22l-16 27l14 8l16 -27c12 7 23 16 33 26zM368 207v-32h-117c-6 -9 -16 -15 -27 -15c-18 0 -32 14 -32 32c0 12 6 22 16 28v68h32v-68c5 -3 9 -8 12 -13h116z" /> - <glyph glyph-name="ion-close-circled" unicode="" -d="M224 415c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM332 116l-75 75l76 75c3 3 3 9 0 12l-22 21c-2 2 -4 3 -6 3s-3 -1 -5 -3l-76 -74l-76 74c-2 2 -3 3 -5 3s-4 -1 -6 -3l-21 -21c-3 -3 -3 -9 0 -12l76 -75l-76 -76 -c-2 -1 -2 -3 -2 -5s0 -4 2 -6l21 -22c2 -2 4 -2 6 -2s4 0 6 2l75 76l76 -75c2 -2 3 -3 5 -3s4 1 6 3l21 21c2 1 3 4 3 6s-1 4 -3 6z" /> - <glyph glyph-name="ion-close-round" unicode="" horiz-adv-x="384" -d="M374 61c14 -14 14 -37 0 -51s-37 -14 -51 0l-131 131l-131 -131c-14 -14 -36 -14 -50 0s-14 37 0 51l130 131l-130 131c-14 14 -14 37 0 51s36 14 50 0l131 -131l131 131c14 14 37 14 51 0s14 -37 0 -51l-131 -131z" /> - <glyph glyph-name="ion-close" unicode="" horiz-adv-x="384" -d="M380 61c3 -3 4 -6 4 -10s-1 -7 -4 -10l-38 -37c-3 -3 -5 -4 -9 -4s-7 1 -10 4l-131 131l-131 -131c-3 -3 -5 -4 -9 -4s-7 1 -10 4l-38 37c-3 3 -4 6 -4 10s1 7 4 10l132 131l-132 130c-5 5 -5 15 0 20l37 38c3 2 6 4 10 4s7 -1 10 -4l131 -130l131 130c3 2 6 4 10 4 -s7 -1 10 -4l37 -38c5 -5 5 -14 0 -19l-132 -130z" /> - <glyph glyph-name="ion-closed-captioning" unicode="" horiz-adv-x="512" -d="M0 384h512v-384h-512v384zM464 192c0 27 0 44 -4 80s-23 56 -59 60s-91 4 -138 4h-7h-7c-47 0 -102 0 -138 -4s-55 -24 -59 -60s-4 -53 -4 -80s2 -47 4 -80s19 -56 59 -60s96 -4 145 -4s105 0 145 4s57 27 59 60s4 53 4 80zM372 164v4h53c0 -27 -7 -48 -19 -62 -s-32 -21 -61 -21c-14 0 -26 2 -36 5s-18 9 -25 17s-12 19 -15 33s-5 30 -5 51s3 39 7 53s9 25 17 33s17 14 27 17s22 5 34 5c25 0 44 -7 57 -21s19 -37 19 -62h-52v1c0 20 -12 33 -27 33s-25 -11 -28 -30c0 0 -2 -11 -2 -29s2 -28 2 -28c1 -17 12 -29 27 -29s27 10 27 29v1z -M195 164v4h53c0 -27 -7 -48 -19 -62s-32 -21 -61 -21c-14 0 -26 2 -36 5s-18 9 -25 17s-12 19 -15 33s-5 30 -5 51s3 39 7 53s9 25 17 33s17 14 27 17s22 5 34 5c25 0 44 -7 57 -21s19 -37 19 -62h-52v1c0 20 -12 33 -27 33s-25 -11 -28 -30c0 0 -2 -11 -2 -29s2 -28 2 -28 -c1 -17 12 -29 27 -29s27 10 27 29v1z" /> - <glyph glyph-name="ion-cloud" unicode="" -d="M366 215c45 0 82 -38 82 -84s-37 -83 -82 -83v0h-276c-49 0 -90 41 -90 91c0 40 26 74 61 86c5 29 29 51 59 51c10 0 18 -3 26 -7c19 40 59 67 105 67c64 0 115 -53 115 -118v-3z" /> - <glyph glyph-name="ion-code-download" unicode="" -d="M299 164l-63 -63v0l-1 -1v0l-2 -1v0l-1 -1v0l-2 -1v0h-1v0h-1c-1 0 -3 -1 -4 -1s-3 1 -4 1h-1v0h-1v0l-2 1v0l-1 1v0c-1 1 -2 1 -3 2v0l-63 63c-6 6 -6 17 0 23s18 6 24 0l35 -34v118c0 9 7 17 16 17s16 -8 16 -17v-118l35 34c6 6 18 6 24 0s6 -17 0 -23zM136 56 -c-6 0 -12 2 -17 7l-112 112c-9 9 -9 25 0 34l112 112c9 9 25 9 34 0s9 -25 0 -34l-95 -95l95 -95c9 -9 9 -25 0 -34c-5 -5 -11 -7 -17 -7zM312 56c-6 0 -12 2 -17 7c-9 9 -9 25 0 34l95 95l-95 95c-9 9 -9 25 0 34s25 9 34 0l112 -112c9 -9 9 -25 0 -34l-112 -112 -c-5 -5 -11 -7 -17 -7z" /> - <glyph glyph-name="ion-code-working" unicode="" -d="M128 192c0 16 8 24 24 24s24 -8 24 -24s-8 -24 -24 -24s-24 8 -24 24zM200 192c0 16 8 24 24 24s24 -8 24 -24s-8 -24 -24 -24s-24 8 -24 24zM272 192c0 16 8 24 24 24s24 -8 24 -24s-8 -24 -24 -24s-24 8 -24 24zM136 56c-7 0 -12 2 -17 7l-112 112c-5 5 -7 10 -7 17 -s2 12 7 17l112 112c5 5 10 7 17 7s12 -2 17 -7s7 -10 7 -17s-2 -12 -7 -17l-95 -95l95 -95c5 -5 7 -10 7 -17s-2 -12 -7 -17s-10 -7 -17 -7zM312 56c-7 0 -12 2 -17 7s-7 10 -7 17s2 12 7 17l95 95l-95 95c-5 5 -7 10 -7 17s2 12 7 17s10 7 17 7s12 -2 17 -7l112 -112 -c5 -5 7 -10 7 -17s-2 -12 -7 -17l-112 -112c-5 -5 -10 -7 -17 -7z" /> - <glyph glyph-name="ion-code" unicode="" -d="M136 56c-6 0 -12 2 -17 7l-112 112c-9 9 -9 25 0 34l112 112c9 9 25 9 34 0s9 -25 0 -34l-95 -95l95 -95c9 -9 9 -25 0 -34c-5 -5 -11 -7 -17 -7zM312 56c-6 0 -12 2 -17 7c-9 9 -9 25 0 34l95 95l-95 95c-9 9 -9 25 0 34s25 9 34 0l112 -112c9 -9 9 -25 0 -34l-112 -112 -c-5 -5 -11 -7 -17 -7z" /> - <glyph glyph-name="ion-coffee" unicode="" horiz-adv-x="384" -d="M319 191c37 -7 65 -40 65 -79c0 -20 -8 -39 -21 -54c-15 -17 -37 -26 -61 -26c-8 0 -17 1 -25 3c-6 1 -10 3 -15 5c-11 -15 -23 -25 -32 -33v0c-5 -5 -12 -7 -19 -7h-102c-7 0 -14 2 -19 7v0c-17 15 -41 36 -62 86s-28 91 -28 111s3 20 16 20h101c-5 17 -37 19 -37 46 -c0 17 15 32 28 37c-2 -8 -3 -14 -3 -21c0 -19 39 -30 39 -53c0 -3 0 -6 -1 -9h56c1 5 2 10 2 14c0 36 -56 36 -56 84c0 28 21 55 47 62c-4 -14 -9 -23 -9 -35c0 -32 57 -50 57 -88c0 -13 -5 -25 -12 -37h76c13 0 16 0 16 -20c0 -4 0 -8 -1 -13zM302 64c33 0 50 25 50 48 -s-17 43 -39 47c-4 -19 -11 -42 -21 -66c-4 -9 -8 -17 -12 -25c6 -3 13 -4 22 -4z" /> - <glyph glyph-name="ion-compass" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224c0 39 10 76 27 108c-16 12 -27 30 -27 52c0 35 29 64 64 64c22 0 40 -11 52 -27c32 17 69 27 108 27zM32 352c0 -10 5 -20 13 -26c13 17 28 32 45 45c-6 8 -16 13 -26 13c-18 0 -32 -14 -32 -32z -M360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136s85 -56 136 -56s100 20 136 56zM320 320c0 0 -54 -130 -72 -152s-120 -104 -120 -104s54 132 72 152s120 104 120 104z" /> - <glyph glyph-name="ion-compose" unicode="" horiz-adv-x="384" -d="M379 348c7 -7 7 -18 0 -25l-32 -31l-55 55l31 32c7 7 18 7 25 0zM282 338l55 -55l-177 -173l-64 -14l14 64zM320 192l32 32v-201c0 -13 -10 -23 -23 -23h-306c-13 0 -23 10 -23 23v306c0 13 10 23 23 23h201l-32 -32h-149c-6 0 -11 -5 -11 -10v-268s4 -10 10 -10h269 -s9 5 9 10v150z" /> - <glyph glyph-name="ion-connection-bars" unicode="" horiz-adv-x="352" -d="M0 32v64h64v-64h-64zM96 32v128h64v-128h-64zM192 32v224h64v-224h-64zM288 32v320h64v-320h-64z" /> - <glyph glyph-name="ion-contrast" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56v-384c51 0 100 20 136 56z" /> - <glyph glyph-name="ion-crop" unicode="" -d="M320 -32v48h64v-48h-64zM384 96h64v-64h-384v256h-64v64h64v64h64v-320h192v192h-176v64h240v-256z" /> - <glyph glyph-name="ion-cube" unicode="" -d="M435 280c7 0 13 -6 13 -12v-183c0 -9 -6 -17 -14 -22v-1l-175 -92v-1c-2 -1 -4 -1 -6 -1c-7 0 -13 6 -13 12v185c0 9 5 17 13 22v0l3 2l172 89l2 1c2 1 3 1 5 1zM422 329c0 0 8 -3 8 -9c0 -7 -8 -11 -8 -11l-183 -97l-2 -1c-4 -2 -8 -3 -13 -3s-9 1 -13 3l-2 1l-183 96 -s-8 5 -8 12c0 6 8 9 8 9l181 82s11 5 17 5s17 -5 17 -5zM195 187c8 -5 13 -13 13 -22v-185c0 -6 -6 -12 -13 -12c-2 0 -4 1 -6 2v0l-175 92v1c-8 5 -14 13 -14 22v183c0 6 6 12 13 12c2 0 4 0 5 -1l2 -1l171 -89z" /> - <glyph glyph-name="ion-disc" unicode="" -d="M224 289c54 0 97 -43 97 -97s-43 -97 -97 -97s-97 43 -97 97s43 97 97 97zM224 148c24 0 44 20 44 44s-20 44 -44 44s-44 -20 -44 -44s20 -44 44 -44zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM224 69 -c68 0 123 55 123 123s-55 123 -123 123s-123 -55 -123 -123s55 -123 123 -123z" /> - <glyph glyph-name="ion-document-text" unicode="" horiz-adv-x="288" -d="M286 279c1 -3 2 -6 2 -10v-245c0 -13 -10 -24 -22 -24h-243c-12 0 -23 11 -23 24v336c0 13 11 24 23 24h160c3 0 6 0 9 -2c2 -1 5 -3 7 -5l84 -92c2 -2 2 -4 3 -6zM48 269v-10c0 -1 1 -3 3 -3h71c2 0 3 2 3 3v10c0 2 -1 3 -3 3h-71c-2 0 -3 -1 -3 -3zM48 141v-10 -c0 -1 1 -3 3 -3h123c2 0 2 2 2 3v10c0 2 0 3 -2 3h-123c-2 0 -3 -1 -3 -3zM208 67v10c0 2 0 3 -2 3h-155c-2 0 -3 -1 -3 -3v-10c0 -1 1 -3 3 -3h155c2 0 2 2 2 3zM240 195v10c0 2 0 3 -2 3h-187c-2 0 -3 -1 -3 -3v-10c0 -1 1 -3 3 -3h187c2 0 2 2 2 3zM193 270h60l-71 78 -v-66c0 -6 5 -12 11 -12z" /> - <glyph glyph-name="ion-document" unicode="" horiz-adv-x="288" -d="M287 279c1 -3 1 -5 1 -9v-244c0 -13 -9 -26 -21 -26h-243c-12 0 -24 13 -24 26v335c0 13 12 23 24 23h160c3 0 6 0 9 -2c2 -1 5 -2 7 -4l83 -92c2 -2 3 -4 4 -7zM193 337v-63h58zM32 32h224v210h-67c-15 0 -28 13 -28 28v82h-129v-320z" /> - <glyph glyph-name="ion-drag" unicode="" horiz-adv-x="512" -d="M0 272v32h512v-32h-512zM0 176v32h512v-32h-512zM0 80v32h512v-32h-512z" /> - <glyph glyph-name="ion-earth" unicode="" -d="M325 322c2 -4 7 -12 3 -15c-3 -2 -10 -2 -13 5s0 11 -5 9s-7 3 -6 4c1 2 3 3 5 4c0 2 -4 8 2 7c4 -1 12 -10 14 -14zM344 277v0v0zM403 251c0 0 -2 0 0 0v0zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM141 19l8 -4 -c3 -1 6 -2 10 -3c14 -5 28 -8 43 -10c28 -3 56 -1 83 8c15 5 30 11 43 20c6 4 6 16 10 24c8 16 -2 33 12 47c12 14 4 19 4 34c0 10 8 18 4 29c-1 4 -7 -3 -9 1c-5 7 -21 1 -28 2c-13 2 -24 14 -33 23c-5 5 0 20 1 26c4 15 0 33 19 38c5 1 5 9 10 11c5 1 10 3 15 4 -c9 1 17 -2 26 -2c10 0 14 -5 22 -11c7 -6 13 -3 22 -5c7 0 0 5 -2 8c-3 2 -6 2 -8 2c-16 4 -23 22 -36 30c-6 3 -9 2 -11 0c-1 -1 1 -12 1 -12c-1 -3 -10 -4 -13 -5c-9 -2 -29 17 -15 22c4 1 27 5 24 15c-3 6 2 13 -5 14c-8 1 -7 7 -15 8c-5 1 -5 11 -5 14c0 9 2 6 9 7 -c-17 11 -37 19 -57 24c-1 -3 -5 -12 -8 -12c-5 -1 -6 0 -9 -3c-9 -10 -16 -28 -25 -7c-4 11 5 19 2 28h-6h-3c6 -12 -5 -18 -8 -19c-8 0 -10 5 -17 4c-4 -1 -7 4 -11 2s-13 -8 -14 -12c-3 -12 6 -13 14 -6c6 6 17 12 25 6c6 -5 5 -9 5 -14s-1 -18 -9 -16c-4 1 -7 6 -11 3 -c-8 -7 -18 -6 -29 -9c-10 -2 -16 -6 -25 -9c-8 -3 -11 -4 -12 -12c0 -2 0 -14 -3 -15c-5 -2 -8 22 -22 20c-12 -1 -30 -13 -25 -28c2 -5 28 -3 10 -14c-2 -1 2 -17 2 -20c1 -8 13 -18 21 -10c6 6 6 5 14 2c15 -8 33 -15 45 -27c6 -6 9 -24 17 -28c9 -5 19 -5 26 -14 -c6 -7 -2 -19 -8 -23c-4 -2 -12 -24 -16 -29c-2 -4 -12 -6 -16 -7c-3 0 -7 -9 -9 -11c-7 -7 -8 -13 -17 -19c-18 -12 -22 -23 -18 -44c2 -8 5 -13 11 -16zM100 46l2 -2c7 -6 15 -11 23 -16c-21 21 -23 49 -21 78l3 24c1 3 -4 7 -4 11c0 10 0 5 -8 13c-4 4 -10 11 -12 17 -c-7 16 1 30 10 43c9 14 -7 20 -10 32c-1 6 -7 6 -6 12c1 7 -4 5 -9 9c-12 8 -1 20 -7 26c-43 -70 -36 -162 16 -224c1 -1 0 -1 1 -2h1c3 -4 6 -8 9 -11s7 -6 10 -9z" /> - <glyph glyph-name="ion-easel" unicode="" -d="M48 112v192h352v-192h-352zM432 352c9 0 16 -7 16 -16v-256c0 -9 -7 -16 -16 -16h-416c-9 0 -16 7 -16 16v256c0 9 7 16 16 16h416zM416 96v224h-384v-224h384zM48 -32l29 80h31l-28 -80h-32zM239 416l17 -48h-64l17 48h30zM340 48h31l29 -80h-32zM208 0v48h32v-48h-32z -" /> - <glyph glyph-name="ion-edit" unicode="" -d="M381 259l-250 -251l-91 91l251 250zM440 360c12 -12 11 -32 -2 -45l-45 -45l-91 91l45 45c13 13 33 14 45 2zM32 85l85 -85l-117 -32z" /> - <glyph glyph-name="ion-egg" unicode="" horiz-adv-x="320" -d="M160 416c64 0 160 -133 160 -257s-64 -191 -160 -191s-160 67 -160 191s96 257 160 257z" /> - <glyph glyph-name="ion-eject" unicode="" horiz-adv-x="320" -d="M303 128h-286v0c-10 0 -17 7 -17 16c0 3 1 5 3 8l138 191c5 5 11 9 19 9s14 -4 19 -9l138 -190c2 -3 3 -6 3 -9c0 -9 -7 -16 -17 -16v0zM308 96c7 0 12 -5 12 -12v-40c0 -7 -5 -12 -12 -12h-296c-7 0 -12 5 -12 12v40c0 7 5 12 12 12h296z" /> - <glyph glyph-name="ion-email-unread" unicode="" horiz-adv-x="480" -d="M352 288c0 43 21 64 64 64s64 -21 64 -64s-21 -64 -64 -64s-64 21 -64 64zM209 288h127c0 -17 5 -33 15 -47c-6 -3 -14 -8 -22 -12s-16 -8 -23 -12s-14 -8 -22 -12s-15 -8 -21 -11s-11 -6 -16 -9s-9 -5 -12 -7s-4 -3 -5 -3c-6 -3 -13 -4 -21 -4s-15 1 -21 4 -c-1 1 -15 8 -42 23s-54 29 -81 44s-43 23 -46 25c-7 4 -12 8 -13 11c-1 4 -1 6 1 8s6 2 11 2h191zM277 175c18 11 45 30 83 56c16 -15 34 -23 56 -23v-155c0 -2 -1 -4 -2 -7s-3 -5 -5 -7s-4 -4 -7 -5s-6 -2 -8 -2h-185h-185c-5 0 -11 2 -16 7s-8 9 -8 14v205c0 6 3 8 9 5 -c2 -1 11 -7 26 -17s32 -22 53 -36s39 -26 53 -35l-83 -93c-2 -2 -2 -4 -1 -5c2 -1 4 -1 6 1l98 83c16 -10 25 -16 27 -17c6 -3 13 -4 21 -4s15 1 21 4c2 1 11 7 27 17l98 -83c2 -2 5 -2 6 -1s0 3 -2 5z" /> - <glyph glyph-name="ion-email" unicode="" horiz-adv-x="416" -d="M19 299c-4 2 -11 7 -13 11c-3 8 1 10 12 10h191h191c11 0 15 -2 12 -10c-2 -4 -9 -9 -13 -11c-11 -6 -163 -89 -169 -92s-12 -4 -21 -4s-15 1 -21 4s-158 86 -169 92zM408 295c9 4 8 -1 8 -5v-205c0 -9 -12 -21 -22 -21h-185h-185c-10 0 -24 12 -24 21v205s0 9 9 5 -c8 -4 83 -56 132 -88l-83 -93c-2 -2 -2 -4 -1 -5s4 -1 6 1l98 83c15 -10 25 -16 27 -17c8 -4 14 -4 21 -4s13 0 21 4c2 1 12 7 27 17l98 -83c2 -2 5 -2 6 -1s0 3 -2 5l-82 93c49 32 123 84 131 88z" /> - <glyph glyph-name="ion-erlenmeyer-flask-bubbles" unicode="" horiz-adv-x="384" -d="M382 21c2 -4 3 -10 0 -14s-8 -7 -13 -7h-177h-178c-5 0 -9 3 -12 7s-2 10 0 14l118 199v150c0 8 6 14 14 14s15 -6 15 -14v-80c4 3 10 5 16 5c15 0 27 -12 27 -27s-12 -26 -27 -26c-6 0 -12 2 -16 5v-31c0 -2 -1 -4 -2 -6l-35 -59h72c-15 6 -26 20 -26 37 -c0 23 19 42 43 42c15 0 27 -8 35 -19c-1 2 -1 3 -1 5v154c0 8 6 14 14 14s15 -6 15 -14v-150zM218 151h53l-31 54c2 -5 3 -11 3 -17c0 -17 -10 -31 -25 -37zM201 319c-12 0 -22 9 -22 21s10 21 22 21s22 -9 22 -21s-10 -21 -22 -21z" /> - <glyph glyph-name="ion-erlenmeyer-flask" unicode="" horiz-adv-x="384" -d="M375 52c6 -9 9 -20 9 -32c0 -28 -16 -52 -63 -52h-258c-47 0 -63 24 -63 52c0 12 3 23 9 32l49 73l49 77c13 20 21 44 21 70v92s-14 34 -16 43c-2 8 1 9 17 9h126c16 0 18 -1 16 -9c-2 -9 -15 -22 -15 -42v-93c0 -26 6 -50 19 -70zM345 7c3 3 7 8 7 14c0 5 -2 10 -4 14 -l-101 150c-16 26 -23 56 -23 87v112h-64v-112c0 -32 -9 -62 -25 -87l-99 -150c-2 -4 -4 -9 -4 -14c0 -6 3 -11 6 -14c4 -4 12 -7 25 -7h258c13 0 20 3 24 7zM325 37c1 -2 3 -6 3 -8c0 -7 -6 -15 -14 -15h-244c-7 0 -14 6 -14 14c0 3 1 6 3 8l81 124h103l82 -124v1zM238 106 -c2 -1 4 -2 6 -2s3 0 5 2c1 2 3 4 3 6s-1 4 -3 6c-1 2 -3 2 -5 2s-4 0 -6 -2c-1 -2 -2 -4 -2 -6s0 -4 2 -6zM285 47c4 2 4 7 2 11l-23 36c-1 2 -4 4 -7 4c-2 0 -3 0 -4 -1c-4 -2 -4 -7 -2 -11l23 -36c1 -2 5 -4 7 -4c1 0 3 0 4 1z" /> - <glyph glyph-name="ion-eye-disabled" unicode="" -d="M344 290c41 -27 76 -66 104 -100c-51 -54 -124 -135 -224 -135c-36 0 -65 8 -92 22l-77 -77l-23 23l71 71c-36 25 -68 61 -103 98c78 85 142 137 224 137c34 0 64 -9 92 -23l77 78l23 -23zM134 192c0 -19 6 -36 16 -51l27 27c-4 7 -5 15 -5 24c0 29 23 53 52 53h8 -c-5 -6 -8 -13 -8 -21c0 -3 0 -5 1 -8l51 50c-15 11 -33 17 -52 17c-49 0 -90 -41 -90 -91zM224 101c49 0 90 41 90 91c0 19 -6 37 -16 52l-50 -51c3 -1 5 -1 8 -1c8 0 14 3 20 7v-7c0 -29 -23 -53 -52 -53c-9 0 -17 2 -24 6l-28 -27c15 -11 33 -17 52 -17z" /> - <glyph glyph-name="ion-eye" unicode="" -d="M224 320c99 0 172 -70 224 -129c-51 -50 -124 -127 -224 -127s-157 60 -224 128c78 79 142 128 224 128zM224 101c49 0 90 41 90 91s-41 91 -90 91s-90 -41 -90 -91s41 -91 90 -91zM224 224c0 -18 14 -32 32 -32c8 0 14 3 20 7v-7c0 -29 -23 -53 -52 -53s-52 24 -52 53 -s23 53 52 53h8c-5 -6 -8 -13 -8 -21z" /> - <glyph glyph-name="ion-female" unicode="" horiz-adv-x="256" -d="M160 164v-68h64v-64h-64v-64h-64v64h-64v64h64v68c-55 14 -96 64 -96 124c0 71 57 128 128 128s128 -57 128 -128c0 -60 -41 -110 -96 -124zM128 208c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80z" /> - <glyph glyph-name="ion-filing" unicode="" horiz-adv-x="384" -d="M317 319c12 0 19 0 19 -20v-28h-288v28c0 20 8 20 20 20h249zM269 352c13 0 19 -1 19 -19h-192c0 18 7 19 20 19h153zM368 278c13 -8 17 -17 15 -41l-17 -184c-4 -21 -16 -21 -24 -21h-300c-8 0 -20 0 -24 21l-17 185c-3 26 1 31 15 40l15 10v-32h321v32z" /> - <glyph glyph-name="ion-film-marker" unicode="" horiz-adv-x="416" -d="M400 240c9 0 16 -7 16 -15v-210c0 -8 -7 -15 -16 -15h-384c-9 0 -16 7 -16 15v210c0 8 6 14 13 15c-2 2 -3 4 -4 7l-9 45c-2 8 5 16 13 18l370 74c8 2 16 -4 18 -12l9 -46c2 -8 -4 -16 -12 -18l-342 -68h344zM257 46l-20 58l51 36h-62l-20 58l-19 -58h-63l51 -36l-19 -58 -l50 36z" /> - <glyph glyph-name="ion-fireball" unicode="" horiz-adv-x="320" -d="M297 210c14 -24 23 -52 23 -82c0 -33 -10 -63 -26 -88v0v0c-29 -43 -78 -72 -134 -72c-17 0 -32 1 -46 7s-25 13 -33 25c-11 16 -17 28 -21 52c-6 -25 2 -48 9 -60c-43 26 -69 71 -69 125v4c5 78 65 109 90 151c8 14 13 30 10 48c11 -9 15 -25 15 -39 -c0 -16 -3 -29 -3 -29c4 8 7 18 9 31c6 35 2 85 -37 132l-1 1s7 0 18 -3c95 -16 169 -91 184 -186c2 -12 3 -23 3 -35c0 -16 -2 -32 -5 -47c10 23 13 43 14 55v10z" /> - <glyph glyph-name="ion-flag" unicode="" horiz-adv-x="384" -d="M362 266c0 0 12 2 22 6c0 -16 -7 -32 -9 -36c-28 -50 -99 -123 -181 -84c-65 31 -92 30 -117 24c-1 0 -2 -1 -3 -1c-3 -1 -15 -5 -26 -1v197c0 16 14 31 33 35c39 7 106 5 148 -74c39 -74 97 -72 133 -66zM24 416c4 0 8 -4 8 -8v-432c0 -4 -4 -8 -8 -8h-16 -c-4 0 -8 4 -8 8v432c0 4 4 8 8 8h16z" /> - <glyph glyph-name="ion-flame" unicode="" horiz-adv-x="256" -d="M1 128c-11 109 72 224 159 288c-26 -145 97 -142 96 -288c-1 -120 -105 -160 -128 -160s-114 26 -127 160zM88 80c0 -44 40 -80 40 -80s41 36 41 80s-41 80 -41 80s-40 -36 -40 -80z" /> - <glyph glyph-name="ion-flash-off" unicode="" -d="M115 -4c-69 38 -115 112 -115 196c0 124 100 224 224 224c24 0 47 -4 68 -11c2 -1 3 -1 5 -2c12 -4 24 -9 35 -15v0c69 -38 116 -112 116 -196c0 -124 -100 -224 -224 -224c-24 0 -47 4 -68 11c-2 1 -3 1 -5 2c-12 4 -24 8 -35 14zM86 291c-20 -28 -32 -62 -32 -99 -c0 -65 36 -121 90 -150c6 -3 13 -7 19 -9c2 -1 3 -1 5 -2c9 -3 19 -5 29 -7c9 -2 18 -2 27 -2c37 0 71 12 99 32l-52 53l36 40l55 -54c20 28 32 62 32 99c0 66 -37 123 -91 151c-6 3 -12 6 -18 8c-2 1 -3 1 -5 2c-9 3 -19 5 -29 7c-9 2 -18 2 -27 2c-37 0 -72 -12 -100 -32 -l53 -52l-36 -41zM178 58l38 113h-85l139 155l-38 -113h85z" /> - <glyph glyph-name="ion-flash" unicode="" horiz-adv-x="320" -d="M0 160l224 256l-51 -192h147l-224 -256l51 192h-147z" /> - <glyph glyph-name="ion-folder" unicode="" horiz-adv-x="384" -d="M366 256c18 0 19 -7 18 -18l-12 -186c-1 -11 -3 -20 -21 -20h-317c-18 0 -20 9 -21 20l-13 184c-1 11 0 20 18 20h348zM362 305l2 -33h-344c0 6 4 46 6 63c2 18 8 17 25 17h75c28 0 23 0 37 -15c16 -18 19 -17 41 -17h143c11 0 15 -3 15 -15z" /> - <glyph glyph-name="ion-fork-repo" unicode="" horiz-adv-x="320" -d="M320 368v-64h-48v-48h-64v48h-48v64h48v48h64v-48h48zM208 208h64v-5v0c0 -43 -7 -70 -38 -95c-23 -19 -51 -20 -75 -22c-9 -1 -18 -2 -26 -3c-6 -1 -13 -5 -20 -10c9 -11 15 -25 15 -41c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v210c-19 11 -32 31 -32 55 -c0 35 29 64 64 64s64 -29 64 -64c0 -24 -13 -44 -32 -55v-160c8 4 18 7 27 9c11 2 21 2 31 3c17 1 33 3 40 9c10 8 14 11 14 50zM64 384c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM64 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32 -s14 -32 32 -32z" /> - <glyph glyph-name="ion-fork" unicode="" horiz-adv-x="128" -d="M78 299v0v0v0zM128 282c0 -26 -15 -48 -37 -58c-12 -6 -11 -11 -11 -11s16 -200 16 -213s-3 -18 -9 -24s-15 -8 -23 -8v0v0c-8 0 -16 2 -22 8s-10 13 -10 24s16 213 16 213s0 6 -11 11c-22 10 -37 32 -37 58c0 43 15 93 24 134h8v-117c0 -6 3 -11 9 -11s9 4 10 10v1 -l9 117h8l10 -117v-1c1 -6 3 -10 9 -10s9 5 9 11v117h8v0c9 -40 24 -91 24 -134z" /> - <glyph glyph-name="ion-forward" unicode="" horiz-adv-x="384" -d="M224 150c-102 0 -171 -9 -224 -102c0 0 37 208 224 208v80l160 -144l-160 -134v92z" /> - <glyph glyph-name="ion-funnel" unicode="" -d="M224 416c124 0 224 -36 224 -80c0 -8 -3 -15 -9 -22v0c-35 -43 -151 -179 -151 -218v-4v-83v0c0 -23 -29 -41 -64 -41s-64 18 -64 41v0v87c0 39 -117 177 -149 216v0c-7 8 -11 16 -11 24c0 44 100 80 224 80zM224 288c92 0 176 22 176 48s-83 48 -176 48 -s-176 -22 -176 -48s84 -48 176 -48z" /> - <glyph glyph-name="ion-gear-a" unicode="" horiz-adv-x="384" -d="M347 192c0 -24 15 -43 37 -56c-4 -13 -10 -26 -16 -38c-25 6 -45 -3 -62 -20s-22 -37 -16 -62c-12 -6 -25 -12 -38 -16c-13 22 -36 37 -60 37s-47 -15 -60 -37c-13 4 -27 10 -39 16c6 25 2 45 -15 62s-37 21 -62 15c-6 12 -12 26 -16 39c22 13 37 36 37 60s-15 43 -37 56 -c4 13 9 26 16 38c25 -6 45 3 62 20s21 37 15 62c12 6 26 12 39 16c13 -22 36 -37 60 -37s47 15 60 37c13 -4 27 -10 39 -16c-6 -25 -2 -45 15 -62s37 -26 62 -20c6 -12 12 -25 16 -38c-22 -13 -37 -32 -37 -56zM192 94c54 0 98 44 98 98s-44 98 -98 98s-98 -44 -98 -98 -s44 -98 98 -98z" /> - <glyph glyph-name="ion-gear-b" unicode="" horiz-adv-x="384" -d="M384 154h-44c-4 -14 -10 -27 -17 -39l32 -32l-54 -54l-33 32c-12 -7 -24 -11 -38 -15v-46h-76v46c-13 4 -26 8 -38 15l-33 -32l-54 54l32 32c-7 12 -13 25 -17 39h-44v76h43c4 14 9 29 16 41l-30 30l54 54l29 -29c13 8 27 13 42 17v41h76v-41c15 -4 29 -9 42 -17l29 29 -l54 -54l-30 -30c7 -12 13 -27 16 -41h43v-76zM192 138c30 0 54 24 54 54s-24 54 -54 54s-54 -24 -54 -54s24 -54 54 -54z" /> - <glyph glyph-name="ion-grid" unicode="" horiz-adv-x="320" -d="M64 295c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM192 295c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM320 295c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM64 167 -c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM192 167c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM320 167c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM64 39 -c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM192 39c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM320 39c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50z" /> - <glyph glyph-name="ion-hammer" unicode="" horiz-adv-x="320" -d="M314 416c3 0 6 -3 6 -6v-84c0 -3 -3 -6 -6 -6h-52c-3 0 -6 3 -6 6v14c-6 5 -16 9 -22 7c-7 -2 -23 -13 -30 -25s-6 -28 -6 -66l8 -2c5 -1 7 -6 7 -9v-70c0 -95 11 -201 11 -201c0 -3 -3 -6 -6 -6h-84c-3 0 -6 3 -6 6c0 0 11 106 11 201v70c0 3 3 8 7 9l7 2 -c0 43 -5 58 -22 74c-18 16 -41 19 -63 17s-51 -35 -58 -45s-10 2 -10 11c1 16 22 60 72 81s91 22 102 22s27 -1 38 -3s16 -18 26 -18c7 0 14 5 18 9v6c0 3 3 6 6 6h52z" /> - <glyph glyph-name="ion-happy-outline" unicode="" -d="M355 158c8 -4 11 -13 7 -21c-24 -46 -78 -73 -138 -73c-62 0 -118 29 -139 74c-4 8 0 17 8 21c2 1 5 1 7 1c6 0 11 -3 14 -9c16 -34 60 -55 110 -55c49 0 92 21 110 56c3 5 8 8 14 8c3 0 5 -1 7 -2zM381 217c5 -7 4 -17 -4 -22c-3 -2 -6 -3 -10 -3c-5 0 -11 2 -14 6 -s-7 10 -17 10s-14 -6 -17 -10s-9 -6 -14 -6c-4 0 -7 1 -10 3c-8 6 -9 15 -3 22c11 14 23 23 44 23s35 -9 45 -23zM157 217c5 -7 4 -17 -4 -22c-3 -2 -6 -3 -10 -3c-5 0 -11 2 -14 6s-7 10 -17 10s-14 -6 -17 -10s-9 -6 -14 -6c-4 0 -7 1 -10 3c-8 6 -9 15 -3 22 -c11 14 23 23 44 23s35 -9 45 -23zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136s85 -56 136 -56 -s100 20 136 56z" /> - <glyph glyph-name="ion-happy" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM71 195c3 -2 6 -3 10 -3c5 0 11 2 14 6s7 10 17 10s14 -6 17 -10s9 -6 14 -6c4 0 7 1 10 3c8 5 9 15 4 22c-10 14 -24 23 -45 23s-33 -9 -44 -23c-6 -7 -5 -16 3 -22zM362 137 -c4 8 1 17 -7 21c-2 1 -4 2 -7 2c-6 0 -11 -3 -14 -8c-18 -35 -61 -56 -110 -56c-50 0 -94 21 -110 55c-3 6 -8 9 -14 9c-2 0 -5 0 -7 -1c-8 -4 -12 -13 -8 -21c21 -45 77 -74 139 -74c60 0 114 27 138 73zM377 195c8 5 9 15 4 22c-10 14 -24 23 -45 23s-33 -9 -44 -23 -c-6 -7 -5 -16 3 -22c3 -2 6 -3 10 -3c5 0 11 2 14 6s7 10 17 10s14 -6 17 -10s9 -6 14 -6c4 0 7 1 10 3z" /> - <glyph glyph-name="ion-headphone" unicode="" horiz-adv-x="384" -d="M383 210c3 -51 -3 -130 -13 -162c-20 -67 -40 -80 -72 -80s-58 27 -58 59v106c0 33 23 59 53 59c18 0 34 -9 44 -24c0 0 11 7 13 22s4 34 -5 64s-21 19 -36 38c-2 3 -5 7 -8 10l-10 10c-2 2 -3 3 -5 4c-11 9 -21 17 -34 23c-19 9 -39 13 -60 13s-42 -4 -61 -13 -c-13 -6 -22 -14 -33 -23c-2 -1 -3 -2 -5 -4l-10 -10s-6 -7 -8 -10c-15 -19 -27 -8 -36 -38c-9 -31 -7 -49 -5 -64s13 -22 13 -22c10 15 26 24 44 24c30 0 53 -27 53 -59v-106c0 -32 -26 -59 -58 -59s-52 13 -72 80c-10 32 -16 111 -13 162c3 60 22 108 56 145v0 -c8 8 15 16 24 23s19 13 29 18c25 13 53 20 82 20s57 -7 82 -20c10 -5 19 -11 28 -18s17 -15 25 -23v0c34 -37 53 -85 56 -145z" /> - <glyph glyph-name="ion-heart-broken" unicode="" horiz-adv-x="416" -d="M181 160c0 -36 -2 -71 4 -107c2 -10 2 -20 2 -31l-153 159c-45 47 -45 124 0 171c40 41 103 43 144 3c-2 -15 -3 -31 -3 -46c-18 -14 -40 -21 -56 -39l11 7c17 11 15 8 35 14c3 1 8 3 11 5c0 -1 -1 -5 -1 -6c1 -20 11 -39 15 -60c0 -5 1 -10 -1 -15c-8 -17 -7 -37 -8 -55 -zM274 147c8 -18 23 -29 38 -39l-104 -108l-17 18c0 13 -4 26 -4 38c-2 48 10 94 21 142v0c1 -1 2 -1 3 -1c30 -6 52 -24 63 -50zM382 352c46 -47 46 -124 0 -171l-68 -70c-28 24 -42 54 -65 81c-12 13 -26 23 -41 32c-3 13 -8 26 -11 39c-3 12 14 21 16 31c3 12 3 26 3 39 -l19 19c40 42 107 42 147 0z" /> - <glyph glyph-name="ion-heart" unicode="" horiz-adv-x="416" -d="M382 352c46 -47 46 -124 0 -171l-174 -181l-174 181c-46 47 -46 124 0 171c40 42 107 42 147 0l27 -28l28 28c40 42 106 42 146 0z" /> - <glyph glyph-name="ion-help-buoy" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM402 264c-10 24 -23 45 -42 64s-41 32 -65 42l-19 -61c14 -6 27 -15 38 -26s21 -24 27 -38zM224 96c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM88 328 -c-19 -19 -32 -41 -42 -65l61 -19c6 14 15 27 26 38s24 21 38 27l-19 61c-24 -10 -45 -23 -64 -42zM46 120c10 -24 23 -45 42 -64s41 -32 65 -42l19 61c-14 6 -27 15 -38 26s-21 24 -27 38zM360 56c19 19 32 41 42 65l-61 19c-6 -14 -15 -27 -26 -38s-24 -21 -38 -27l19 -61 -c24 10 45 23 64 42z" /> - <glyph glyph-name="ion-help-circled" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM244 89c1 18 -12 31 -29 31c-16 0 -30 -11 -30 -29s12 -30 28 -30c17 0 31 10 31 28zM293 217c7 10 12 22 12 36c0 23 -9 40 -25 52c-17 13 -37 18 -62 18 -c-19 0 -34 -4 -47 -13c-19 -13 -28 -34 -28 -68h49c0 9 -1 19 4 27s13 15 26 15s19 -3 25 -11c5 -7 8 -15 8 -23c0 -7 -4 -14 -8 -20c-2 -4 -6 -7 -10 -10c0 0 -26 -15 -35 -30c-7 -11 -9 -24 -10 -41c0 -1 0 -4 4 -4h39s5 3 5 4c0 6 1 15 2 19c2 7 6 12 12 17l14 9 -c12 9 21 17 25 23z" /> - <glyph glyph-name="ion-help" unicode="" horiz-adv-x="256" -d="M217 371c25 -19 39 -46 39 -83c0 -22 -8 -42 -19 -57c-7 -9 -21 -21 -40 -36l-21 -14c-10 -8 -17 -18 -20 -28c-2 -6 -3 -19 -3 -29c0 -2 -1 -6 -7 -6h-62c-7 0 -7 3 -7 5c1 26 4 49 15 66c15 23 57 48 57 48c6 5 11 9 15 15c7 10 12 21 12 32c0 13 -3 26 -11 36 -c-10 12 -21 18 -41 18s-32 -11 -40 -24s-7 -29 -7 -43h-77c0 54 14 88 44 108c20 14 45 20 75 20c39 0 70 -7 98 -28zM114 78c27 -1 47 -20 46 -48s-22 -46 -49 -45c-26 1 -46 19 -45 47s22 47 48 46z" /> - <glyph glyph-name="ion-home" unicode="" horiz-adv-x="384" -d="M384 160h-48v-160h-96v128h-96v-128h-96v160h-48l192 224z" /> - <glyph glyph-name="ion-icecream" unicode="" horiz-adv-x="320" -d="M32 192h256l-128 -224zM307 275c8 -5 13 -13 13 -23c0 -16 -14 -28 -30 -28h-4h-252h-4c-16 0 -30 13 -30 28c0 10 6 18 14 23c1 0 1 2 2 2c4 3 7 7 8 12v1c-2 6 -2 12 -2 18c0 42 34 76 76 76c8 0 16 -2 23 -4c-3 -12 -4 -31 -4 -31c2 15 11 29 11 29c18 23 46 38 77 38 -c53 0 96 -43 96 -96c0 -11 -2 -21 -5 -30v-1c0 -4 4 -9 8 -12c1 0 2 -2 3 -2z" /> - <glyph glyph-name="ion-image" unicode="" -d="M336 224c-26 0 -48 22 -48 48s22 48 48 48s48 -22 48 -48s-22 -48 -48 -48zM420 384c16 0 28 -12 28 -28v-328c0 -16 -12 -28 -28 -28h-392c-16 0 -28 12 -28 28v328c0 16 12 28 28 28h392zM317 186l99 -106v260c0 7 -6 12 -13 12h-358c-7 0 -12 -5 -13 -12v-260l126 152 -c4 4 10 8 17 8s13 -2 17 -7l54 -59l4 -4c3 -2 7 -4 11 -4s8 2 12 5l18 16c4 3 8 5 13 5s10 -2 13 -6z" /> - <glyph glyph-name="ion-images" unicode="" -d="M426 308c13 -1 23 -12 22 -24l-14 -263c-1 -13 -12 -22 -25 -21l-330 16c-13 1 -23 10 -22 23l2 46l-15 -1c-12 -1 -22 7 -23 18l-21 236c-1 11 7 21 19 22l296 24c12 1 22 -7 23 -18l5 -54zM71 302c1 12 11 22 24 22l219 -11l-2 31h-1v1c-1 5 -5 8 -10 8l-261 -22 -c-5 0 -10 -4 -10 -9v0v-1l16 -178l18 25zM405 66l10 198v1v0c0 6 -5 10 -11 10l-58 3l-29 2l-204 9c-6 0 -11 -4 -12 -9v0v-1l-3 -63l-7 -128v-7l6 7l102 109c4 4 8 6 14 6s11 -3 14 -7l43 -49l3 -3c2 -2 6 -4 10 -4s5 1 9 3l17 12c4 3 7 4 11 4s9 -2 11 -5l27 -33zM341 186 -c-20 0 -35 15 -35 35s16 35 35 35c20 0 35 -16 35 -35s-16 -35 -35 -35z" /> - <glyph glyph-name="ion-information-circled" unicode="" -d="M448 195c2 -124 -97 -225 -221 -227s-225 97 -227 221s97 225 221 227s225 -97 227 -221zM224 336c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM268 53v11h-22v172h-66v-12h22v-160h-22v-11h88z" /> - <glyph glyph-name="ion-information" unicode="" horiz-adv-x="128" -d="M96 0h32v-16h-128v16h32v240h-32v16h96v-256zM64 304c-27 0 -48 21 -48 48s21 48 48 48s48 -21 48 -48s-21 -48 -48 -48z" /> - <glyph glyph-name="ion-ionic" unicode="" horiz-adv-x="416" -d="M376 315c25 -34 40 -77 40 -123c0 -115 -93 -208 -208 -208s-208 93 -208 208s93 208 208 208c46 0 89 -15 123 -40c5 3 11 5 18 5c18 0 32 -14 32 -32c0 -7 -2 -13 -5 -18zM344 56c18 18 31 38 41 61c10 24 15 49 15 75s-5 51 -15 75c-6 13 -13 26 -21 38 -c-4 -2 -10 -4 -15 -4c-18 0 -32 14 -32 32c0 5 2 11 4 15c-12 8 -25 15 -38 21c-24 10 -49 15 -75 15s-51 -5 -75 -15c-23 -10 -43 -23 -61 -41s-31 -38 -41 -61c-10 -24 -15 -49 -15 -75s5 -51 15 -75c10 -23 23 -43 41 -61s38 -31 61 -41c24 -10 49 -15 75 -15s51 5 75 15 -c23 10 43 23 61 41zM112 192c0 64 32 96 96 96s96 -32 96 -96s-32 -96 -96 -96s-96 32 -96 96z" /> - <glyph glyph-name="ion-ios-alarm-outline" unicode="" horiz-adv-x="404" -d="M384 256l-54 52l-9 -9c35 -32 57 -79 57 -130c0 -44 -16 -83 -43 -114l36 -45l-12 -10l-35 43c-32 -30 -75 -49 -122 -49v0v0c-47 0 -90 19 -122 49l-35 -43l-12 10l36 45c-27 31 -43 71 -43 115c0 51 22 97 57 129l-9 9l-54 -52c-12 14 -20 32 -20 52c0 44 35 80 80 82 -h5c20 0 39 -7 54 -18l-54 -52l11 -11c26 19 56 32 90 35v0c0 8 8 16 16 16s15 -8 15 -16v0c34 -3 65 -16 91 -35l11 11l-54 52c15 11 34 18 54 18h5c45 -2 80 -38 80 -82c0 -20 -8 -38 -20 -52zM22 280l91 89c-9 5 -19 7 -32 6c-37 -2 -65 -32 -65 -67c0 -10 2 -19 6 -28z -M362 172c0 88 -72 158 -160 158s-160 -70 -160 -158s72 -158 160 -158s160 70 160 158zM291 369l91 -89c4 9 6 18 6 28c0 35 -28 65 -65 67c-13 1 -23 -1 -32 -6zM202 288h16v-144h-112v16h96v128z" /> - <glyph glyph-name="ion-ios-alarm" unicode="" horiz-adv-x="404" -d="M385 256l-55 52l-9 -9c35 -32 57 -79 57 -130c0 -44 -16 -83 -43 -114l37 -45l-13 -10l-35 43c-32 -30 -75 -49 -122 -49v0v0c-47 0 -90 19 -122 49l-35 -43l-12 10l36 45c-27 31 -43 70 -43 114c0 51 22 98 57 130l-9 9l-54 -52c-12 14 -20 32 -20 52c0 44 35 80 80 82 -h5c20 0 39 -7 54 -18l-54 -53l11 -10c26 19 56 32 90 35v0c0 8 8 16 16 16s15 -8 15 -16v0c34 -3 65 -16 91 -35l11 11l-54 52c15 11 34 18 54 18h5c45 -2 80 -38 80 -82c0 -20 -7 -38 -19 -52zM218 144v144h-16v-128h-96v-16h112z" /> - <glyph glyph-name="ion-ios-albums-outline" unicode="" -d="M432 304h-416v-288h416v288zM448 320v0v-320h-448v320h448zM40 336v16h368v-16h-368zM72 368v16h304v-16h-304z" /> - <glyph glyph-name="ion-ios-albums" unicode="" -d="M448 320v0v-320h-448v320h448zM40 336v16h368v-16h-368zM72 368v16h304v-16h-304z" /> - <glyph glyph-name="ion-ios-americanfootball-outline" unicode="" horiz-adv-x="416" -d="M331 315c112 -112 81 -327 81 -327s-26 -4 -65 -4c-73 0 -189 12 -262 85c-112 112 -81 327 -81 327s26 4 65 4c73 0 189 -12 262 -85zM17 383c-2 -19 -5 -60 0 -107c1 -8 2 -16 3 -23l127 127c-25 3 -51 5 -78 5v0v0c-22 0 -41 -1 -52 -2zM96 80c30 -30 72 -53 124 -66 -c10 -3 20 -5 31 -7l142 142c-4 22 -10 44 -17 63c-14 37 -32 68 -56 92c-30 30 -72 53 -124 66c-10 3 -20 5 -31 7l-142 -142c4 -22 10 -44 17 -63c14 -37 32 -68 56 -92zM399 1c2 19 5 60 0 107c-1 8 -2 16 -3 23l-127 -127c25 -3 51 -5 78 -5c22 0 41 1 52 2zM259 130 -l-28 -29l-12 12l29 28l-23 23l-28 -29l-12 12l29 28l-23 23l-28 -29l-12 12l29 28l-23 23l-28 -29l-12 12l29 28l-22 23l-29 -29l-11 12l67 67l12 -11l-29 -29l23 -22l28 29l12 -12l-29 -28l23 -23l28 29l12 -12l-29 -28l23 -23l28 29l12 -12l-29 -28l22 -23l29 29l12 -12 -l-29 -28l22 -23l29 29l11 -12l-67 -67l-12 11l29 29z" /> - <glyph glyph-name="ion-ios-americanfootball" unicode="" horiz-adv-x="416" -d="M331 315c112 -112 81 -327 81 -327s-26 -4 -65 -4c-73 0 -189 12 -262 85c-112 112 -81 327 -81 327s26 4 65 4c73 0 189 -12 262 -85zM20 253l3 -18l142 142l-18 3zM219 113l12 -12l28 29l23 -22l-29 -29l12 -11l67 67l-11 12l-29 -29l-22 23l29 28l-12 12l-28 -29 -l-23 23l29 28l-12 12l-28 -29l-23 23l29 28l-12 12l-28 -29l-23 23l29 28l-12 12l-28 -29l-23 22l29 29l-12 11l-67 -67l11 -12l29 29l22 -23l-29 -28l12 -12l28 29l23 -23l-29 -28l12 -12l28 29l23 -23l-29 -28l12 -12l28 29l23 -23zM269 4l127 127l-3 18l-142 -142z" /> - <glyph glyph-name="ion-ios-analytics-outline" unicode="" -d="M224 400c-28 0 -55 -5 -81 -16c-25 -10 -47 -26 -66 -45s-35 -41 -45 -66c-11 -26 -16 -53 -16 -81s5 -55 16 -81c10 -25 26 -47 45 -66s41 -35 66 -45c26 -11 53 -16 81 -16s55 5 81 16c25 10 47 26 66 45s35 41 45 66c11 26 16 53 16 81s-5 55 -16 81 -c-10 25 -26 47 -45 66s-41 35 -66 45c-26 11 -53 16 -81 16zM224 416v0c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM76 128c-25 0 -41 18 -42 19c-3 3 -2 9 1 12s8 2 11 -1c1 -1 15 -17 36 -14c12 2 27 26 38 42c4 6 9 12 12 16 -c17 21 34 23 45 21c24 -3 45 -28 54 -50c7 -18 18 -28 32 -29c15 -1 31 11 43 30c1 2 3 4 4 7c9 17 24 43 52 43c31 0 52 -35 53 -36c2 -4 1 -9 -3 -11s-9 -1 -11 3c0 0 -5 8 -12 15c-6 6 -16 13 -27 13c-18 0 -29 -19 -38 -35c-1 -3 -3 -5 -4 -7c-15 -25 -36 -40 -58 -38 -c-20 1 -36 15 -46 39s-28 39 -41 41c-11 1 -21 -4 -31 -16c-3 -4 -6 -9 -10 -15c-14 -20 -31 -45 -50 -48c-3 0 -5 -1 -8 -1z" /> - <glyph glyph-name="ion-ios-analytics" unicode="" -d="M224 416c124 0 224 -100 224 -224c0 -13 -1 -25 -3 -37c-1 -6 -2 -12 -3 -17c-24 -98 -113 -170 -218 -170c-122 0 -221 98 -224 219v5c0 9 1 17 2 26c13 111 107 198 222 198zM431 168c1 8 1 16 1 24c0 28 -5 55 -16 81c-10 25 -26 47 -45 66s-41 35 -66 45 -c-26 11 -53 16 -81 16s-55 -5 -81 -16c-25 -10 -47 -26 -66 -45s-35 -41 -45 -66c-11 -26 -16 -53 -16 -81v0c14 -21 29 -34 29 -34h1v-1c1 -1 15 -16 36 -13c12 2 27 26 38 42c4 6 9 12 12 16c17 21 34 23 45 21c24 -3 45 -27 54 -50c7 -18 18 -28 32 -29c15 -1 31 9 43 29 -c1 2 3 4 4 7c9 17 24 44 52 44c31 0 52 -35 53 -36c3 -4 9 -12 16 -20z" /> - <glyph glyph-name="ion-ios-arrow-back" unicode="" horiz-adv-x="192" -d="M192 320l-127 -128l127 -128l-32 -32l-160 160v0v0l160 160z" /> - <glyph glyph-name="ion-ios-arrow-down" unicode="" horiz-adv-x="320" -d="M301 288l19 -21l-160 -171l-160 171l19 21l141 -150z" /> - <glyph glyph-name="ion-ios-arrow-forward" unicode="" horiz-adv-x="192" -d="M0 320l32 32l160 -160v0v0l-160 -160l-32 32l127 128z" /> - <glyph glyph-name="ion-ios-arrow-left" unicode="" horiz-adv-x="192" -d="M192 333l-150 -141l150 -141l-21 -19l-171 160l171 160z" /> - <glyph glyph-name="ion-ios-arrow-right" unicode="" horiz-adv-x="192" -d="M0 333l21 19l171 -160l-171 -160l-21 19l150 141z" /> - <glyph glyph-name="ion-ios-arrow-thin-down" unicode="" horiz-adv-x="192" -d="M190 126c2 -2 2 -4 2 -6s0 -4 -2 -6c0 0 -87 -79 -88 -80s-3 -2 -6 -2s-5 1 -6 2s-88 80 -88 80c-3 3 -3 9 0 12s9 3 12 0l74 -67v285c0 4 4 8 8 8s8 -4 8 -8v-285l74 67c3 3 9 3 12 0z" /> - <glyph glyph-name="ion-ios-arrow-thin-left" unicode="" horiz-adv-x="320" -d="M94 98c-2 -2 -4 -2 -6 -2s-4 0 -6 2c0 0 -79 87 -80 88s-2 3 -2 6s1 5 2 6s80 88 80 88c3 3 9 3 12 0s3 -9 0 -12l-67 -74h285c4 0 8 -4 8 -8s-4 -8 -8 -8h-285l67 -74c3 -3 3 -9 0 -12z" /> - <glyph glyph-name="ion-ios-arrow-thin-right" unicode="" horiz-adv-x="320" -d="M226 98c-3 3 -3 9 0 12l67 74h-285c-4 0 -8 4 -8 8s4 8 8 8h285l-67 74c-3 3 -3 9 0 12s9 3 12 0c0 0 79 -87 80 -88s2 -3 2 -6s-1 -5 -2 -6s-80 -88 -80 -88c-2 -2 -4 -2 -6 -2s-4 0 -6 2z" /> - <glyph glyph-name="ion-ios-arrow-thin-up" unicode="" horiz-adv-x="192" -d="M190 258c-3 -3 -9 -3 -12 0l-74 67v-285c0 -4 -4 -8 -8 -8s-8 4 -8 8v285l-74 -67c-3 -3 -9 -3 -12 0s-3 9 0 12c0 0 87 79 88 80s3 2 6 2s5 -1 6 -2s88 -80 88 -80c2 -2 2 -4 2 -6s0 -4 -2 -6z" /> - <glyph glyph-name="ion-ios-arrow-up" unicode="" horiz-adv-x="320" -d="M301 96l-141 150l-141 -150l-19 21l160 171l160 -171z" /> - <glyph glyph-name="ion-ios-at-outline" unicode="" horiz-adv-x="255" -d="M236 127v1h19l-3 -6c-3 -6 -13 -19 -22 -27s-18 -14 -28 -20s-21 -10 -32 -13s-23 -5 -34 -5c-16 0 -33 3 -49 8s-30 13 -43 24c-12 11 -26 29 -34 46c-7 16 -10 33 -10 58c0 18 4 38 11 55c7 16 17 30 29 42s27 21 43 28c15 6 33 9 53 9c16 0 32 -3 46 -8 -c15 -5 28 -12 39 -22s17 -21 24 -35c6 -13 8 -26 8 -44c0 -14 -2 -28 -7 -40s-9 -20 -17 -30c-8 -9 -13 -15 -23 -21c-11 -6 -20 -9 -29 -9c-8 0 -15 2 -20 7c-3 2 -5 6 -6 9c-6 -6 -11 -10 -17 -12c-10 -3 -18 -4 -26 -4s-15 1 -21 4s-12 7 -17 12s-8 11 -11 18 -s-5 14 -5 22c0 12 3 24 7 36v2c4 11 5 16 13 26c8 11 17 19 28 26s24 11 38 11c12 0 21 -3 31 -9c7 -4 12 -10 16 -16l6 17h18l-38 -102c-2 -5 -4 -10 -5 -14s-1 -7 -1 -10c0 -2 1 -4 3 -5s4 -2 8 -2c6 0 11 2 20 7c8 4 12 9 19 17c6 8 10 14 14 25s6 23 6 35 -c0 15 -2 25 -7 36c-6 13 -10 22 -19 30s-20 15 -33 20s-27 7 -42 7c-19 0 -35 -3 -48 -9c-15 -6 -27 -14 -37 -24c-11 -10 -19 -23 -25 -37c-6 -15 -10 -32 -10 -48c0 -22 2 -36 8 -49c6 -15 17 -31 28 -41s24 -18 38 -23s30 -7 46 -7c10 0 20 1 30 4s18 6 27 11 -s17 11 24 18s14 13 19 21zM147 154c4 5 8 12 11 20l21 57c-2 5 -4 10 -7 13c-3 4 -6 6 -10 8c-1 0 -1 1 -2 1c-3 2 -5 3 -9 4c-5 1 -9 2 -13 2c-10 0 -19 -3 -28 -9s-17 -13 -23 -22c-5 -8 -7 -11 -10 -20c0 -1 -1 -3 -1 -4c-4 -11 -5 -20 -5 -30c0 -6 1 -11 3 -16 -s5 -9 8 -13s7 -6 12 -8s9 -3 15 -3c4 0 9 1 14 2c4 1 8 2 12 5s8 7 12 13z" /> - <glyph glyph-name="ion-ios-at" unicode="" horiz-adv-x="256" -d="M228 128v0h28c-1 -1 -2 -4 -3 -6c-4 -6 -14 -19 -23 -27s-18 -14 -28 -20s-20 -10 -32 -13c-11 -3 -23 -5 -34 -5c-16 0 -33 3 -49 8s-30 13 -43 24c-12 10 -26 28 -34 46c-7 16 -10 33 -10 58c0 19 4 39 11 55s17 30 29 42s28 21 44 28c15 6 32 9 52 9c16 0 31 -3 46 -8 -s28 -12 39 -22s18 -22 25 -36c6 -14 8 -26 8 -44c0 -14 -2 -28 -7 -40c-4 -11 -9 -20 -17 -30c-7 -9 -14 -16 -24 -22c-12 -6 -21 -9 -30 -9s-16 2 -22 8c-2 1 -3 3 -4 5c-4 -4 -9 -6 -14 -8c-10 -3 -18 -5 -27 -5c-8 0 -16 2 -23 5s-12 7 -17 12s-9 12 -12 19s-4 14 -4 22 -c0 12 2 25 6 37l1 1c4 10 5 17 13 27c8 11 17 20 28 27c12 7 24 10 38 10c12 0 22 -3 33 -9c5 -3 8 -6 12 -10l5 12h25l-39 -104c-2 -5 -3 -9 -4 -13c-1 -3 -1 -7 -1 -9s0 -3 1 -3c0 0 1 -1 5 -1c5 0 11 2 19 7c7 4 10 8 16 16s9 13 13 23s6 20 6 32c0 14 -1 24 -6 34 -c-5 12 -10 21 -18 28c-9 8 -19 14 -31 18s-26 7 -40 7c-18 0 -32 -3 -44 -8c-14 -6 -25 -13 -35 -23s-18 -22 -24 -35c-6 -14 -9 -30 -9 -45c0 -21 3 -34 8 -46c6 -14 16 -30 26 -39s22 -16 35 -21c14 -5 28 -7 43 -7c10 0 20 2 29 4s18 6 26 11s28 20 38 33zM144 157 -c4 5 7 12 10 19l20 55c-1 4 -3 7 -5 9c-3 3 -6 6 -9 8h-1h-1v1c-3 2 -5 2 -8 3c-4 1 -8 1 -12 1c-9 0 -17 -2 -25 -7c-10 -6 -17 -14 -21 -21c-5 -8 -6 -11 -9 -19c0 -1 -1 -2 -1 -3c-3 -10 -6 -19 -6 -28c0 -5 1 -10 3 -14s4 -8 7 -11s7 -6 11 -8s8 -2 13 -2c4 0 8 0 12 1 -v0c4 1 7 2 11 5c3 2 7 5 11 11z" /> - <glyph glyph-name="ion-ios-barcode-outline" unicode="" horiz-adv-x="416" -d="M0 64v256h80v-16h-64v-224h64v-16h-80zM336 320h80v-256h-80v16h64v224h-64v16zM64 128v128h16v-128h-16zM336 128v128h16v-128h-16zM272 96v192h16v-192h-16zM128 96v192h16v-192h-16zM199 112v160h16v-160h-16z" /> - <glyph glyph-name="ion-ios-barcode" unicode="" horiz-adv-x="416" -d="M0 320h416v-256h-416v256zM80 128v128h-16v-128h16zM144 96v192h-16v-192h16zM215 112v160h-16v-160h16zM288 96v192h-16v-192h16zM352 128v128h-16v-128h16z" /> - <glyph glyph-name="ion-ios-baseball-outline" unicode="" horiz-adv-x="416" -d="M415 169v-1v0c-11 -97 -90 -174 -187 -183v0h-2c-2 0 -3 -1 -5 -1h-1h-3h-1h-8c-115 0 -208 93 -208 208v8v1v3v1c0 2 1 3 1 5v2v0c9 97 86 176 183 187v0v0c8 1 16 1 24 1c115 0 208 -93 208 -208c0 -7 0 -14 -1 -20v0v-3zM399 192c0 105 -86 191 -191 191 -c-3 0 -5 -1 -8 -1c0 -11 2 -21 4 -31l20 6l5 -15l-21 -7c2 -7 4 -14 7 -21c2 -5 5 -11 8 -16l17 12l9 -13l-19 -13c7 -12 16 -23 26 -33l14 15l12 -12l-15 -15c11 -10 22 -18 34 -25l12 18l14 -9l-12 -17c5 -2 10 -5 15 -7c7 -3 14 -5 22 -7l7 20l15 -5l-6 -19 -c10 -2 20 -4 30 -4c0 3 1 5 1 8zM17 192c0 -105 86 -191 191 -191h4c-1 9 -1 17 -3 26l-22 -7l-5 16l23 7c-2 8 -5 16 -8 24c-2 5 -4 9 -6 14l-20 -13l-9 13l21 14c-7 12 -16 24 -26 35l-17 -17l-11 11l17 17c-10 10 -22 18 -34 25l-14 -21l-14 9l14 20c-5 2 -10 5 -15 7 -c-7 3 -15 6 -23 8l-8 -24l-15 5l7 23c-9 2 -18 2 -27 3v-4zM228 2c88 9 158 78 169 166c-11 1 -23 3 -34 5l-9 -27l-15 5l8 25c-14 4 -28 10 -41 17l-15 -23l-13 9l14 21c-13 8 -26 17 -37 28l-19 -19l-11 11l19 19c-10 11 -19 23 -27 36l-21 -14l-9 13l22 15 -c-7 13 -12 27 -16 41l-25 -8l-5 16l26 8c-2 12 -4 23 -5 35c-88 -11 -157 -81 -166 -169c10 -1 21 -2 31 -4l8 23l15 -5l-7 -22c14 -4 28 -9 42 -16l13 19l14 -9l-13 -18c13 -8 25 -17 36 -28l17 17l11 -11l-17 -17c11 -12 20 -24 28 -37l19 13l9 -14l-20 -13 -c7 -14 12 -28 16 -42l23 7l5 -15l-24 -8c2 -10 3 -20 4 -30z" /> - <glyph glyph-name="ion-ios-baseball" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208c0 -8 0 -16 -1 -24v0v0c-12 -104 -100 -184 -207 -184c-115 0 -208 93 -208 208c0 107 80 195 184 207v0v0c8 1 16 1 24 1zM212 1c5 0 11 0 16 1c-1 10 -2 20 -4 30l24 8l-5 15l-23 -7c-4 14 -9 28 -16 42l20 13l-9 14l-19 -13 -c-8 13 -17 25 -28 37l17 17l-11 11l-17 -17c-11 11 -23 20 -36 28l13 18l-14 9l-13 -19c-14 7 -28 12 -42 16l7 22l-15 5l-8 -23c-10 2 -21 3 -31 4c-1 -5 -1 -11 -1 -16c9 -1 18 -1 27 -3l-7 -23l15 -5l8 24c8 -2 16 -5 23 -8c5 -2 10 -5 15 -7l-14 -20l14 -9l14 21 -c12 -7 24 -15 34 -25l-17 -17l11 -11l17 17c10 -11 19 -23 26 -35l-21 -14l9 -13l20 13c2 -5 4 -9 6 -14c3 -8 6 -16 8 -24l-23 -7l5 -16l22 7c2 -8 2 -17 3 -26zM363 173c11 -2 23 -4 34 -5c1 5 1 11 1 16c-10 1 -20 2 -30 4l6 19l-15 5l-7 -20c-8 2 -15 4 -22 7 -c-5 2 -10 5 -15 7l12 17l-14 9l-12 -18c-12 7 -23 15 -34 25l15 15l-12 12l-15 -15c-10 10 -18 21 -25 33l19 13l-9 13l-17 -12c-3 5 -6 11 -8 16c-3 7 -5 14 -7 21l21 7l-5 15l-20 -6c-2 10 -3 20 -4 31c-5 0 -11 0 -16 -1c1 -12 3 -23 5 -35l-26 -8l5 -16l25 8 -c4 -14 9 -28 16 -41l-22 -15l9 -13l21 14c8 -13 17 -25 27 -36l-19 -19l11 -11l19 19c11 -11 24 -20 37 -28l-14 -21l13 -9l15 23c13 -7 27 -13 41 -17l-8 -25l15 -5z" /> - <glyph glyph-name="ion-ios-basketball-outline" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM399 192c0 55 -24 105 -62 140c-14 -34 -31 -65 -52 -95c15 -12 31 -21 49 -29c21 -9 43 -14 65 -16v0zM325 343c-32 25 -73 40 -117 40v0c2 -22 6 -44 15 -65 -c10 -25 26 -47 45 -66c2 -1 2 -3 4 -4c20 29 38 60 52 93c0 1 1 1 1 2zM192 382c-51 -4 -96 -29 -128 -65c64 -28 121 -69 169 -119c11 12 21 24 30 37c-40 37 -67 89 -71 147zM233 174c-15 -16 -31 -30 -48 -44c28 -35 45 -79 47 -127c33 4 63 17 88 35 -c-22 50 -51 95 -87 136zM214 178l8 8l-10 10c-46 46 -99 82 -158 108c-18 -25 -31 -55 -35 -88c62 -3 116 -31 155 -74c14 11 27 23 40 36zM18 200c0 -3 -1 -5 -1 -8c0 -45 16 -87 43 -120c36 16 71 36 102 60l-7 7c-19 19 -41 35 -66 45c-22 9 -46 15 -71 16zM71 59 -c35 -36 83 -58 137 -58c3 0 5 1 8 1c-1 25 -6 48 -16 71c-7 17 -17 33 -28 47c-31 -24 -65 -45 -101 -61zM333 48c37 32 61 77 65 128c-46 3 -89 21 -123 48c-10 -13 -20 -26 -31 -38c36 -41 67 -87 89 -138z" /> - <glyph glyph-name="ion-ios-basketball" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM333 48c-22 51 -53 97 -89 138c11 12 21 25 31 38c34 -27 77 -45 123 -48c0 5 1 11 1 16c-22 2 -44 7 -65 16c-18 8 -34 17 -49 29c21 30 38 61 52 95c-4 4 -8 8 -12 11 -c0 -1 -1 -1 -1 -2c-14 -33 -32 -64 -52 -93c-2 1 -2 2 -4 4c-19 19 -35 41 -45 66c-9 21 -13 43 -15 65c-5 0 -11 -1 -16 -1c4 -58 31 -110 71 -147c-9 -13 -19 -25 -30 -37c-48 50 -105 91 -169 119c-4 -4 -7 -9 -10 -13c59 -26 112 -62 158 -108l10 -10l-8 -8 -c-13 -13 -26 -25 -40 -36c-39 43 -93 71 -155 74c-1 -5 -1 -11 -1 -16c25 -1 49 -7 71 -16c25 -10 47 -26 66 -45l7 -7c-31 -24 -66 -44 -102 -60c4 -4 7 -9 11 -13c36 16 70 37 101 61c11 -14 21 -30 28 -47c10 -23 15 -46 16 -71c5 0 11 0 16 1c-2 48 -19 92 -47 127 -c17 14 33 28 48 44c36 -41 65 -86 87 -136c4 3 9 6 13 10z" /> - <glyph glyph-name="ion-ios-bell-outline" unicode="" horiz-adv-x="384" -d="M318 222c0 -114 28 -126 66 -158h-384c38 32 66 44 66 158c0 98 53 130 102 138v2c0 12 11 22 24 22s24 -10 24 -22v-2c49 -7 102 -40 102 -138zM43 80h298c-25 25 -40 58 -40 142c0 46 -13 80 -37 101c-23 19 -52 23 -72 23s-49 -4 -72 -23c-25 -21 -37 -55 -37 -101 -c0 -51 -5 -85 -17 -110c-6 -13 -14 -23 -23 -32zM192 0c-27 0 -49 20 -52 43h104c-3 -23 -25 -43 -52 -43z" /> - <glyph glyph-name="ion-ios-bell" unicode="" horiz-adv-x="384" -d="M318 222c0 -114 28 -126 66 -158h-384c38 32 66 44 66 158c0 98 53 130 102 138v2c0 12 11 22 24 22s24 -10 24 -22v-2c49 -7 102 -40 102 -138zM192 0c-27 0 -49 20 -52 43h104c-3 -23 -25 -43 -52 -43z" /> - <glyph glyph-name="ion-ios-body-outline" unicode="" horiz-adv-x="384" -d="M192 400c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM192 416v0c27 0 48 -21 48 -48s-21 -48 -48 -48s-48 21 -48 48s21 48 48 48zM360 304c13 0 24 -11 24 -24s-11 -24 -24 -24h-100c-5 0 -14 -5 -18 -15c-5 -12 -2 -33 1 -51l4 -21v-1v0l32 -172 -c2 -13 -6 -26 -19 -28h-5c-11 0 -22 8 -24 20l-21 120v0s-5 31 -17 31h-2c-12 0 -19 -31 -19 -31v0l-21 -120c-2 -12 -11 -20 -22 -20h-5c-13 2 -21 15 -19 28l32 172v1l4 21c3 18 6 39 1 51c-4 10 -12 15 -18 15h-100c-13 0 -24 11 -24 24s11 24 24 24h336zM24 272 -c-4 0 -8 4 -8 8s4 8 8 8h336c4 0 8 -4 8 -8s-4 -8 -8 -8h-102c-16 0 -26 -15 -30 -24c-5 -13 -6 -32 -1 -61v0v0l3 -19l1 -3l32 -172c0 -3 0 -5 -1 -6s-2 -2 -5 -3h-2c-4 0 -7 2 -8 6l-21 120v0c0 2 -2 10 -5 19c-2 6 -5 11 -8 15c-7 9 -14 11 -20 11h-2 -c-5 0 -13 -2 -20 -11c-3 -4 -6 -9 -8 -15c-4 -9 -6 -17 -6 -18v-1l-21 -120c-1 -4 -3 -6 -7 -6h-2c-3 0 -4 2 -5 3s-2 3 -1 6l32 172v0v1l4 21v0v0c5 29 5 48 0 61c-4 9 -14 24 -32 24z" /> - <glyph glyph-name="ion-ios-body" unicode="" horiz-adv-x="384" -d="M144 368c0 32 16 48 48 48s48 -16 48 -48s-16 -48 -48 -48s-48 16 -48 48zM360 304c7 0 12 -2 17 -7s7 -10 7 -17s-2 -12 -7 -17s-10 -7 -17 -7h-98c-8 -2 -15 -6 -18 -14c-4 -9 -3 -27 1 -52l4 -21v-1v0l30 -172c1 -7 0 -13 -4 -18s-8 -9 -15 -10s-13 0 -18 4 -s-9 9 -10 16l-21 120v-1l-2 9c-1 5 -3 11 -6 16s-6 8 -10 8h-2c-8 0 -14 -11 -18 -33v1l-21 -120c-1 -7 -5 -12 -10 -16s-11 -5 -18 -4s-11 5 -15 10s-5 11 -4 18l30 172v0v1l4 21c4 25 5 43 1 52c-3 8 -10 12 -18 14h-98c-7 0 -12 2 -17 7s-7 10 -7 17s2 12 7 17s10 7 17 7 -h336z" /> - <glyph glyph-name="ion-ios-bolt-outline" unicode="" horiz-adv-x="226" -d="M131 316l-100 -140h65h19l-3 -19l-17 -89l100 140h-65h-19l3 19zM160 384v0l-30 -160h96l-160 -224l30 160h-96z" /> - <glyph glyph-name="ion-ios-bolt" unicode="" horiz-adv-x="226" -d="M160 384v0l-30 -160h96l-160 -224l30 160h-96z" /> - <glyph glyph-name="ion-ios-book-outline" unicode="" horiz-adv-x="384" -d="M284 384c55 0 100 -26 100 -79v-1v-4v-261v-17h-6h-11h-5c-17 30 -44 42 -78 42c-40 0 -74 -28 -82 -64h-20c-8 36 -42 64 -82 64c-34 0 -65 -16 -78 -42h-5h-11h-6v9v264v9v1c0 53 45 79 100 79c41 0 78 -14 92 -44c12 30 51 44 92 44zM184 37v254v13v2 -c-1 43 -39 62 -84 62c-44 0 -81 -19 -84 -61v-1v0v-262h1c19 26 48 36 83 36s66 -17 84 -43zM368 300v14v1c-3 42 -40 53 -84 53c-46 0 -84 -20 -84 -64v-1v-266c18 26 49 43 84 43s66 -10 84 -36v256z" /> - <glyph glyph-name="ion-ios-book" unicode="" horiz-adv-x="384" -d="M100 384c35 0 67 -10 84 -31v-353h-2c-8 36 -42 64 -82 64c-34 0 -65 -16 -78 -42h-5h-11h-6v9v264v9v1c0 53 45 79 100 79zM284 384c55 0 100 -26 100 -79v-1v-4v-261v-17h-6h-11h-5c-17 30 -44 42 -78 42c-40 0 -74 -28 -82 -64h-2v353c17 21 50 31 84 31z" /> - <glyph glyph-name="ion-ios-bookmarks-outline" unicode="" horiz-adv-x="418" -d="M385 384c19 0 33 -13 33 -32v-286c0 -19 -14 -34 -33 -34h-143s-25 -4 -25 -19v-13h-8h-8v13c0 15 -11 19 -25 19h-143c-19 0 -33 15 -33 34v286c0 19 14 32 33 32h150c10 0 20 -5 26 -12v0v0c6 7 16 12 26 12h150zM201 37v309c0 9 -12 22 -25 22h-143 -c-9 0 -16 -7 -16 -16v-286c0 -9 7 -18 16 -18h144c10 0 19 -3 24 -11zM273 368v-100l23 14l9 6l9 -6l23 -14v100h-64zM401 66v286c0 9 -7 16 -16 16h-32v-131l-48 32l-48 -32v131h-15c-13 0 -25 -13 -25 -22v-309c5 9 14 11 24 11h144c9 0 16 9 16 18z" /> - <glyph glyph-name="ion-ios-bookmarks" unicode="" horiz-adv-x="418" -d="M296 283l-23 -15v116h64v-116l-23 15l-9 6zM385 384c19 0 33 -13 33 -32v-286c0 -19 -14 -34 -33 -34h-143s-25 -4 -25 -19v-13h-8h-8v13c0 15 -11 19 -25 19h-143c-19 0 -33 15 -33 34v286c0 19 14 32 33 32h150s18 -8 18 -15v-329l8 -6l8 6v329s10 15 18 15h22v-146 -l48 32l48 -32v146h32z" /> - <glyph glyph-name="ion-ios-box-outline" unicode="" horiz-adv-x="320" -d="M192 208h-1h-63c-9 0 -16 -7 -16 -16s7 -16 16 -16h64c9 0 16 7 16 16s-7 16 -16 16zM192 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32h-64c-18 0 -32 14 -32 32s14 32 32 32h64zM320 336v-80h-16v-208h-288v208h-16v80h320zM288 64v192h-256v-192h256zM304 272v48h-288 -v-48h288z" /> - <glyph glyph-name="ion-ios-box" unicode="" horiz-adv-x="320" -d="M16 48v192h288v-192h-288zM128 208c-9 0 -16 -7 -16 -16s7 -16 16 -16h64c9 0 16 7 16 16s-7 16 -16 16h-64zM0 336h320v-80h-16h-288h-16v80z" /> - <glyph glyph-name="ion-ios-briefcase-outline" unicode="" horiz-adv-x="416" -d="M368 320h48v-320h-416v320h48v16h32v-16h48v30v2c0 18 10 32 29 32h99c19 0 32 -14 32 -32v-2v-30h48v16h32v-16zM144 320v0h128v0v30c0 10 -7 18 -17 18h-97c-11 0 -14 -8 -14 -18v-30zM400 16v224h-384v-224h384zM400 256v48h-32v-16h-32v16h-256v-16h-32v16h-32v-48 -h384z" /> - <glyph glyph-name="ion-ios-briefcase" unicode="" horiz-adv-x="416" -d="M48 320v16h32v-16h-32zM0 0v240h416v-240h-416zM336 320v16h32v-16h-32zM368 320h48v-64h-416v64h48v-32h32v32h48v30v2c0 18 10 32 29 32h99c19 0 32 -14 32 -32v-2v-30h48v-32h32v32zM272 320v30c0 10 -7 18 -17 18h-97c-11 0 -14 -8 -14 -18v-30v0h128v0z" /> - <glyph glyph-name="ion-ios-browsers-outline" unicode="" horiz-adv-x="384" -d="M0 304h304v-304h-304v304zM288 16v272h-272v-272h272zM384 384v-304h-64v16h48v272h-272v-48h-16v64h304z" /> - <glyph glyph-name="ion-ios-browsers" unicode="" horiz-adv-x="384" -d="M0 304h304v-304h-304v304zM80 384h304v-304h-64v240h-240v64z" /> - <glyph glyph-name="ion-ios-calculator-outline" unicode="" horiz-adv-x="288" -d="M32 288v64h224v-64h-224zM48 336v-32h192v32h-192zM256 384c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-224c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h224zM272 32v320c0 9 -7 16 -16 16h-224c-9 0 -16 -7 -16 -16v-320c0 -9 7 -16 16 -16h224c9 0 16 7 16 16z -M48 208h32h16v-16h-64v64h16v-16v-32zM48 128h32h16v-16h-64v64h16v-16v-32zM48 48h32h16v-16h-64v64h16v-16v-32zM128 208h32h16v-16h-64v64h16v-16v-32zM208 208h32h16v-16h-64v64h16v-16v-32zM128 128h32h16v-16h-64v64h16v-16v-32zM128 48h32h16v-16h-64v64h16v-16v-32z -M208 48h32h16v-16h-64v144h16v-96v-32z" /> - <glyph glyph-name="ion-ios-calculator" unicode="" horiz-adv-x="288" -d="M256 384c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-224c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h224zM248 168h-48v-128h48v128zM248 248h-48v-48h48v48zM168 88h-48v-48h48v48zM168 168h-48v-48h48v48zM168 248h-48v-48h48v48zM88 88h-48v-48h48v48zM88 168 -h-48v-48h48v48zM88 248h-48v-48h48v48zM40 296h208v48h-208v-48z" /> - <glyph glyph-name="ion-ios-calendar-outline" unicode="" horiz-adv-x="384" -d="M16 336v-64h352v64zM288 352h96v-352h-384v352h96v32h16v-32h160v32h16v-32zM368 16v240h-352v-240h352zM368 272v64h-80v-32h-16v32h-160v-32h-16v32h-80v-64h352z" /> - <glyph glyph-name="ion-ios-calendar" unicode="" horiz-adv-x="384" -d="M0 0v256h384v-256h-384zM384 352v-80h-384v80h96v-48h16v48h160v-48h16v48h96zM96 352v32h16v-32h-16zM272 352v32h16v-32h-16z" /> - <glyph glyph-name="ion-ios-camera-outline" unicode="" horiz-adv-x="384" -d="M354 288c18 0 30 -13 30 -31v-176c0 -18 -12 -33 -30 -33h-320c-18 0 -34 15 -34 33v176c0 18 16 31 34 31h13v16h34v-16h13c32 36 43 48 55 48h88c12 0 23 -12 55 -48h62zM368 81v176c0 9 -5 15 -14 15h-62h-7l-5 3c-3 4 -7 8 -10 11c-12 13 -20 24 -26 30 -c-5 5 -7 4 -7 4h-88s-2 0 -7 -4c-6 -5 -14 -14 -25 -27c-3 -4 -7 -10 -11 -14l-5 -3h-7h-60c-9 0 -18 -7 -18 -15v-176c0 -9 9 -17 18 -17h320c8 0 14 8 14 17zM192 258c47 0 86 -38 86 -85s-39 -85 -86 -85s-86 38 -86 85s39 85 86 85zM192 104c38 0 70 31 70 69 -s-32 69 -70 69s-70 -31 -70 -69s32 -69 70 -69zM288 239v17h17v-17h-17zM160 173c0 21 11 32 32 32s32 -11 32 -32s-11 -32 -32 -32s-32 11 -32 32z" /> - <glyph glyph-name="ion-ios-camera" unicode="" horiz-adv-x="384" -d="M354 288c18 0 30 -13 30 -31v-176c0 -18 -12 -33 -30 -33h-320c-18 0 -34 15 -34 33v176c0 18 16 31 34 31h13v16h34v-16h13c32 36 43 48 55 48h88c12 0 23 -12 55 -48h62zM192 88c47 0 86 38 86 85s-39 85 -86 85s-86 -38 -86 -85s39 -85 86 -85zM305 239v17h-17v-17h17 -zM192 242c38 0 70 -31 70 -69s-32 -69 -70 -69s-70 31 -70 69s32 69 70 69zM192 141c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" /> - <glyph glyph-name="ion-ios-cart-outline" unicode="" horiz-adv-x="384" -d="M96 48c13 0 24 -11 24 -24s-11 -24 -24 -24s-24 11 -24 24s11 24 24 24zM96 16c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM320 48c13 0 24 -11 24 -24s-11 -24 -24 -24s-24 11 -24 24s11 24 24 24zM320 16c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM384 320 -l-16 -128l-271 -48l5 -30c7 -34 21 -34 26 -34h240v-16h-240c-11 0 -21 5 -28 14c-6 8 -11 19 -13 33l-43 234v0c-2 8 -3 12 -7 16c-6 5 -18 7 -37 7v16c23 0 38 -4 47 -11c7 -6 10 -14 12 -21zM355 206l11 99l-304 31l32 -176z" /> - <glyph glyph-name="ion-ios-cart" unicode="" horiz-adv-x="384" -d="M96 48c13 0 24 -11 24 -24s-11 -24 -24 -24s-24 11 -24 24s11 24 24 24zM320 48c13 0 24 -11 24 -24s-11 -24 -24 -24s-24 11 -24 24s11 24 24 24zM384 320l-16 -128l-271 -48l5 -30c7 -34 21 -34 26 -34h240v-16h-240c-11 0 -21 5 -28 14c-6 8 -11 19 -13 33l-43 234v0 -c-2 8 -3 12 -7 16c-6 5 -18 7 -37 7v16c23 0 38 -4 47 -11c7 -6 10 -14 12 -21z" /> - <glyph glyph-name="ion-ios-chatboxes-outline" unicode="" horiz-adv-x="416" -d="M16 384v-192h96v-16h-112v224h288v-112h-16v96h-256zM128 272h288v-224h-48v-64h-13l-64 64h-163v224zM400 64v192h-256v-192h153l55 -55v55h48z" /> - <glyph glyph-name="ion-ios-chatboxes" unicode="" horiz-adv-x="416" -d="M288 400v-112h-176v-112h-112v224h288zM128 272h288v-224h-48v-64h-13l-64 64h-163v224z" /> - <glyph glyph-name="ion-ios-chatbubble-outline" unicode="" horiz-adv-x="384" -d="M192 336c-97 0 -176 -62 -176 -138c0 -26 10 -51 27 -73c0 -1 0 -2 1 -3s2 -1 2 -2c4 -6 6 -13 6 -20c0 -3 1 -3 -13 -47l39 17v0c2 1 10 4 11 4h1v0c5 2 10 3 16 3c5 0 9 -1 14 -2l1 -1h2c19 -6 41 -10 70 -10c48 0 92 15 125 40c32 25 50 58 50 94 -c0 76 -79 138 -176 138zM192 352v0c106 0 192 -69 192 -154s-85 -150 -191 -150c-27 0 -52 3 -75 11h-2v0c-3 1 -6 2 -10 2s-9 -1 -12 -2h1h-1c-1 0 -9 -4 -10 -4l-50 -22l-2 -1h-3h-3c-6 1 -8 6 -7 10v0s17 57 17 58c0 4 -1 8 -3 11v0v0v0l1 -1l-4 4c-19 24 -30 53 -30 84 -c0 85 86 154 192 154z" /> - <glyph glyph-name="ion-ios-chatbubble" unicode="" horiz-adv-x="384" -d="M192 352v0c106 0 192 -69 192 -154s-85 -150 -191 -150c-27 0 -52 3 -75 11h-2v0c-3 1 -6 2 -10 2s-9 -1 -12 -2h1h-1c-1 0 -9 -4 -10 -4l-50 -22l-2 -1h-3h-3c-6 1 -8 6 -7 10v0s17 57 17 58c0 4 -1 8 -3 11v0v0v0l1 -1l-4 4c-19 24 -30 53 -30 84c0 85 86 154 192 154z -" /> - <glyph glyph-name="ion-ios-checkmark-empty" unicode="" horiz-adv-x="207" -d="M74 118c-2 -2 -6 -4 -9 -4s-7 2 -9 4l-56 56l18 18l47 -47l125 126l17 -18z" /> - <glyph glyph-name="ion-ios-checkmark-outline" unicode="" horiz-adv-x="416" -d="M292 271l18 -18l-134 -135c-2 -2 -6 -4 -9 -4s-7 2 -9 4l-56 56l18 18l47 -47zM208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191z" /> - <glyph glyph-name="ion-ios-checkmark" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM176 118l134 135l-18 18l-125 -126l-47 47l-18 -18l56 -56c2 -2 6 -4 9 -4s7 2 9 4z" /> - <glyph glyph-name="ion-ios-circle-filled" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191zM208 352c88 0 160 -72 160 -160s-72 -160 -160 -160s-160 72 -160 160s72 160 160 160z" /> - <glyph glyph-name="ion-ios-circle-outline" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191z" /> - <glyph glyph-name="ion-ios-clock-outline" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191zM208 192v128h17v-145h-113v17h96z" /> - <glyph glyph-name="ion-ios-clock" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM225 175v145h-17v-128h-96v-17h113z" /> - <glyph glyph-name="ion-ios-close-empty" unicode="" horiz-adv-x="192" -d="M180 288l12 -12l-84 -84l84 -84l-12 -12l-84 84l-84 -84l-12 12l84 84l-84 84l12 12l84 -84z" /> - <glyph glyph-name="ion-ios-close-outline" unicode="" horiz-adv-x="416" -d="M355 339c81 -81 81 -213 0 -294s-213 -81 -294 0s-81 213 0 294s213 81 294 0zM343 57c74 74 74 196 0 270s-196 74 -270 0s-74 -196 0 -270s196 -74 270 0zM292 288l12 -12l-84 -84l84 -84l-12 -12l-84 84l-84 -84l-12 12l84 84l-84 84l12 12l84 -84z" /> - <glyph glyph-name="ion-ios-close" unicode="" horiz-adv-x="416" -d="M355 339c81 -81 81 -213 0 -294s-213 -81 -294 0s-81 213 0 294s213 81 294 0zM304 108l-84 84l84 84l-12 12l-84 -84l-84 84l-12 -12l84 -84l-84 -84l12 -12l84 84l84 -84z" /> - <glyph glyph-name="ion-ios-cloud-download-outline" unicode="" -d="M161 67l55 -54v242h16v-242l55 54l12 -12l-75 -73l-74 73zM367 284c45 0 81 -37 81 -82s-37 -82 -82 -82v0h-101v16h97h4c37 0 66 30 66 66s-29 67 -66 67h-15v20c0 55 -46 97 -101 97c-38 0 -73 -22 -90 -56l-6 -14l-14 7c-6 3 -13 5 -20 5c-22 0 -40 -18 -44 -39l-1 -9 -l-9 -3c-30 -10 -50 -36 -50 -67c0 -40 33 -74 74 -74h91v-16h-91c-50 0 -90 40 -90 89c0 39 26 71 61 83c5 28 29 51 59 51c10 0 18 -2 26 -6c19 39 59 65 105 65c64 0 117 -51 117 -115c0 -1 -1 -2 -1 -3z" /> - <glyph glyph-name="ion-ios-cloud-download" unicode="" -d="M216 13v107h16v-107l55 54l12 -12l-75 -73l-74 73l11 12zM367 284c45 0 81 -37 81 -82s-37 -82 -82 -82h-134v135h-16v-135h-35h-21h-70c-50 0 -90 40 -90 89c0 39 26 71 61 83c5 28 29 51 59 51c10 0 18 -2 26 -6c19 39 59 65 105 65c64 0 117 -51 117 -115 -c0 -1 -1 -2 -1 -3z" /> - <glyph glyph-name="ion-ios-cloud-outline" unicode="" -d="M367 215c45 0 81 -37 81 -83c0 -45 -37 -84 -82 -84h-276c-50 0 -90 42 -90 92c0 40 26 71 61 83c5 28 29 52 59 52c10 0 18 -2 26 -6c19 39 59 67 105 67c64 0 117 -53 117 -117c0 -1 -1 -3 -1 -4zM366 64c37 0 66 32 66 69s-29 67 -66 67h-15v21c0 56 -46 99 -101 99 -c-38 0 -73 -23 -90 -58l-6 -14l-14 7c-6 3 -13 5 -20 5c-22 0 -40 -17 -44 -39l-1 -9l-9 -3c-30 -10 -50 -37 -50 -69c0 -41 33 -76 74 -76h272h4z" /> - <glyph glyph-name="ion-ios-cloud-upload-outline" unicode="" -d="M161 188l-11 11l74 75l75 -75l-12 -11l-55 54v-242h-16v242zM367 264c45 0 81 -39 81 -85s-37 -83 -82 -83v0h-101v16h97h4c37 0 66 30 66 67s-29 70 -66 70l-15 1v20c0 56 -46 99 -101 99c-38 0 -73 -23 -90 -58l-6 -13l-14 6c-6 3 -13 5 -20 5c-22 0 -40 -17 -44 -39 -l-1 -9l-9 -3c-30 -10 -50 -39 -50 -71c0 -41 33 -75 74 -75h91v-16h-91c-50 0 -90 40 -90 90c0 40 26 74 61 86c5 28 29 52 59 52c10 0 18 -2 26 -6c19 39 59 66 105 66c64 0 117 -52 117 -116c0 -1 -1 -3 -1 -4z" /> - <glyph glyph-name="ion-ios-cloud-upload" unicode="" -d="M216 0v96h16v-96h-16zM367 264c45 0 81 -39 81 -85s-37 -83 -82 -83h-134v146l55 -54l12 11l-75 75l-74 -75l11 -11l55 54v-146h-35h-31h-60c-50 0 -90 40 -90 90c0 40 26 74 61 86c5 28 29 52 59 52c10 0 18 -2 26 -6c19 39 59 66 105 66c64 0 117 -52 117 -116 -c0 -1 -1 -3 -1 -4z" /> - <glyph glyph-name="ion-ios-cloud" unicode="" -d="M367 215c45 0 81 -37 81 -83c0 -45 -37 -84 -82 -84h-276c-50 0 -90 42 -90 92c0 40 26 71 61 83c5 28 29 52 59 52c10 0 18 -2 26 -6c19 39 59 67 105 67c64 0 117 -53 117 -117c0 -1 -1 -3 -1 -4z" /> - <glyph glyph-name="ion-ios-cloudy-night-outline" unicode="" horiz-adv-x="384" -d="M125 224c-34 0 -63 -28 -63 -62v-12s1 -10 1 -10c-5 0 -12 -1 -14 -1c-19 -3 -33 -18 -33 -37c0 -10 3 -19 10 -26s16 -11 26 -11h157c27 0 49 22 49 49s-22 50 -49 50c-2 0 -4 -1 -6 -1l-14 -2l-3 14c-3 14 -11 26 -22 35s-25 14 -39 14zM125 240v0c37 0 68 -26 76 -61 -h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v8c0 43 35 78 78 78zM361 142c8 0 15 2 23 4c-4 -7 -9 -14 -14 -20c-21 -24 -50 -41 -84 -45c4 6 6 12 8 19c19 4 36 13 50 25c-18 1 -35 6 -50 13c-23 11 -42 29 -56 51 -c-14 21 -22 48 -22 75c0 15 2 30 7 44c-24 -12 -43 -33 -53 -59c-5 2 -12 4 -18 5c14 36 45 65 82 77c8 2 16 4 24 5c-5 -6 -9 -13 -12 -20c-8 -16 -12 -34 -12 -52c0 -32 12 -63 35 -86s54 -36 86 -36h6z" /> - <glyph glyph-name="ion-ios-cloudy-night" unicode="" horiz-adv-x="384" -d="M361 142c8 0 15 2 23 4c-4 -7 -9 -15 -14 -21c-21 -24 -50 -40 -84 -44h-3c4 10 7 21 7 32c0 22 -9 43 -24 58c-14 15 -33 23 -53 24c-6 16 -16 29 -29 40c-10 8 -20 13 -32 17v2c14 36 45 65 82 77c8 2 16 4 24 5c-5 -6 -9 -13 -12 -20c-8 -16 -12 -34 -12 -52 -c0 -32 12 -63 35 -86s54 -36 86 -36h6zM125 239v0c37 0 68 -26 76 -61h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v7c0 43 35 79 78 79z" /> - <glyph glyph-name="ion-ios-cloudy-outline" unicode="" horiz-adv-x="274" -d="M125 272c-34 0 -63 -28 -63 -62v-12s1 -10 1 -10c-6 0 -12 -1 -14 -1c-19 -3 -33 -18 -33 -37c0 -10 3 -19 10 -26s16 -11 26 -11h157c27 0 49 22 49 49s-22 50 -49 50c-2 0 -4 -1 -6 -1l-14 -2l-3 14c-3 14 -11 26 -22 35s-25 14 -39 14zM125 288v0c37 0 68 -26 76 -61 -h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v8c0 43 35 78 78 78z" /> - <glyph glyph-name="ion-ios-cloudy" unicode="" horiz-adv-x="274" -d="M125 288v0c37 0 68 -26 76 -61h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v8c0 43 35 78 78 78z" /> - <glyph glyph-name="ion-ios-cog-outline" unicode="" horiz-adv-x="384" -d="M384 175l-33 -8l-3 -14l27 -20l-12 -30l-34 5l-8 -11l17 -29l-23 -23l-29 17l-10 -7l5 -34l-29 -12l-21 27l-14 -3l-8 -33h-32l-9 33l-13 3l-21 -28l-29 12l4 34l-11 8l-30 -19l-23 23l18 31l-7 11l-35 -5l-12 29l28 22l-2 12l-35 9v32l35 9l2 12l-29 22l12 30l36 -5 -l7 10l-19 32l22 22l32 -19l11 8l-4 35l29 13l22 -29l12 2l9 35h32l9 -35l12 -2l22 28l29 -12l-5 -35l11 -8l30 18l22 -23l-17 -30l7 -10l35 5l12 -30l-28 -21l3 -13l33 -9v-32zM356 127l-26 20l6 33l32 8v7l-32 8l-6 33l26 19l-3 7l-32 -5l-19 27l17 28l-5 6l-28 -17l-28 18 -l5 34l-6 2l-20 -26l-32 6l-8 33h-7l-9 -33l-32 -6l-20 27l-7 -3l5 -34l-28 -18l-9 6l-21 12l-5 -5l18 -30l-18 -27l-33 5l-3 -7l27 -20l-6 -32l-33 -8v-7l33 -9l6 -32l-27 -20l3 -6l33 4l18 -27l-17 -29l5 -6l29 18l28 -18l-5 -33l7 -3l19 27l33 -7l8 -31h8l7 31l33 7 -l20 -26l7 3l-5 32l26 18l28 -16l5 5l-16 27l19 28l32 -4zM192 320c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM80 192c0 -7 1 -15 2 -22l104 28l28 104c-7 1 -15 2 -22 2c-30 0 -58 -12 -79 -33s-33 -49 -33 -79zM192 80c27 0 53 10 73 27 -l-75 75l-104 -28c6 -15 15 -29 27 -41c21 -21 49 -33 79 -33zM276 118c18 20 28 47 28 74c0 30 -12 58 -33 79c-12 12 -26 22 -42 27l-28 -105z" /> - <glyph glyph-name="ion-ios-cog" unicode="" horiz-adv-x="384" -d="M229 298c16 -5 30 -15 42 -27c21 -21 33 -49 33 -79c0 -27 -10 -54 -28 -74l-75 75zM214 302l-28 -104l-104 -28c-1 7 -2 15 -2 22c0 30 12 58 33 79s49 33 79 33c7 0 15 -1 22 -2zM86 154l104 28l75 -75c-20 -17 -46 -27 -73 -27c-30 0 -58 12 -79 33 -c-12 12 -21 26 -27 41zM384 175l-33 -8l-3 -14l27 -20l-12 -30l-34 5l-8 -11l17 -29l-23 -23l-29 17l-10 -7l5 -34l-29 -12l-21 27l-14 -3l-8 -33h-32l-9 33l-13 3l-21 -28l-29 12l4 34l-11 8l-30 -19l-23 23l18 31l-7 11l-35 -5l-12 29l28 22l-2 12l-35 9v32l35 9l2 12 -l-29 22l12 30l36 -5l7 10l-19 32l22 22l32 -19l11 8l-4 35l29 13l22 -29l12 2l9 35h32l9 -35l12 -2l22 28l29 -12l-5 -35l11 -8l30 18l22 -23l-17 -30l7 -10l35 5l12 -30l-28 -21l3 -13l33 -9v-32zM192 64c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128 -s57 -128 128 -128z" /> - <glyph glyph-name="ion-ios-color-filter-outline" unicode="" horiz-adv-x="384" -d="M302 236c47 -13 82 -57 82 -108c0 -62 -50 -112 -112 -112c-31 0 -60 13 -80 34c-20 -21 -49 -34 -80 -34c-62 0 -112 50 -112 112c0 51 35 95 82 108c-1 7 -2 13 -2 20c0 62 50 112 112 112s112 -50 112 -112c0 -7 -1 -13 -2 -20zM96 256c0 -6 0 -12 1 -17 -c5 1 10 1 15 1c31 0 60 -13 80 -34c20 21 49 34 80 34c5 0 10 0 15 -1c1 5 1 11 1 17c0 53 -43 96 -96 96s-96 -43 -96 -96zM208 128c0 6 0 12 -1 17c-5 -1 -10 -1 -15 -1s-10 0 -15 1c-1 -5 -1 -11 -1 -17c0 -20 6 -38 16 -53c10 15 16 33 16 53zM192 160c3 0 7 1 10 1 -c-3 7 -6 14 -10 20c-4 -6 -7 -13 -10 -20c3 0 7 -1 10 -1zM166 164c4 11 9 21 16 30c-18 18 -43 30 -70 30c-3 0 -7 -1 -10 -1c10 -29 34 -51 64 -59zM202 194c7 -9 12 -19 16 -30c30 8 54 30 64 59c-3 0 -7 1 -10 1c-27 0 -52 -12 -70 -30zM112 32c27 0 52 12 70 30 -c-14 19 -22 41 -22 66c0 7 1 13 2 20c-36 10 -64 37 -76 72c-40 -11 -70 -48 -70 -92c0 -53 43 -96 96 -96zM272 32c53 0 96 43 96 96c0 44 -30 81 -70 92c-12 -35 -40 -62 -76 -72c1 -7 2 -13 2 -20c0 -25 -8 -47 -22 -66c18 -18 43 -30 70 -30z" /> - <glyph glyph-name="ion-ios-color-filter" unicode="" horiz-adv-x="384" -d="M302 236c47 -13 82 -57 82 -108c0 -62 -50 -112 -112 -112c-31 0 -60 13 -80 34c-20 -21 -49 -34 -80 -34c-62 0 -112 50 -112 112c0 51 35 95 82 108c-1 7 -2 13 -2 20c0 62 50 112 112 112s112 -50 112 -112c0 -7 -1 -13 -2 -20zM192 53l1 -2c3 3 6 7 9 11 -c14 19 22 41 22 66c0 7 -1 13 -2 20c36 10 64 37 76 72c2 5 3 10 4 15c-1 0 -2 1 -3 1v1c-4 1 -8 1 -12 2c-5 1 -10 1 -15 1c-31 0 -60 -13 -80 -34c-20 21 -49 34 -80 34c-5 0 -10 0 -15 -1c-4 -1 -8 -1 -12 -2v-1c-1 0 -2 -1 -3 -1c1 -5 2 -10 4 -15c12 -35 40 -62 76 -72 -c-1 -7 -2 -13 -2 -20c0 -25 8 -47 22 -66c3 -4 6 -8 9 -11zM207 145c1 -5 1 -11 1 -17c0 -20 -6 -38 -16 -53c-10 15 -16 33 -16 53c0 6 0 12 1 17c5 -1 10 -1 15 -1s10 0 15 1zM282 223c-10 -29 -34 -51 -64 -59c-4 11 -9 21 -16 30c18 18 43 30 70 30c3 0 7 -1 10 -1z -M202 161c-3 0 -7 -1 -10 -1s-7 1 -10 1c3 7 6 14 10 20c4 -6 7 -13 10 -20zM112 224c27 0 52 -12 70 -30c-7 -9 -12 -19 -16 -30c-30 8 -54 30 -64 59c3 0 7 1 10 1z" /> - <glyph glyph-name="ion-ios-color-wand-outline" unicode="" horiz-adv-x="384" -d="M128 298l256 -256l-34 -34l-256 256zM149 232l201 -201l11 11l-201 202zM120 344v40h16v-40h-16zM120 140v40h16v-40h-16zM216 256v16h40v-16h-40zM0 256v16h40v-16h-40zM47 354l29 -29l-12 -11l-28 28zM76 198l-29 -28l-11 11l28 28zM220 342l-28 -28l-12 11l29 29z" /> - <glyph glyph-name="ion-ios-color-wand" unicode="" horiz-adv-x="396" -d="M140 289l256 -257l-34 -34l-256 257zM124 322v64h32v-64h-32zM124 118v64h32v-64h-32zM216 238v32h64v-32h-64zM246 336l-45 -45l-23 22l45 46zM34 336l23 23l45 -46l-23 -22zM34 169l45 45l23 -22l-45 -46zM0 238v32h64v-32h-64z" /> - <glyph glyph-name="ion-ios-compose-outline" unicode="" horiz-adv-x="384" -d="M304 32v208l16 16v-240h-320v304h256l-16 -16h-224v-272h288zM174 164l171 171l11 -11l-180 -180h-32v32l180 180l11 -11l-171 -171zM380 368c2 -3 4 -6 4 -10s-2 -7 -4 -10l-12 -12l-21 21l-11 11v0l12 12c3 2 6 4 10 4s7 -2 10 -4z" /> - <glyph glyph-name="ion-ios-compose" unicode="" horiz-adv-x="384" -d="M192 128l128 128v-240h-320v304h256l-128 -128v-64h64zM324 356l32 -32l-180 -180h-32v32zM380 368c2 -3 4 -6 4 -10s-2 -7 -4 -10l-12 -12l-21 21l-11 11v0l12 12c3 2 6 4 10 4s7 -2 10 -4z" /> - <glyph glyph-name="ion-ios-contact-outline" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 383c-105 0 -191 -86 -191 -191c0 -47 17 -89 45 -122c18 8 62 24 90 32c2 1 3 0 3 10c0 11 -1 18 -4 24c-4 8 -7 20 -9 31c-4 5 -10 15 -14 33c-3 16 -1 22 1 28v2 -c1 4 0 23 -3 38c-2 10 1 34 15 52c9 12 27 26 58 28h18c32 -2 49 -16 58 -28c14 -18 17 -42 15 -52c-3 -15 -4 -34 -3 -38c0 0 1 -1 1 -2c2 -6 3 -12 0 -28c-4 -18 -10 -27 -14 -32c-2 -11 -5 -24 -9 -32c-3 -7 -6 -15 -6 -23c0 -10 0 -10 2 -11c27 -8 73 -24 93 -32 -c28 33 45 76 45 122c0 105 -86 191 -191 191z" /> - <glyph glyph-name="ion-ios-contact" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c59 0 111 27 146 69c-20 8 -66 24 -93 32c-2 1 -3 1 -3 11c0 8 4 16 7 23c4 8 7 21 9 32c4 5 10 14 14 32c3 16 2 22 0 28c0 0 -1 1 -1 2c-1 4 0 23 3 38c2 10 -1 34 -15 52 -c-9 12 -26 26 -58 28h-18c-31 -2 -49 -16 -58 -28c-14 -18 -17 -42 -15 -52c3 -15 4 -34 3 -38v-2c-2 -6 -4 -12 -1 -28c4 -18 10 -28 14 -33c2 -11 5 -23 9 -31c3 -6 4 -13 4 -24c0 -10 -1 -9 -3 -10c-28 -8 -72 -24 -90 -32c35 -42 87 -69 146 -69z" /> - <glyph glyph-name="ion-ios-copy-outline" unicode="" horiz-adv-x="288" -d="M192 352v-64h64v-16h-80v80h16zM213 384l75 -75v-261h-48v-48h-240v336h48v48h165zM224 16v32h-176v272h-32v-304h208zM272 64v238l-65 66h-143v-304h208z" /> - <glyph glyph-name="ion-ios-copy" unicode="" horiz-adv-x="288" -d="M32 32h16h192v-32h-240v336h32v-288v-16zM213 384l75 -75v-261h-48h-192v288v48h165zM256 272v16h-64v64h-16v-80h80z" /> - <glyph glyph-name="ion-ios-crop-strong" unicode="" horiz-adv-x="384" -d="M64 336v48h32v-48h-32zM96 96h176v-32h-208v208h32v-176zM336 64v32h48v-32h-48zM0 320h320v-320h-32v288h-288v32z" /> - <glyph glyph-name="ion-ios-crop" unicode="" horiz-adv-x="384" -d="M64 336v48h16v-48h-16zM80 80h208v-16h-224v224h16v-208zM336 64v16h48v-16h-48zM0 320h320v-320h-16v304h-304v16z" /> - <glyph glyph-name="ion-ios-download-outline" unicode="" horiz-adv-x="320" -d="M192 304h128v-304h-320v304h128v-16h-112v-272h288v272h-112v16zM97 196l55 -55v243h16v-243l55 55l11 -12l-74 -74l-74 74z" /> - <glyph glyph-name="ion-ios-download" unicode="" horiz-adv-x="320" -d="M168 304h152v-304h-320v304h152v-163l-55 55l-11 -12l74 -74l74 74l-11 12l-55 -55v163zM152 304v80h16v-80h-16z" /> - <glyph glyph-name="ion-ios-drag" unicode="" horiz-adv-x="352" -d="M0 128v16h352v-16h-352zM0 184v16h352v-16h-352zM0 240v16h352v-16h-352z" /> - <glyph glyph-name="ion-ios-email-outline" unicode="" horiz-adv-x="384" -d="M0 320h384v-256h-384v256zM192 180l163 124h-326zM16 80h352v214l-115 -88l68 -77l-2 -2l-79 70l-48 -37l-48 37l-79 -70l-2 2l68 77l-115 88v-214z" /> - <glyph glyph-name="ion-ios-email" unicode="" horiz-adv-x="384" -d="M384 64h-384v242l131 -100l-68 -77l2 -2l79 70l48 -37l48 37l79 -70l2 2l-68 77l131 100v-242zM376 320l-184 -140l-184 140h368z" /> - <glyph glyph-name="ion-ios-eye-outline" unicode="" horiz-adv-x="384" -d="M383 192l1 -1l-6 -6c-21 -21 -47 -48 -78 -69c-36 -24 -72 -36 -108 -36c-83 0 -130 49 -185 105l-7 7l1 1c39 40 67 64 94 81c32 20 63 30 97 30c83 0 146 -60 191 -112zM192 288c-62 0 -111 -36 -170 -96c24 -24 48 -50 76 -68c30 -20 60 -28 94 -28 -c75 0 133 56 171 95c-26 29 -50 50 -74 66c-32 21 -64 31 -97 31zM192 112c-44 0 -80 36 -80 80s36 80 80 80s80 -36 80 -80s-36 -80 -80 -80zM192 256c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM224 192h16v0c0 -26 -22 -48 -48 -48s-48 21 -48 48 -s22 48 48 48v-16c-16 0 -32 -13 -32 -31s15 -33 32 -33s32 14 32 32v0z" /> - <glyph glyph-name="ion-ios-eye" unicode="" horiz-adv-x="384" -d="M383 192l1 -1l-6 -6c-21 -21 -47 -48 -78 -69c-36 -24 -72 -36 -108 -36c-83 0 -130 49 -185 105l-7 7l1 1c39 40 67 64 94 81c32 20 63 30 97 30c83 0 146 -60 191 -112zM192 112c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80zM186 221 -c0 -19 16 -35 35 -35c7 0 14 2 19 6v0c0 -27 -22 -48 -48 -48s-48 21 -48 48s22 48 48 48c-4 -5 -6 -12 -6 -19z" /> - <glyph glyph-name="ion-ios-fastforward-outline" unicode="" -d="M16 293v-202l184 101zM240 292v0v-78v-27v-95l176 100zM224 320v0l224 -128l-224 -128v123l-224 -123v256l224 -123v123z" /> - <glyph glyph-name="ion-ios-fastforward" unicode="" -d="M224 320v0l224 -128l-224 -128v123l-224 -123v256l224 -123v123z" /> - <glyph glyph-name="ion-ios-filing-outline" unicode="" horiz-adv-x="352" -d="M288 320l64 -96v-160h-176h-176v160l64 96h224zM333 224l-45 68v-68h45zM80 304v-80h48c0 -26 22 -48 48 -48s48 22 48 48h48v80h-192zM64 292l-45 -68h45v68zM336 80v128h-98c-7 -28 -32 -48 -62 -48s-55 20 -62 48h-98v-128h160h160z" /> - <glyph glyph-name="ion-ios-filing" unicode="" horiz-adv-x="352" -d="M176 160c30 0 55 20 62 48h114v-144h-176h-176v144h114c7 -28 32 -48 62 -48zM64 224h-7h-57l64 96v0v-80h16v80h192v-80h16v80v0l64 -96h-56h-8h-16h-8h-40c0 -26 -22 -48 -48 -48s-48 22 -48 48h-39h-9h-16z" /> - <glyph glyph-name="ion-ios-film-outline" unicode="" horiz-adv-x="400" -d="M0 360h400v-336h-400v336zM72 40v48h-56v-48h56zM72 104v48h-56v-48h56zM72 168v48h-56v-48h56zM72 232v48h-56v-48h56zM72 296v48h-56v-48h56zM312 40v144h-224v-144h224zM312 200v144h-224v-144h224zM384 40v48h-56v-48h56zM384 104v48h-56v-48h56zM384 168v48h-56v-48 -h56zM384 232v48h-56v-48h56zM384 296v48h-56v-48h56z" /> - <glyph glyph-name="ion-ios-film" unicode="" horiz-adv-x="400" -d="M0 360h400v-336h-400v336zM72 40v48h-56v-48h56zM72 104v48h-56v-48h56zM72 168v48h-56v-48h56zM72 232v48h-56v-48h56zM72 296v48h-56v-48h56zM312 184v16h-224v-16h224zM384 40v48h-56v-48h56zM384 104v48h-56v-48h56zM384 168v48h-56v-48h56zM384 232v48h-56v-48h56z -M384 296v48h-56v-48h56z" /> - <glyph glyph-name="ion-ios-flag-outline" unicode="" horiz-adv-x="256" -d="M240 336c6 1 11 1 16 2v-16v-157c-5 -1 -10 -1 -16 -2c-11 -1 -24 -3 -39 -3c-25 0 -47 4 -69 9s-42 13 -64 13c-30 0 -46 -5 -52 -7v-143h-16v142v162v2l3 3c2 1 18 11 65 11c24 0 45 -4 67 -9c21 -4 42 -11 65 -11c15 0 29 3 40 4zM240 179v0v141c-11 -1 -25 -4 -40 -4 -c-25 0 -46 6 -68 11s-42 9 -64 9c-30 0 -46 -5 -52 -7v-137c10 3 26 6 52 6c24 0 45 -8 67 -13c21 -4 43 -9 66 -9c15 0 28 2 39 3z" /> - <glyph glyph-name="ion-ios-flag" unicode="" horiz-adv-x="256" -d="M240 336c6 1 11 1 16 2v-16v-157c-5 -1 -10 -1 -16 -2c-11 -1 -24 -3 -39 -3c-25 0 -47 4 -69 9s-42 13 -64 13c-30 0 -46 -5 -52 -7v-143h-16v142v162v2l3 3c2 1 18 11 65 11c24 0 45 -4 67 -9c21 -4 42 -11 65 -11c15 0 29 3 40 4z" /> - <glyph glyph-name="ion-ios-flame-outline" unicode="" horiz-adv-x="256" -d="M96 416c87 -64 170 -179 159 -288c-13 -134 -104 -160 -127 -160s-127 40 -128 160c-1 146 122 143 96 288zM128 -24c0 0 40 36 40 80s-40 80 -40 80s-41 -36 -41 -80s41 -80 41 -80zM239 130c5 47 -10 99 -41 151c-22 36 -50 70 -83 99c0 -57 -24 -91 -49 -123 -c-26 -34 -50 -65 -50 -129c0 -25 5 -48 15 -68c8 -17 20 -32 35 -45c8 -7 16 -12 23 -16c-9 16 -18 35 -18 57c0 51 44 90 46 92l11 9l11 -9c2 -2 45 -41 45 -92c0 -23 -9 -44 -19 -60c7 4 13 8 20 14c14 12 25 27 34 44c11 21 17 47 20 76z" /> - <glyph glyph-name="ion-ios-flame" unicode="" horiz-adv-x="256" -d="M96 416c87 -64 170 -179 159 -288c-13 -134 -104 -160 -127 -160s-127 40 -128 160c-1 146 122 143 96 288zM128 -24c0 0 40 36 40 80s-40 80 -40 80s-41 -36 -41 -80s41 -80 41 -80z" /> - <glyph glyph-name="ion-ios-flask-outline" unicode="" horiz-adv-x="384" -d="M373 78c8 -16 11 -32 11 -46c-1 -36 -27 -64 -63 -64h-256c-36 0 -64 27 -65 64c0 14 4 30 12 46l116 195v127h-16v16h16h16v-16v-16h48v-16h-48v-32h32v-16h-32v-32h48v-16h-48v-3l-2 -4l-15 -25h49v-16h-58l-92 -154c-13 -25 -14 -43 -2 -63c9 -14 23 -23 41 -23h256 -c17 0 33 8 41 22c5 8 6 17 6 26c0 12 -2 25 -9 38l-116 195l-3 4v131v16h16h16v-16h-16v-127zM44 73l72 119h153l72 -119c7 -11 10 -24 10 -33c-1 -24 -16 -40 -46 -40h-226c-30 0 -46 12 -46 40c0 9 4 22 11 33zM260 176h-135l-67 -111v0v0c-5 -8 -9 -19 -9 -25 -c0 -13 5 -17 6 -18c4 -4 13 -6 24 -6h226c10 0 18 3 23 7c4 4 7 10 7 18c0 6 -3 16 -8 24v0v0z" /> - <glyph glyph-name="ion-ios-flask" unicode="" horiz-adv-x="384" -d="M327 65v0c5 -8 8 -18 8 -24c0 -8 -3 -14 -7 -18c-5 -4 -13 -7 -23 -7h-226c-11 0 -20 2 -24 6c-1 1 -6 5 -6 18c0 6 4 17 9 25v0v0l67 111h135l67 -111v0zM373 78c8 -16 11 -32 11 -46c-1 -36 -27 -64 -63 -64h-256c-36 0 -64 27 -65 64c0 14 4 30 12 46l116 195v127h-16 -v16h160v-16h-16v-127zM144 384v-16h48v16h-48zM144 336v-16h32v16h-32zM144 288v-16h48v16h-48zM127 240l-9 -16h58v16h-49zM351 40c0 9 -3 22 -10 33l-72 119h-154l-71 -119c-7 -11 -11 -24 -11 -33c0 -28 16 -40 46 -40h226c30 0 45 16 46 40z" /> - <glyph glyph-name="ion-ios-flower-outline" unicode="" -d="M363 164c-29 0 -65 7 -93 14c-1 -3 -2 -6 -4 -9c25 -15 56 -36 76 -56c40 -40 53 -68 41 -80c-3 -3 -7 -4 -12 -4c-15 0 -38 15 -68 45c-20 20 -41 51 -56 76c-3 -2 -7 -3 -10 -4c7 -28 15 -64 15 -93c0 -56 -12 -85 -28 -85s-28 29 -28 85c0 29 8 65 15 93 -c-3 1 -7 2 -10 4c-15 -25 -36 -56 -56 -76c-30 -30 -53 -45 -68 -45c-5 0 -9 1 -12 4c-12 12 1 40 41 80c20 20 51 41 76 56c-2 3 -3 6 -4 9c-28 -7 -64 -14 -93 -14c-56 0 -85 12 -85 28s29 28 85 28c29 0 65 -8 93 -15c1 3 2 7 4 10c-25 15 -56 35 -76 55 -c-40 40 -53 68 -41 80c3 3 7 4 12 4c15 0 38 -14 68 -44c20 -20 41 -51 56 -76c3 2 7 3 10 4c-7 28 -15 64 -15 93c0 56 12 85 28 85s28 -29 28 -85c0 -29 -8 -65 -15 -93c3 -1 7 -2 10 -4c15 25 36 56 56 76c30 30 53 44 68 44c5 0 9 -1 12 -4c12 -12 -1 -40 -41 -80 -c-20 -20 -51 -40 -76 -55c2 -3 3 -7 4 -10c28 7 64 15 93 15c56 0 85 -12 85 -28s-29 -28 -85 -28zM288 193v-3c30 -7 56 -10 75 -10c21 0 39 2 52 5c10 3 14 6 16 7c-2 1 -6 4 -16 7c-13 3 -31 5 -52 5c-19 0 -45 -4 -75 -11zM314 299c-14 -14 -30 -35 -46 -61l2 -2 -c26 16 47 32 61 46c15 15 26 28 33 40c5 9 7 14 7 16c-4 0 -22 -4 -57 -39zM178 236l2 2c-16 26 -32 47 -46 61c-35 35 -53 39 -57 39c0 -2 2 -7 7 -16c7 -12 18 -25 33 -40c14 -14 35 -30 61 -46zM85 180c19 0 45 3 75 10v3c-30 7 -56 11 -75 11c-21 0 -39 -2 -52 -5 -c-10 -3 -14 -6 -16 -7c2 -1 5 -4 15 -7c13 -3 32 -5 53 -5zM134 85c14 14 30 35 46 61l-2 2c-26 -16 -47 -32 -61 -46c-15 -15 -26 -29 -33 -41c-5 -9 -7 -14 -7 -16c4 0 22 5 57 40zM270 148l-2 -2c16 -26 32 -47 46 -61c35 -35 53 -40 57 -40c0 2 -2 7 -7 16 -c-7 12 -18 26 -33 41c-14 14 -35 30 -61 46zM217 383c-3 -13 -5 -31 -5 -52c0 -19 4 -45 11 -75h2c7 30 11 56 11 75c0 21 -2 39 -5 52c-3 10 -6 14 -7 16c-1 -2 -4 -6 -7 -16zM231 0c3 13 5 32 5 53c0 19 -4 45 -11 75h-2c-7 -30 -11 -56 -11 -75c0 -21 2 -40 5 -53 -c3 -10 6 -13 7 -15c1 2 4 5 7 15zM224 160c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM313 42c10 -34 7 -53 -5 -58c-2 -1 -3 -1 -5 -1c-11 0 -25 13 -37 35c5 35 -2 76 -2 76s24 -34 49 -52zM302 -1c1 4 2 14 -3 34c-5 4 -10 9 -15 14 -c0 -9 0 -17 -1 -25c10 -16 16 -22 19 -23zM182 365c-6 -35 1 -75 1 -75s-27 35 -48 51c-10 35 -7 54 5 59c2 1 3 1 5 1c11 0 24 -12 37 -36zM164 337c0 9 0 17 1 25c-10 16 -16 21 -19 22c-1 -4 -2 -14 3 -34c5 -4 10 -8 15 -13zM50 149c35 -4 76 2 76 2s-34 -24 -51 -48 -c-12 -4 -26 -6 -35 -6c-13 0 -21 4 -24 11c-5 11 7 25 34 41zM66 117c4 5 8 10 13 15c-9 0 -17 0 -25 1c-16 -10 -21 -16 -22 -19c1 0 4 -1 8 -1c7 0 16 1 26 4zM432 276c5 -11 -7 -26 -34 -42c-35 5 -76 -2 -76 -2s33 25 51 49c13 4 26 5 35 5c13 0 21 -3 24 -10zM394 250 -c16 10 21 16 22 19c-1 0 -4 1 -8 1c-7 0 -16 -1 -26 -4c-4 -5 -8 -9 -13 -14c9 0 17 -1 25 -2zM131 39c31 24 53 55 53 55s-7 -39 -3 -71c-15 -26 -28 -39 -39 -39c-2 0 -4 0 -6 1c-11 5 -13 24 -5 54zM143 1c4 2 12 8 22 26c0 6 -1 13 -1 20c-6 -6 -13 -12 -19 -17 -c-4 -18 -3 -26 -2 -29zM312 398c11 -5 13 -22 5 -54c-29 -21 -53 -55 -53 -55s8 48 3 71c13 25 28 39 39 39c2 0 4 0 6 -1zM303 353c5 18 3 27 2 30c-4 -2 -12 -8 -22 -26c0 -6 1 -14 1 -21c6 6 13 12 19 17zM71 285c18 -24 55 -53 55 -53s-40 7 -70 3c-28 15 -43 32 -38 44 -c3 7 10 11 22 11c8 0 21 -1 31 -5zM33 273c2 -4 8 -12 26 -22c6 0 13 1 20 1c-6 6 -12 12 -17 18c-8 2 -16 4 -22 4c-4 0 -6 -1 -7 -1zM392 149c30 -17 43 -33 38 -45c-3 -7 -10 -10 -22 -10c-8 0 -19 1 -31 5c-20 27 -55 52 -55 52s45 -8 70 -2zM408 110c4 0 6 1 7 1 -c-2 4 -8 12 -26 22c-6 0 -13 -1 -20 -1c6 -6 12 -13 17 -19c8 -2 16 -3 22 -3z" /> - <glyph glyph-name="ion-ios-flower" unicode="" -d="M363 220c56 0 85 -12 85 -28s-29 -28 -85 -28c-29 0 -65 7 -93 14c-1 -3 -2 -6 -4 -9c25 -15 56 -36 76 -56c40 -40 53 -68 41 -80s-40 1 -80 41c-20 20 -41 51 -56 76c-3 -2 -7 -3 -10 -4c7 -28 15 -64 15 -93c0 -56 -12 -85 -28 -85s-28 29 -28 85c0 29 8 65 15 93 -c-3 1 -7 2 -10 4c-15 -25 -36 -56 -56 -76c-40 -40 -68 -53 -80 -41s1 40 41 80c20 20 51 41 76 56c-2 3 -3 6 -4 9c-28 -7 -64 -14 -93 -14c-56 0 -85 12 -85 28s29 28 85 28c29 0 65 -8 93 -15c1 3 2 7 4 10c-25 15 -56 35 -76 55c-40 40 -53 68 -41 80s40 0 80 -40 -c20 -20 41 -51 56 -76c3 2 6 3 9 4c-7 28 -14 64 -14 93c0 56 12 85 28 85s28 -29 28 -85c0 -29 -7 -65 -14 -93c3 -1 6 -2 9 -4c15 25 36 56 56 76c40 40 68 52 80 40s-1 -40 -41 -80c-20 -20 -51 -40 -76 -55c2 -3 3 -7 4 -10c28 7 64 15 93 15zM264 94c0 0 24 -34 49 -52 -c10 -34 7 -53 -5 -58c-2 -1 -3 -1 -5 -1c-11 0 -25 13 -37 35c5 35 -2 76 -2 76zM183 290c0 0 -27 35 -48 51c-10 35 -7 54 5 59c2 1 3 1 5 1c11 0 24 -12 37 -36c-6 -35 1 -75 1 -75zM126 151c0 0 -34 -24 -51 -48c-12 -4 -26 -6 -35 -6c-13 0 -21 4 -24 11 -c-5 11 7 25 34 41c35 -4 76 2 76 2zM322 232c0 0 33 25 51 49c13 4 26 5 35 5c13 0 21 -3 24 -10c5 -11 -7 -26 -34 -42c-35 5 -76 -2 -76 -2zM131 39c31 24 53 55 53 55s-7 -39 -3 -71c-15 -26 -28 -39 -39 -39c-2 0 -4 0 -6 1c-11 5 -13 24 -5 54zM317 344 -c-29 -21 -53 -55 -53 -55s8 48 3 71c13 25 28 39 39 39c2 0 4 0 6 -1c11 -5 13 -22 5 -54zM56 235c-28 15 -43 32 -38 44c3 7 10 11 22 11c8 0 21 -1 31 -5c18 -24 55 -53 55 -53s-40 7 -70 3zM392 149c30 -17 43 -33 38 -45c-3 -7 -10 -10 -22 -10c-8 0 -19 1 -31 5 -c-20 27 -55 52 -55 52s45 -8 70 -2z" /> - <glyph glyph-name="ion-ios-folder-outline" unicode="" -d="M425 352c13 0 23 -10 23 -23v-304c0 -14 -10 -25 -23 -25h-400c-13 0 -25 12 -25 25v336c0 13 11 23 25 23h112c8 0 12 -2 17 -7v0l23 -23c2 -2 3 -2 6 -2h242zM25 368c-4 0 -9 -3 -9 -7v-74c3 1 5 1 8 1h400c3 0 5 0 8 -1v42c0 4 -3 7 -7 7h-242c-7 0 -12 2 -17 7 -l-23 23c-2 2 -3 2 -6 2h-112zM432 25v239c0 4 -4 8 -8 8h-400c-4 0 -8 -4 -8 -8v-239c0 -4 5 -9 9 -9h400c4 0 7 5 7 9z" /> - <glyph glyph-name="ion-ios-folder" unicode="" -d="M440 272c4 0 8 -4 8 -8v-239c0 -14 -10 -25 -23 -25h-400c-13 0 -25 12 -25 25v239c0 4 4 8 8 8h432zM425 352c13 0 23 -10 23 -23v-42c-3 1 -5 1 -8 1h-432c-3 0 -5 0 -8 -1v74c0 13 11 23 25 23h112c8 0 12 -2 17 -7v0l23 -23c2 -2 3 -2 6 -2h242z" /> - <glyph glyph-name="ion-ios-football-outline" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM249 6c3 1 5 1 8 2l24 64l-20 39v1h-106l-20 -39l25 -65c2 -1 5 -1 7 -2c12 -3 25 -5 38 -5c14 0 30 2 44 5zM41 284c-15 -27 -23 -57 -24 -89l43 37v0zM142 371 -c-36 -14 -68 -38 -90 -69l22 -64l5 -2l49 -23l71 60v58zM277 201l-70 58l-69 -58v-1l18 -72h104l18 72zM399 195c-1 32 -9 63 -24 90l-19 -53v0zM364 302c-22 31 -54 56 -90 69l-58 -40v-58l71 -60l54 24zM18 175c3 -34 15 -66 33 -92l70 -1l21 39l-20 77l-1 1l-49 22z -M295 82l70 1c18 26 30 58 33 92l-54 46l-50 -23l-20 -77zM207 345l47 32c-15 4 -30 6 -46 6s-32 -2 -47 -6zM118 66l-54 1c20 -23 46 -42 75 -53l-20 50zM277 14c29 11 55 30 75 53l-56 -1l-2 -3z" /> - <glyph glyph-name="ion-ios-football" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM249 6c3 1 5 1 8 2l24 64l-20 39v1h-106l-20 -39l25 -65c2 -1 5 -1 7 -2c12 -3 25 -5 38 -5c14 0 30 2 44 5zM142 371c-36 -14 -68 -38 -90 -69l22 -64l5 -2l49 -23l71 60v58z -M364 302c-22 31 -54 56 -90 69l-58 -40v-58l71 -60l54 24zM18 175c3 -34 15 -66 33 -92l70 -1l21 39l-20 77l-1 1l-49 22zM295 82l70 1c18 26 30 58 33 92l-54 46l-50 -23l-20 -77z" /> - <glyph glyph-name="ion-ios-game-controller-a-outline" unicode="" -d="M163 208c3 0 5 -2 5 -5v-22c0 -3 -2 -5 -5 -5h-35v-35c0 -3 -3 -5 -6 -5h-21c-3 0 -5 2 -5 5v35h-35c-3 0 -5 3 -5 6v21c0 3 2 5 5 5h35v35c0 3 2 5 5 5h22c3 0 5 -2 5 -5v-35h35zM330 169c11 0 20 -8 20 -19s-9 -19 -20 -19s-19 8 -19 19s8 19 19 19zM288 211 -c11 0 19 -8 19 -19s-8 -19 -19 -19s-20 8 -20 19s9 19 20 19zM373 211c11 0 19 -8 19 -19s-8 -19 -19 -19s-20 8 -20 19s9 19 20 19zM330 253c11 0 20 -8 20 -19s-9 -20 -20 -20s-19 9 -19 20s8 19 19 19zM337 286h-226c-26 0 -49 -9 -67 -26s-28 -41 -28 -67s10 -51 28 -68 -s41 -27 67 -27h226c26 0 49 10 67 27s28 42 28 68s-10 50 -28 67s-41 26 -67 26zM337 302v0c61 0 111 -45 111 -109s-50 -111 -111 -111h-226c-61 0 -111 47 -111 111s50 109 111 109h226z" /> - <glyph glyph-name="ion-ios-game-controller-a" unicode="" -d="M337 302c61 0 111 -45 111 -109s-50 -111 -111 -111h-226c-61 0 -111 47 -111 111s50 109 111 109h226zM168 181v0v22c0 3 -2 5 -5 5h-35v35c0 3 -2 5 -5 5h-22c-3 0 -5 -2 -5 -5v-35h-35c-3 0 -5 -2 -5 -5v-21c0 -3 2 -6 5 -6h35v-35c0 -3 2 -5 5 -5h21c3 0 6 2 6 5v35 -h35c3 0 5 2 5 5zM288 173c11 0 19 8 19 19s-8 19 -19 19s-20 -8 -20 -19s9 -19 20 -19zM330 131c11 0 20 8 20 19s-9 19 -20 19s-19 -8 -19 -19s8 -19 19 -19zM330 214c11 0 20 9 20 20s-9 19 -20 19s-19 -8 -19 -19s8 -20 19 -20zM373 173c11 0 19 8 19 19s-8 19 -19 19 -s-20 -8 -20 -19s9 -19 20 -19z" /> - <glyph glyph-name="ion-ios-game-controller-b-outline" unicode="" -d="M276 244c11 0 20 -9 20 -20s-9 -20 -20 -20s-20 9 -20 20s9 20 20 20zM320 200c11 0 20 -9 20 -20s-9 -20 -20 -20s-20 9 -20 20s9 20 20 20zM103 264c22 0 39 -18 39 -40s-17 -40 -39 -40s-39 18 -39 40s17 40 39 40zM103 205c11 0 19 8 19 19s-8 19 -19 19 -s-19 -8 -19 -19s8 -19 19 -19zM320 288c11 0 20 -9 20 -20s-9 -20 -20 -20s-20 9 -20 20s9 20 20 20zM364 244c11 0 20 -9 20 -20s-9 -20 -20 -20s-20 9 -20 20s9 20 20 20zM434 199c21 -88 18 -152 -7 -164c-4 -2 -9 -3 -13 -3c-22 0 -45 24 -68 52c-26 32 -32 33 -110 33 -h-24c-78 0 -84 -1 -110 -33c-23 -28 -46 -52 -68 -52c-4 0 -9 1 -13 3c-25 12 -28 76 -7 164s43 136 88 149c10 3 18 4 26 4c28 0 47 -15 96 -15s68 15 96 15c8 0 16 -1 26 -4c45 -13 67 -61 88 -149zM420 49c10 5 23 48 -1 146c-21 90 -43 128 -78 138c-8 2 -14 3 -21 3 -c-10 0 -19 -2 -30 -5c-16 -4 -36 -10 -66 -10s-50 6 -66 10c-11 3 -20 5 -30 5c-7 0 -13 -1 -21 -3c-35 -10 -57 -48 -78 -138c-24 -98 -11 -141 -1 -146c2 -1 4 -1 6 -1c6 0 14 4 23 12s19 18 32 34s24 28 44 34c17 5 38 5 79 5h24c41 0 62 0 79 -5c20 -6 31 -18 44 -34 -s23 -26 32 -34s17 -12 23 -12c2 0 4 0 6 1z" /> - <glyph glyph-name="ion-ios-game-controller-b" unicode="" -d="M103 243c11 0 19 -8 19 -19s-8 -19 -19 -19s-19 8 -19 19s8 19 19 19zM434 199c21 -88 18 -152 -7 -164c-4 -2 -9 -3 -13 -3c-22 0 -45 24 -68 52c-26 32 -32 33 -110 33h-24c-78 0 -84 -1 -110 -33c-23 -28 -46 -52 -68 -52c-4 0 -9 1 -13 3c-25 12 -28 76 -7 164 -s43 136 88 149c10 3 18 4 26 4c28 0 47 -15 96 -15s68 15 96 15c8 0 16 -1 26 -4c45 -13 67 -61 88 -149zM103 184c22 0 39 18 39 40s-17 40 -39 40s-39 -18 -39 -40s17 -40 39 -40zM276 204c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20zM320 160 -c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20zM320 248c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20zM364 204c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20z" /> - <glyph glyph-name="ion-ios-gear-outline" unicode="" horiz-adv-x="384" -d="M193 288c26 0 50 -10 68 -28s28 -42 28 -68s-10 -50 -28 -68s-42 -28 -68 -28s-50 10 -68 28s-28 42 -28 68s10 50 28 68s42 28 68 28zM193 112c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80zM138 365c-10 -3 -20 -7 -30 -12c2 -8 1 -16 0 -24 -c-2 -13 -8 -25 -18 -35c-12 -12 -29 -19 -46 -19c-4 0 -9 0 -13 1c-5 -10 -9 -20 -12 -30c7 -4 12 -10 17 -17c8 -11 12 -24 12 -37s-4 -26 -12 -37c-5 -7 -10 -13 -17 -17c3 -10 7 -20 12 -30c4 1 9 1 13 1c17 0 34 -7 46 -19c10 -10 16 -22 18 -35c1 -8 2 -16 0 -24 -c10 -5 20 -9 30 -12c4 7 10 12 17 17c11 8 24 12 37 12s26 -4 37 -12c7 -5 13 -10 17 -17c10 3 20 7 30 12c-2 8 -1 16 0 24c2 13 8 25 18 35c12 12 29 19 46 19c4 0 9 0 13 -1c5 10 9 20 12 30c-7 4 -12 10 -17 17c-8 11 -12 24 -12 37s4 26 12 37c5 7 10 13 17 17 -c-3 10 -7 20 -12 30c-4 -1 -9 -1 -13 -1c-17 0 -34 7 -46 19c-10 10 -16 22 -18 35c-1 8 -2 16 0 24c-10 5 -20 9 -30 12c-4 -7 -10 -12 -17 -17c-11 -8 -24 -12 -37 -12s-26 4 -37 12c-7 5 -13 10 -17 17zM238 384v0c20 -5 40 -13 57 -24c-8 -18 -5 -40 10 -55 -c10 -10 22 -14 35 -14c7 0 14 1 20 4c11 -17 19 -37 24 -57c-19 -7 -32 -25 -32 -46s14 -39 32 -46c-5 -20 -13 -40 -24 -57c-6 3 -13 4 -20 4c-13 0 -25 -4 -35 -14c-15 -15 -18 -37 -10 -55c-17 -11 -37 -19 -57 -24c-7 18 -25 32 -46 32s-39 -14 -46 -32 -c-20 5 -40 13 -57 24c8 18 5 40 -10 55c-10 10 -22 14 -35 14c-7 0 -14 -1 -20 -4c-11 17 -19 37 -24 57c18 7 32 25 32 46s-13 39 -32 46c5 20 13 40 24 57c6 -3 13 -4 20 -4c13 0 25 4 35 14c15 15 18 37 10 55c17 11 37 19 57 24c7 -19 25 -32 46 -32s39 13 46 32z" /> - <glyph glyph-name="ion-ios-gear" unicode="" horiz-adv-x="384" -d="M352 192c0 -21 14 -39 32 -46c-5 -20 -13 -40 -24 -57c-6 3 -13 4 -20 4c-13 0 -25 -4 -35 -14c-15 -15 -18 -37 -10 -55c-17 -11 -37 -19 -57 -24c-7 18 -25 32 -46 32s-39 -14 -46 -32c-20 5 -40 13 -57 24c8 18 5 40 -10 55c-10 10 -22 14 -35 14c-7 0 -14 -1 -20 -4 -c-11 17 -19 37 -24 57c18 7 32 25 32 46s-13 39 -32 46c5 20 13 40 24 57c6 -3 13 -4 20 -4c13 0 25 4 35 14c15 15 18 37 10 55c17 11 37 19 57 24c7 -19 25 -32 46 -32s39 13 46 32c20 -5 40 -13 57 -24c-8 -18 -5 -40 10 -55c10 -10 22 -14 35 -14c7 0 14 1 20 4 -c11 -17 19 -37 24 -57c-19 -7 -32 -25 -32 -46zM193 112c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80z" /> - <glyph glyph-name="ion-ios-glasses-outline" unicode="" -d="M433 201v0h15v-18h-15c-2 -22 -13 -43 -29 -58c-17 -16 -39 -25 -62 -25c-51 0 -92 41 -92 92v0v0c0 10 -12 22 -26 22s-26 -12 -26 -22v0v0c0 -51 -41 -92 -92 -92c-23 0 -45 9 -62 25c-16 15 -27 36 -29 58h-15v18h15c2 22 13 43 29 59c17 16 39 24 62 24 -c42 0 78 -27 89 -67c7 7 18 12 29 12s22 -5 29 -12c11 40 47 67 89 67c23 0 45 -9 62 -25c16 -15 27 -36 29 -58zM342 115c42 0 77 35 77 77s-35 77 -77 77s-77 -35 -77 -77s35 -77 77 -77zM106 115c42 0 77 35 77 77s-35 77 -77 77s-77 -35 -77 -77s35 -77 77 -77z" /> - <glyph glyph-name="ion-ios-glasses" unicode="" -d="M433 201v0h15v-18h-15c-2 -22 -13 -43 -29 -58c-17 -16 -39 -25 -62 -25c-51 0 -92 41 -92 92v0v0c0 10 -12 22 -26 22s-26 -12 -26 -22v0v0c0 -51 -41 -92 -92 -92c-23 0 -45 9 -62 25c-16 15 -27 36 -29 58h-15v18h15c2 22 13 43 29 59c17 16 39 24 62 24 -c42 0 78 -27 89 -67c7 7 18 12 29 12s22 -5 29 -12c11 40 47 67 89 67c23 0 45 -9 62 -25c16 -15 27 -36 29 -58z" /> - <glyph glyph-name="ion-ios-grid-view-outline" unicode="" horiz-adv-x="384" -d="M384 256h-112v-128h112v-16h-112v-112h-16v112h-128v-112h-16v112h-112v16h112v128h-112v16h112v112h16v-112h128v112h16v-112h112v-16zM256 128v128h-128v-128h128z" /> - <glyph glyph-name="ion-ios-grid-view" unicode="" horiz-adv-x="384" -d="M128 128v128h128v-128h-128zM0 384h384v-384h-384v384zM352 256v16h-80v80h-16v-80h-128v80h-16v-80h-80v-16h80v-128h-80v-16h80v-80h16v80h128v-80h16v80h80v16h-80v128h80z" /> - <glyph glyph-name="ion-ios-heart-outline" unicode="" -d="M327 368c69 0 121 -43 121 -116c0 -31 -13 -71 -41 -105s-45 -52 -100 -88s-83 -43 -83 -43s-28 7 -83 43s-72 54 -100 88s-41 74 -41 105c0 73 52 116 121 116c39 0 82 -18 103 -53c21 35 64 53 103 53zM395 157c12 14 22 31 28 49c6 16 9 31 9 46c0 30 -10 56 -29 74 -c-9 8 -20 15 -33 19c-13 5 -28 7 -43 7c-38 0 -73 -18 -89 -45l-14 -23l-14 23c-16 27 -51 45 -89 45c-15 0 -30 -2 -43 -7c-13 -4 -24 -11 -33 -19c-19 -18 -29 -44 -29 -74c0 -15 3 -30 9 -46c6 -18 16 -35 28 -49c27 -32 42 -49 97 -85c40 -27 65 -36 74 -39 -c9 3 34 12 74 39c55 36 70 53 97 85z" /> - <glyph glyph-name="ion-ios-heart" unicode="" -d="M327 368c69 0 121 -43 121 -116c0 -31 -13 -71 -41 -105s-45 -52 -100 -88s-83 -43 -83 -43s-28 7 -83 43s-72 54 -100 88s-41 74 -41 105c0 73 52 116 121 116c39 0 82 -18 103 -53c21 35 64 53 103 53z" /> - <glyph glyph-name="ion-ios-help-empty" unicode="" horiz-adv-x="128" -d="M68 82c-9 0 -17 8 -17 17s8 17 17 17s17 -8 17 -17s-8 -17 -17 -17zM102 197c-23 -22 -22 -27 -23 -53h-19c1 28 7 43 30 64c11 10 19 24 19 39c0 24 -19 39 -42 39c-32 0 -49 -16 -48 -46h-19c0 42 25 62 68 62c33 0 60 -20 60 -54c0 -22 -11 -37 -26 -51z" /> - <glyph glyph-name="ion-ios-help-outline" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191zM212 302c33 0 60 -21 60 -55c0 -22 -11 -36 -26 -50c-23 -23 -22 -27 -23 -53h-19 -c1 28 7 43 30 64c11 10 19 23 19 38c0 24 -19 40 -42 40c-32 0 -49 -16 -48 -46h-19c0 42 25 62 68 62zM212 116c9 0 17 -8 17 -17s-8 -17 -17 -17s-17 8 -17 17s8 17 17 17z" /> - <glyph glyph-name="ion-ios-help" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM212 82c9 0 17 8 17 17s-8 17 -17 17s-17 -8 -17 -17s8 -17 17 -17zM246 197c15 14 26 29 26 51c0 34 -27 54 -60 54c-43 0 -68 -20 -68 -62h19c-1 30 16 46 48 46 -c23 0 42 -15 42 -39c0 -15 -8 -29 -19 -39c-23 -21 -29 -36 -30 -64h19c1 26 0 31 23 53z" /> - <glyph glyph-name="ion-ios-home-outline" unicode="" horiz-adv-x="384" -d="M192 336l160 -128v-208h-112v128h-96v-128h-112v208zM336 16v184l-144 116l-144 -116v-184h80v128h128v-128h80zM192 384l192 -153l-12 -12l-180 145l-180 -145l-12 12l32 25v96h64v-45zM80 294v42h-32v-67z" /> - <glyph glyph-name="ion-ios-home" unicode="" horiz-adv-x="384" -d="M192 336l160 -128v-208h-112v128h-96v-128h-112v208zM192 384l192 -153l-12 -12l-180 145l-180 -145l-12 12l32 25v96h64v-45z" /> - <glyph glyph-name="ion-ios-infinite-outline" unicode="" -d="M419 260c19 -19 29 -43 29 -68s-10 -49 -29 -68c-19 -18 -44 -28 -70 -28s-50 10 -69 28l-126 123c-15 15 -35 22 -56 22s-40 -7 -55 -22c-31 -30 -31 -80 0 -110c15 -15 34 -22 55 -22s41 7 56 22l43 42l13 -14l-42 -41c-19 -18 -44 -28 -70 -28s-50 10 -69 28 -c-19 19 -29 43 -29 68s10 49 29 68c19 18 43 28 69 28s51 -10 70 -28l126 -123c15 -15 34 -22 55 -22s41 7 56 22c31 30 31 80 0 110c-15 15 -35 22 -56 22s-40 -7 -55 -22l-43 -42l-13 14l42 41c19 18 44 28 70 28s50 -10 69 -28z" /> - <glyph glyph-name="ion-ios-infinite" unicode="" horiz-adv-x="464" -d="M433 266c20 -20 31 -46 31 -74s-11 -54 -31 -74s-48 -30 -76 -30s-55 10 -75 30l-125 123c-13 13 -32 20 -51 20s-37 -7 -50 -20s-21 -31 -21 -49c0 -19 8 -36 21 -49s31 -20 50 -20s38 7 51 20l39 38l25 -25l-39 -38c-20 -20 -48 -30 -76 -30s-55 10 -75 30 -s-31 46 -31 74s11 54 31 74s47 30 75 30s56 -10 76 -30l125 -123c13 -13 31 -20 50 -20s38 7 51 20s20 31 20 49c0 19 -7 36 -20 49s-32 20 -51 20s-37 -7 -50 -20l-39 -38l-25 25l39 38c20 20 48 30 76 30s55 -10 75 -30z" /> - <glyph glyph-name="ion-ios-information-empty" unicode="" horiz-adv-x="64" -d="M8 276c0 13 7 20 20 20s20 -7 20 -20s-7 -20 -20 -20s-20 7 -20 20zM48 104h16v-8h-64v8h16v120h-16v8h48v-128z" /> - <glyph glyph-name="ion-ios-information-outline" unicode="" horiz-adv-x="416" -d="M184 276c0 13 7 20 20 20s20 -7 20 -20s-7 -20 -20 -20s-20 7 -20 20zM224 104h16v-8h-64v8h16v120h-16v8h48v-128zM208 400c57 0 106 -20 147 -61s61 -90 61 -147s-20 -106 -61 -147s-90 -61 -147 -61s-106 20 -147 61s-61 90 -61 147s20 106 61 147s90 61 147 61z -M208 1c53 0 98 19 135 56s56 82 56 135s-19 98 -56 135s-82 56 -135 56s-98 -19 -135 -56s-56 -82 -56 -135s19 -98 56 -135s82 -56 135 -56z" /> - <glyph glyph-name="ion-ios-information" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM204 296c-11 0 -20 -9 -20 -20s9 -20 20 -20s20 9 20 20s-9 20 -20 20zM240 96v8h-16v128h-48v-8h16v-120h-16v-8h64z" /> - <glyph glyph-name="ion-ios-ionic-outline" unicode="" horiz-adv-x="416" -d="M378 313c24 -34 38 -76 38 -121c0 -115 -92 -208 -207 -208s-209 93 -209 208s94 208 209 208c45 0 86 -14 120 -38c6 5 13 8 21 8c19 0 35 -16 35 -35c0 -8 -2 -16 -7 -22zM350 357c-12 0 -22 -10 -22 -22s10 -22 22 -22s22 10 22 22s-10 22 -22 22zM344 56 -c18 18 31 39 41 62c10 24 15 48 15 74s-5 51 -15 75c-5 13 -12 25 -20 36c-5 -2 -10 -3 -15 -3c-19 0 -35 16 -35 35c0 5 2 11 4 15c-11 8 -23 15 -36 20c-24 10 -49 14 -75 14s-51 -4 -75 -14c-23 -10 -43 -24 -61 -42s-31 -38 -41 -61c-10 -24 -15 -49 -15 -75 -s5 -50 15 -74c10 -23 23 -44 41 -62s38 -31 61 -41c24 -10 49 -15 75 -15s51 5 75 15c23 10 43 23 61 41zM208 288c53 0 96 -43 96 -96s-43 -96 -96 -96s-96 43 -96 96s43 96 96 96zM208 112c44 0 80 36 80 80s-36 80 -80 80s-79 -36 -79 -80s35 -80 79 -80z" /> - <glyph glyph-name="ion-ios-keypad-outline" unicode="" horiz-adv-x="384" -d="M331 107c30 0 53 -24 53 -54s-23 -53 -53 -53s-54 23 -54 53s24 54 54 54zM331 16c21 0 37 16 37 37s-16 38 -37 38s-38 -17 -38 -38s17 -37 38 -37zM192 107c30 0 53 -24 53 -54s-23 -53 -53 -53s-53 23 -53 53s23 54 53 54zM192 16c21 0 37 16 37 37s-16 38 -37 38 -s-37 -17 -37 -38s16 -37 37 -37zM53 107c30 0 54 -24 54 -54s-24 -53 -54 -53s-53 23 -53 53s23 54 53 54zM53 16c21 0 38 16 38 37s-17 38 -38 38s-37 -17 -37 -38s16 -37 37 -37zM331 245c30 0 53 -23 53 -53s-23 -53 -53 -53s-54 23 -54 53s24 53 54 53zM331 155 -c21 0 37 16 37 37s-16 37 -37 37s-38 -16 -38 -37s17 -37 38 -37zM192 245c30 0 53 -23 53 -53s-23 -53 -53 -53s-53 23 -53 53s23 53 53 53zM192 155c21 0 37 16 37 37s-16 37 -37 37s-37 -16 -37 -37s16 -37 37 -37zM53 245c30 0 54 -23 54 -53s-24 -53 -54 -53 -s-53 23 -53 53s23 53 53 53zM53 155c21 0 38 16 38 37s-17 37 -38 37s-37 -16 -37 -37s16 -37 37 -37zM331 277c-30 0 -54 24 -54 54s24 53 54 53s53 -23 53 -53s-23 -54 -53 -54zM331 368c-21 0 -38 -16 -38 -37s17 -38 38 -38s37 17 37 38s-16 37 -37 37zM192 384 -c30 0 53 -23 53 -53s-23 -54 -53 -54s-53 24 -53 54s23 53 53 53zM192 293c21 0 37 17 37 38s-16 37 -37 37s-37 -16 -37 -37s16 -38 37 -38zM53 384c30 0 54 -23 54 -53s-24 -54 -54 -54s-53 24 -53 54s23 53 53 53zM53 293c21 0 38 17 38 38s-17 37 -38 37 -s-37 -16 -37 -37s16 -38 37 -38z" /> - <glyph glyph-name="ion-ios-keypad" unicode="" horiz-adv-x="384" -d="M331 107c30 0 53 -24 53 -54s-23 -53 -53 -53s-54 23 -54 53s24 54 54 54zM192 107c30 0 53 -24 53 -54s-23 -53 -53 -53s-53 23 -53 53s23 54 53 54zM53 107c30 0 54 -24 54 -54s-24 -53 -54 -53s-53 23 -53 53s23 54 53 54zM331 245c30 0 53 -23 53 -53 -s-23 -53 -53 -53s-54 23 -54 53s24 53 54 53zM192 245c30 0 53 -23 53 -53s-23 -53 -53 -53s-53 23 -53 53s23 53 53 53zM53 245c30 0 54 -23 54 -53s-24 -53 -54 -53s-53 23 -53 53s23 53 53 53zM331 277c-30 0 -54 24 -54 54s24 53 54 53s53 -23 53 -53s-23 -54 -53 -54z -M192 384c30 0 53 -23 53 -53s-23 -54 -53 -54s-53 24 -53 54s23 53 53 53zM53 384c30 0 54 -23 54 -53s-24 -54 -54 -54s-53 24 -53 54s23 53 53 53z" /> - <glyph glyph-name="ion-ios-lightbulb-outline" unicode="" horiz-adv-x="288" -d="M288 275c0 -31 -13 -59 -30 -83v0c-11 -15 -22 -28 -32 -45c-22 -38 -18 -73 -18 -82v-1h-128v1c0 7 3 44 -19 82c-10 17 -20 30 -31 45v0c-17 24 -30 52 -30 83c0 78 66 141 144 141s144 -63 144 -141zM239 194l6 8c16 22 27 47 27 73c0 33 -16 65 -40 89s-55 36 -88 36 -s-64 -12 -88 -36s-40 -56 -40 -89c0 -26 11 -51 27 -73l19 -26v0c5 -6 9 -13 13 -21c17 -29 21 -58 21 -75h16v112l-32 64h17l31 -64v-112h32v112l31 64h17l-32 -64v-112h16c0 17 4 45 21 75c8 14 16 25 24 36c1 1 1 2 2 3zM112 -32v16h64v-16h-64zM96 0v16h96v-16h-96z -M96 32v16h96v-16h-96z" /> - <glyph glyph-name="ion-ios-lightbulb" unicode="" horiz-adv-x="288" -d="M288 275c0 -31 -13 -59 -30 -83v0c-11 -15 -22 -28 -32 -45c-22 -38 -18 -73 -18 -82v-1h-32v128l32 64h-16l-32 -64v-128h-32v128l-31 64h-17l32 -64v-128h-32v1c0 7 3 44 -19 82c-10 17 -20 30 -31 45v0c-17 24 -30 52 -30 83c0 78 66 141 144 141s144 -63 144 -141z -M112 -32v16h64v-16h-64zM96 0v16h96v-16h-96zM96 32v16h96v-16h-96z" /> - <glyph glyph-name="ion-ios-list-outline" unicode="" horiz-adv-x="384" -d="M368 368h-352v-352h352v352zM384 384v0v-384h-384v384h384zM128 280v16h192v-16h-192zM128 184v16h192v-16h-192zM128 88v16h192v-16h-192zM64 288c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16s-16 5 -16 16zM64 192c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16 -s-16 5 -16 16zM64 96c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16s-16 5 -16 16z" /> - <glyph glyph-name="ion-ios-list" unicode="" horiz-adv-x="384" -d="M0 384h384v-384h-384v384zM80 80c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM80 176c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM80 272c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM320 88v16h-192v-16h192zM320 184v16 -h-192v-16h192zM320 280v16h-192v-16h192z" /> - <glyph glyph-name="ion-ios-location-outline" unicode="" horiz-adv-x="288" -d="M144 400c-34 0 -67 -13 -91 -37s-37 -57 -37 -91c0 -43 24 -107 70 -186c22 -38 44 -72 58 -91c14 19 36 53 58 91c46 79 70 143 70 186c0 34 -13 67 -37 91s-57 37 -91 37zM144 416v0c80 0 144 -64 144 -144c0 -112 -144 -304 -144 -304s-144 192 -144 304 -c0 80 64 144 144 144zM144 336c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM144 225c26 0 47 21 47 47s-21 47 -47 47s-47 -21 -47 -47s21 -47 47 -47z" /> - <glyph glyph-name="ion-ios-location" unicode="" horiz-adv-x="288" -d="M144 416c80 0 144 -64 144 -144c0 -112 -144 -304 -144 -304s-144 192 -144 304c0 80 64 144 144 144zM144 225c26 0 47 21 47 47s-21 47 -47 47s-47 -21 -47 -47s21 -47 47 -47z" /> - <glyph glyph-name="ion-ios-locked-outline" unicode="" horiz-adv-x="320" -d="M264 224h56v-240h-320v240h56v72c0 57 47 104 104 104s104 -47 104 -104v-72zM72 296v-72h176v72c0 49 -39 88 -88 88s-88 -39 -88 -88zM304 0v208h-288v-208h288zM160 160c18 0 32 -14 32 -32c0 -15 -10 -27 -24 -31v-33h-16v33c-14 4 -24 16 -24 31c0 18 14 32 32 32z -M160 112c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16z" /> - <glyph glyph-name="ion-ios-locked" unicode="" horiz-adv-x="320" -d="M264 224h56v-240h-320v240h56v72c0 57 47 104 104 104s104 -47 104 -104v-72zM168 97c14 4 24 16 24 31c0 18 -14 32 -32 32s-32 -14 -32 -32c0 -15 10 -27 24 -31v-33h16v33zM248 224v72c0 49 -39 88 -88 88s-88 -39 -88 -88v-72h176zM160 144c9 0 16 -7 16 -16 -s-7 -16 -16 -16s-16 7 -16 16s7 16 16 16z" /> - <glyph glyph-name="ion-ios-loop-strong" unicode="" horiz-adv-x="512" -d="M256 400c115 0 208 -93 208 -208c0 -14 -1 -28 -4 -42l-1 -4l-24 5l1 4c2 12 4 24 4 37c0 101 -83 184 -184 184c-66 0 -127 -36 -160 -94l-2 -3l-21 11l2 4c37 65 106 106 181 106zM416 102l2 3l21 -11l-2 -4c-37 -65 -106 -106 -181 -106c-115 0 -208 93 -208 208 -c0 14 1 28 4 42l1 4l24 -5l-1 -4c-2 -12 -4 -24 -4 -37c0 -101 83 -184 184 -184c66 0 127 36 160 94zM384 192h128l-64 -64zM0 192l64 64l64 -64h-128z" /> - <glyph glyph-name="ion-ios-loop" unicode="" horiz-adv-x="489" -d="M478 192l11 -11l-52 -53l-53 53l10 11l43 -41zM449 192v0v0c0 -7 0 -14 -1 -21l-16 1c1 7 1 14 1 21c-1 103 -85 187 -188 187c-68 0 -131 -37 -164 -96l-14 8c36 64 104 104 178 104c112 0 203 -91 204 -202v0v-2zM409 100l14 -8c-36 -64 -104 -104 -178 -104 -c-111 0 -202 90 -204 200v0v3v1v0c0 7 0 14 1 21l16 -1c-1 -7 -1 -14 -1 -21c0 -103 85 -187 188 -187c68 0 131 37 164 96zM53 256l52 -53l-11 -11l-41 41l-42 -41l-11 11z" /> - <glyph glyph-name="ion-ios-medical-outline" unicode="" horiz-adv-x="364" -d="M364 260l-118 -68l118 -68l-32 -56l-118 69v-137h-64v137l-118 -69l-32 56l118 68l-118 68l32 56l118 -69v137h64v-137l118 69zM342 118l-128 74l128 74l-16 28l-128 -74v148h-32v-148l-128 74l-16 -28l128 -74l-128 -74l16 -28l128 74v-148h32v148l128 -74z" /> - <glyph glyph-name="ion-ios-medical" unicode="" horiz-adv-x="364" -d="M364 260l-118 -68l118 -68l-32 -56l-118 69v-137h-64v137l-118 -69l-32 56l118 68l-118 68l32 56l118 -69v137h64v-137l118 69z" /> - <glyph glyph-name="ion-ios-medkit-outline" unicode="" horiz-adv-x="416" -d="M224 240h-32v-48v-16h-16h-48v-32h48h16v-16v-48h32v48v16h16h48v32h-48h-16v16v48zM240 256v0v-64h64v-64h-64v-64h-64v64h-64v64h64v64h64zM288 320h128v-320h-416v320h128v32c0 18 10 32 29 32h99c19 0 32 -14 32 -32v-32zM144 350v-30h128v30c0 10 -7 18 -17 18h-97 -c-11 0 -14 -8 -14 -18zM400 16v288h-384v-288h384z" /> - <glyph glyph-name="ion-ios-medkit" unicode="" horiz-adv-x="416" -d="M224 176h16h48v-32h-48h-16v-16v-48h-32v48v16h-16h-48v32h48h16v16v48h32v-48v-16zM288 320h128v-320h-416v320h128v32c0 18 10 32 29 32h99c19 0 32 -14 32 -32v-32zM144 350v-30h128v30c0 10 -7 18 -17 18h-97c-11 0 -14 -8 -14 -18zM304 128v64h-64v64h-64v-64h-64 -v-64h64v-64h64v64h64z" /> - <glyph glyph-name="ion-ios-mic-off" unicode="" horiz-adv-x="280" -d="M266 -32l-258 440l14 8l258 -440zM128 95c-44 0 -79 37 -79 83v118l113 -193c-10 -5 -22 -8 -34 -8zM207 178c0 -10 -2 -19 -5 -28l-136 234c14 20 37 32 62 32c44 0 79 -38 79 -84v-154zM256 176c0 -28 -9 -54 -24 -75l-10 17c11 17 17 36 17 58v80h17v-80zM139 49v0 -v-63h69v-18h-161v18h73v63c-67 5 -120 60 -120 127v80h19v-80c0 -60 50 -109 110 -109c17 0 34 4 48 11l9 -16c-14 -7 -30 -12 -47 -13z" /> - <glyph glyph-name="ion-ios-mic-outline" unicode="" horiz-adv-x="256" -d="M128 416c44 0 79 -38 79 -84v-154c0 -46 -35 -84 -79 -84s-79 38 -79 84v154c0 46 35 84 79 84zM191 178v154c0 37 -28 68 -63 68s-63 -31 -63 -68v-154c0 -37 28 -68 63 -68s63 31 63 68zM239 256h17v-80c0 -67 -51 -122 -117 -127v-63h69v-18h-161v18h73v63 -c-67 5 -120 60 -120 127v80h19v-80c0 -60 50 -109 110 -109s110 49 110 109v80z" /> - <glyph glyph-name="ion-ios-mic" unicode="" horiz-adv-x="256" -d="M128 94c-44 0 -79 38 -79 84v154c0 46 35 84 79 84s79 -38 79 -84v-154c0 -46 -35 -84 -79 -84zM239 256h17v-80c0 -67 -51 -122 -117 -127v-63h69v-18h-161v18h73v63c-67 5 -120 60 -120 127v80h19v-80c0 -60 50 -109 110 -109s110 49 110 109v80z" /> - <glyph glyph-name="ion-ios-minus-empty" unicode="" horiz-adv-x="256" -d="M256 183h-256v17h256v-17z" /> - <glyph glyph-name="ion-ios-minus-outline" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191zM80 183v17h256v-17h-256z" /> - <glyph glyph-name="ion-ios-minus" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM336 183v17h-256v-17h256z" /> - <glyph glyph-name="ion-ios-monitor-outline" unicode="" horiz-adv-x="480" -d="M480 64h-176v-16h64v-16h-257v16h64v16h-175v288h480v-288zM16 336v-256h448v256h-448z" /> - <glyph glyph-name="ion-ios-monitor" unicode="" horiz-adv-x="480" -d="M480 64h-176v-16h64v-16h-257v16h64v16h-175v288h480v-288zM16 336v-256h448v256h-448zM32 96v224h416v-224h-416z" /> - <glyph glyph-name="ion-ios-moon-outline" unicode="" horiz-adv-x="216" -d="M195 133c7 0 14 1 21 3c-4 -7 -7 -12 -12 -18c-21 -25 -53 -41 -88 -41c-64 0 -116 51 -116 115c0 52 34 96 81 111c7 2 14 3 22 4c-4 -6 -8 -12 -11 -18c-7 -14 -11 -30 -11 -47c0 -29 11 -56 32 -77s48 -32 77 -32h5zM116 93c25 0 48 9 65 24c-65 5 -116 59 -116 125 -c0 14 2 28 6 40c-33 -16 -55 -51 -55 -90c0 -55 45 -99 100 -99z" /> - <glyph glyph-name="ion-ios-moon" unicode="" horiz-adv-x="216" -d="M195 133c7 0 14 1 21 3c-4 -7 -7 -12 -12 -18c-21 -25 -53 -41 -88 -41c-64 0 -116 51 -116 115c0 52 34 96 81 111c7 2 14 3 22 4c-4 -6 -8 -12 -11 -18c-7 -14 -11 -30 -11 -47c0 -29 11 -56 32 -77s48 -32 77 -32h5z" /> - <glyph glyph-name="ion-ios-more-outline" unicode="" horiz-adv-x="320" -d="M160 210c-10 0 -18 -8 -18 -18s8 -18 18 -18s18 8 18 18s-8 18 -18 18zM160 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM32 210c-10 0 -18 -8 -18 -18s8 -18 18 -18s18 8 18 18s-8 18 -18 18zM32 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32 -s-32 14 -32 32s14 32 32 32zM288 210c-10 0 -18 -8 -18 -18s8 -18 18 -18s18 8 18 18s-8 18 -18 18zM288 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32z" /> - <glyph glyph-name="ion-ios-more" unicode="" horiz-adv-x="320" -d="M160 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM32 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM288 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32z" /> - <glyph glyph-name="ion-ios-musical-note" unicode="" horiz-adv-x="192" -d="M192 346v-1v-65c0 -3 -3 -6 -6 -5v0l-73 13v-192c0 -33 1 -80 -51 -82c-48 -2 -62 16 -62 41c0 19 9 39 51 41c22 1 37 1 45 1v273l90 -19l2 -1c2 0 3 -1 4 -3v0v-1v0z" /> - <glyph glyph-name="ion-ios-musical-notes" unicode="" horiz-adv-x="320" -d="M320 128c0 -34 4 -80 -49 -82c-49 -2 -62 16 -62 41c0 20 9 39 52 41c23 1 34 2 43 2v160l-191 -32v-161c0 -34 3 -81 -50 -83c-49 -2 -63 17 -63 42c0 20 9 39 52 41c23 1 35 1 44 1v237l224 35v-242z" /> - <glyph glyph-name="ion-ios-navigate-outline" unicode="" horiz-adv-x="416" -d="M208 384c-51 0 -99 -21 -135 -57s-57 -84 -57 -135s21 -99 57 -135s84 -57 135 -57s99 21 135 57s57 84 57 135s-21 99 -57 135s-84 57 -135 57zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM304 288l-96 -224v128h-128z" /> - <glyph glyph-name="ion-ios-navigate" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 64l96 224l-224 -96h128v-128z" /> - <glyph glyph-name="ion-ios-nutrition-outline" unicode="" horiz-adv-x="384" -d="M294 214v0c6 -6 10 -14 10 -23c0 -11 -5 -20 -13 -26v0s-51 -37 -106 -77l-38 31c-2 2 -4 3 -6 3c-1 0 -2 0 -3 -1v0c-2 -2 -2 -6 1 -10l29 -35l-115 -84c-6 -4 -13 -8 -21 -8c-18 0 -32 14 -32 32c0 7 1 13 4 18v0c2 2 17 25 37 57l21 -17c2 -2 4 -2 6 -2c1 0 3 0 4 1v0 -c2 2 1 6 -2 10l-19 23c27 43 60 96 84 134l36 -30c2 -2 4 -3 6 -3c1 0 2 1 3 2v0c2 2 2 5 -1 9l-33 40c11 18 19 29 19 29v0c6 10 15 16 27 16c9 0 18 -4 24 -10v0l78 -79v0v0zM282 178c4 3 6 8 6 13c0 4 -2 9 -5 12l-5 4v1l-69 69v0l-5 5c-3 3 -8 5 -12 5 -c-6 0 -10 -3 -13 -8l-5 -8c-2 -3 -5 -7 -8 -12l25 -30v0l1 -1c8 -10 8 -22 0 -30l-1 -1l-1 -1c-4 -3 -8 -5 -13 -5s-11 2 -16 6v1h-1l-21 18l-24 -39l-44 -70l12 -14v0v0c8 -10 8 -23 0 -31v0c-4 -4 -9 -6 -15 -6c-5 0 -11 2 -16 6v0v0l-7 5c-3 -5 -5 -9 -8 -13 -c-12 -19 -16 -26 -18 -29c-1 -3 -2 -6 -2 -9c0 -9 7 -16 16 -16c3 0 6 2 11 5l101 74l-18 22h-1v0c-8 10 -8 23 0 31v0v0v0c4 4 10 6 15 6s11 -2 16 -6v0h1l28 -24c49 36 93 68 96 70zM376 333l8 -14l-5 -3l-103 -60l-17 17l71 123l2 4l14 -8l-3 -4l-63 -111l91 53z" /> - <glyph glyph-name="ion-ios-nutrition" unicode="" horiz-adv-x="384" -d="M295 214v0c6 -6 9 -13 9 -22c0 -11 -5 -20 -13 -26v0s-51 -38 -106 -78l-38 32c-4 3 -8 3 -10 1v0c-2 -2 -2 -6 1 -10l29 -35l-114 -84c-6 -4 -13 -8 -21 -8c-18 0 -32 14 -32 32c0 7 2 13 5 18v0c1 2 16 25 36 57l20 -17c4 -3 8 -3 10 -1v0c2 2 2 6 -1 10l-20 23 -c27 43 60 96 84 134l36 -30c4 -3 8 -3 10 -1v0c2 2 2 6 -1 10l-33 40c11 18 18 29 18 29v0c6 10 16 16 28 16c9 0 18 -4 24 -10v0l78 -79l1 -1v0zM384 309l-103 -59l-28 29l70 121l28 -16l-50 -85l67 38z" /> - <glyph glyph-name="ion-ios-paper-outline" unicode="" horiz-adv-x="384" -d="M48 384h336v-353c0 -17 -14 -31 -31 -31h-322c-17 0 -31 14 -31 31v305h32v-16h-16v-289c0 -8 7 -15 15 -15h322c8 0 15 7 15 15v337h-304v-320h-16v320v16zM96 320v16h128v-16h-128zM96 240v16h240v-16h-240zM96 160v16h192v-16h-192zM96 80v16h240v-16h-240z" /> - <glyph glyph-name="ion-ios-paper" unicode="" horiz-adv-x="384" -d="M48 384h336v-353c0 -17 -14 -31 -31 -31h-322c-17 0 -31 14 -31 31v305h32v-288h16v288v32v16zM96 336v-16h128v16h-128zM96 176v-16h192v16h-192zM336 80v16h-240v-16h240zM336 240v16h-240v-16h240z" /> - <glyph glyph-name="ion-ios-paperplane-outline" unicode="" horiz-adv-x="320" -d="M0 198l320 154l-146 -320l-57 115zM132 152l41 -83l115 249zM286 320l-248 -121l83 -36z" /> - <glyph glyph-name="ion-ios-paperplane" unicode="" horiz-adv-x="320" -d="M0 198l320 154l-214 -200zM320 352l-146 -320l-52 104z" /> - <glyph glyph-name="ion-ios-partlysunny-outline" unicode="" horiz-adv-x="384" -d="M144 298v54h16v-54h-16zM0 192v16h55v-16h-55zM44 299l10 11l32 -32l-11 -11zM223 268l-11 11l32 32l11 -11zM56 96l-10 11l31 31l11 -11zM129 153c-4 -3 -8 -7 -12 -12c-23 12 -39 36 -39 63c0 39 32 71 71 71c21 0 40 -10 53 -25c-4 -2 -9 -4 -14 -8 -c-10 11 -23 17 -39 17c-30 0 -55 -25 -55 -55c0 -23 15 -43 35 -51zM235 208c-34 0 -63 -28 -63 -62v-12s1 -10 1 -10c-5 0 -12 -1 -14 -1c-19 -3 -33 -18 -33 -37c0 -10 3 -19 10 -26s16 -11 26 -11h157c27 0 49 22 49 49s-22 50 -49 50c-2 0 -4 -1 -6 -1l-14 -2l-3 14 -c-3 14 -11 26 -22 35s-25 14 -39 14zM235 224v0c37 0 68 -26 76 -61h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v8c0 43 35 78 78 78z" /> - <glyph glyph-name="ion-ios-partlysunny" unicode="" horiz-adv-x="384" -d="M144 298v54h16v-54h-16zM0 192v16h55v-16h-55zM44 299l10 11l32 -32l-11 -11zM223 268l-11 11l32 32l11 -11zM56 96l-10 11l31 31l11 -11zM235 224v0c37 0 68 -26 76 -61h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v8 -c0 43 35 78 78 78zM201 252l1 -2v0c-31 -5 -62 -43 -62 -75c0 -2 1 -5 1 -7l-1 -1h-1c-11 -6 -18 -14 -22 -26v1v-1c-23 12 -39 36 -39 63c0 39 32 71 71 71c21 0 39 -9 52 -23z" /> - <glyph glyph-name="ion-ios-pause-outline" unicode="" horiz-adv-x="256" -d="M63 336h-47v-288h47v288zM79 352v0v-320h-79v320h79zM240 336h-47v-288h47v288zM256 352v0v-320h-79v320h79z" /> - <glyph glyph-name="ion-ios-pause" unicode="" horiz-adv-x="256" -d="M0 32v320h79v-320h-79zM177 32v320h79v-320h-79z" /> - <glyph glyph-name="ion-ios-paw-outline" unicode="" horiz-adv-x="384" -d="M380 252c6 -17 5 -38 -3 -57c-10 -25 -31 -43 -51 -43c-5 0 -10 1 -15 3c-22 10 -30 45 -17 79c10 28 31 46 51 46c5 0 10 -1 14 -3c10 -4 17 -13 21 -25zM362 202c6 15 7 31 2 44c-2 5 -5 12 -12 15c-2 1 -4 2 -7 2c-13 0 -28 -15 -36 -36c-9 -25 -6 -50 8 -56 -c2 -1 5 -1 8 -1c14 0 29 13 37 32zM90 234c13 -34 5 -69 -17 -79c-5 -2 -10 -3 -15 -3c-20 0 -41 18 -51 43c-8 19 -9 40 -3 57c4 12 11 21 21 25c4 2 9 3 14 3c20 0 41 -18 51 -46zM67 171c14 6 17 31 8 56c-8 21 -23 36 -36 36c-3 0 -5 -1 -7 -2c-7 -3 -10 -10 -12 -15 -c-5 -13 -4 -29 2 -44c8 -19 23 -32 37 -32c3 0 6 0 8 1zM134 237c-28 1 -52 32 -56 69c-2 23 4 45 16 60c8 10 19 17 31 18h6c27 -1 46 -29 50 -67c3 -24 -1 -48 -13 -63c-8 -9 -17 -15 -28 -16c-2 0 -4 -1 -6 -1zM107 356c-10 -12 -14 -29 -12 -48c3 -29 21 -53 40 -54h3 -c6 1 12 4 17 10c10 12 12 31 10 51c-3 29 -17 52 -35 53h-3c-9 -1 -16 -7 -20 -12zM192 208c64 0 128 -76 128 -149c0 -22 -11 -40 -22 -47c-13 -9 -23 -12 -42 -12c-23 0 -29 8 -40 15c-8 5 -14 10 -24 10s-16 -5 -24 -10c-11 -7 -17 -15 -40 -15c-19 0 -29 3 -42 12 -c-11 7 -22 25 -22 47c0 73 64 149 128 149zM290 27c6 4 14 16 14 32c0 30 -14 64 -36 91c-11 13 -23 24 -36 31c-13 8 -27 11 -40 11s-27 -3 -40 -11c-13 -7 -25 -18 -36 -31c-22 -27 -36 -61 -36 -91c0 -16 8 -28 14 -32c11 -7 18 -10 34 -10c14 0 19 4 26 9c2 1 4 3 6 4 -c9 6 18 12 32 12s23 -6 32 -12c2 -1 4 -3 6 -4c7 -5 12 -9 26 -9c16 0 23 3 34 10zM244 238c-11 1 -20 7 -28 16c-12 15 -16 39 -13 63c4 38 23 66 50 67h7c12 -1 22 -8 30 -18c12 -15 18 -37 16 -60c-4 -37 -28 -67 -56 -68h-6zM219 315c-2 -20 0 -39 10 -51 -c5 -6 11 -9 17 -10h3c19 1 38 25 41 54c2 19 -3 36 -13 48c-4 5 -10 11 -19 12h-4c-18 -1 -32 -24 -35 -53z" /> - <glyph glyph-name="ion-ios-paw" unicode="" horiz-adv-x="384" -d="M380 252c6 -17 5 -38 -3 -57c-10 -25 -31 -43 -51 -43c-5 0 -10 1 -15 3c-22 10 -30 45 -17 79c10 28 31 46 51 46c5 0 10 -1 14 -3c10 -4 17 -13 21 -25zM90 234c13 -34 5 -69 -17 -79c-5 -2 -10 -3 -15 -3c-20 0 -41 18 -51 43c-8 19 -9 40 -3 57c4 12 11 21 21 25 -c4 2 9 3 14 3c20 0 41 -18 51 -46zM134 237c-28 1 -52 32 -56 69c-2 23 4 45 16 60c8 10 19 17 31 18h6c27 -1 46 -29 50 -67c3 -24 -1 -48 -13 -63c-8 -9 -17 -15 -28 -16c-2 0 -4 -1 -6 -1zM192 208c64 0 128 -76 128 -149c0 -22 -11 -40 -22 -47c-13 -9 -23 -12 -42 -12 -c-23 0 -29 8 -40 15c-8 5 -14 10 -24 10s-16 -5 -24 -10c-11 -7 -17 -15 -40 -15c-19 0 -29 3 -42 12c-11 7 -22 25 -22 47c0 73 64 149 128 149zM244 238c-11 1 -20 7 -28 16c-12 15 -16 39 -13 63c4 38 23 66 50 67h7c12 -1 22 -8 30 -18c12 -15 18 -37 16 -60 -c-4 -37 -28 -67 -56 -68h-6z" /> - <glyph glyph-name="ion-ios-people-outline" unicode="" -d="M224 336v0v0zM317 113c11 -4 -11 4 0 0c28 -10 46 -35 46 -65h-28h-250c0 22 9 42 27 55c15 11 31 12 49 16c7 1 24 5 26 13s1 15 1 23c0 3 0 3 -2 5c-4 4 -6 9 -8 14c-2 8 -3 16 -4 24c-9 -2 -10 16 -12 21c-1 4 -7 24 3 21c-3 5 -4 13 -5 19c-2 13 -2 26 3 39 -c10 26 37 39 64 38c26 -1 51 -16 59 -42c4 -12 3 -26 1 -39c-1 -5 -2 -11 -4 -15c10 3 4 -20 3 -23c-2 -5 -3 -21 -12 -19c-1 -10 -2 -22 -7 -31c-1 -2 -7 -8 -7 -10v-11c0 -5 0 -10 2 -15s10 -7 14 -8c14 -5 27 -5 41 -10zM115 84c-6 -6 9 10 0 0c-6 -6 -10 -12 -12 -20h4 -h238c-4 15 -17 27 -30 33s-28 4 -41 9s-25 9 -28 25c-2 11 -2 22 -2 33c0 2 7 7 8 9c3 5 4 11 5 17c1 5 0 12 4 15c5 4 7 7 9 13c2 8 3 12 -1 19c-3 5 0 8 1 13c3 11 4 24 2 36c-8 37 -62 45 -86 19c-12 -13 -12 -31 -9 -47c1 -6 6 -14 3 -19c-1 -3 -5 -6 -4 -10 -c2 -5 2 -11 4 -16c2 -4 4 -6 7 -8s3 -6 3 -9c1 -7 2 -17 6 -23c3 -4 8 -6 8 -11v-21c-1 -8 -2 -18 -8 -24c-7 -6 -18 -10 -27 -12c-11 -3 -23 -3 -33 -7c-8 -3 -15 -8 -21 -14zM112 126c-15 -7 9 4 0 0c-9 -5 -18 -11 -25 -19c-1 -2 -6 -11 -7 -11h-25h-55c0 20 13 34 31 40 -c6 2 27 4 30 11c2 5 0 11 0 16c-10 -1 -24 1 -32 7c-2 2 3 9 4 12l3 12c1 9 1 19 1 28c0 16 -1 34 8 48c8 13 23 18 38 18c24 0 43 -13 47 -37c3 -16 1 -32 2 -48c0 -8 2 -16 5 -24c1 -2 5 -7 3 -9l-6 -3c-5 -2 -11 -3 -17 -4c-1 0 -8 0 -9 -1s0 -9 0 -11c0 -4 1 -6 5 -7 -c6 -2 19 -3 23 -8c2 -3 1 -5 -2 -5c-8 -1 -15 -1 -22 -5zM71 112c6 10 16 18 26 24c-9 9 -5 26 -4 37c0 2 0 5 2 5h8c6 0 11 1 17 2c-7 23 0 47 -5 70c-3 16 -15 23 -31 23c-17 0 -27 -9 -30 -25c-4 -22 3 -46 -4 -68c9 -1 17 -2 26 -2c1 0 1 -28 1 -29 -c-1 -12 -8 -18 -19 -22c-12 -4 -29 -3 -36 -15h49zM368 96c-2 8 -10 14 -16 19c-8 6 -18 13 -28 15c-3 1 -16 -1 -13 5c2 4 9 5 13 6s15 2 16 7c0 1 1 14 0 14c-6 0 -12 1 -18 2c-4 1 -7 2 -11 4c-6 3 -2 6 0 11c14 32 -10 88 32 105c15 6 34 5 48 -3c15 -9 20 -27 20 -44 -c0 -20 -4 -44 7 -62c2 -3 4 -4 0 -6c-2 -1 -4 -1 -6 -2l-12 -3s-9 -1 -13 -1c0 -4 -2 -13 1 -17c6 -7 21 -7 29 -10c18 -6 31 -20 31 -40h-80zM367 123c4 -4 -5 5 0 0s8 -11 15 -11h16h28c-7 12 -26 11 -38 16c-11 4 -16 12 -17 24c0 2 -1 27 1 27c9 0 18 0 26 1 -c-7 23 1 47 -4 70c-3 15 -15 23 -30 23c-17 0 -28 -8 -31 -25c-4 -23 2 -46 -5 -68c6 -2 12 -2 18 -2s8 1 9 -5c1 -11 5 -28 -4 -37c6 -4 11 -8 16 -13z" /> - <glyph glyph-name="ion-ios-people" unicode="" -d="M317 113c11 -4 -11 4 0 0v0zM317 113c28 -10 46 -35 46 -65h-28h-250c0 22 9 42 27 55c15 11 31 12 49 16c7 1 24 5 26 13s1 15 1 23c0 3 0 3 -2 5c-4 4 -6 9 -8 14c-2 8 -3 16 -4 24c-9 -2 -10 16 -12 21c-1 4 -7 24 3 21c-3 5 -4 13 -5 19c-2 13 -2 26 3 39 -c10 26 37 39 64 38c26 -1 51 -16 59 -42c4 -12 3 -26 1 -39c-1 -5 -2 -11 -4 -15c10 3 4 -20 3 -23c-2 -5 -3 -21 -12 -19c-1 -10 -2 -22 -7 -31c-1 -2 -7 -8 -7 -10v-11c0 -5 0 -10 2 -15s10 -7 14 -8c14 -5 27 -5 41 -10zM111 126h2h-1h-1zM111 126c-9 -5 -17 -11 -24 -19 -c-1 -2 -6 -11 -7 -11h-25h-55c0 20 12 34 30 40c6 2 27 4 30 11c2 5 1 11 1 16c-10 -1 -24 1 -32 7c-2 2 3 9 4 12c1 4 2 7 3 11c1 9 1 19 1 28c0 16 -1 35 8 49c8 13 23 18 38 18c24 0 43 -13 47 -37c3 -16 1 -32 2 -48c0 -8 2 -16 5 -24c1 -2 5 -7 3 -9l-6 -3 -c-5 -2 -11 -3 -17 -4c-1 0 -8 0 -9 -1s0 -9 0 -11c0 -4 1 -6 5 -7c6 -2 19 -3 23 -8c2 -3 1 -5 -2 -5c-7 -1 -14 -2 -21 -5c2 1 2 2 -1 0c-8 -4 -4 -2 -1 0zM417 136c18 -6 31 -20 31 -40h-80c-2 8 -10 14 -16 19c-8 6 -18 13 -28 15c-3 1 -16 -1 -13 5c2 4 9 5 13 6 -s15 2 16 7c0 1 1 14 0 14c-6 0 -12 1 -18 2c-4 1 -7 2 -11 4c-6 3 -2 6 0 11c14 32 -10 88 32 105c15 6 34 5 48 -3c15 -9 20 -27 20 -44c0 -20 -4 -44 7 -62c2 -3 4 -4 0 -6c-2 -1 -4 -1 -6 -2l-12 -3s-9 -1 -13 -1c0 -4 -2 -13 1 -17c6 -7 21 -7 29 -10z" /> - <glyph glyph-name="ion-ios-person-outline" unicode="" horiz-adv-x="320" -d="M106 246v0v0zM267 84c13 -5 53 -20 53 -52h-160h-160c0 32 40 47 53 52s31 6 43 9c7 2 17 5 20 9s1 41 1 41s-6 10 -9 18s-7 32 -7 32s-7 0 -9 12c-2 13 -6 17 -6 27c0 9 5 10 5 10v0s-4 13 -5 42c-1 34 25 68 74 68s75 -34 74 -68c-1 -29 -5 -42 -5 -42v0s5 -1 5 -10 -c0 -10 -3 -15 -6 -28c-2 -12 -9 -12 -9 -12s-4 -23 -7 -31s-9 -18 -9 -18s-2 -37 1 -41s13 -7 20 -9c12 -3 30 -4 43 -9zM160 48v0h137c-2 3 -4 6 -8 8c-7 5 -16 9 -27 13c-7 2 -17 4 -26 5c-6 1 -10 2 -15 3c-3 1 -21 5 -29 15c-4 5 -6 12 -6 32c0 10 1 20 1 20v4l2 4 -c1 2 6 9 8 15c2 5 5 19 6 28c0 0 0 -1 1 4s8 4 9 8s3 7 5 18s-5 12 -5 17c0 4 1 5 1 5v0c0 1 4 14 4 38c0 13 -5 26 -14 35c-11 11 -25 16 -44 16c-18 0 -34 -5 -45 -16c-9 -9 -13 -22 -13 -35c1 -24 4 -37 4 -38v0s1 -3 0 -6c-1 -5 -6 -5 -4 -16s4 -14 5 -18s8 -3 9 -8 -s1 -4 1 -4c1 -9 4 -23 6 -28c2 -6 6 -13 8 -15l2 -4v-4s1 -10 1 -20c0 -20 -2 -27 -6 -32c-8 -10 -26 -14 -29 -15c-5 -1 -10 -2 -16 -3c-9 -1 -18 -3 -25 -5c-11 -4 -20 -8 -27 -13c-4 -2 -6 -5 -8 -8h137z" /> - <glyph glyph-name="ion-ios-person" unicode="" horiz-adv-x="320" -d="M267 84c13 -5 53 -20 53 -52h-160h-160c0 32 40 47 53 52s31 6 43 9c7 2 17 5 20 9s1 41 1 41s-6 10 -9 18s-7 32 -7 32s-7 0 -9 12c-2 13 -6 17 -6 27c0 9 5 10 5 10v0s-4 13 -5 42c-1 34 25 68 74 68s75 -34 74 -68c-1 -29 -5 -42 -5 -42v0s5 -1 5 -10 -c0 -10 -3 -15 -6 -28c-2 -12 -9 -12 -9 -12s-4 -23 -7 -31s-9 -18 -9 -18s-2 -37 1 -41s13 -7 20 -9c12 -3 30 -4 43 -9z" /> - <glyph glyph-name="ion-ios-personadd-outline" unicode="" horiz-adv-x="320" -d="M320 295v-14h-25v-25h-14v25h-25v14h25v25h14v-25h25zM106 246v0v0zM267 84c13 -5 53 -20 53 -52h-160h-160c0 32 40 47 53 52s31 6 43 9c7 2 17 5 20 9s1 41 1 41s-6 10 -9 18s-7 32 -7 32s-7 0 -9 12c-2 13 -6 17 -6 27c0 9 5 10 5 10v0s-4 13 -5 42c-1 34 25 68 74 68 -s75 -34 74 -68c-1 -29 -5 -42 -5 -42v0s5 -1 5 -10c0 -10 -3 -15 -6 -28c-2 -12 -9 -12 -9 -12s-4 -23 -7 -31s-9 -18 -9 -18s-2 -37 1 -41s13 -7 20 -9c12 -3 30 -4 43 -9zM160 48v0h137c-2 3 -4 6 -8 8c-7 5 -16 9 -27 13c-7 2 -17 4 -26 5c-6 1 -10 2 -15 3 -c-3 1 -21 5 -29 15c-4 5 -6 12 -6 32c0 10 1 20 1 20v4l2 4c1 2 6 9 8 15c2 5 5 19 6 28c0 0 0 -1 1 4s8 4 9 8s3 7 5 18s-5 12 -5 17c0 4 1 5 1 5v0c0 1 4 14 4 38c0 13 -5 26 -14 35c-11 11 -25 16 -44 16c-18 0 -34 -5 -45 -16c-9 -9 -13 -22 -13 -35c1 -24 4 -37 4 -38 -v0s1 -3 0 -6c-1 -5 -6 -5 -4 -16s4 -14 5 -18s8 -3 9 -8s1 -4 1 -4c1 -9 4 -23 6 -28c2 -6 6 -13 8 -15l2 -4v-4s1 -10 1 -20c0 -20 -2 -27 -6 -32c-8 -10 -26 -14 -29 -15c-5 -1 -10 -2 -16 -3c-9 -1 -18 -3 -25 -5c-11 -4 -20 -8 -27 -13c-4 -2 -6 -5 -8 -8h137z" /> - <glyph glyph-name="ion-ios-personadd" unicode="" horiz-adv-x="320" -d="M320 295v-14h-25v-25h-14v25h-25v14h25v25h14v-25h25zM267 84c13 -5 53 -20 53 -52h-160h-160c0 32 40 47 53 52s31 6 43 9c7 2 17 5 20 9s1 41 1 41s-6 10 -9 18s-7 32 -7 32s-7 0 -9 12c-2 13 -6 17 -6 27c0 9 5 10 5 10v0s-4 13 -5 42c-1 34 25 68 74 68 -s75 -34 74 -68c-1 -29 -5 -42 -5 -42v0s5 -1 5 -10c0 -10 -3 -15 -6 -28c-2 -12 -9 -12 -9 -12s-4 -23 -7 -31s-9 -18 -9 -18s-2 -37 1 -41s13 -7 20 -9c12 -3 30 -4 43 -9z" /> - <glyph glyph-name="ion-ios-photos-outline" unicode="" -d="M64 320h384v-320h-384v320zM432 16v288h-352v-288h352zM0 384h384v-48h-16v32h-352v-288h32v-16h-48v320z" /> - <glyph glyph-name="ion-ios-photos" unicode="" -d="M64 320h384v-320h-384v320zM384 384v-48h-336v-272h-48v320h384z" /> - <glyph glyph-name="ion-ios-pie-outline" unicode="" -d="M256 367v0v-207v-12l-12 -4l-180 -45c6 -13 13 -25 21 -36c12 -16 25 -30 41 -42c33 -24 73 -37 114 -37c26 0 51 5 75 15c23 10 43 23 61 41s31 38 41 61c10 24 15 49 15 75c0 51 -20 100 -56 136c-32 32 -75 51 -120 55zM240 384v0c115 0 208 -93 208 -208 -s-93 -208 -208 -208c-92 0 -171 60 -198 143l198 49v224zM208 400c-31 -1 -60 -7 -85 -18c-24 -11 -44 -26 -61 -46c-29 -34 -46 -80 -46 -127v0v0c0 -13 3 -46 12 -70l180 46v215zM224 416v0v-244l-205 -52c-19 32 -19 89 -19 89c0 91 58 207 218 207h6z" /> - <glyph glyph-name="ion-ios-pie" unicode="" -d="M240 384v0c115 0 208 -93 208 -208s-93 -208 -208 -208c-92 0 -171 60 -198 143l198 49v224zM224 416v0v-244l-205 -52c-19 32 -19 89 -19 89c0 91 58 207 218 207h6z" /> - <glyph glyph-name="ion-ios-pint-outline" unicode="" horiz-adv-x="224" -d="M224 278c0 -98 -32 -101 -32 -181c0 -40 16 -71 16 -99c0 -27 -9 -30 -32 -30h-128c-23 0 -32 2 -32 29c0 28 16 60 16 100c0 80 -32 83 -32 181c0 21 1 89 19 125c4 9 13 13 32 13h122c19 0 28 -4 32 -13c18 -36 19 -104 19 -125zM34 396c-8 -16 -14 -43 -17 -76h190 -c-3 33 -9 60 -17 76c-1 2 -1 1 -2 2c-2 1 -6 2 -15 2h-122c-9 0 -13 -1 -15 -2c-1 -1 -1 0 -2 -2zM191 -15c0 1 1 5 1 13c0 11 -4 23 -7 37c-4 18 -9 39 -9 62c0 41 8 64 16 86c8 23 16 46 16 95c0 9 -1 18 -1 26h-190c0 -8 -1 -17 -1 -26c0 -49 8 -72 16 -95 -c8 -22 16 -45 16 -86c0 -23 -5 -44 -9 -62c-3 -14 -7 -26 -7 -37c0 -8 1 -12 1 -13c2 -1 7 -1 15 -1h128c8 0 13 0 15 1z" /> - <glyph glyph-name="ion-ios-pint" unicode="" horiz-adv-x="224" -d="M224 278c0 -98 -32 -101 -32 -181c0 -40 16 -71 16 -99c0 -27 -9 -30 -32 -30h-128c-23 0 -32 2 -32 29c0 28 16 60 16 100c0 80 -32 83 -32 181c0 21 1 89 19 125c4 9 13 13 32 13h122c19 0 28 -4 32 -13c18 -36 19 -104 19 -125zM34 396c-8 -16 -14 -43 -17 -76h190 -c-3 33 -9 60 -17 76c-1 2 -1 1 -2 2c-2 1 -6 2 -15 2h-122c-9 0 -13 -1 -15 -2c-1 -1 -1 0 -2 -2z" /> - <glyph glyph-name="ion-ios-play-outline" unicode="" horiz-adv-x="256" -d="M16 323v-262l210 131zM0 352v0l256 -160l-256 -160v320z" /> - <glyph glyph-name="ion-ios-play" unicode="" horiz-adv-x="256" -d="M0 352v0l256 -160l-256 -160v320z" /> - <glyph glyph-name="ion-ios-plus-empty" unicode="" horiz-adv-x="256" -d="M256 183h-120v-119h-17v119h-119v17h119v120h17v-120h120v-17z" /> - <glyph glyph-name="ion-ios-plus-outline" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191zM216 320v-120h120v-17h-120v-119h-17v119h-119v17h119v120h17z" /> - <glyph glyph-name="ion-ios-plus" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM336 183v17h-120v120h-17v-120h-119v-17h119v-119h17v119h120z" /> - <glyph glyph-name="ion-ios-pricetag-outline" unicode="" horiz-adv-x="416" -d="M416 416v-160l-256 -288l-160 160l256 288h160zM400 264v136h-136l-240 -272l136 -136zM320 288c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM320 336c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16z" /> - <glyph glyph-name="ion-ios-pricetag" unicode="" horiz-adv-x="416" -d="M304 320c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16s-16 5 -16 16zM256 416h160v-160l-256 -288l-160 160zM320 288c9 0 16 4 22 10s10 13 10 22s-4 16 -10 22s-13 10 -22 10s-16 -4 -22 -10s-10 -13 -10 -22s4 -16 10 -22s13 -10 22 -10z" /> - <glyph glyph-name="ion-ios-pricetags-outline" unicode="" -d="M416 384h32v-144l-240 -272l-25 24l-23 -24l-160 160l256 288h160v-32zM160 -9l12 12l11 12l217 248v105v16v16h-137l-241 -272zM432 247v121h-16v-112l-221 -253l13 -12zM320 288c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM320 336 -c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16z" /> - <glyph glyph-name="ion-ios-pricetags" unicode="" -d="M432 384h16v-144l-240 -272l-13 13l237 266v137zM256 416h160v-32v-16v-112l-221 -253l-12 -11l-23 -24l-160 160zM320 288c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM304 320c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16s-16 5 -16 16z" /> - <glyph glyph-name="ion-ios-printer-outline" unicode="" horiz-adv-x="416" -d="M384 336c18 0 32 -13 32 -31v-159c0 -18 -14 -32 -32 -32h-48v-114h-256v114h-48c-18 0 -32 14 -32 32v159c0 18 14 31 32 31h32v48h288v-48h32zM80 368v-32h256v32h-256zM320 16v192h-224v-192h224zM400 146v159c0 9 -7 15 -16 15v0h-352c-9 0 -16 -6 -16 -15v-159 -c0 -9 7 -16 16 -16h48v94h256v-94h48c9 0 16 7 16 16z" /> - <glyph glyph-name="ion-ios-printer" unicode="" horiz-adv-x="416" -d="M80 0v224h256v-224h-256zM80 -0v224h256v-224h-256zM64 352v32h288v-32h-288zM385 336c18 0 31 -14 31 -31v-158c0 -17 -13 -34 -31 -34h-33v126h-288v-126h-31c-18 0 -33 17 -33 34v158c0 17 15 31 33 31h352z" /> - <glyph glyph-name="ion-ios-pulse-strong" unicode="" horiz-adv-x="480" -d="M432 175c27 0 48 -20 48 -47s-21 -49 -48 -49c-21 0 -38 13 -45 31h-51c-7 0 -13 4 -15 11l-16 47l-50 -173c-2 -7 -8 -11 -15 -11h-1c-7 0 -14 5 -15 12l-51 308l-45 -182c-2 -7 -9 -12 -16 -12h-112v32h99l61 245c2 7 8 13 16 13s15 -7 16 -14l52 -314l45 155 -c2 7 8 11 15 11v0c7 0 13 -4 15 -11l29 -85h38c6 19 25 33 46 33z" /> - <glyph glyph-name="ion-ios-pulse" unicode="" -d="M416 160c18 0 32 -14 32 -32s-14 -32 -32 -32c-15 0 -27 10 -31 23h-65c-3 0 -7 2 -8 5l-23 72l-57 -198c-1 -3 -4 -6 -8 -6v0c-4 0 -7 3 -8 7l-58 346l-54 -220c-1 -4 -4 -6 -8 -6h-96v16h90l62 251c1 4 4 6 8 6s7 -3 8 -7l58 -349l54 190c1 3 4 5 8 5s7 -2 8 -5l30 -91 -h59c3 14 16 25 31 25z" /> - <glyph glyph-name="ion-ios-rainy-outline" unicode="" horiz-adv-x="288" -d="M220 269c38 0 68 -33 68 -71c0 -29 -19 -56 -45 -66l-55 -80c-2 -2 -5 -4 -8 -4c-5 0 -8 3 -8 8c0 2 1 4 2 6l46 66v0h-35l-31 -44c-2 -2 -4 -4 -7 -4c-5 0 -9 3 -9 8c0 2 1 3 2 5l25 35h-37l-53 -76c-2 -2 -4 -4 -7 -4c-5 0 -9 3 -9 8c0 2 2 4 3 6l46 66h-36l-32 -44 -c-2 -2 -4 -4 -7 -4c-5 0 -8 3 -8 8c0 2 1 4 2 6l25 34c-29 2 -52 27 -52 56c0 28 22 58 50 60c0 3 -1 5 -1 8c0 46 31 84 82 84c45 0 73 -31 81 -68c3 0 5 1 8 1zM220 146c28 0 52 24 52 52s-24 54 -52 54h-6l-15 -2l-3 15c-3 14 -11 31 -23 40c-12 10 -26 14 -41 14 -c-36 0 -66 -31 -66 -67v-12v-10c-6 0 -12 -2 -14 -2c-20 -3 -35 -23 -35 -43c0 -10 4 -20 11 -27s16 -12 26 -12h124v0v0h42z" /> - <glyph glyph-name="ion-ios-rainy" unicode="" horiz-adv-x="288" -d="M220 269c38 0 68 -33 68 -71c0 -29 -19 -56 -45 -66l-55 -80c-2 -2 -5 -4 -8 -4c-5 0 -8 3 -8 8c0 2 1 4 2 6l46 66v0h-35l-31 -44c-2 -2 -4 -4 -7 -4c-5 0 -9 3 -9 8c0 2 1 3 2 5l25 35h-37l-53 -76c-2 -2 -4 -4 -7 -4c-5 0 -9 3 -9 8c0 2 2 4 3 6l46 66h-36l-32 -44 -c-2 -2 -4 -4 -7 -4c-5 0 -8 3 -8 8c0 2 1 4 2 6l25 34c-29 2 -52 27 -52 56c0 28 22 58 50 60c0 3 -1 5 -1 8c0 46 31 84 82 84c45 0 73 -31 81 -68c3 0 5 1 8 1z" /> - <glyph glyph-name="ion-ios-recording-outline" unicode="" horiz-adv-x="480" -d="M370 304c61 0 110 -50 110 -112s-49 -112 -110 -112h-260c-61 0 -110 50 -110 112s49 112 110 112s110 -50 110 -112c0 -40 -21 -75 -53 -95h146c-32 20 -53 55 -53 95c0 62 49 112 110 112zM16 192c0 -53 42 -95 94 -95s93 42 93 95s-41 95 -93 95s-94 -42 -94 -95z -M370 97c52 0 94 42 94 95s-42 95 -94 95s-93 -42 -93 -95s41 -95 93 -95zM368 240c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM368 256v0c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM112 240c-26 0 -48 -22 -48 -48 -s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM112 256v0c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64z" /> - <glyph glyph-name="ion-ios-recording" unicode="" horiz-adv-x="480" -d="M370 304c61 0 110 -50 110 -112s-49 -112 -110 -112h-260c-61 0 -110 50 -110 112s49 112 110 112s110 -50 110 -112c0 -40 -21 -76 -53 -95h146c-32 19 -53 55 -53 95c0 62 49 112 110 112zM112 128c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64z -M368 128c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM368 240c26 0 48 -22 48 -48s-22 -48 -48 -48s-48 22 -48 48s22 48 48 48zM112 240c26 0 48 -22 48 -48s-22 -48 -48 -48s-48 22 -48 48s22 48 48 48z" /> - <glyph glyph-name="ion-ios-redo-outline" unicode="" horiz-adv-x="384" -d="M0 48v32c0 17 -3 83 49 136c35 36 80 53 143 56v80l192 -128l-192 -128v80c-40 -1 -63 -9 -87 -20c-31 -14 -55 -44 -75 -77l-20 -31h-10zM208 256c-201 0 -192 -169 -192 -169c48 81 101 105 192 105v-65l148 97l-148 97v-65z" /> - <glyph glyph-name="ion-ios-redo" unicode="" horiz-adv-x="384" -d="M0 48v32c0 17 -3 83 49 136c35 36 80 53 143 56v80l192 -128l-192 -128v80c-40 -1 -63 -9 -87 -20c-31 -14 -55 -44 -75 -77l-20 -31h-10z" /> - <glyph glyph-name="ion-ios-refresh-empty" unicode="" horiz-adv-x="256" -d="M128 64c-71 0 -128 57 -128 128s57 128 128 128v44l96 -64l-96 -56v56c-60 0 -108 -48 -108 -108s48 -108 108 -108s108 48 108 108h20c0 -71 -57 -128 -128 -128z" /> - <glyph glyph-name="ion-ios-refresh-outline" unicode="" horiz-adv-x="416" -d="M316 192v0h20c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128v44l96 -64l-96 -56v56c-60 0 -108 -48 -108 -108s48 -108 108 -108s108 48 108 108zM208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1 -c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191z" /> - <glyph glyph-name="ion-ios-refresh" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 64c71 0 128 57 128 128h-20c0 -60 -48 -108 -108 -108s-108 48 -108 108s48 108 108 108v-56l96 56l-96 64v-44c-71 0 -128 -57 -128 -128s57 -128 128 -128z" /> - <glyph glyph-name="ion-ios-reload" unicode="" -d="M192 384c106 0 192 -86 192 -192l55 53l9 -9l-70 -68l-67 68l9 9l51 -52c0 98 -80 178 -179 178s-179 -80 -179 -179s80 -179 179 -179c79 0 146 50 170 121l12 -3c-26 -76 -97 -131 -182 -131c-106 0 -192 86 -192 192s86 192 192 192z" /> - <glyph glyph-name="ion-ios-reverse-camera-outline" unicode="" horiz-adv-x="384" -d="M238 129l2 2l11 -12l-2 -2c-16 -14 -36 -21 -57 -21c-45 0 -82 36 -87 78h-30l38 50l39 -50h-31c5 -33 35 -62 71 -62c17 0 33 6 46 17zM252 249c16 -14 25 -37 27 -57h30l-38 -51l-39 51h31c-5 35 -35 64 -71 64c-17 0 -33 -6 -46 -17l-2 -2l-11 12l2 2 -c16 14 36 21 57 21c22 0 44 -8 60 -23zM354 288c18 0 30 -14 30 -31v-176c0 -17 -12 -33 -30 -33h-320c-18 0 -34 16 -34 33v176c0 17 16 31 34 31h13v16h34v-16h13c32 36 43 48 55 48h88c12 0 23 -12 55 -48h62zM368 81v176c0 9 -5 15 -14 15h-62h-6s-4 1 -6 3s-6 8 -9 11 -c-12 13 -21 24 -27 30c-5 5 -7 4 -7 4h-88s-1 0 -6 -4c-6 -5 -15 -14 -26 -27c-3 -4 -8 -11 -11 -14s-4 -3 -6 -3h-6h-60c-9 0 -18 -7 -18 -15v-176c0 -9 9 -17 18 -17h320c8 0 14 8 14 17z" /> - <glyph glyph-name="ion-ios-reverse-camera" unicode="" horiz-adv-x="384" -d="M354 288c18 0 30 -14 30 -31v-176c0 -17 -12 -33 -30 -33h-320c-18 0 -34 16 -34 33v176c0 17 16 31 34 31h13v16h34v-16h13c32 36 43 48 55 48h88c12 0 23 -12 55 -48h62zM249 117l2 2l-11 12l-2 -2c-13 -11 -29 -17 -46 -17c-36 0 -66 29 -71 62h31l-39 50l-38 -50h30 -c5 -42 42 -78 87 -78c21 0 41 7 57 21zM271 141l38 51h-30c-2 20 -11 43 -27 57c-16 15 -38 23 -60 23c-21 0 -41 -7 -57 -21l-2 -2l11 -12l2 2c13 11 29 17 46 17c36 0 66 -29 71 -64h-31z" /> - <glyph glyph-name="ion-ios-rewind-outline" unicode="" -d="M432 293l-184 -101l184 -101v202zM208 292v0l-176 -100l176 -100v95v27v78zM224 320v0v-123l224 123v-256l-224 123v-123l-224 128z" /> - <glyph glyph-name="ion-ios-rewind" unicode="" -d="M224 320v0v-123l224 123v-256l-224 123v-123l-224 128z" /> - <glyph glyph-name="ion-ios-rose-outline" unicode="" horiz-adv-x="320" -d="M284 295c-4 -1 -9 -3 -13 -4c-37 -11 -71 -24 -103 -39c-17 -8 -24 -12 -44 -24l-7 -4c-31 -18 -50 -33 -63 -51c-15 -21 -22 -45 -22 -77c0 -16 3 -30 9 -44c6 -13 14 -26 25 -36c23 -21 55 -32 94 -32s71 11 94 32c11 10 19 23 25 36c6 14 9 28 9 44c0 20 -5 40 -11 60 -c-11 40 -23 83 7 139zM320 320v0c-77 -96 -16 -151 -16 -224s-56 -128 -144 -128s-144 55 -144 128s35 109 93 142c25 14 33 19 52 28c30 14 65 28 105 40c17 5 35 10 54 14zM38 325c14 -28 18 -57 19 -83c9 7 20 13 30 20c7 4 14 9 21 13c5 3 10 6 16 9c-5 4 -11 7 -17 11 -c-22 13 -48 23 -69 30zM0 352v0s66 -15 115 -43c15 -8 28 -18 37 -29c-12 -6 -24 -12 -36 -19c-7 -4 -14 -8 -20 -12c-25 -16 -44 -31 -57 -42c5 41 2 98 -39 145zM249 367c-8 -1 -20 -2 -35 -7c-25 -8 -47 -20 -64 -36c8 -6 15 -12 21 -18c29 12 65 26 95 34 -c-5 10 -12 20 -17 27zM256 384v0s26 -32 32 -55c-33 -8 -84 -25 -121 -42l-3 3c-9 11 -22 22 -39 32c52 60 131 62 131 62zM85 394c-6 -10 -10 -20 -14 -28c12 -4 22 -10 36 -17c4 5 9 10 14 14c-13 15 -27 25 -36 31zM80 416v0s35 -16 64 -56c-12 -9 -23 -20 -33 -31 -c-26 13 -40 21 -61 27c5 15 15 38 30 60z" /> - <glyph glyph-name="ion-ios-rose" unicode="" horiz-adv-x="320" -d="M320 320v0c-77 -96 -16 -151 -16 -224s-56 -128 -144 -128s-144 55 -144 128s35 109 93 142c25 14 33 19 52 28c30 14 65 28 105 40c17 5 35 10 54 14zM0 352v0s66 -15 115 -43c15 -8 28 -18 37 -29c-12 -6 -24 -12 -36 -19c-7 -4 -14 -8 -20 -12 -c-25 -16 -44 -31 -57 -42c5 41 2 98 -39 145zM256 384v0s26 -32 32 -55c-33 -8 -84 -25 -121 -42l-3 3c-9 11 -22 22 -39 32c52 60 131 62 131 62zM80 416v0s35 -16 64 -56c-12 -9 -23 -20 -33 -31c-26 13 -40 21 -61 27c5 15 15 38 30 60z" /> - <glyph glyph-name="ion-ios-search-strong" unicode="" horiz-adv-x="384" -d="M280 150l-4 -7l108 -109l-34 -34l-108 109l-7 -5c-24 -15 -53 -25 -83 -25c-84 0 -152 69 -152 153s68 152 152 152s152 -68 152 -152c0 -30 -9 -58 -24 -82zM237 317c-23 23 -53 35 -85 35s-62 -12 -85 -35s-35 -53 -35 -85s12 -62 35 -85s53 -35 85 -35s62 12 85 35 -s36 53 36 85s-13 62 -36 85z" /> - <glyph glyph-name="ion-ios-search" unicode="" horiz-adv-x="384" -d="M384 23l-23 -23l-113 113c-26 -21 -60 -33 -96 -33c-84 0 -152 68 -152 152s68 152 152 152s152 -68 152 -152c0 -36 -12 -69 -33 -95zM56 135c26 -26 60 -39 96 -39s70 14 96 40s40 60 40 96s-14 70 -40 96s-60 40 -96 40s-70 -14 -96 -40s-40 -60 -40 -96 -s14 -71 40 -97z" /> - <glyph glyph-name="ion-ios-settings-strong" unicode="" -d="M0 72h283c6 14 21 24 37 24s31 -10 37 -24h91v-32h-91c-6 -14 -21 -24 -37 -24s-31 10 -37 24h-283zM0 208h91c6 14 21 24 37 24s31 -10 37 -24h283v-32h-283c-6 -14 -21 -24 -37 -24s-31 10 -37 24h-91zM0 344h283c6 14 21 24 37 24s31 -10 37 -24h91v-32h-91 -c-6 -14 -21 -24 -37 -24s-31 10 -37 24h-283z" /> - <glyph glyph-name="ion-ios-settings" unicode="" -d="M320 344c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16zM320 360v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM320 72c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16zM320 88v0c18 0 32 -14 32 -32s-14 -32 -32 -32 -s-32 14 -32 32s14 32 32 32zM128 208c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16zM128 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM175 200h273v-16h-273c0 3 1 5 1 8s-1 5 -1 8zM80 192c0 -3 1 -5 1 -8h-81v16h81 -c0 -3 -1 -5 -1 -8zM367 64h81v-16h-81c0 3 1 5 1 8s-1 5 -1 8zM272 56c0 -3 1 -5 1 -8h-273v16h273c0 -3 -1 -5 -1 -8zM367 336h81v-16h-81c0 3 1 5 1 8s-1 5 -1 8zM273 336c0 -3 -1 -5 -1 -8s1 -5 1 -8h-273v16h273z" /> - <glyph glyph-name="ion-ios-shuffle-strong" unicode="" horiz-adv-x="384" -d="M301 296c-85 0 -119 -64 -152 -126c-1 -3 -3 -5 -4 -8l-1 -1c-2 -3 -2 -5 -4 -8c-21 -38 -43 -68 -68 -83c-15 -9 -34 -18 -72 -18v32c45 0 76 18 112 84c2 3 2 6 4 9h1c1 2 3 4 4 7c34 64 76 144 180 144h15l-52 43l21 25l99 -84l-99 -82l-21 24l51 42h-14zM285 154 -l99 -82l-99 -84l-21 25l52 43h-15c-78 0 -122 45 -153 95l18 33c29 -51 64 -96 135 -96h14l-51 42zM112 216c-36 66 -67 84 -112 84v32c38 0 57 -9 72 -18c25 -15 47 -44 67 -81c-7 -11 -13 -22 -19 -33c-1 2 -2 5 -3 7h-1c-2 3 -2 6 -4 9z" /> - <glyph glyph-name="ion-ios-shuffle" unicode="" horiz-adv-x="384" -d="M298 241l-10 12l62 51h-46c-93 0 -129 -75 -164 -139c-2 -3 -3 -6 -5 -9c-20 -37 -41 -61 -65 -75c-14 -8 -33 -17 -70 -17v16c48 0 83 14 121 84c2 3 3 6 5 9c35 65 75 147 178 147h46l-62 52l10 12l86 -72zM135 228c0 -1 1 -2 1 -3c-3 -5 -6 -11 -9 -16c0 1 -1 1 -1 2 -c-2 3 -3 6 -5 9c-38 70 -73 84 -121 84v16c37 0 56 -9 70 -17c24 -14 45 -38 65 -75zM298 143l86 -71l-86 -72l-10 12l62 52h-46c-76 0 -118 45 -149 95c1 2 2 5 3 7c2 3 4 7 6 10c30 -50 67 -96 140 -96h46l-62 51z" /> - <glyph glyph-name="ion-ios-skipbackward-outline" unicode="" horiz-adv-x="320" -d="M0 352h79v-142l241 142v-320l-241 142v-142h-79v320zM80 192l7 -4l217 -128v264v0l-217 -128zM16 336v-288h47v126v8v28v126h-47z" /> - <glyph glyph-name="ion-ios-skipbackward" unicode="" horiz-adv-x="320" -d="M0 352h79v-142l241 142v-320l-241 142v-142h-79v320z" /> - <glyph glyph-name="ion-ios-skipforward-outline" unicode="" horiz-adv-x="320" -d="M241 352h79v-320h-79v142l-241 -142v320l241 -142v142zM233 188l7 4l-7 4l-217 128v0v-264zM304 48v288h-47v-126v-28v-8v-126h47z" /> - <glyph glyph-name="ion-ios-skipforward" unicode="" horiz-adv-x="320" -d="M241 352h79v-320h-79v142l-241 -142v320l241 -142v142z" /> - <glyph glyph-name="ion-ios-snowy" unicode="" horiz-adv-x="256" -d="M252 131c4 -2 5 -7 3 -11s-7 -5 -11 -3l-29 17c-2 -8 -2 -16 0 -24c1 -4 -3 -9 -7 -10s-8 2 -9 6c-2 12 -3 24 1 36l-64 36v-73c11 -3 22 -8 31 -16c3 -3 4 -8 1 -11s-8 -4 -11 -1c-6 5 -13 10 -21 12v-33c0 -4 -4 -8 -8 -8s-8 4 -8 8v33c-8 -2 -15 -7 -21 -12 -c-3 -3 -8 -2 -11 1s-3 8 0 11c9 8 20 13 32 16v73l-65 -36c4 -12 4 -23 2 -35c-1 -4 -5 -8 -9 -7s-8 6 -7 10c2 8 2 16 0 24l-29 -17c-4 -2 -9 -1 -11 3s-1 9 3 11l29 16c-6 6 -13 10 -21 13c-4 1 -6 6 -5 10c2 4 6 6 10 5c12 -4 22 -11 30 -19l65 36l-65 37 -c-8 -9 -18 -15 -30 -19c-4 -1 -9 0 -10 4s1 10 5 11c8 3 15 6 21 12l-29 16c-4 2 -5 7 -3 11s7 5 11 3l29 -16c2 8 2 15 0 23c-1 4 3 9 7 10s8 -2 9 -6c2 -12 1 -25 -2 -36l65 -36v73c-12 3 -23 8 -32 16c-3 3 -3 8 0 11s8 4 11 1c6 -5 13 -10 21 -12v33c0 4 4 8 8 8 -s8 -4 8 -8v-33c8 2 15 7 21 12c3 3 8 2 11 -1s2 -8 -1 -11c-9 -8 -20 -13 -31 -16v-73l64 36c-3 11 -4 24 -2 36c1 4 6 7 10 6s7 -6 6 -10c-2 -8 -1 -15 1 -23l29 16c4 2 9 1 11 -3s1 -9 -3 -11l-29 -16c6 -6 13 -10 21 -13c4 -1 6 -6 5 -10s-6 -6 -10 -5 -c-12 4 -23 10 -31 19l-64 -36l64 -36c8 8 19 15 31 19c4 1 9 -1 10 -5s-1 -9 -5 -10c-8 -3 -15 -7 -21 -13z" /> - <glyph glyph-name="ion-ios-speedometer-outline" unicode="" -d="M224 384c124 0 224 -100 224 -224c0 -57 -21 -108 -56 -148c-4 -4 -7 -8 -11 -12l-10 10l-1 2c-19 18 -41 33 -65 43c-26 11 -53 16 -81 16s-55 -5 -81 -16c-24 -10 -46 -25 -65 -43l-1 -2l-10 -10c-4 4 -7 8 -11 12c-35 40 -56 91 -56 148c0 124 100 224 224 224z -M416 79c10 23 15 48 16 73h-32v16h32c-1 25 -6 50 -16 73c-9 22 -23 42 -39 60l-27 -27l-6 6l-5 5v0h-1l27 27c-18 17 -38 31 -60 40c-23 10 -48 15 -74 16v-38h-16v38c-25 -1 -49 -6 -72 -16c-22 -10 -43 -23 -61 -40l27 -27v0v0l-6 -6l-5 -5l-27 27 -c-16 -18 -30 -38 -39 -60c-10 -23 -15 -49 -16 -74h32v-16h-32c1 -25 6 -49 16 -72c9 -20 20 -39 35 -56c40 40 96 64 157 64s117 -24 157 -64c15 17 26 36 35 56zM336 273l2 -1l-75 -84c6 -8 9 -18 9 -28c0 -26 -22 -48 -48 -48c-10 0 -19 4 -27 9l-13 -12l-11 11l12 12 -c-6 8 -9 18 -9 28c0 26 22 48 48 48c10 0 19 -3 27 -8zM224 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" /> - <glyph glyph-name="ion-ios-speedometer" unicode="" -d="M385 169v-15h30c-1 -22 -6 -44 -15 -65c-8 -18 -19 -35 -32 -50c-39 37 -90 58 -144 58s-105 -21 -144 -58c-13 15 -24 32 -32 50c-9 21 -14 43 -15 65h28h1v16h-29c1 23 6 45 15 66c9 20 20 38 35 54l25 -24l10 10l1 1v0v0l-25 25c16 15 36 26 56 35c21 9 43 14 66 15 -v-34h14h1v34c23 -1 46 -6 67 -15s39 -20 55 -35l-24 -25l11 -11l25 25c15 -16 26 -35 35 -55c9 -21 14 -43 15 -66h-30v-1zM272 160c0 10 -3 20 -9 28l63 76l-2 1l-73 -65c-8 5 -17 8 -27 8c-26 0 -48 -22 -48 -48c0 -10 3 -20 9 -28l-12 -12l11 -11l13 12c8 -5 17 -9 27 -9 -c26 0 48 22 48 48zM224 384c124 0 224 -100 224 -224c0 -57 -21 -108 -56 -148c-4 -4 -7 -8 -11 -12h-23c-32 39 -80 64 -134 64s-102 -25 -134 -64h-23c-4 4 -7 8 -11 12c-35 40 -56 91 -56 148c0 124 100 224 224 224zM379 27c34 37 52 86 52 136c0 55 -22 106 -61 145 -s-91 60 -146 60s-107 -21 -146 -60s-61 -90 -61 -145c0 -50 18 -99 52 -136l10 -10l1 -1v1l9 9l1 1v0c17 17 38 30 60 39c24 10 48 15 74 15s50 -5 74 -15c22 -9 43 -22 60 -39v0l1 -1l9 -9v-1l1 1zM192 160c0 21 11 32 32 32s32 -11 32 -32s-11 -32 -32 -32s-32 11 -32 32z -" /> - <glyph glyph-name="ion-ios-star-half" unicode="" -d="M140 143l-140 98h171l53 159l53 -159h171l-140 -98l54 -159l-138 99l-138 -99zM224 347v-244l107 -76l-43 122l108 75h-131z" /> - <glyph glyph-name="ion-ios-star-outline" unicode="" -d="M448 241l-140 -98l54 -159l-138 99l-138 -99l54 159l-140 98h171l53 159l53 -159h171zM331 27l-43 122l108 75h-131l-41 123l-41 -123h-131l108 -75l-43 -122l107 76z" /> - <glyph glyph-name="ion-ios-star" unicode="" -d="M448 241l-140 -98l54 -159l-138 99l-138 -99l54 159l-140 98h171l53 159l53 -159h171z" /> - <glyph glyph-name="ion-ios-stopwatch-outline" unicode="" horiz-adv-x="384" -d="M334 301c32 -35 50 -80 50 -128c0 -104 -86 -189 -192 -189s-192 85 -192 189c0 48 18 94 51 129l1 1h-18l-8 -8l-23 23l41 40l23 -22l-9 -9v-18c31 30 72 50 116 53h2v38h32v-38c43 -4 82 -21 113 -49l5 -5v19l-9 9l23 22l41 -40l-22 -23l-9 8h-18zM192 2 -c96 0 173 77 173 171s-77 171 -173 171c-95 0 -173 -77 -173 -171s77 -171 173 -171zM200 191c14 -4 24 -17 24 -31c0 -15 -10 -26 -24 -30l-8 -18v0l-8 18c-14 4 -24 15 -24 30c0 14 12 27 24 31v129h16v-129z" /> - <glyph glyph-name="ion-ios-stopwatch" unicode="" horiz-adv-x="384" -d="M334 301c32 -35 50 -80 50 -128c0 -104 -86 -189 -192 -189s-192 85 -192 189c0 48 18 94 51 129l1 1h-18l-8 -8l-23 23l41 40l23 -22l-9 -9v-18c31 30 72 50 116 53h2v38h32v-38c43 -4 82 -21 113 -49l5 -5v19l-9 9l23 22l41 -40l-22 -23l-9 8h-18zM200 130 -c14 4 24 15 24 30c0 14 -10 27 -24 31v129h-16v-129c-12 -4 -24 -17 -24 -31c0 -15 10 -26 24 -30l8 -18z" /> - <glyph glyph-name="ion-ios-sunny-outline" unicode="" horiz-adv-x="320" -d="M151 296v56h18v-56h-18zM151 32v60h18v-60h-18zM264 183v18h56v-18h-56zM0 183v18h60v-18h-60zM240 130l34 -34l-12 -12l-33 34zM64 306l34 -33l-12 -12l-34 34zM229 272l33 34l12 -12l-34 -33zM52 96l34 34l11 -12l-33 -34zM160 116c-42 0 -76 34 -76 76s34 76 76 76 -s76 -34 76 -76s-34 -76 -76 -76zM160 251c-32 0 -59 -27 -59 -59s27 -59 59 -59s59 27 59 59s-27 59 -59 59z" /> - <glyph glyph-name="ion-ios-sunny" unicode="" horiz-adv-x="320" -d="M151 296v56h18v-56h-18zM151 32v60h18v-60h-18zM264 183v18h56v-18h-56zM0 183v18h60v-18h-60zM240 130l34 -34l-12 -12l-33 34zM64 306l34 -33l-12 -12l-34 34zM229 272l33 34l12 -12l-34 -33zM52 96l34 34l11 -12l-33 -34zM160 116c-42 0 -76 34 -76 76s34 76 76 76 -s76 -34 76 -76s-34 -76 -76 -76z" /> - <glyph glyph-name="ion-ios-telephone-outline" unicode="" horiz-adv-x="352" -d="M336 112c16 -16 26 -35 0 -66c-25 -30 -42 -30 -64 -30c-24 0 -58 14 -93 40c-32 23 -46 34 -78 67c-34 35 -55 64 -79 107c-27 50 -24 74 -18 92c4 12 14 24 28 33l1 1c6 4 18 12 32 12c13 0 24 -6 34 -18l1 -1c11 -14 24 -31 32 -47c10 -21 10 -38 -1 -53 -c-9 -12 -12 -19 -12 -23s5 -9 13 -18l1 -1c16 -18 20 -23 26 -29c1 -1 3 -2 4 -3l2 -2c7 -7 11 -12 29 -28l1 -1c7 -6 9 -8 12 -8c5 0 16 7 29 15c4 3 11 5 17 5c27 0 68 -29 83 -44zM324 57c19 22 13 31 1 43c-13 14 -50 39 -72 39c-3 0 -6 -1 -8 -2 -c-19 -12 -28 -18 -37 -18s-15 6 -23 13h-1c-19 16 -23 21 -30 29l-2 2c-1 1 -3 2 -4 3c-6 6 -11 12 -27 30v1c-10 11 -17 18 -18 28s5 20 16 34c15 20 -5 48 -31 79l-1 1c-7 8 -14 12 -22 12c-10 0 -18 -6 -23 -9c-1 0 -2 -1 -2 -1c-11 -7 -18 -16 -21 -24 -c-5 -16 -7 -35 17 -79c23 -42 43 -70 76 -104c31 -32 45 -42 76 -64c32 -23 64 -38 84 -38c21 0 32 1 52 25z" /> - <glyph glyph-name="ion-ios-telephone" unicode="" horiz-adv-x="352" -d="M336 112c16 -16 26 -35 0 -66c-25 -30 -42 -30 -64 -30c-24 0 -58 14 -93 40c-32 23 -46 34 -78 67c-34 35 -55 64 -79 107c-27 50 -24 74 -18 92c4 12 14 24 28 33l1 1c6 4 18 12 32 12c13 0 24 -6 34 -18l1 -1c11 -14 24 -31 32 -47c10 -21 10 -38 -1 -53 -c-9 -12 -12 -19 -12 -23s5 -9 13 -18l1 -1c16 -18 20 -23 26 -29c1 -1 3 -2 4 -3l2 -2c7 -7 11 -12 29 -28l1 -1c7 -6 9 -8 12 -8c5 0 16 7 29 15c4 3 11 5 17 5c27 0 68 -29 83 -44z" /> - <glyph glyph-name="ion-ios-tennisball-outline" unicode="" horiz-adv-x="416" -d="M416 192v-8v0c0 -5 0 -11 -1 -16v0c-11 -97 -90 -174 -187 -183v0h-4h-2s-1 -1 -2 -1h-3h-1h-8c-115 0 -208 93 -208 208s93 208 208 208s208 -93 208 -208zM399 192c0 105 -86 191 -191 191c-3 0 -5 -1 -8 -1c1 -24 6 -46 15 -68c10 -26 26 -49 46 -69s43 -36 69 -46 -c22 -9 44 -14 68 -15c0 3 1 5 1 8zM17 192c0 -105 86 -191 191 -191h4c-1 22 -7 45 -15 66c-10 26 -26 48 -46 68s-42 36 -68 46c-21 8 -44 14 -66 15v-4zM228 2c88 9 158 78 169 166c-54 3 -106 25 -147 66s-63 93 -66 147c-88 -11 -157 -81 -166 -169 -c53 -3 105 -25 145 -65s62 -92 65 -145z" /> - <glyph glyph-name="ion-ios-tennisball" unicode="" horiz-adv-x="416" -d="M0 196v0v0v0zM212 -16h1h-1v0zM208 400c115 0 208 -93 208 -208c0 -8 0 -16 -1 -24v0v0c-11 -97 -90 -174 -187 -183v0v0c-6 -1 -13 -1 -20 -1c-115 0 -208 93 -208 208v4v0v0c0 6 0 11 1 16v0v0c9 97 86 176 183 187v0v0c6 1 11 1 16 1v0v0h8zM83 181 -c26 -10 48 -26 68 -46s36 -42 46 -68c8 -21 14 -44 15 -66c5 0 11 0 16 1c-3 53 -25 105 -65 145s-92 62 -145 65c-1 -5 -1 -11 -1 -16c22 -1 45 -7 66 -15zM250 234c41 -41 93 -63 147 -66c1 5 1 11 1 16c-24 1 -46 6 -68 15c-26 10 -49 26 -69 46s-36 43 -46 69 -c-9 22 -14 44 -15 68c-5 0 -11 0 -16 -1c3 -54 25 -106 66 -147z" /> - <glyph glyph-name="ion-ios-thunderstorm-outline" unicode="" horiz-adv-x="274" -d="M193 176l-88 -128l29 96h-52l15 80h72l-16 -48h40zM209 275c36 0 65 -29 65 -65s-29 -66 -65 -66h-8v17h8c27 0 49 22 49 49s-22 50 -49 50h-6l-14 -2l-3 14c-3 14 -11 26 -22 35s-25 13 -39 13c-34 0 -63 -27 -63 -62v-12s1 -9 1 -9c-5 0 -12 -2 -14 -2 -c-19 -3 -33 -18 -33 -37c0 -10 3 -19 10 -26s16 -11 26 -11h11v-17h-11c-28 0 -52 24 -52 53c0 27 21 51 47 53v8c0 43 35 78 78 78c37 0 68 -26 76 -61h8z" /> - <glyph glyph-name="ion-ios-thunderstorm" unicode="" horiz-adv-x="274" -d="M153 176h40l-22 -32l-66 -96l29 96h-52l15 80h72zM84 240h107l-16 -48h18h30l-33 -48h19c36 0 65 30 65 66s-29 65 -65 65h-8c-8 35 -39 61 -76 61c-43 0 -78 -35 -78 -78v-8c-26 -2 -47 -26 -47 -53c0 -29 24 -53 52 -53h14z" /> - <glyph glyph-name="ion-ios-time-outline" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM371 45c19 19 35 41 45 66c11 26 16 53 16 81s-5 55 -16 81c-10 25 -26 47 -45 66s-41 35 -66 45c-26 11 -53 16 -81 16s-55 -5 -81 -16c-25 -10 -47 -26 -66 -45 -s-35 -41 -45 -66c-11 -26 -16 -53 -16 -81s5 -55 16 -81c10 -25 26 -47 45 -66s41 -35 66 -45c26 -11 53 -16 81 -16s55 5 81 16c25 10 47 26 66 45zM216 368c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM216 16c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM392 192 -c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM40 192c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM128 344c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM304 40c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM368 280c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8 -zM64 104c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM64 280c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM368 104c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM304 344c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM128 40c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8 -s-8 3 -8 8zM238 200c4 -8 2 -18 -6 -22v-122c0 -4 -4 -8 -8 -8s-8 4 -8 8v122c-2 1 -4 4 -6 6c-3 5 -3 11 0 16l-37 63c-2 4 -1 9 3 11s8 1 10 -3l38 -63c5 0 11 -3 14 -8z" /> - <glyph glyph-name="ion-ios-time" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM224 376c-4 0 -8 -4 -8 -8s4 -8 8 -8s8 4 8 8s-4 8 -8 8zM48 184c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM76 97c4 2 4 7 2 11s-6 5 -10 3s-5 -7 -3 -11s7 -5 11 -3z -M78 276c2 4 2 9 -2 11s-9 1 -11 -3s-1 -9 3 -11s8 -1 10 3zM132 351c-4 -2 -5 -7 -3 -11s7 -4 11 -2s5 6 3 10s-7 5 -11 3zM143 36c2 4 1 8 -3 10s-9 2 -11 -2s-1 -9 3 -11s9 -1 11 3zM224 8c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM232 178c8 4 10 14 6 22 -c-3 5 -9 8 -14 8l-38 64c-2 4 -7 4 -11 2s-4 -7 -2 -11l37 -63c-3 -5 -3 -11 0 -16c2 -2 4 -5 6 -6v-122c0 -4 4 -8 8 -8s8 4 8 8v122zM316 33c4 2 5 7 3 11s-7 4 -11 2s-5 -6 -3 -10s7 -5 11 -3zM319 340c2 4 1 9 -3 11s-9 1 -11 -3s-1 -8 3 -10s9 -2 11 2zM383 100 -c2 4 1 9 -3 11s-8 1 -10 -3s-2 -9 2 -11s9 -1 11 3zM380 273c4 2 5 7 3 11s-7 5 -11 3s-4 -7 -2 -11s6 -5 10 -3zM400 184c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8z" /> - <glyph glyph-name="ion-ios-timer-outline" unicode="" horiz-adv-x="416" -d="M189 176l-1 2s-89 118 -86 120s121 -85 121 -85c1 -1 1 -2 2 -3c5 -5 8 -11 8 -18c0 -14 -11 -25 -25 -25c-8 0 -14 3 -19 9zM208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208c0 57 23 109 61 147l12 -12c-35 -35 -56 -82 -56 -135 -c0 -106 85 -191 191 -191s191 85 191 191c0 100 -77 183 -175 191v-95h-16v112v0v0z" /> - <glyph glyph-name="ion-ios-timer" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM102 298c-2 -2 86 -120 86 -120l1 -1c5 -6 11 -10 19 -10c14 0 25 11 25 25c0 7 -3 13 -8 18l-3 3c0 0 -117 87 -120 85zM208 1c106 0 192 85 192 191s-86 192 -192 192v-96h16v78 -c88 -9 158 -84 158 -174c0 -96 -78 -174 -174 -174s-175 78 -175 174c0 48 19 92 51 124l-11 12c-35 -35 -56 -83 -56 -136c0 -106 85 -191 191 -191z" /> - <glyph glyph-name="ion-ios-toggle-outline" unicode="" -d="M96 128c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM96 144v0c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM351 160v0h-255c-44 0 -80 -36 -80 -80s36 -80 80 -80h256c44 0 80 36 80 80s-37 80 -81 80zM352 176v0 -c53 0 96 -43 96 -96s-43 -96 -96 -96h-256c-53 0 -96 43 -96 96s43 96 96 96h256zM352 352c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM352 368v0c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM97 384v0c-44 0 -81 -36 -81 -80 -s36 -80 80 -80h256c44 0 80 36 80 80s-36 80 -80 80h-255zM96 400v0h256c53 0 96 -43 96 -96s-43 -96 -96 -96h-256c-53 0 -96 43 -96 96s43 96 96 96z" /> - <glyph glyph-name="ion-ios-toggle" unicode="" -d="M96 128c26 0 48 -22 48 -48s-22 -48 -48 -48s-48 22 -48 48s22 48 48 48zM352 176c53 0 96 -43 96 -96s-43 -96 -96 -96h-256c-53 0 -96 43 -96 96s43 96 96 96h256zM96 16c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM352 256c-26 0 -48 22 -48 48 -s22 48 48 48s48 -22 48 -48s-22 -48 -48 -48zM96 208c-53 0 -96 43 -96 96s43 96 96 96h256c53 0 96 -43 96 -96s-43 -96 -96 -96h-256zM352 368c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64z" /> - <glyph glyph-name="ion-ios-trash-outline" unicode="" horiz-adv-x="288" -d="M288 335v-15h-20l-24 -291c0 -16 -13 -29 -29 -29h-141c-16 0 -29 13 -29 29l-24 291h-21v15h80v20c0 16 13 29 29 29h70c16 0 29 -13 29 -29v-20h80zM95 355v-20h98v20c0 8 -6 14 -14 14h-70c-8 0 -14 -6 -14 -14zM230 30l23 290h-217l23 -290v0v-1c0 -8 7 -14 15 -14 -h141c8 0 15 6 15 14v1v0zM137 47v241h14v-241h-14zM208 288l-11 -241h-14l10 241h15zM94 288l11 -241h-14l-11 241h14z" /> - <glyph glyph-name="ion-ios-trash" unicode="" horiz-adv-x="288" -d="M208 335h80v-15h-20l-24 -291c0 -16 -13 -29 -29 -29h-141c-16 0 -29 13 -29 29l-24 291h-21v15h80v20c0 16 13 29 29 29h70c16 0 29 -13 29 -29v-20zM95 355v0v-20h98v20c0 8 -6 14 -14 14h-70c-8 0 -14 -6 -14 -14zM91 47h14l-11 241h-14zM151 47v241h-14v-241h14z -M197 47l11 241h-14l-11 -241h14z" /> - <glyph glyph-name="ion-ios-undo-outline" unicode="" horiz-adv-x="384" -d="M384 80v-32h-10l-20 31c-20 33 -44 63 -75 77c-24 11 -47 19 -87 20v-80l-192 128l192 128v-80c63 -3 108 -21 143 -56c52 -53 49 -119 49 -136zM368 87c0 0 9 169 -192 169v65l-148 -97l148 -97v65c91 0 144 -24 192 -105z" /> - <glyph glyph-name="ion-ios-undo" unicode="" horiz-adv-x="384" -d="M384 80v-32h-10l-20 31c-20 33 -44 63 -75 77c-24 11 -47 19 -87 20v-80l-192 128l192 128v-80c63 -3 108 -21 143 -56c52 -53 49 -119 49 -136z" /> - <glyph glyph-name="ion-ios-unlocked-outline" unicode="" horiz-adv-x="320" -d="M160 160c18 0 32 -14 32 -32c0 -15 -10 -27 -24 -31v-33h-16v33c-14 4 -24 16 -24 31c0 18 14 32 32 32zM160 112c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM72 224h248v-240h-320v240h56v72c0 57 47 104 104 104s104 -47 104 -104v-8h-16v8 -c0 49 -39 88 -88 88s-88 -39 -88 -88v-72zM304 0v208h-288v-208h288z" /> - <glyph glyph-name="ion-ios-unlocked" unicode="" horiz-adv-x="320" -d="M160 144c9 0 16 -7 16 -16s-7 -16 -16 -16s-16 7 -16 16s7 16 16 16zM72 224h248v-240h-320v240h56v72c0 57 47 104 104 104s104 -47 104 -104v-8h-16v8c0 49 -39 88 -88 88s-88 -39 -88 -88v-72zM168 97c14 4 24 16 24 31c0 18 -14 32 -32 32s-32 -14 -32 -32 -c0 -15 10 -27 24 -31v-33h16v33z" /> - <glyph glyph-name="ion-ios-upload-outline" unicode="" horiz-adv-x="320" -d="M192 304h128v-304h-320v304h128v-16h-112v-272h288v272h-112v16zM97 330l-11 12l74 74l74 -74l-11 -12l-55 55v-243h-16v243z" /> - <glyph glyph-name="ion-ios-upload" unicode="" horiz-adv-x="320" -d="M168 304h152v-304h-320v304h152v-162h16v162zM168 385v-81h-16v81l-55 -55l-11 12l74 74l74 -74l-11 -12z" /> - <glyph glyph-name="ion-ios-videocam-outline" unicode="" horiz-adv-x="418" -d="M257 320c19 0 33 -14 33 -33v-188c0 -19 -14 -35 -33 -35h-221c-19 0 -36 16 -36 35v188c0 19 17 33 36 33h221zM273 99v188c0 9 -8 16 -17 16h-221c-9 0 -18 -7 -18 -16v-188c0 -9 10 -18 19 -18h221c9 0 16 9 16 18zM320 235l98 53v-192l-98 53v86zM401 258v0l-64 -33 -v-66l64 -33v132z" /> - <glyph glyph-name="ion-ios-videocam" unicode="" horiz-adv-x="418" -d="M257 320c19 0 33 -14 33 -33v-188c0 -19 -14 -35 -33 -35h-221c-19 0 -36 16 -36 35v188c0 19 17 33 36 33h221zM320 235l98 53v-192l-98 53v86z" /> - <glyph glyph-name="ion-ios-volume-high" unicode="" horiz-adv-x="320" -d="M278 320c26 -36 42 -80 42 -128s-16 -92 -42 -128l-14 10c24 33 39 74 39 118s-15 85 -39 118zM224 96l-14 10c18 24 29 54 29 86s-11 62 -29 86l14 10c20 -27 32 -60 32 -96s-12 -69 -32 -96zM177 128l-13 10c12 15 18 34 18 54s-6 39 -18 54l13 10 -c14 -18 22 -40 22 -64s-8 -46 -22 -64zM58 232l70 56v-192l-70 56h-58v80h58z" /> - <glyph glyph-name="ion-ios-volume-low" unicode="" horiz-adv-x="128" -d="M58 232l70 56v-192l-70 56h-58v80h58z" /> - <glyph glyph-name="ion-ios-wineglass-outline" unicode="" horiz-adv-x="192" -d="M104 139v-155h72v-16h-80h-80v16h72v155c0 22 -20 39 -40 55c-8 6 -16 13 -22 19c-27 28 -26 52 -26 71v4c0 44 31 125 32 128h64h64c1 -3 32 -84 32 -128v-4c0 -19 1 -43 -26 -71c-6 -6 -14 -13 -22 -19c-20 -16 -40 -33 -40 -55zM43 400c-5 -16 -20 -63 -25 -96h156 -c-5 33 -20 80 -25 96h-53h-53zM96 175c3 0 5 0 7 2v0c9 11 20 20 31 29c8 6 15 12 20 18c22 23 22 41 22 60v4h-160v-4c0 -19 0 -37 22 -60c5 -6 12 -12 20 -18c11 -9 22 -18 31 -29v0c2 -2 4 -2 7 -2z" /> - <glyph glyph-name="ion-ios-wineglass" unicode="" horiz-adv-x="192" -d="M104 139v-155h72v-16h-80h-80v16h72v155c0 22 -20 39 -40 55c-8 6 -16 13 -22 19c-27 28 -26 52 -26 71v4c0 44 31 125 32 128h64h64c1 -3 32 -84 32 -128v-4c0 -19 1 -43 -26 -71c-6 -6 -14 -13 -22 -19c-20 -16 -40 -33 -40 -55zM43 400c-5 -16 -20 -63 -25 -96h156 -c-5 33 -20 80 -25 96h-53h-53z" /> - <glyph glyph-name="ion-ios-world-outline" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208v0v0v0c-115 0 -208 93 -208 208s93 208 208 208v0v0v0zM216 276v-76h75c-1 31 -5 60 -11 84c-21 -5 -42 -7 -64 -8zM216 292c20 1 41 3 60 8c-14 46 -38 76 -60 82v-90zM200 382c-23 -6 -45 -36 -60 -82 -c19 -5 39 -7 60 -8v90zM200 276c-22 1 -44 3 -65 8c-6 -24 -10 -53 -11 -84h76v76zM108 200c1 32 4 62 11 88c-21 6 -41 15 -59 25c-26 -31 -41 -70 -43 -113h91zM108 184h-91c2 -43 17 -82 43 -113c19 10 38 19 59 25c-7 26 -10 56 -11 88zM124 184c1 -31 5 -60 11 -84 -c21 5 43 8 65 9v75h-76zM200 92c-21 -1 -41 -3 -60 -8c15 -46 37 -76 60 -82v90zM216 2c22 6 46 36 60 82c-19 5 -40 7 -60 8v-90zM216 109c22 -1 43 -4 64 -9c6 24 10 53 11 84h-75v-75zM308 184c-1 -32 -5 -62 -12 -88c21 -6 41 -15 60 -25c26 31 41 70 43 113h-91z -M308 200v0h91c-2 43 -17 82 -43 113c-19 -10 -38 -19 -59 -25c7 -26 10 -56 11 -88zM344 326c-25 25 -56 44 -91 52c16 -17 29 -43 39 -74c18 6 35 13 52 22zM163 378c-35 -8 -67 -27 -91 -52c16 -9 34 -15 52 -21c10 31 23 56 39 73zM72 58c25 -25 56 -44 91 -52 -c-16 17 -30 43 -40 74c-18 -6 -35 -13 -51 -22zM253 6c35 8 66 27 91 52c-17 9 -34 16 -52 22c-10 -31 -23 -57 -39 -74z" /> - <glyph glyph-name="ion-ios-world" unicode="" horiz-adv-x="416" -d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208v0v0v0c-115 0 -208 93 -208 208s93 208 208 208v0v0v0zM208 1c106 0 191 85 191 191s-85 191 -191 191v0v0v0c-106 0 -191 -85 -191 -191s86 -191 191 -191v0v0v0zM274 276c6 -22 9 -48 10 -76h-68v68c20 1 39 4 58 8 -zM216 366c20 -6 41 -34 54 -75c-17 -4 -36 -6 -54 -7v82zM145 291c13 42 35 69 55 75v-82c-19 1 -37 3 -55 7zM333 315c-15 -8 -31 -15 -48 -20c-9 29 -21 52 -36 67c32 -8 61 -24 84 -47zM299 200c-1 29 -4 56 -10 80c19 6 37 14 54 23c23 -28 38 -64 40 -103h-84zM132 200 -c1 28 3 54 9 76c19 -5 39 -7 59 -8v-68h-68zM284 184c-1 -28 -4 -54 -10 -76c-19 5 -38 7 -58 8v68h68zM141 108c-6 22 -8 48 -9 76h68v-68c-20 -1 -40 -3 -59 -8zM200 18c-20 6 -42 33 -55 75c18 4 36 6 55 7v-82zM249 22c15 15 27 38 36 67c17 -5 33 -11 48 -19 -c-23 -23 -52 -40 -84 -48zM167 362c-15 -15 -27 -39 -36 -67c-16 5 -33 11 -48 19c22 23 52 40 84 48zM289 104c6 24 9 51 10 80h84c-2 -39 -17 -75 -40 -103c-17 9 -35 17 -54 23zM216 100c18 -1 37 -3 54 -7c-13 -42 -34 -69 -54 -75v82zM127 280c-6 -24 -11 -51 -11 -80 -h-83c2 39 17 75 40 103c17 -9 35 -17 54 -23zM116 184c1 -29 4 -56 10 -80c-19 -6 -36 -14 -53 -23c-23 28 -38 64 -40 103h83zM83 70c15 8 32 14 48 19c9 -28 21 -52 36 -67c-32 8 -62 25 -84 48z" /> - <glyph glyph-name="ion-ipad" unicode="" horiz-adv-x="288" -d="M0 375c0 5 4 9 9 9h270c5 0 9 -4 9 -9v-366c0 -5 -4 -9 -9 -9h-270c-5 0 -9 4 -9 9v366zM144 10c8 0 14 6 14 14s-7 14 -14 14c-8 0 -14 -6 -14 -14s6 -14 14 -14zM32 329v-275c0 -4 3 -6 6 -6h211c3 0 7 2 7 6v275c0 4 -4 7 -7 7h-211c-3 0 -6 -3 -6 -7z" /> - <glyph glyph-name="ion-iphone" unicode="" horiz-adv-x="192" -d="M168 384c13 0 24 -11 24 -24v-336c0 -13 -11 -24 -24 -24h-144c-13 0 -24 11 -24 24v336c0 13 11 24 24 24h144zM80 348v0c0 -2 2 -4 4 -4h24c2 0 4 2 4 4v0c0 2 -2 4 -4 4h-24c-2 0 -4 -2 -4 -4zM68 352c-2 0 -4 -2 -4 -4s2 -4 4 -4s4 2 4 4s-2 4 -4 4zM96 16 -c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM176 64v256h-160v-256h160z" /> - <glyph glyph-name="ion-ipod" unicode="" horiz-adv-x="224" -d="M112 137c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM196 384c15 0 28 -12 28 -28v-328c0 -16 -13 -28 -28 -28h-168c-15 0 -28 12 -28 28v328c0 16 13 28 28 28h168zM112 32c40 0 72 32 72 72s-32 72 -72 72s-72 -32 -72 -72s32 -72 72 -72z -M192 221v118c-1 7 -6 12 -12 13h-136c-7 -1 -12 -7 -12 -15v-114c0 -8 6 -15 14 -15h131c8 0 14 5 15 13z" /> - <glyph glyph-name="ion-jet" unicode="" horiz-adv-x="326" -d="M222 80l-2 -13l53 -58l-18 -27l-74 9l-18 -55l-19 55l-73 -9l-18 27l53 58l-2 13l-104 -35l3 53l114 103s26 173 28 192c5 40 18 55 18 55s13 -15 18 -55c2 -19 28 -192 28 -192l114 -103l3 -53z" /> - <glyph glyph-name="ion-key" unicode="" horiz-adv-x="192" -d="M144 147c28 -17 48 -48 48 -83c0 -53 -43 -96 -96 -96s-96 43 -96 96c0 36 19 67 48 84c0 0 7 16 12 41c0 4 11 6 11 12v20c0 5 -7 9 -7 11v8v8c0 2 0 4 1 6c0 1 1 1 1 2l2 1l4 4v1c2 2 3 4 3 6c0 1 1 8 1 9c0 3 -2 6 -4 8l-1 1l-4 4v0l-1 1v0c-2 2 -3 5 -3 8v7 -c0 3 2 7 4 9v0l5 5v0c2 2 4 3 4 6v24c0 3 -2 6 -4 8v1l-4 4l-1 1c-2 2 -3 5 -3 8v18c0 11 0 19 9 23c3 1 14 3 23 3c20 0 30 -8 32 -36c0 0 7 -81 9 -143s7 -90 7 -90zM96 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" /> - <glyph glyph-name="ion-knife" unicode="" horiz-adv-x="64" -d="M62 416c2 0 2 -1 2 -6v-412c0 -15 -10 -30 -24 -30v0v0c-14 0 -24 15 -24 30c1 19 14 83 16 130v0c1 30 -32 31 -32 70c0 134 35 191 54 214c2 2 5 4 8 4z" /> - <glyph glyph-name="ion-laptop" unicode="" horiz-adv-x="512" -d="M480 342v-262h-448v262c0 6 4 10 10 10h428c6 0 10 -4 10 -10zM448 112v208h-384v-208h384zM0 59v5h512v-5c-70 -20 -116 -27 -256 -27s-186 7 -256 27z" /> - <glyph glyph-name="ion-leaf" unicode="" horiz-adv-x="422" -d="M412 69c18 -3 10 -41 -5 -39c0 0 -21 -1 -63 12c0 0 -16 -19 -39 -30c-26 -12 -118 -33 -197 38c-108 97 -120 354 -100 333c86 -90 197 -47 270 -106c55 -44 88 -127 77 -192c0 0 5 -8 57 -16zM316 65c5 5 10 16 10 24c-161 52 -252 160 -252 160s104 -143 242 -184z -" /> - <glyph glyph-name="ion-levels" unicode="" horiz-adv-x="350" -d="M46 349c11 -5 18 -16 18 -29s-7 -24 -18 -29v-275c0 -9 -7 -16 -16 -16s-16 7 -16 16v278c-8 6 -14 15 -14 26s6 20 14 26v22c0 9 7 16 16 16s16 -7 16 -16v-19zM142 155c9 -6 15 -16 15 -27s-6 -21 -15 -27v-85c0 -9 -7 -16 -16 -16s-16 7 -16 16v84 -c-10 5 -17 16 -17 28s7 23 17 28v212c0 9 7 16 16 16s16 -7 16 -16v-213zM238 285c10 -6 16 -16 16 -28s-6 -22 -16 -28v-213c0 -9 -7 -16 -16 -16s-16 7 -16 16v213c-10 6 -16 16 -16 28s6 22 16 28v83c0 9 7 16 16 16s16 -7 16 -16v-83zM350 65c0 -12 -6 -22 -16 -28v-21 -c0 -9 -7 -16 -16 -16s-16 7 -16 16v21c-10 6 -16 16 -16 28s6 22 16 28v275c0 9 7 16 16 16s16 -7 16 -16v-275c10 -6 16 -16 16 -28z" /> - <glyph glyph-name="ion-lightbulb" unicode="" horiz-adv-x="256" -d="M128 416c71 0 128 -56 128 -124c0 -5 0 -9 -1 -14s-2 -11 -3 -16v-2c-17 -63 -45 -71 -59 -167v-1c-2 -9 -10 -12 -20 -12h-90c-10 0 -18 3 -20 12v1c-14 96 -42 104 -59 167v2c-1 5 -2 11 -3 16s-1 9 -1 14c0 68 57 124 128 124zM190 52v-1c-2 -3 -3 -4 -3 -7s1 -5 3 -8 -v-1c1 -2 2 -3 2 -5s-1 -4 -2 -6v-1c-2 -3 -3 -4 -3 -7s1 -5 3 -8v-1c1 -2 2 -4 2 -6c0 -5 -4 -9 -10 -11h-1c-6 -1 -13 -2 -19 -3h-2c-6 -1 -11 -5 -14 -9v0c-4 -5 -10 -10 -18 -10s-15 6 -19 11v0c-3 4 -7 7 -13 8h-2c-6 1 -13 2 -19 3h-1c-6 2 -10 6 -10 11c0 2 1 4 2 6v1 -c2 2 3 4 3 7s-1 5 -3 8v1c-1 2 -2 4 -2 6s1 3 2 5v1c2 3 3 5 3 8s-1 4 -3 7v1v0c-1 2 -2 4 -2 6c0 4 -1 6 7 6h114c8 0 7 -2 7 -6c0 -2 -1 -4 -2 -6v0z" /> - <glyph glyph-name="ion-link" unicode="" horiz-adv-x="384" -d="M192 240v0v0v0zM304 288c44 0 80 -36 80 -80v-32c0 -44 -36 -80 -80 -80h-112c-33 0 -60 20 -73 48c-4 10 -7 20 -7 32v32h48v-32c0 -18 14 -32 32 -32h112c18 0 32 14 32 32v32c0 18 -14 32 -32 32v0h-16c-6 31 -32 48 -32 48h48zM266 240c4 -10 6 -21 6 -32v-32v0h-48 -v0v32c0 18 -14 32 -32 32v0h-112c-18 0 -32 -14 -32 -32v-32c0 -18 14 -32 32 -32h16c6 -31 32 -48 32 -48h-48c-44 0 -80 36 -80 80v32c0 44 36 80 80 80h112c33 0 62 -20 74 -48z" /> - <glyph glyph-name="ion-load-a" unicode="" horiz-adv-x="384" -d="M144 352c0 43 21 64 64 64s64 -21 64 -64s-21 -64 -64 -64s-64 21 -64 64zM0 192c0 32 16 48 48 48s48 -16 48 -48s-16 -48 -48 -48s-48 16 -48 48zM312 304c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM132 340c10 -10 15 -22 15 -36s-5 -26 -15 -36s-22 -15 -36 -15 -s-26 5 -36 15s-15 22 -15 36s5 26 15 36s22 15 36 15s26 -5 36 -15zM352 192c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16s-16 5 -16 16zM297 79c0 16 8 24 24 24s24 -8 24 -24s-8 -24 -24 -24s-24 8 -24 24zM176 32c0 21 11 32 32 32s32 -11 32 -32s-11 -32 -32 -32 -s-32 11 -32 32zM56 80c0 27 13 40 40 40s40 -13 40 -40s-13 -40 -40 -40s-40 13 -40 40z" /> - <glyph glyph-name="ion-load-b" unicode="" -d="M256 288c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96zM224 128v0c18 0 32 -14 32 -32v-96c0 -18 -14 -32 -32 -32s-32 14 -32 32v96c0 18 14 32 32 32zM416 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32h-96 -c-18 0 -32 14 -32 32s14 32 32 32h96zM128 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32h-96c-18 0 -32 14 -32 32s14 32 32 32h96zM314 237c-12 -12 -33 -12 -45 0v0c-12 12 -12 34 0 46l68 67c12 12 33 12 45 0v0c12 -12 12 -33 0 -45zM179 147v0c12 -12 12 -33 0 -46 -l-68 -67c-12 -12 -33 -12 -45 0s-12 33 0 45l67 68c12 12 34 12 46 0zM382 79v0c12 -12 12 -33 0 -45s-33 -12 -45 0l-68 68c-12 12 -12 33 0 45s33 12 45 0zM179 282v0c12 -12 12 -33 0 -45s-34 -12 -46 0l-67 68c-12 12 -12 33 0 45s33 12 45 0z" /> - <glyph glyph-name="ion-load-c" unicode="" -d="M448 222c0 -3 0 -6 -1 -9c-4 -8 -15 -12 -23 -7c-4 2 -6 7 -7 11c-1 5 -1 9 -2 14c-4 20 -12 40 -22 58c-12 21 -28 41 -47 56c-18 15 -40 26 -62 33c-21 6 -42 9 -64 9h-4c-3 0 -6 -1 -9 -1c-6 0 -14 -1 -20 -2c-13 -2 -25 -6 -37 -11c-21 -8 -40 -20 -57 -35 -s-31 -33 -42 -52c-12 -22 -20 -45 -24 -70c-2 -11 -2 -23 -2 -34c0 -6 0 -11 1 -16c1 -6 2 -13 3 -19c5 -24 14 -47 28 -67c13 -20 29 -38 48 -52c20 -15 42 -26 65 -33c25 -7 50 -9 76 -7c25 2 50 9 73 20c11 5 22 12 32 19s19 15 27 24c4 4 8 9 12 14s7 10 10 15 -c6 10 12 20 17 31c4 8 8 16 11 25c2 4 3 9 4 13s1 7 2 11c1 -9 1 -18 -1 -26c-1 -5 -2 -11 -4 -16c-1 -5 -3 -10 -5 -15c-4 -10 -8 -19 -13 -28c-6 -11 -12 -21 -20 -30s-16 -18 -25 -26c-18 -15 -40 -27 -62 -36c-23 -9 -48 -14 -73 -15s-51 3 -75 11c-23 7 -45 19 -65 33 -c-19 14 -36 31 -50 50c-7 10 -13 20 -18 31s-9 21 -13 33c-6 18 -9 37 -10 56c-1 20 1 39 5 58c5 24 15 47 28 68c12 19 26 35 42 50s35 27 55 36c23 11 48 19 74 21c10 1 19 1 29 1c13 0 26 -2 38 -4c24 -5 47 -14 68 -26s41 -29 57 -48c15 -18 27 -37 36 -58 -c4 -10 7 -21 10 -32c2 -8 5 -17 6 -26z" /> - <glyph glyph-name="ion-load-d" unicode="" horiz-adv-x="384" -d="M368 208c9 0 16 -7 16 -16s-7 -16 -16 -16h-80c-9 0 -16 7 -16 16s7 16 16 16h80zM112 192c0 -9 -7 -16 -16 -16h-80c-9 0 -16 7 -16 16s7 16 16 16h80c9 0 16 -7 16 -16zM192 112c9 0 16 -7 16 -16v-80c0 -9 -7 -16 -16 -16s-16 7 -16 16v80c0 9 7 16 16 16zM192 384 -c9 0 16 -7 16 -16v-80c0 -9 -7 -16 -16 -16s-16 7 -16 16v80c0 9 7 16 16 16zM261 232c-4 8 -2 18 6 22l69 40c8 4 18 2 22 -6s2 -18 -6 -22l-69 -40c-8 -4 -18 -2 -22 6zM123 152c4 -8 2 -18 -6 -22l-69 -40c-8 -4 -18 -2 -22 6s-2 18 6 22l69 40c8 4 18 2 22 -6zM254 117 -l40 -69c4 -8 2 -18 -6 -22s-18 -2 -22 6l-40 69c-4 8 -2 18 6 22s18 2 22 -6zM118 352l40 -69c4 -8 2 -18 -6 -22s-18 -2 -22 6l-40 69c-4 8 -2 18 6 22s18 2 22 -6zM232 261c-8 4 -10 14 -6 22l40 69c4 8 14 10 22 6s10 -14 6 -22l-40 -69c-4 -8 -14 -10 -22 -6zM152 123 -c8 -4 10 -14 6 -22l-40 -69c-4 -8 -14 -10 -22 -6s-10 14 -6 22l40 69c4 8 14 10 22 6zM352 118c8 -4 10 -14 6 -22s-14 -10 -22 -6l-69 40c-8 4 -10 14 -6 22s14 10 22 6zM32 266c-8 4 -10 14 -6 22s14 10 22 6l69 -40c8 -4 10 -14 6 -22s-14 -10 -22 -6z" /> - <glyph glyph-name="ion-location" unicode="" horiz-adv-x="239" -d="M119 384c66 0 120 -54 120 -120c0 -115 -120 -264 -120 -264s-119 149 -119 264c0 66 53 120 119 120zM119 206c31 0 57 25 57 56s-26 57 -57 57s-56 -26 -56 -57s25 -56 56 -56z" /> - <glyph glyph-name="ion-lock-combination" unicode="" horiz-adv-x="384" -d="M320 271c39 -35 64 -86 64 -143c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 57 25 108 64 143v49c0 71 57 128 128 128s128 -57 128 -128v-49zM96 320v-26c28 16 61 26 96 26s68 -10 96 -26v26c0 53 -43 96 -96 96s-96 -43 -96 -96zM192 -32c88 0 160 72 160 160 -s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM192 272c80 0 144 -64 144 -144s-64 -144 -144 -144s-144 64 -144 144s64 144 144 144zM315 95c2 9 4 18 4 29h-7v7h8c0 11 -2 20 -5 30l-25 -7l-4 12l25 8c-4 10 -8 18 -14 26l-11 -8l-4 6l11 8c-6 8 -13 16 -21 22 -l-15 -21l-11 8l15 20c-8 6 -17 11 -27 14l-4 -13l-6 2l5 13c-9 3 -20 5 -29 5v-13v-6h-16v6v13c-11 -1 -19 -2 -29 -5l4 -12l-6 -2l-4 12c-10 -3 -19 -8 -27 -14l15 -20l-10 -8l-15 21c-8 -6 -16 -14 -22 -22l11 -8l-4 -5l-10 8c-6 -8 -10 -17 -14 -27l24 -8l-5 -12l-25 7 -c-3 -10 -3 -19 -3 -30h6v-7h-5c0 -11 2 -20 4 -29l24 7l4 -12l-24 -8c4 -10 8 -19 14 -27l9 7l4 -5l-9 -7c6 -8 13 -16 21 -22l15 21l10 -8l-15 -20c8 -5 17 -11 27 -14l3 11l7 -2l-4 -11c10 -3 18 -4 29 -5v13v6h16v-6v-13c9 1 19 2 29 5l-5 12l6 2l4 -12c10 3 19 8 27 14 -l-15 20l11 8l15 -21c8 6 15 14 21 22l-11 7l4 6l10 -8c6 8 11 17 15 27l-25 8l4 12zM111 128c0 54 27 81 81 81s81 -27 81 -81s-27 -81 -81 -81s-81 27 -81 81z" /> - <glyph glyph-name="ion-locked" unicode="" horiz-adv-x="384" -d="M22 -32c-12 0 -22 10 -22 22v212c0 12 10 22 22 22h3h19v31c0 42 17 87 43 115s64 46 105 46v0v0c41 0 79 -18 105 -46s43 -73 43 -115v-31h22c12 0 22 -10 22 -22v-212c0 -12 -10 -22 -22 -22h-340zM97 255v-31h17h155h18v31c0 27 -10 61 -28 80v0v1 -c-18 19 -42 29 -67 29v0v0c-25 0 -49 -10 -67 -29v-1v0c-18 -19 -28 -53 -28 -80z" /> - <glyph glyph-name="ion-log-in" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224c-96 0 -177 60 -209 144h34c9 -20 23 -40 39 -56c36 -36 85 -56 136 -56s100 20 136 56s56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56c-16 -16 -30 -36 -39 -56h-34c32 84 113 144 209 144z -M175 124l52 52h-227v32h227l-52 52l22 23l91 -91l-91 -91z" /> - <glyph glyph-name="ion-log-out" unicode="" -d="M335 124l52 52h-227v32h227l-52 52l22 23l91 -91l-91 -91zM359 56c3 3 6 5 8 8h41c-40 -58 -108 -96 -184 -96c-124 0 -224 100 -224 224s100 224 224 224c76 0 144 -38 184 -96h-41c-2 3 -5 5 -8 8c-36 36 -84 56 -135 56s-100 -20 -136 -56s-56 -85 -56 -136 -s20 -100 56 -136s85 -56 136 -56s99 20 135 56z" /> - <glyph glyph-name="ion-loop" unicode="" horiz-adv-x="334" -d="M184 148v-58c49 8 86 50 86 102c0 16 -4 30 -10 44c-3 6 -5 12 -9 17l47 43c1 -1 2 -3 3 -4c21 -28 33 -62 33 -100v-4c-2 -72 -47 -131 -111 -154c-12 -4 -26 -8 -39 -9v-57l-76 67l-26 23l44 39zM0 196c2 72 48 133 113 155c12 4 24 7 37 8v57l76 -67l26 -23l-44 -39 -l-59 -51l1 58c-49 -8 -86 -51 -86 -102c0 -16 4 -31 10 -45c3 -6 5 -11 9 -16l-47 -44c-1 2 -2 3 -3 5c-20 28 -33 63 -33 100v4z" /> - <glyph glyph-name="ion-magnet" unicode="" horiz-adv-x="384" -d="M192 416c115 0 192 -78 192 -200c0 -49 -3 -77 -15 -128c-16 -66 -39 -113 -39 -113v-1c-2 -3 -6 -6 -10 -6c-1 0 -3 1 -4 1l-2 1l-50 20l-2 1c-3 2 -5 5 -5 9c0 1 0 3 1 4v1c7 16 27 59 37 101s13 63 13 108c0 71 -52 122 -116 122s-116 -51 -116 -122 -c0 -45 3 -66 13 -108s30 -85 37 -101v-1c1 -1 1 -3 1 -4c0 -4 -2 -7 -5 -9l-2 -1l-50 -20l-2 -1c-1 0 -3 -1 -4 -1c-4 0 -8 3 -10 6v1s-24 47 -40 113c-12 51 -14 79 -14 128c0 122 77 200 192 200zM109 4c-9 19 -27 59 -36 98l-42 -12c13 -53 30 -92 35 -104l43 17v1z -M317 -14c5 12 23 51 36 104l-43 12c-9 -39 -26 -79 -35 -98v-1z" /> - <glyph glyph-name="ion-male" unicode="" -d="M448 256l-63 63l-69 -69c22 -30 36 -66 36 -106c0 -97 -79 -176 -176 -176s-176 79 -176 176s79 176 176 176c40 0 76 -14 106 -36l69 69l-63 63h160v-160zM266 54c24 24 38 56 38 90s-14 66 -38 90s-56 38 -90 38s-66 -14 -90 -38s-38 -56 -38 -90s14 -66 38 -90 -s56 -38 90 -38s66 14 90 38z" /> - <glyph glyph-name="ion-man" unicode="" horiz-adv-x="168" -d="M84 341c-21 0 -37 17 -37 38s16 37 37 37s37 -16 37 -37s-16 -38 -37 -38zM121 333c28 0 47 -24 47 -48v-114c0 -22 -32 -22 -32 0v105h-5v-286c0 -28 -41 -31 -43 0v165h-1h-7v-165c-1 -29 -43 -30 -43 0v286h-6v-105c0 -22 -31 -22 -31 0v114c0 24 19 48 47 48h37h37z -" /> - <glyph glyph-name="ion-map" unicode="" -d="M441 311c4 -3 7 -8 7 -14v-281c0 -6 -2 -11 -7 -14c-2 -1 -5 -2 -7 -2c-3 0 -6 0 -8 2l-97 66l-97 -66c-5 -3 -10 -3 -15 0l-97 66l-97 -66c-5 -3 -10 -3 -15 0s-8 8 -8 14v281c0 6 3 11 7 14l105 71c5 3 10 3 15 0l97 -66l98 66c5 3 10 3 15 0zM103 95v242l-71 -50v-242 -zM135 95l73 -49v129l-4 -11c-7 2 -13 6 -20 10l8 13c5 -3 11 -6 16 -8v109l-73 49v-101c4 -2 9 -4 13 -7l-10 -13c-1 1 -2 1 -3 2v-123zM240 46l73 49v109c0 -1 -1 -1 -1 -2l-6 -6l-12 11l6 6c3 3 5 7 8 10l5 -5v119l-73 -49v-112h7l3 -15c-3 0 -6 -1 -9 -1h-1v-114zM416 46 -v242l-71 49v-88c3 1 5 1 8 2l4 -16c-4 -1 -8 -1 -12 -3v-137zM97 227c-3 -1 -11 -5 -14 -7l-11 12c4 3 8 6 12 8c3 2 6 3 9 4l5 -15c-2 -1 1 -1 -1 -2zM265 182c5 3 10 5 15 10l11 -12c-6 -6 -12 -10 -19 -13zM67 192v-1l-15 5v1c2 7 4 13 9 20l13 -9c-4 -5 -5 -10 -7 -16z -M166 210c3 -4 7 -8 11 -11l-11 -12c-4 4 -8 9 -12 13l-3 3l12 11c1 -1 2 -3 3 -4zM376 218l-11 12l10 10l-10 10l11 12l10 -11l11 11l11 -12l-10 -10l10 -10l-11 -12l-11 11z" /> - <glyph glyph-name="ion-medkit" unicode="" -d="M440 304c4 0 8 -4 8 -8v-288c0 -4 -4 -8 -8 -8h-432c-4 0 -8 4 -8 8v288c0 4 4 8 8 8h120v31c1 28 22 49 51 49h45h45c30 0 50 -21 51 -49v-31h120zM160 331v-27h128v27v1v1c0 10 -9 19 -19 19h-45h-45c-10 0 -19 -9 -19 -19v-1v-1zM320 128v64h-64v64h-64v-64h-64v-64 -h64v-64h64v64h64z" /> - <glyph glyph-name="ion-merge" unicode="" horiz-adv-x="384" -d="M320 224c35 0 64 -29 64 -64s-29 -64 -64 -64c-24 0 -44 13 -55 32h-10c-61 0 -115 25 -159 74v-115c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v210c-19 11 -32 31 -32 55c0 35 29 64 64 64s64 -29 64 -64c0 -19 -8 -37 -22 -49 -c4 -9 17 -35 37 -58c32 -35 70 -53 112 -53h10c11 19 31 32 55 32zM64 384c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM64 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM320 128c18 0 32 14 32 32s-14 32 -32 32 -s-32 -14 -32 -32s14 -32 32 -32z" /> - <glyph glyph-name="ion-mic-a" unicode="" horiz-adv-x="288" -d="M0 210c0 10 9 19 20 19s19 -9 19 -19v-14c0 -28 12 -53 31 -72s45 -31 74 -31s55 12 74 31s31 44 31 72v14c0 10 8 19 19 19s20 -9 20 -19v-14c0 -66 -46 -120 -108 -136c-1 0 -3 -1 -4 -1c-6 -2 -10 -7 -12 -13v-58c0 -11 -9 -20 -20 -20v0c-11 0 -20 9 -20 20v58 -c-2 6 -6 11 -12 13c-1 0 -3 1 -4 1c-62 16 -108 70 -108 136v14zM67 340c0 42 34 76 77 76s78 -34 78 -76v-144c0 -42 -35 -75 -78 -75s-77 33 -77 75v144z" /> - <glyph glyph-name="ion-mic-b" unicode="" horiz-adv-x="160" -d="M80 416c35 0 65 -23 76 -59c6 -18 4 -45 2 -55s-8 -20 -14 -28c-3 -4 -7 -7 -11 -9c-1 0 -1 -1 -2 -1c-3 -1 -6 -2 -10 -3c-12 -3 -25 -5 -39 -5v0h-1h-1v0c-14 0 -29 2 -41 5c-4 1 -7 2 -10 3c-1 0 -1 1 -2 1c-4 2 -8 5 -11 9c-6 8 -12 18 -14 28s-4 37 2 55 -c11 36 41 59 76 59zM119 247c6 0 12 -5 12 -12v-2c-5 -67 -18 -241 -19 -252c0 0 -3 -13 -32 -13v0c-29 0 -32 13 -32 13c-1 11 -13 185 -18 252v2c0 7 5 12 11 12h1c1 0 1 -1 2 -1c2 0 4 -1 6 -1c9 -2 21 -2 31 -2s20 0 29 2c2 0 4 1 6 1c1 0 1 1 2 1h1zM90 166v33 -c0 6 -4 11 -10 11s-10 -5 -10 -11v-33c0 -6 4 -11 10 -11s10 5 10 11z" /> - <glyph glyph-name="ion-mic-c" unicode="" horiz-adv-x="256" -d="M201 416c30 0 55 -23 55 -52v-28h-59v-37h59v-43h-59v-37h59v-43h-59v-37h59v-42c0 -29 -25 -52 -55 -52h-30v-77h-86v77h-30c-30 0 -55 23 -55 52v42h152v37h-152v43h152v37h-152v43h152v37h-152v28c0 29 25 52 55 52h146z" /> - <glyph glyph-name="ion-minus-circled" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM352 176v32h-256v-32h256z" /> - <glyph glyph-name="ion-minus-round" unicode="" horiz-adv-x="384" -d="M353 224c17 0 31 -14 31 -32s-14 -32 -31 -32h-322c-17 0 -31 14 -31 32s14 32 31 32h322z" /> - <glyph glyph-name="ion-minus" unicode="" horiz-adv-x="384" -d="M0 160v64h384v-64h-384z" /> - <glyph glyph-name="ion-model-s" unicode="" horiz-adv-x="512" -d="M509 57v-8v0v-1v-3v0c0 -3 -1 -5 -1 -7c-1 -12 -2 -18 -6 -20c-3 -2 -6 -2 -10 -2h-43s-10 1 -11 16v8c20 1 39 1 52 0c10 0 13 0 16 6c2 3 2 7 3 11zM3 57c1 -4 1 -8 3 -11c3 -6 6 -6 16 -6c13 1 32 1 52 0v-8c-1 -15 -8 -16 -11 -16h-43s-7 0 -10 2c-4 2 -6 8 -7 20v7 -v0v3v1v0v8zM512 151c0 -31 -2 -58 -2 -68c0 -4 0 -11 -1 -18c-1 -4 -1 -8 -3 -11c-3 -6 -6 -6 -16 -6c-13 1 -32 1 -52 0c-13 0 -27 -2 -39 -2c-30 -1 -21 4 -34 4s-63 -2 -109 -2s-97 2 -110 2s-4 -5 -34 -4c-12 0 -25 2 -38 2c-20 1 -39 1 -52 0c-10 0 -13 0 -16 6 -c-2 3 -2 7 -3 11c-1 7 -1 14 -1 18c0 10 -2 37 -2 68s4 61 6 64c1 2 8 9 26 21s17 10 20 18c-3 1 -5 3 -7 3c-4 0 -4 -3 -12 -3s-24 1 -28 5c-4 3 -5 5 -5 8s2 9 5 13s19 6 27 7s10 0 12 -1c4 -2 3 -22 3 -22l9 -1c5 13 12 41 24 62c13 23 26 30 32 32s10 2 48 6s69 5 96 5 -s58 -1 96 -5s42 -4 48 -6s19 -9 32 -32c12 -21 19 -49 24 -62l9 1s-1 20 3 22c2 1 4 2 12 1s24 -3 27 -7s5 -10 5 -13s-1 -4 -5 -8s-20 -5 -28 -5s-8 3 -12 3c-2 0 -4 -2 -7 -3c3 -8 2 -6 20 -18s25 -19 26 -21c2 -3 6 -33 6 -64zM86 303c-5 -11 -11 -33 -10 -36 -s-1 -5 15 -4s117 3 165 3s149 -2 165 -3s14 1 15 4s-5 25 -10 36s-17 31 -26 37c-2 1 -17 7 -54 9c-34 2 -72 3 -90 3s-56 -1 -90 -3c-37 -2 -52 -8 -54 -9c-7 -4 -21 -26 -26 -37zM123 178c7 2 11 2 11 2s-17 16 -48 25s-49 11 -66 10c0 0 -3 -16 0 -27s8 -10 16 -12 -s13 -5 16 -4s7 4 12 4s29 -4 38 -4s14 4 21 6zM358 99c15 2 34 19 21 33c-18 19 -15 19 -55 24c-35 4 -61 4 -68 4s-33 0 -68 -4c-40 -5 -37 -5 -55 -24c-13 -14 6 -31 21 -33c14 -2 74 -3 102 -3s88 1 102 3zM492 188c3 11 0 27 0 27c-17 1 -35 -1 -66 -10s-48 -26 -48 -26 -s4 1 11 -1s12 -6 21 -6s33 4 38 4s9 -3 12 -4s8 2 16 4s13 1 16 12z" /> - <glyph glyph-name="ion-monitor" unicode="" -d="M437 384c6 0 11 -5 11 -11v-266c0 -6 -5 -11 -11 -11h-426c-6 0 -11 5 -11 11v266c0 6 5 11 11 11h426zM416 128v224h-384v-224h384zM270 0h-92c-28 0 -42 3 -30 12s30 16 30 23c0 4 1 45 1 45h45h45s1 -41 1 -45c0 -7 18 -14 30 -23s-2 -12 -30 -12z" /> - <glyph glyph-name="ion-more" unicode="" horiz-adv-x="384" -d="M50 144c-28 0 -50 21 -50 48c0 26 22 48 50 48s50 -22 50 -48c0 -27 -22 -48 -50 -48zM192 144c-28 0 -50 21 -50 48c0 26 22 48 50 48s50 -22 50 -48c0 -27 -22 -48 -50 -48zM334 144c-28 0 -50 21 -50 48c0 26 22 48 50 48s50 -22 50 -48c0 -27 -22 -48 -50 -48z" /> - <glyph glyph-name="ion-mouse" unicode="" horiz-adv-x="256" -d="M128 416h-1h5h-4zM251 255c2 1 2 1 4 1h1v-176c0 -37 -21 -71 -53 -91c-5 -3 -9 -5 -14 -7v-1v0c-18 -9 -39 -13 -61 -13c-71 0 -128 50 -128 112v176h1c2 0 3 0 5 -1v0c34 -13 76 -23 122 -23s88 10 122 23h1zM189 -18c5 2 10 4 14 7c-5 -3 -9 -5 -14 -7v0v-1v1v0z -M203 -11c-4 -3 -9 -5 -14 -7c5 2 9 4 14 7zM132 416c69 -2 124 -51 124 -112v-23c-2 -2 -4 -4 -6 -5c-1 -1 -3 0 -4 -1c-23 -10 -50 -16 -82 -19h-1h-2c-11 0 -17 0 -17 10v86c0 9 -7 16 -16 16s-16 -7 -16 -16v-85c0 -11 -6 -11 -17 -11h-2c-32 3 -61 9 -84 19v0 -c-1 0 -1 1 -2 1c-3 1 -5 3 -7 5v23c0 61 57 111 127 112h5z" /> - <glyph glyph-name="ion-music-note" unicode="" horiz-adv-x="384" -d="M362 416c12 0 22 -9 22 -21v-303s-3 -43 -12 -55v0c-9 -15 -25 -21 -43 -21h-37c-28 0 -52 20 -52 48s24 48 52 48h60v192l-208 -38v-232c0 -8 -3 -27 -13 -41c-1 -2 -2 -3 -3 -5c0 -1 -1 -1 -2 -2v0c-9 -11 -23 -18 -38 -18h-37c-28 0 -51 20 -51 48s23 48 51 48v0h61 -v286c1 14 13 28 27 32l218 33s3 1 5 1z" /> - <glyph glyph-name="ion-navicon-round" unicode="" horiz-adv-x="384" -d="M353 224c17 0 31 -14 31 -32s-14 -32 -31 -32h-322c-17 0 -31 14 -31 32s14 32 31 32h322zM353 352c17 0 31 -14 31 -32s-14 -32 -31 -32h-322c-17 0 -31 14 -31 32s14 32 31 32h322zM353 96c17 0 31 -14 31 -32s-14 -32 -31 -32h-322c-17 0 -31 14 -31 32s14 32 31 32 -h322z" /> - <glyph glyph-name="ion-navicon" unicode="" horiz-adv-x="320" -d="M0 175v32h320v-32h-320zM0 271v32h320v-32h-320zM0 79v32h320v-32h-320z" /> - <glyph glyph-name="ion-navigate" unicode="" -d="M448 416l-192 -448v256h-256z" /> - <glyph glyph-name="ion-network" unicode="" horiz-adv-x="384" -d="M384 352c0 -24 -13 -44 -32 -55v-93l-128 -64v-53c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v53l-128 64v93c-19 11 -32 31 -32 55c0 35 29 64 64 64s64 -29 64 -64c0 -24 -13 -44 -32 -55v-53l96 -48l96 48v53c-19 11 -32 31 -32 55 -c0 35 29 64 64 64s64 -29 64 -64zM64 384c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM192 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM320 320c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" /> - <glyph glyph-name="ion-no-smoking" unicode="" -d="M328 144v48h16v-48h-16zM80 144v48h90l48 -48h-138zM332 388c69 -38 116 -112 116 -196c0 -124 -100 -224 -224 -224c-24 0 -47 4 -68 11c-2 1 -3 1 -5 2c-12 4 -24 9 -35 15h-1c-69 38 -115 112 -115 196c0 124 100 224 224 224c24 0 47 -4 68 -11c2 -1 3 -1 5 -2 -c12 -4 24 -9 35 -15v0zM224 22c37 0 72 12 100 32l-238 238c-20 -28 -32 -63 -32 -100c0 -65 36 -121 90 -150c6 -3 13 -7 19 -9c2 -1 3 -1 5 -2c9 -3 19 -5 29 -7c9 -2 18 -2 27 -2zM362 93c20 28 32 62 32 99c0 66 -37 123 -91 151c-6 3 -12 6 -18 8c-2 1 -3 1 -5 2 -c-9 3 -19 5 -29 7c-9 2 -18 2 -27 2c-37 0 -71 -12 -99 -32zM320 150l-42 42h42v-42zM352 144v48h16v-48h-16zM328 235c16 -7 16 -27 16 -34v-1h-16v1c0 8 -1 17 -7 20c-4 2 -13 4 -39 4h-3c-13 0 -24 0 -33 13c-5 8 -5 19 -2 29c-4 1 -8 1 -12 3c-17 7 -26 20 -26 38 -c0 33 27 44 39 44v-16c-1 0 -23 -2 -23 -28c0 -11 5 -19 16 -23c9 -4 18 -3 18 -3c3 0 6 -2 7 -5s2 -6 0 -8c-5 -7 -7 -18 -4 -22c4 -6 7 -6 20 -6h3c24 0 37 -2 46 -6zM368 200v0h-16c0 28 -4 41 -7 46c-6 10 -14 14 -25 14h-30c-3 0 -5 2 -6 4s-1 6 0 8c0 0 8 18 6 32 -c-1 8 -6 17 -27 17v16c24 0 40 -11 43 -30c2 -11 0 -23 -3 -31h17c16 0 30 -8 39 -22c6 -10 9 -28 9 -54z" /> - <glyph glyph-name="ion-nuclear" unicode="" -d="M176 176c0 32 16 48 48 48s48 -16 48 -48s-16 -48 -48 -48s-48 16 -48 48zM176 176c0 32 16 48 48 48s48 -16 48 -48s-16 -48 -48 -48s-48 16 -48 48zM448 176c0 -27 -5 -53 -15 -78s-23 -47 -40 -66s-36 -35 -59 -48l-79 136c22 12 33 31 33 56h160zM224 240 -c-12 0 -23 -3 -33 -9l-80 138c35 20 73 31 113 31s78 -10 113 -30l-81 -139c-10 6 -21 9 -32 9zM160 176c0 -25 11 -44 33 -56l-79 -136c-35 20 -62 46 -83 80s-31 71 -31 112h160z" /> - <glyph glyph-name="ion-outlet" unicode="" -d="M338 416c61 0 110 -51 110 -113v-222c0 -62 -49 -113 -110 -113h-228c-61 0 -110 51 -110 113v222c0 62 49 113 110 113h228zM143 197v102c0 11 -9 21 -20 21h-23c-11 0 -19 -9 -20 -20v-2v-101v-1c0 -11 9 -20 20 -20h23c11 0 20 9 20 20v1zM265 52v29 -c0 23 -18 42 -41 42s-41 -19 -41 -42v-29v0c0 -11 9 -20 20 -20h21h21c11 0 20 7 20 18v2zM368 197v102c0 11 -9 21 -20 21h-24c-11 0 -19 -9 -20 -20v-2v-101v-1c0 -11 9 -20 20 -20h24c11 0 20 9 20 20v1z" /> - <glyph glyph-name="ion-paintbrush" unicode="" -d="M118 165c52 0 102 -41 90 -102c-11 -52 -54 -71 -90 -77c-30 -5 -100 0 -118 35c24 9 34 26 34 49c0 49 32 95 84 95zM436 388c13 -13 17 -30 5 -45l-154 -175c2 -9 1 -17 -3 -23l-50 -58v0v0c-2 -2 -4 -2 -6 0c-1 1 -1 2 -1 3v1c2 53 -41 87 -89 90v0h-2s-2 0 -2 1 -c-2 2 -2 4 0 6l59 49c6 4 14 4 23 2l175 154c15 12 32 8 45 -5zM134 188v0v0v0z" /> - <glyph glyph-name="ion-paintbucket" unicode="" horiz-adv-x="480" -d="M112 384l32 32l275 -276l-58 -12l-163 -160l-198 192l152 152zM309 160l-110 110l-110 -110h220zM419 140c0 0 61 -66 61 -99s-27 -60 -61 -60s-60 27 -60 60s60 99 60 99z" /> - <glyph glyph-name="ion-paper-airplane" unicode="" -d="M0 176l448 240l-112 -448l-112 112l-80 -112l-16 160zM319 31l80 323l-322 -173l83 -31l192 154l-128 -176z" /> - <glyph glyph-name="ion-paperclip" unicode="" horiz-adv-x="160" -d="M149 293c6 0 11 -5 11 -12v-195c0 -28 -10 -49 -24 -63c-15 -15 -36 -23 -56 -23c-40 0 -80 31 -80 88v234c0 24 11 44 29 54s39 11 57 0s29 -30 29 -54l-1 -225c0 -13 -3 -24 -9 -32s-16 -12 -25 -12c-17 0 -34 15 -34 44v173c0 6 6 12 12 12s11 -6 11 -12v-173 -c0 -14 5 -21 11 -21c2 0 5 2 7 4c3 4 5 10 5 17v225c0 15 -6 28 -17 34s-24 6 -35 0s-17 -19 -17 -34v-234c0 -44 29 -64 57 -64s57 19 57 63v195c0 6 6 11 12 11z" /> - <glyph glyph-name="ion-pause" unicode="" horiz-adv-x="256" -d="M96 12c0 -7 -5 -12 -12 -12h-72c-7 0 -12 5 -12 12v360c0 7 5 12 12 12h72c7 0 12 -5 12 -12v-360zM244 384c7 0 12 -5 12 -12v-360c0 -7 -5 -12 -12 -12h-72c-7 0 -12 5 -12 12v360c0 7 5 12 12 12h72z" /> - <glyph glyph-name="ion-person-add" unicode="" -d="M397 120h-42v51h-51v42h51v51h42v-51h51v-42h-51v-51zM384 0h-192h-192s0 26 2 40c2 11 17 25 81 49c63 23 60 12 60 55c0 28 -14 11 -23 64c-4 21 -6 7 -14 40c-4 17 3 19 2 27s-2 16 -4 33c-2 21 18 76 88 76s90 -55 88 -76c-2 -17 -3 -25 -4 -33s6 -10 2 -27 -c-8 -33 -10 -19 -14 -40c-9 -53 -23 -36 -23 -64c0 -43 -3 -32 60 -55c64 -24 79 -38 81 -49c2 -14 2 -40 2 -40z" /> - <glyph glyph-name="ion-person-stalker" unicode="" -d="M393 123c42 -16 52 -26 53 -33c2 -9 2 -90 2 -90h-98c0 18 0 71 -1 77c-1 10 -1 29 -55 50c-8 3 -14 5 -19 7c18 8 15 15 15 28c0 19 -9 11 -15 47c-2 14 -4 5 -9 28c-3 12 1 12 1 18s-1 10 -2 22c-1 14 11 52 57 52s59 -38 58 -52c-1 -12 -2 -16 -2 -22 -c-1 -6 4 -6 1 -18c-5 -23 -7 -14 -9 -28c-6 -36 -16 -28 -16 -47c0 -29 -2 -23 39 -39zM325 0h-163h-162s0 65 2 77c2 10 15 22 69 43c54 20 50 17 50 55c0 24 -12 8 -20 54c-3 18 -5 7 -11 36c-3 15 2 16 1 23s-2 14 -3 29c-2 19 15 67 74 67s77 -49 75 -67 -c-1 -15 -2 -22 -3 -29s5 -8 2 -23c-6 -29 -9 -18 -12 -36c-8 -46 -20 -30 -20 -54c0 -32 -2 -36 31 -48c6 -2 11 -4 19 -7c54 -21 67 -33 69 -43c1 -6 2 -28 2 -47v-30z" /> - <glyph glyph-name="ion-person" unicode="" horiz-adv-x="384" -d="M384 0h-192h-192s0 26 2 40c2 11 17 25 81 49c63 23 60 12 60 55c0 28 -14 11 -23 64c-4 21 -6 7 -14 40c-4 17 3 19 2 27s-2 16 -4 33c-2 21 18 76 88 76s90 -55 88 -76c-2 -17 -3 -25 -4 -33s6 -10 2 -27c-8 -33 -10 -19 -14 -40c-9 -53 -23 -36 -23 -64 -c0 -43 -3 -32 60 -55c64 -24 79 -38 81 -49c2 -14 2 -40 2 -40z" /> - <glyph glyph-name="ion-pie-graph" unicode="" -d="M1 192c0 5 -1 11 -1 16c0 115 93 208 208 208c5 0 11 -1 16 -1v-32v-191h-191h-32zM78 46c-26 32 -42 71 -45 114h223v223c43 -3 82 -19 114 -45c47 -38 78 -96 78 -162c0 -115 -93 -208 -208 -208c-66 0 -124 31 -162 78z" /> - <glyph glyph-name="ion-pin" unicode="" horiz-adv-x="224" -d="M188 220c20 -10 36 -31 36 -55c0 -17 -3 -21 -15 -21h-81l-12 -176h-8l-12 176h-81c-12 0 -15 5 -15 21c0 24 16 45 36 55v0c1 0 3 1 4 2c7 4 12 11 14 19l18 118v5c0 7 -4 10 -10 13v0c-1 0 -1 1 -2 1c-7 3 -12 9 -12 17c0 20 6 21 18 21h92c12 0 18 -1 18 -21 -c0 -8 -5 -14 -12 -17c-1 0 -1 -1 -2 -1v0c-6 -3 -10 -6 -10 -13v-5l18 -118c2 -8 7 -15 14 -19c1 -1 3 -2 4 -2v0z" /> - <glyph glyph-name="ion-pinpoint" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c32 32 51 75 55 120l-63 8v16l63 8c-4 45 -23 88 -55 120s-75 51 -120 55l-8 -63h-16l-8 63c-45 -4 -88 -23 -120 -55s-51 -75 -55 -120l63 -8v-16l-63 -8 -c4 -45 23 -88 55 -120s75 -51 120 -55l8 63h16l8 -63c45 4 88 23 120 55z" /> - <glyph glyph-name="ion-pizza" unicode="" horiz-adv-x="352" -d="M315 318c10 -4 12 -13 9 -20l-148 -330s-143 320 -148 331s2 16 9 19c39 18 90 28 139 28s96 -9 139 -28zM112 256c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM176 109c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM240 224 -c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM342 382c6 -3 10 -6 10 -13c0 -1 0 -3 -1 -5l-8 -19c-3 -5 -8 -9 -14 -9c-1 0 -3 1 -6 2c-41 18 -95 30 -147 30s-102 -11 -147 -30c-3 -1 -4 -2 -6 -2c-6 0 -11 4 -14 9l-8 19s-1 2 -1 5c0 8 6 12 10 14 -c49 21 107 33 166 33s118 -13 166 -34z" /> - <glyph glyph-name="ion-plane" unicode="" -d="M250 136c0 -7 1 -69 -6 -102c-1 -4 3 -4 5 -7l51 -33c2 -2 3 -8 3 -8l1 -18l-68 16l-12 -32l-12 32l-68 -16l1 18s0 6 2 8l52 33c2 3 6 3 5 7c-7 33 -6 95 -6 102s-8 5 -8 5l-62 -13l-128 -49c0 23 2 26 9 31l183 131s5 63 5 113c0 24 12 78 27 78s27 -54 27 -78 -c0 -53 5 -113 5 -113l183 -131c6 -4 9 -7 9 -31l-128 49l-62 13s-8 2 -8 -5z" /> - <glyph glyph-name="ion-planet" unicode="" horiz-adv-x="512" -d="M96 182c39 -24 85 -48 134 -69c44 -19 87 -35 126 -46c-27 -22 -62 -35 -100 -35c-85 0 -155 66 -160 150zM107 251c1 4 3 8 5 11c10 21 26 40 44 55c27 22 62 35 100 35c85 0 155 -66 160 -150v-10c0 -21 -4 -41 -11 -59c-1 -4 -3 -8 -5 -11c-6 1 -13 3 -19 5 -c-39 11 -82 26 -126 45c-56 24 -108 52 -148 79zM430 163c57 -35 87 -62 81 -82c-4 -12 -19 -17 -44 -17c-50 0 -136 23 -231 64c-141 61 -246 140 -235 175c4 12 20 20 44 17c22 -3 47 -9 73 -18c-8 -9 -8 -12 -14 -22c-23 5 -44 8 -59 8h-6c2 -2 5 -6 8 -9 -c11 -11 27 -24 46 -37c41 -29 97 -59 156 -85c44 -19 89 -35 128 -46c36 -10 68 -15 90 -15h6c-2 2 -5 6 -8 9c-10 10 -24 22 -41 34c4 11 5 12 6 24z" /> - <glyph glyph-name="ion-play" unicode="" horiz-adv-x="320" -d="M309 215c7 -6 11 -14 11 -23s-4 -17 -11 -23l-278 -166c-4 -2 -7 -3 -11 -3c-11 0 -20 9 -20 20v0v344v0c0 11 9 20 20 20c4 0 8 -1 11 -3z" /> - <glyph glyph-name="ion-playstation" unicode="" horiz-adv-x="512" -d="M400 245c0 -11 0 -22 -2 -33c-2 -10 -5 -20 -10 -28c-4 -7 -10 -13 -18 -17c-7 -4 -16 -6 -24 -6c-13 0 -31 4 -42 9v131v2c0 9 -7 17 -15 17h-1c-9 0 -16 -8 -16 -17v-3v-300l-80 26v358s28 -4 75 -18s67 -21 84 -31c8 -5 15 -11 21 -17c7 -7 13 -14 17 -23 -c8 -16 10 -33 11 -50zM87 90c-4 -2 -8 -3 -11 -6c-1 -1 -3 -3 -2 -5s4 -4 6 -5c6 -2 13 -3 19 -3c7 0 15 0 22 2c5 1 9 3 14 5c30 10 41 12 41 12v-42c-14 -2 -36 -4 -50 -4c-30 -1 -60 4 -88 13c-9 3 -19 6 -27 12c-4 3 -8 8 -10 13c-2 4 -1 9 1 13s5 8 9 11 -c9 6 18 10 28 14c8 4 17 7 26 10c35 12 111 37 111 37v-47s-62 -20 -89 -30zM512 102c0 -5 -2 -9 -5 -13c-6 -7 -14 -11 -22 -15s-17 -8 -26 -11c-54 -19 -171 -59 -171 -59v48s92 30 133 44c6 2 11 4 16 8c2 2 4 3 3 6c-1 2 -4 4 -6 5c-6 2 -13 3 -19 3 -c-10 0 -20 -2 -30 -5c-29 -10 -97 -32 -97 -32v49s45 14 67 16c8 1 23 1 31 1c26 0 54 -3 79 -11c5 -2 8 -3 14 -5c9 -3 18 -8 25 -14c4 -4 8 -9 8 -15z" /> - <glyph glyph-name="ion-plus-circled" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM352 176v32h-112v112h-32v-112h-112v-32h112v-112h32v112h112z" /> - <glyph glyph-name="ion-plus-round" unicode="" horiz-adv-x="384" -d="M353 224c17 0 31 -14 31 -32s-14 -32 -31 -32h-129v-129c0 -17 -14 -31 -32 -31s-32 14 -32 31v129h-129c-17 0 -31 14 -31 32s14 32 31 32h129v129c0 17 14 31 32 31s32 -14 32 -31v-129h129z" /> - <glyph glyph-name="ion-plus" unicode="" horiz-adv-x="384" -d="M384 224v-64h-160v-160h-64v160h-160v64h160v160h64v-160h160z" /> - <glyph glyph-name="ion-podium" unicode="" -d="M0 0v192h128v-192h-128zM160 0v288h128v-288h-128zM320 0v128h128v-128h-128z" /> - <glyph glyph-name="ion-pound" unicode="" -d="M93 96h-93v54h101l13 84h-99v54h107l22 128h64l-22 -128h106l22 128h63l-22 -128h93v-54h-102l-12 -84h99v-54h-107l-22 -128h-63l22 128h-107l-22 -128h-63zM177 234l-12 -84h106l12 84h-106v0z" /> - <glyph glyph-name="ion-power" unicode="" -d="M224 192c-18 0 -32 14 -32 32v160c0 18 14 32 32 32s32 -14 32 -32v-160c0 -18 -14 -32 -32 -32zM347 379c61 -40 101 -109 101 -187c0 -124 -100 -224 -224 -224s-224 100 -224 224c0 78 40 147 101 187v0c5 3 11 5 17 5c18 0 32 -14 32 -32c0 -6 -2 -12 -5 -17 -c-2 -3 -4 -6 -7 -8c-1 -1 -3 -2 -4 -3c-8 -6 -16 -12 -23 -19c-30 -30 -47 -70 -47 -113s17 -83 47 -113s70 -47 113 -47s83 17 113 47s47 70 47 113s-17 83 -47 113c-7 7 -15 13 -23 19c-1 1 -3 2 -4 3c-3 2 -5 5 -7 8c-3 5 -5 11 -5 17c0 18 14 32 32 32c6 0 12 -2 17 -5 -v0z" /> - <glyph glyph-name="ion-pricetag" unicode="" -d="M439 187c12 -12 12 -31 0 -43l-165 -167c-11 -11 -30 -11 -42 -1l-3 3l-206 209l-6 5c-6 7 -9 15 -10 24v0v2v0l-7 98v4v0c0 12 4 24 13 33l49 49c8 9 20 13 31 13h4l100 -4v0c12 0 22 -4 30 -12v0l2 -2v0l210 -211v0v0zM112 256c26 0 48 22 48 48s-22 48 -48 48 -s-48 -22 -48 -48s22 -48 48 -48z" /> - <glyph glyph-name="ion-pricetags" unicode="" -d="M440 209c10 -11 11 -28 0 -39l-29 -29c11 11 10 28 0 39v0v0l-190 191v0l-1 1h-1c-8 7 -16 12 -27 12v0l-90 3h-4c-9 0 -19 -3 -26 -10l28 27c8 8 17 12 27 12h4l90 -4v0c11 0 19 -4 27 -11h1l1 -1v0l190 -191v0v0zM396 166v0c11 -11 11 -29 0 -40l-108 -109v1l-26 -27 -l-2 -2l-13 -13c-10 -10 -26 -10 -37 -1l-3 3l-186 188l-5 5c-5 6 -9 14 -10 22v0v2v0l-6 88v3v1c0 11 4 21 12 29l44 45l1 1l1 1c7 6 17 9 26 9h4l90 -3v0c11 0 19 -4 27 -11v0l2 -1v0l189 -191v0zM79 308c-12 -8 -21 -21 -21 -37c0 -24 19 -43 43 -43c16 0 29 9 37 21 -c4 7 7 14 7 22c0 24 -20 44 -44 44c-8 0 -15 -3 -22 -7z" /> - <glyph glyph-name="ion-printer" unicode="" -d="M392 320c28 0 56 -19 56 -55v-131c0 -31 -28 -54 -56 -54h-40v-112h-8h-8h-224h-11h-5v112h-40c-28 0 -56 24 -56 62v123c0 38 28 55 56 55h40v64h256v-64h40zM336 -16v176h-224v-176h224zM336 320v48h-224v-48h224zM384 256v16h-17v-16h17zM128 112v16h192v-16h-192z -M128 64v16h192v-16h-192zM128 16v16h192v-16h-192z" /> - <glyph glyph-name="ion-pull-request" unicode="" horiz-adv-x="384" -d="M64 384c35 0 64 -29 64 -64c0 -24 -13 -44 -32 -55v-178c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v178c-19 11 -32 31 -32 55c0 35 29 64 64 64zM64 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM64 288 -c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM351 88c20 -11 33 -32 33 -56c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 23 12 44 31 55v156c0 16 -4 26 -11 33c-10 9 -26 12 -52 12v-64l-96 96l96 96v-64c42 1 74 -8 96 -29c21 -19 31 -46 31 -80v-155z -M320 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" /> - <glyph glyph-name="ion-qr-scanner" unicode="" horiz-adv-x="416" -d="M48 324v-68h-48v68c0 33 28 60 61 60h67v-48h-68c-7 0 -12 -5 -12 -12zM356 384c33 0 60 -27 60 -60v-68h-48v68c0 7 -6 12 -13 12h-67v48h68zM368 61v67h48v-67c0 -33 -27 -61 -60 -61h-68v49h68c7 0 12 5 12 12zM60 49h68v-49h-67c-33 0 -61 28 -61 61v67h48v-67 -c0 -7 5 -12 12 -12z" /> - <glyph glyph-name="ion-quote" unicode="" horiz-adv-x="384" -d="M128 384c-41 0 -73 -11 -95 -33s-33 -54 -33 -95v-256h160v256h-96c0 23 5 39 15 49s26 15 49 15zM352 384c-41 0 -73 -11 -95 -33s-33 -54 -33 -95v-256h160v256h-96c0 23 5 39 15 49s26 15 49 15z" /> - <glyph glyph-name="ion-radio-waves" unicode="" -d="M160 192c0 43 21 64 64 64s64 -21 64 -64s-21 -64 -64 -64s-64 21 -64 64zM112 192c0 -18 5 -35 13 -50s19 -28 33 -37l-23 -25c-6 5 -13 10 -18 16c-25 26 -37 59 -37 96s12 70 37 96c5 6 12 11 18 16l23 -25c-14 -9 -25 -22 -33 -37s-13 -32 -13 -50zM336 192 -c0 18 -5 35 -13 50s-19 28 -33 37l23 25c6 -5 13 -10 18 -16c25 -26 37 -59 37 -96s-12 -70 -37 -96c-5 -6 -12 -11 -18 -16l-23 25c14 9 25 22 33 37s13 32 13 50zM32 192c0 -27 6 -53 17 -77s27 -43 47 -59l-23 -24c-6 5 -12 10 -17 16c-18 19 -31 41 -41 65 -c-10 25 -15 51 -15 79s5 54 15 79c10 24 23 46 41 65c5 6 11 11 17 16l23 -24c-10 -8 -18 -17 -26 -27s-14 -21 -20 -32s-10 -24 -13 -37s-5 -26 -5 -40zM416 192c0 27 -6 53 -17 77s-27 43 -47 59l23 24c6 -5 12 -10 17 -16c18 -19 31 -41 41 -65c10 -25 15 -51 15 -79 -s-5 -54 -15 -79c-10 -24 -23 -46 -41 -65c-4 -5 -10 -10 -17 -16l-23 24c20 16 36 35 47 59s17 50 17 77z" /> - <glyph glyph-name="ion-record" unicode="" horiz-adv-x="416" -d="M208 -16c-115 0 -208 93 -208 208s93 208 208 208s208 -93 208 -208s-93 -208 -208 -208z" /> - <glyph glyph-name="ion-refresh" unicode="" -d="M352 96l-104 112h74c-7 65 -64 112 -130 112c-71 0 -128 -57 -128 -128s57 -128 128 -128c28 0 53 8 75 24l6 5l43 -46l-7 -6c-34 -26 -74 -41 -117 -41c-91 0 -167 64 -187 149v0c0 1 -1 2 -1 3v1v2s-1 2 -1 3v1c0 1 -1 3 -1 4v0c-1 6 -2 13 -2 19v1v4v5v5v4v1 -c0 6 1 13 2 19v0c0 1 1 3 1 4v1c0 1 1 1 1 2v3v1c0 1 1 2 1 3v0c20 85 96 149 187 149v0v0c11 0 21 -1 31 -3h2h2c57 -10 106 -47 133 -96c13 -23 21 -49 23 -77h65z" /> - <glyph glyph-name="ion-reply-all" unicode="" horiz-adv-x="416" -d="M257 256c153 0 159 -208 159 -208c-51 93 -91 102 -159 102v-92l-152 134l152 144v-80zM0 192l144 136v-57l-82 -79l82 -68v-58z" /> - <glyph glyph-name="ion-reply" unicode="" horiz-adv-x="384" -d="M384 48c-53 93 -122 102 -224 102v-92l-160 134l160 144v-80c187 0 224 -208 224 -208z" /> - <glyph glyph-name="ion-ribbon-a" unicode="" horiz-adv-x="352" -d="M272 416l80 -96l-64 -134c-24 30 -59 49 -99 53zM80 416l83 -177c-40 -4 -75 -23 -99 -53l-64 134zM189 416h67l-53 -112h-27h-27l-53 112h80h13zM176 224c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM176 0c53 0 96 43 96 96 -s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM176 184c49 0 88 -39 88 -88s-39 -88 -88 -88s-88 39 -88 88s39 88 88 88z" /> - <glyph glyph-name="ion-ribbon-b" unicode="" horiz-adv-x="384" -d="M192 376c49 0 88 -39 88 -88s-39 -88 -88 -88s-88 39 -88 88s39 88 88 88zM192 416c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM192 192c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM83 194c26 -30 65 -50 109 -50 -c12 0 23 1 34 4l-34 -74l-48 -106l-48 80h-96zM301 194l83 -146h-96l-48 -80l-40 88l45 98c22 9 41 23 56 40z" /> - <glyph glyph-name="ion-sad-outline" unicode="" -d="M367 164c3 -9 -2 -17 -11 -19c-3 -1 -7 0 -10 1c-5 2 -9 5 -11 10s-4 12 -13 15s-14 0 -19 -3c-4 -3 -10 -3 -15 -1c-3 1 -7 3 -9 6c-6 8 -3 17 5 22c15 9 29 13 49 6s29 -21 34 -37zM165 195c8 -5 10 -14 4 -22c-2 -3 -6 -5 -9 -6c-5 -2 -11 -2 -15 1c-5 3 -10 6 -19 3 -s-11 -10 -13 -15s-6 -8 -11 -10c-3 -1 -7 -2 -10 -1c-9 2 -14 10 -11 19c5 16 14 30 34 37s35 3 50 -6zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56 -s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136s85 -56 136 -56s100 20 136 56zM317 89c5 -7 3 -17 -4 -22c-3 -2 -6 -3 -9 -3c-5 0 -10 3 -13 7c0 0 -19 25 -67 25s-67 -25 -67 -25c-3 -4 -8 -7 -13 -7c-3 0 -6 1 -9 3c-7 5 -9 15 -4 22c1 2 28 39 93 39 -s92 -37 93 -39z" /> - <glyph glyph-name="ion-sad" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM113 156c2 5 4 12 13 15s14 0 19 -3c4 -3 10 -3 15 -1c3 1 7 3 9 6c6 8 4 17 -4 22c-15 9 -30 13 -50 6s-29 -21 -34 -37c-3 -9 2 -17 11 -19c3 -1 7 0 10 1c5 2 9 5 11 10z -M313 67c7 5 9 15 4 22c-1 2 -28 39 -93 39s-92 -37 -93 -39c-5 -7 -3 -17 4 -22c3 -2 6 -3 9 -3c5 0 10 3 13 7c0 0 19 25 67 25s67 -25 67 -25c3 -4 8 -7 13 -7c3 0 6 1 9 3zM356 145c9 2 14 10 11 19c-5 16 -14 30 -34 37s-34 3 -49 -6c-8 -5 -11 -14 -5 -22 -c2 -3 6 -5 9 -6c5 -2 11 -2 15 1c5 3 10 6 19 3s11 -10 13 -15s6 -8 11 -10c3 -1 7 -2 10 -1z" /> - <glyph glyph-name="ion-scissors" unicode="" horiz-adv-x="384" -d="M341 332c-13 -33 -117 -172 -117 -172l-32 -32s-31 -13 -50 -43s-33 -71 -33 -71v0c-7 -26 -28 -46 -53 -46c-31 0 -56 29 -56 64s25 64 56 64c13 0 25 -5 34 -13c2 -1 3 -3 4 -4v0l2 -2c4 -4 7 -2 14 11c8 15 17 35 27 54s38 59 38 59l17 23l144 192 -c23 -20 18 -51 5 -84zM56 0c15 0 28 14 28 32s-13 32 -28 32s-28 -14 -28 -32s13 -32 28 -32zM192 160c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM143 183c-30 41 -90 125 -100 149c-13 33 -18 64 5 84l134 -178l-3 -4v0v0l-17 -23v-1v0 -c-1 -1 -10 -13 -19 -27zM328 96c31 0 56 -29 56 -64s-25 -64 -56 -64c-25 0 -47 20 -54 46v0s-13 41 -32 71c-11 17 -26 28 -36 35l29 29l1 1h1c1 1 1 2 2 4c3 -4 5 -9 7 -12c10 -19 20 -39 28 -54c7 -13 10 -15 14 -11c1 1 0 1 1 2h1c1 1 2 3 4 4c9 8 21 13 34 13zM328 0 -c15 0 28 14 28 32s-13 32 -28 32s-28 -14 -28 -32s13 -32 28 -32z" /> - <glyph glyph-name="ion-search" unicode="" horiz-adv-x="384" -d="M381 61c4 -4 4 -10 0 -14l-43 -44c-2 -2 -5 -3 -8 -3s-5 1 -7 3l-84 86c-25 -15 -52 -23 -80 -23c-87 0 -159 71 -159 159s72 159 159 159s158 -71 158 -159c0 -27 -7 -54 -21 -78zM159 322c-53 0 -97 -43 -97 -97s44 -97 97 -97s96 43 96 97s-43 97 -96 97z" /> - <glyph glyph-name="ion-settings" unicode="" horiz-adv-x="416" -d="M402 310c10 -6 15 -25 14 -36c-1 -17 -7 -36 -25 -54c-1 -1 -2 -1 -3 -2c-26 -25 -62 -30 -94 -20c-1 1 -2 2 -4 2c-5 1 -10 0 -13 -4l-36 -39c52 -50 107 -96 107 -96c2 -2 2 -5 0 -7l-50 -51c-2 -2 -5 -2 -7 0c0 0 -44 55 -93 107l-92 -98c-14 -16 -40 -15 -55 0 -c-15 16 -15 42 1 56l97 93l-12 12c-2 2 -3 7 -1 10l2 5c-25 26 -36 33 -56 32s-36 -13 -48 -28s-10 -52 -8 -62s-7 -6 -12 0c-9 10 -23 50 -6 93s42 69 48 75s16 15 24 21s21 -1 27 5c4 4 5 11 5 16l-4 4c-2 2 -2 5 0 7l31 31c2 2 5 2 7 0l50 -50c2 -2 2 -6 0 -8l-31 -31 -c-2 -2 -5 -2 -7 0l-8 9c-7 0 -15 -5 -17 -10c-3 -6 -6 -21 -3 -33c3 -11 13 -20 36 -43l5 3c4 2 8 1 10 -1c0 0 1 -2 13 -14l38 37c4 3 5 7 4 13c0 2 0 4 -1 5c-10 33 -6 69 19 96l2 2c18 18 36 25 53 26c10 1 30 -5 35 -15l-48 -48l-2 -3l-1 -1c-1 -1 -1 -2 -1 -4 -s0 -3 1 -5l2 -2l2 -2l41 -42l3 -3l1 -1c1 -1 2 -1 4 -1s3 0 4 1l2 1l2 3z" /> - <glyph glyph-name="ion-share" unicode="" horiz-adv-x="384" -d="M288 70v59l38 31v-109c0 -11 -8 -19 -19 -19h-288c-11 0 -19 9 -19 19v218c0 11 8 19 19 19h120c-29 -18 -43 -38 -43 -38h-58v-180h250zM256 224c-84 0 -116 -24 -160 -96c0 0 5 164 160 164v60l128 -96l-128 -96v64z" /> - <glyph glyph-name="ion-shuffle" unicode="" -d="M338 267c-52 0 -83 -43 -120 -92c-41 -55 -88 -120 -171 -120h-47v63h47c52 0 84 47 121 96c41 55 87 116 170 116h29v54l81 -81l-81 -84v48h-29zM121 230c-21 21 -42 35 -74 36c-34 1 -47 0 -47 0v63h47c48 0 83 -20 113 -48c-10 -12 -19 -24 -28 -36 -c-4 -5 -7 -10 -11 -15zM367 118v47l81 -84l-81 -81v54h-29c-50 0 -87 23 -117 53c12 14 22 28 32 41c2 3 5 6 7 9c22 -24 46 -39 78 -39h29z" /> - <glyph glyph-name="ion-skip-backward" unicode="" horiz-adv-x="384" -d="M12 352h8c7 0 12 -5 12 -12v-113l187 122c2 2 5 3 8 3c8 0 16 -7 16 -17v-63l118 78c2 2 5 2 8 2c8 0 15 -7 15 -17v-286c0 -10 -7 -17 -15 -17c-3 0 -5 1 -8 3l-118 78v-64c0 -10 -8 -17 -16 -17c-3 0 -5 1 -8 3l-187 122v-113c0 -7 -5 -12 -12 -12h-8 -c-7 0 -12 5 -12 12v296c0 7 5 12 12 12z" /> - <glyph glyph-name="ion-skip-forward" unicode="" horiz-adv-x="384" -d="M372 352c7 0 12 -5 12 -12v-296c0 -7 -5 -12 -12 -12h-8c-7 0 -12 5 -12 12v113l-187 -122c-3 -2 -5 -3 -8 -3c-8 0 -15 7 -15 17v64l-119 -78c-3 -2 -5 -3 -8 -3c-8 0 -15 7 -15 17v286c0 10 7 17 15 17c3 0 6 0 8 -2l119 -78v63c0 10 7 17 15 17c3 0 6 -1 8 -3 -l187 -122v113c0 7 5 12 12 12h8z" /> - <glyph glyph-name="ion-social-android-outline" unicode="" horiz-adv-x="352" -d="M272 240h-192v-60v-89h24h16v-15v-52c0 -4 4 -8 8 -8s8 4 8 8v52v15h17h49h15v-15v-52c0 -2 1 -4 3 -6h1v0c1 -1 2 -2 4 -2h1v0v0c4 0 7 4 7 8v52v15h17h22v89v60zM288 256v0v-76v-90c0 -7 -3 -15 -10 -15h-29v-51c0 -13 -10 -24 -23 -24v0h-1c-6 0 -11 2 -15 5 -c-5 4 -9 11 -9 19v51h-49v-51c0 -13 -11 -24 -24 -24s-24 11 -24 24v51h-28c-7 0 -12 8 -12 15v90v76h224zM328 256c-4 0 -8 -4 -8 -8v-96c0 -4 4 -8 8 -8s8 4 8 8v96c0 4 -4 8 -8 8zM328 272v0c13 0 24 -11 24 -24v-96c0 -13 -11 -24 -24 -24s-24 11 -24 24v96 -c0 13 11 24 24 24zM24 256c-4 0 -8 -4 -8 -8v-96c0 -4 4 -8 8 -8s8 4 8 8v96c0 4 -4 8 -8 8zM24 272v0c13 0 24 -11 24 -24v-96c0 -13 -11 -24 -24 -24s-24 11 -24 24v96c0 13 11 24 24 24zM175 354c-14 0 -27 -3 -38 -6l-10 -4c-28 -12 -40 -37 -44 -56h186 -c-4 18 -15 43 -44 56l-10 4c-12 4 -25 6 -39 6v0v0h-1zM105 384v0h1l19 -23c13 5 30 9 50 9h1c20 0 36 -4 50 -9l20 23v0s1 -1 2 -1c1 -1 2 -3 2 -3l-19 -22c48 -21 56 -71 57 -86h-224c1 15 9 66 57 87l-19 22c0 1 1 1 2 2zM127 309c-7 0 -14 6 -14 13s6 14 14 14 -c7 0 13 -7 13 -14s-5 -13 -13 -13zM225 309c-7 0 -13 6 -13 13s5 14 13 14c7 0 13 -7 13 -14s-6 -13 -13 -13z" /> - <glyph glyph-name="ion-social-android" unicode="" horiz-adv-x="352" -d="M64 180v76h224v-76v-90c0 -7 -4 -14 -11 -14h-28v-52c0 -13 -11 -24 -24 -24v0h-1c-6 0 -10 2 -14 5c-5 4 -9 11 -9 19v52h-49v-52c0 -13 -11 -24 -24 -24s-24 11 -24 24v52h-29c-7 0 -11 7 -11 14v90zM328 272c13 0 24 -11 24 -24v-96c0 -13 -11 -24 -24 -24 -s-24 11 -24 24v96c0 13 11 24 24 24zM24 272c13 0 24 -11 24 -24v-96c0 -13 -11 -24 -24 -24s-24 11 -24 24v96c0 13 11 24 24 24zM231 359c48 -21 56 -72 57 -87h-224c1 15 8 66 56 87l-18 22c0 1 0 1 1 2s3 1 3 1l19 -23c14 5 31 9 51 9s36 -4 50 -9l20 23c0 1 1 0 2 -1 -l2 -2zM127 309c8 0 13 6 13 13s-6 14 -13 14c-8 0 -14 -7 -14 -14s7 -13 14 -13zM225 309c7 0 14 6 14 13s-7 14 -14 14c-8 0 -13 -7 -13 -14s6 -13 13 -13z" /> - <glyph glyph-name="ion-social-angular-outline" unicode="" -d="M224 384l-188 -69l39 -230l149 -80l149 80l39 230zM224 416v0l224 -80l-46 -272l-178 -96l-178 96l-46 272zM312 96l-27 56h-122l-27 -56h-40l128 280l128 -280h-40zM182 192h84l-42 89z" /> - <glyph glyph-name="ion-social-angular" unicode="" -d="M182 192l42 89l42 -89h-84zM224 416l224 -80l-46 -272l-178 -96l-178 96l-46 272zM312 96h40l-128 280l-128 -280h40l27 56h122z" /> - <glyph glyph-name="ion-social-apple-outline" unicode="" horiz-adv-x="320" -d="M238 278c-15 0 -26 -4 -37 -8c-10 -4 -21 -8 -35 -8s-25 4 -37 8c-11 4 -22 8 -34 8c-11 0 -23 -3 -34 -10c-12 -7 -23 -18 -31 -31c-12 -18 -16 -47 -13 -77c3 -34 16 -69 35 -99c13 -21 30 -45 50 -45h1c8 0 13 3 20 6c10 5 23 10 44 10v0c21 0 34 -5 44 -10 -c7 -3 12 -6 19 -6v0c22 0 44 35 52 48c8 12 12 20 17 31c-12 7 -22 16 -30 28c-10 15 -17 33 -18 52c-1 18 2 37 10 53c6 12 14 22 24 30c-14 13 -31 20 -47 20zM238 294v0c25 0 52 -14 71 -39c-63 -36 -53 -128 11 -153c-9 -20 -13 -28 -24 -46c-16 -25 -37 -56 -65 -56h-1 -c-24 0 -31 16 -63 16v0c-33 0 -40 -16 -64 -16h-1c-28 0 -48 28 -64 53c-44 69 -48 150 -21 193c19 30 50 48 78 48c29 0 47 -16 71 -16c23 0 38 16 72 16zM214 364c-11 -5 -21 -13 -28 -22c-4 -5 -9 -13 -13 -23c-1 -3 -2 -6 -2 -9c11 4 21 11 28 21c4 5 12 18 15 33z -M230 384v0c3 -23 -6 -46 -18 -62c-13 -17 -35 -30 -56 -30h-1c-4 22 6 44 18 60c14 17 37 31 57 32z" /> - <glyph glyph-name="ion-social-apple" unicode="" horiz-adv-x="320" -d="M238 294v0c25 0 52 -14 71 -39c-63 -36 -53 -128 11 -153c-9 -20 -13 -28 -24 -46c-16 -25 -37 -56 -65 -56h-1c-24 0 -31 16 -63 16v0c-33 0 -40 -16 -64 -16h-1c-28 0 -48 28 -64 53c-44 69 -48 150 -21 193c19 30 50 48 78 48c29 0 47 -16 71 -16c23 0 38 16 72 16z -M230 384v0c3 -23 -6 -46 -18 -62c-13 -17 -35 -30 -56 -30h-1c-4 22 6 44 18 60c14 17 37 31 57 32z" /> - <glyph glyph-name="ion-social-bitcoin-outline" unicode="" horiz-adv-x="320" -d="M184 400h-8v-48v-16h-16h-32h-16v16v48h-9v-48v-16h-16h-72v-16h13c11 0 19 0 25 -3s10 -7 13 -13s3 -8 3 -20v-178c0 -11 0 -18 -3 -24v-1c-1 -3 -4 -10 -12 -14h-1c-5 -3 -8 -3 -17 -3h-13l-3 -16h67h16v-16v-48h9v48v16h16h32h16v-16v-48h8v49v16h15c23 1 41 5 55 10 -c16 6 28 15 37 26c8 11 12 29 13 42c1 14 -1 29 -4 36s-8 16 -21 23c-7 4 -14 6 -21 8l-46 11l43 19c4 2 7 4 12 9c6 5 9 12 11 16c2 5 4 13 3 22c-1 17 -4 29 -10 37c-7 9 -17 16 -31 21c-12 5 -24 7 -41 8l-15 1v15v47zM200 416v0v-63c20 -1 32 -4 45 -9 -c16 -6 29 -15 38 -27s12 -28 13 -45c1 -10 0 -20 -3 -28s-8 -16 -16 -23c-6 -6 -11 -9 -16 -11c9 -2 17 -6 25 -10c15 -8 24 -18 29 -30c4 -10 6 -30 5 -44c-1 -16 -6 -37 -16 -51c-11 -14 -26 -24 -45 -31c-15 -6 -33 -10 -59 -11v-65h-40v64h-32v-64h-41v64h-87l8 48h28 -c9 0 8 1 11 2s4 3 5 6s1 9 1 18v178c0 9 0 10 -1 12s-3 4 -6 6s-9 2 -18 2h-28v48h87v64h41v-64h32v64h40zM160 298v-74h-32v74h32zM160 176v0v-90h-32v90h32zM200 294v0c6 -2 10 -7 14 -12c4 -6 6 -13 6 -21s-2 -15 -7 -21c-4 -5 -7 -9 -13 -12v66zM200 174v0 -c5 -1 8 -1 12 -3c8 -3 14 -7 19 -13s8 -15 8 -24c0 -11 -2 -19 -10 -26s-13 -11 -23 -15c-2 -1 -4 0 -6 -1v82z" /> - <glyph glyph-name="ion-social-bitcoin" unicode="" horiz-adv-x="320" -d="M314 169c4 -10 7 -30 6 -44c-1 -16 -5 -37 -16 -51s-26 -24 -45 -31c-15 -6 -33 -10 -59 -11v-64h-40v64h-32v-64h-41v64h-87l9 48h26c9 0 9 0 12 1s4 4 5 7s2 8 2 17v173c0 9 -1 16 -2 18s-3 4 -6 6s-9 2 -18 2h-28v48h87v64h41v-64h32v64h40v-64c20 -1 33 -4 46 -9 -c16 -6 28 -15 37 -27s12 -28 13 -45c1 -10 0 -20 -3 -28c-2 -8 -8 -16 -16 -23c-6 -6 -11 -9 -16 -11c9 -2 17 -6 25 -10c15 -8 23 -18 28 -30zM128 298v-74h32v74h-32zM128 86h32v90h-32v-90zM200 294v-66c6 3 9 7 13 12c5 6 7 12 7 20s-2 15 -6 21c-4 5 -8 11 -14 13z -M229 107c8 7 10 15 10 26c0 9 -3 19 -8 25s-12 10 -20 13c-4 2 -6 2 -11 3v-82c2 0 5 1 7 2c10 4 14 6 22 13z" /> - <glyph glyph-name="ion-social-buffer-outline" unicode="" horiz-adv-x="384" -d="M7 284c-9 4 -9 11 0 15l169 82c4 2 10 3 16 3s12 -1 16 -3l169 -82c9 -4 9 -11 0 -15l-169 -82c-4 -2 -10 -3 -16 -3s-12 1 -16 3zM183 366l-156 -75l156 -75c2 -1 5 -1 9 -1s7 0 9 1l156 75l-156 75c-2 1 -5 2 -9 2s-7 -1 -9 -2zM377 200c9 -4 9 -12 0 -16l-169 -81 -c-4 -2 -10 -4 -16 -4s-12 2 -16 4l-169 81c-9 4 -9 12 0 16c0 0 27 13 33 16c5 3 7 3 13 0s123 -60 123 -60c4 -2 10 -3 16 -3s12 1 16 3c0 0 121 59 125 61s5 2 9 0s35 -17 35 -17zM201 117l156 75l-19 9l-123 -59c-6 -3 -15 -5 -23 -5s-17 2 -23 5l-123 59l-19 -9l156 -75 -c2 -1 5 -2 9 -2s7 1 9 2zM377 100c9 -4 9 -11 0 -15l-169 -82c-4 -2 -10 -3 -16 -3s-12 1 -16 3l-169 82c-9 4 -9 11 0 15c0 0 27 14 33 17c5 3 7 2 13 -1s123 -59 123 -59c4 -2 10 -3 16 -3s12 1 16 3c0 0 121 58 125 60s5 2 9 0s35 -17 35 -17zM201 18l156 75l-19 9 -l-123 -60c-6 -3 -15 -4 -23 -4s-17 1 -23 4l-123 60l-19 -9l156 -75c2 -1 5 -2 9 -2s7 1 9 2z" /> - <glyph glyph-name="ion-social-buffer" unicode="" horiz-adv-x="384" -d="M7 284c-9 4 -9 11 0 15l169 82c4 2 10 3 16 3s12 -1 16 -3l169 -82c9 -4 9 -11 0 -15l-169 -82c-4 -2 -10 -3 -16 -3s-12 1 -16 3zM377 200c9 -4 9 -12 0 -16l-169 -81c-4 -2 -10 -4 -16 -4s-12 2 -16 4l-169 81c-9 4 -9 12 0 16c0 0 27 13 33 16c5 3 7 3 13 0 -s123 -60 123 -60c4 -2 10 -3 16 -3s12 1 16 3c0 0 121 59 125 61s5 2 9 0s35 -17 35 -17zM377 100c9 -4 9 -11 0 -15l-169 -82c-4 -2 -10 -3 -16 -3s-12 1 -16 3l-169 82c-9 4 -9 11 0 15c0 0 27 14 33 17c5 3 7 2 13 -1s123 -59 123 -59c4 -2 10 -3 16 -3s12 1 16 3 -c0 0 121 58 125 60s5 2 9 0s35 -17 35 -17z" /> - <glyph glyph-name="ion-social-chrome-outline" unicode="" -d="M224 416c123 0 224 -101 224 -224s-101 -224 -224 -224s-224 101 -224 224s101 224 224 224zM224 371c-57 0 -109 -27 -141 -68l54 -93c8 40 43 72 87 72h155c-30 54 -89 89 -155 89zM291 192c0 37 -30 67 -67 67s-67 -30 -67 -67s30 -67 67 -67s67 30 67 67zM45 192 -c0 -91 67 -166 154 -177l54 93c-9 -3 -19 -6 -29 -6c-34 0 -61 18 -77 45v0l-78 135c-16 -27 -24 -58 -24 -90zM224 13c99 0 179 80 179 179c0 24 -4 46 -13 67h-108c19 -17 32 -40 32 -67c0 -17 -5 -32 -13 -45v0z" /> - <glyph glyph-name="ion-social-chrome" unicode="" -d="M157 192c0 37 30 67 67 67s67 -30 67 -67s-30 -67 -67 -67s-67 30 -67 67zM445 230c2 -12 3 -25 3 -38c0 -106 -74 -195 -174 -218c-10 -2 -20 -4 -30 -5c-7 -1 -13 -1 -20 -1c-8 0 -17 0 -25 1v0v0v0v1l102 177c8 13 13 28 13 45c0 27 -13 50 -32 67h156 -c3 -9 5 -19 7 -29v0c-2 10 -4 20 -7 29v0c3 -9 5 -19 7 -29v0zM224 103c10 0 20 2 29 5l-78 -135v0c-42 9 -79 30 -108 59c-42 41 -67 97 -67 160c0 31 6 61 18 88c7 16 16 31 26 45v0l103 -178c16 -27 43 -44 77 -44zM59 343v0v1c24 26 55 47 90 59c23 8 49 13 75 13 -c73 0 138 -36 179 -90h1c10 -14 18 -29 25 -44v0c-7 15 -15 30 -25 44h-1c10 -14 19 -29 26 -44h-205c-44 0 -79 -32 -87 -72z" /> - <glyph glyph-name="ion-social-codepen-outline" unicode="" -d="M356 244c5 -3 7 -6 7 -12v-81c0 -6 -3 -10 -8 -13c-41 -27 -82 -55 -123 -82c-6 -4 -11 -4 -17 0c-41 27 -81 55 -122 82c-5 3 -8 7 -8 13v80c0 6 3 11 8 14c41 27 81 54 122 81c6 4 11 4 17 0c41 -27 83 -55 124 -82zM236 296v-54c0 -1 1 -2 2 -3c16 -11 31 -21 47 -32 -c1 -1 3 -1 4 0l40 26zM212 295c0 0 -62 -41 -93 -62c14 -9 27 -17 40 -26c1 -1 3 -1 4 0c15 10 31 21 46 31c1 1 3 4 3 6v51zM109 211v-40l30 20zM212 87v53c0 1 -2 3 -3 4c-15 10 -31 21 -46 31c-2 1 -3 1 -5 0l-39 -26c31 -21 93 -62 93 -62zM227 165l39 26s-34 23 -40 27 -c-1 1 -4 0 -5 -1c-5 -3 -9 -6 -14 -9c-8 -6 -25 -17 -25 -17l39 -26c2 -1 4 -1 6 0zM236 87l93 62l-38 26c-2 2 -5 2 -7 0c-15 -10 -30 -21 -45 -31c-2 -2 -3 -3 -3 -6v-51zM338 171v40l-30 -20zM224 384c-51 0 -100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136 -s85 -56 136 -56s100 20 136 56s56 85 56 136s-20 100 -56 136s-85 56 -136 56zM224 416v0c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224z" /> - <glyph glyph-name="ion-social-codepen" unicode="" -d="M209 144c1 -1 3 -3 3 -4v-53s-62 41 -93 62l39 26c2 1 3 1 5 0c15 -10 31 -21 46 -31zM163 207c-1 -1 -3 -1 -4 0c-13 9 -26 17 -40 26c31 21 93 62 93 62v-51c0 -2 -2 -5 -3 -6c-15 -10 -31 -21 -46 -31zM238 239c-1 1 -2 2 -2 3v54l93 -63l-40 -26c-1 -1 -3 -1 -4 0 -c-16 11 -31 21 -47 32zM226 218c6 -4 40 -27 40 -27l-39 -26c-2 -1 -4 -1 -6 0l-39 26s17 11 25 17c5 3 9 6 14 9c1 1 4 2 5 1zM109 211l30 -20l-30 -20v40zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM363 151v81 -c0 6 -2 9 -7 12c-41 27 -83 55 -124 82c-6 4 -11 4 -17 0c-41 -27 -81 -54 -122 -81c-5 -3 -8 -8 -8 -14v-80c0 -6 3 -10 8 -13c41 -27 81 -55 122 -82c6 -4 11 -4 17 0c41 27 82 55 123 82c5 3 8 7 8 13zM284 175c2 2 5 2 7 0l38 -26l-93 -62v51c0 3 1 4 3 6 -c15 10 30 21 45 31zM338 171l-30 20l30 20v-40z" /> - <glyph glyph-name="ion-social-css3-outline" unicode="" horiz-adv-x="384" -d="M291 81l-99 -28l-98 28l-7 78h48l4 -40l53 -15v0v0l54 15l5 64h-112l-4 50h121l4 51h-184l-4 49h241zM0 416h384l-35 -403l-157 -45l-157 45zM319 37l30 347h-314l30 -347l127 -36z" /> - <glyph glyph-name="ion-social-css3" unicode="" horiz-adv-x="384" -d="M192 109v0zM0 416h384l-35 -403l-157 -45l-157 45zM291 81l22 252h-241l4 -49h184l-4 -51h-121l4 -50h112l-5 -64l-54 -15v0v0l-53 15l-4 40h-48l7 -78l98 -28z" /> - <glyph glyph-name="ion-social-designernews-outline" unicode="" -d="M259 302v-53l-65 103zM0 188zM297 352l151 -119v-201h-248l-200 156h63c46 0 77 33 77 82c0 20 -5 37 -15 51l-3 3l37 -29v-107h41l-2 98l63 -98h36v84v80zM432 48v178l-119 92v1v-47v-83v-17h-15h-37h-9l-4 8l-33 50l1 -42v-16h-16h-41h-16v16v29c-3 -6 -7 -12 -12 -17 -c-8 -9 -18 -16 -30 -21s-24 -7 -38 -7h-16l159 -124h226zM59 298h-1h-3v-57h4c8 0 13 2 17 6c5 6 6 15 6 22c0 26 -12 29 -23 29zM59 314v0c25 0 39 -16 39 -45c0 -28 -14 -44 -40 -44h-19v89h20z" /> - <glyph glyph-name="ion-social-designernews" unicode="" -d="M258 303l1 -53l-64 102zM297 352l151 -118v-202h-248l-200 157v0h63c46 0 77 33 77 82c0 20 -5 37 -15 51l-3 3l37 -29v-107h40l-2 99l64 -99h36v83v80zM98 270c0 -28 -14 -44 -40 -44h-19v89h19c26 0 40 -16 40 -45z" /> - <glyph glyph-name="ion-social-dribbble-outline" unicode="" horiz-adv-x="384" -d="M192 384c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM314 296c-17 -25 -47 -47 -85 -64c5 -10 9 -20 13 -31c33 3 75 4 110 2c-2 35 -16 68 -38 93zM192 352c-14 0 -26 -2 -39 -5c23 -23 43 -53 62 -87c34 14 62 33 79 55 -c-28 23 -63 37 -102 37zM120 334c-41 -21 -71 -58 -83 -103h25c44 0 85 6 121 17c-19 34 -40 63 -63 86zM32 200v-8c0 -40 15 -78 40 -106c24 45 67 83 122 106c4 2 8 3 14 4c-3 8 -6 16 -10 24c-40 -13 -88 -20 -138 -21c-9 0 -19 1 -28 1zM192 32c20 0 39 3 57 10 -c-3 25 -8 53 -15 79c-4 17 -10 33 -16 49c-7 -2 -13 -4 -17 -6c-48 -22 -86 -56 -107 -98c27 -21 61 -34 98 -34zM278 58c40 26 68 67 73 116c-30 2 -68 3 -99 0c4 -12 9 -25 12 -38c7 -27 11 -52 14 -78z" /> - <glyph glyph-name="ion-social-dribbble" unicode="" horiz-adv-x="384" -d="M192 384c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM192 32c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM242 201c-4 11 -8 21 -13 31c25 11 47 24 63 39c15 -19 26 -42 28 -67c-26 0 -55 -1 -78 -3z -M271 292c-15 -12 -34 -23 -56 -32c-12 22 -24 41 -38 59c5 1 10 1 15 1c30 0 57 -11 79 -28zM142 310c15 -18 28 -39 41 -62c-34 -10 -72 -16 -113 -17c11 36 38 65 72 79zM319 176c-4 -33 -21 -63 -46 -83c-3 14 -5 28 -9 43c-3 13 -8 26 -12 38c21 2 45 3 67 2zM194 192 -c-43 -18 -79 -46 -104 -78c-16 22 -26 49 -26 78v7c49 1 95 8 134 21c4 -8 7 -16 10 -24c-6 -1 -10 -2 -14 -4zM219 170c6 -16 11 -32 15 -49c4 -15 7 -31 10 -46c-16 -7 -34 -11 -52 -11c-31 0 -59 11 -81 29c22 30 53 54 90 71c4 2 11 4 18 6z" /> - <glyph glyph-name="ion-social-dropbox-outline" unicode="" horiz-adv-x="384" -d="M113 371l79 -66l-114 -71l-78 63zM27 295l52 -42l86 53l-53 46zM306 235l78 -63l-78 -51v-39l-114 -69l-114 68v39l-78 52l78 63l114 -71l-79 -66l-19 12v-20l98 -59l98 59v20l-19 -12l-79 66zM79 217l-52 -44l85 -55l53 44zM219 162l53 -44l85 56l-52 43zM384 297 -l-78 -63l-114 71l79 66zM219 305l86 -52l52 42l-85 56z" /> - <glyph glyph-name="ion-social-dropbox" unicode="" horiz-adv-x="384" -d="M113 371l79 -66l-114 -71l-78 63zM0 172l78 62l114 -70l-79 -66zM192 164l114 70l78 -62l-113 -74zM384 297l-78 -63l-114 71l79 66zM192 150l80 -66l34 22v-25l-114 -68l-114 68v25l34 -22z" /> - <glyph glyph-name="ion-social-euro-outline" unicode="" horiz-adv-x="320" -d="M214 384c-53 0 -91 -9 -115 -27c-22 -16 -33 -40 -33 -74v-11v-17h-16h-34v-16h34h16v-15v-48v-17h-16h-34v-16h34h16v-15v-27c0 -34 11 -58 33 -74c24 -18 62 -27 115 -27c31 0 59 2 88 8l-5 35c-30 -4 -55 -7 -80 -7c-36 0 -59 6 -74 19c-19 16 -21 40 -21 60v13v15h16 -h103l3 16h-106h-16v17v48v15h16h118l2 16h-120h-16v17v2c0 16 2 39 21 55c16 13 39 19 74 19c24 0 51 -3 80 -7l5 35c-29 6 -57 8 -88 8zM214 400v0c35 0 68 -3 106 -12l-9 -65c-37 6 -68 9 -94 9c-64 0 -79 -22 -79 -58v-3h139l-8 -48h-131v-48h124l-7 -48h-117v-12 -c0 -44 15 -63 79 -63c26 0 57 3 94 9l9 -65c-38 -9 -71 -12 -106 -12c-115 0 -164 41 -164 117v26h-50v48h50v48h-50v48h50v12c0 76 49 117 164 117z" /> - <glyph glyph-name="ion-social-euro" unicode="" horiz-adv-x="320" -d="M138 176h124l-7 -48h-117v-13c0 -44 15 -63 79 -63c26 0 56 3 93 9l10 -65c-38 -9 -71 -12 -106 -12c-115 0 -164 41 -164 117v27h-50v48h50v48h-50v48h50v11c0 76 49 117 164 117c35 0 68 -3 106 -12l-10 -65c-37 6 -67 9 -93 9c-64 0 -79 -22 -79 -58v-2h138l-7 -48 -h-131v-48z" /> - <glyph glyph-name="ion-social-facebook-outline" unicode="" horiz-adv-x="192" -d="M128 256h64l-8 -64h-56v-192h-83v192h-45v64h45v43c0 54 23 85 91 85h56v-64h-34c-27 0 -30 -9 -30 -26v-38zM170 208l4 32h-45h-17v17v37c0 10 1 21 9 30c10 11 25 12 37 12h18v32h-40c-28 0 -49 -6 -60 -18c-10 -11 -15 -27 -15 -51v-43v-16h-15h-30v-32h30h15v-16 -v-176h51v176v16h17h41z" /> - <glyph glyph-name="ion-social-facebook" unicode="" horiz-adv-x="192" -d="M128 256h64l-8 -64h-56v-192h-83v192h-45v64h45v43c0 54 23 85 91 85h56v-64h-34c-27 0 -30 -9 -30 -26v-38z" /> - <glyph glyph-name="ion-social-foursquare-outline" unicode="" horiz-adv-x="320" -d="M302 284c-12 -60 -25 -131 -27 -138zM281 416c35 0 45 -20 37 -57c-3 -16 -10 -44 -16 -75l-27 -137c-3 -13 -8 -35 -39 -35h-72c-3 0 -3 0 -6 -3c-2 -2 -115 -133 -115 -133c-9 -10 -23 -8 -28 -6s-15 8 -15 26v380s10 40 43 40h238zM280 352c6 31 6 32 -24 32h-195 -c-29 0 -29 -3 -29 -28v-297c0 -38 1 -38 3 -38s10 8 29 31c0 0 78 89 79 90c2 2 3 2 6 2h62c26 0 28 6 33 31c4 21 36 177 36 177zM302 284c6 31 13 59 16 75zM233 352c5 0 9 -5 8 -11l-8 -44c-1 -4 -6 -9 -11 -9h-75c-8 0 -8 -5 -8 -13v-6c0 -8 0 -13 8 -13h64 -s11 -6 10 -12s-11 -51 -12 -54s-4 -9 -11 -9h-62c-9 0 -11 -1 -17 -8l-54 -63c-1 -1 -1 -1 -1 0v231c0 5 5 11 11 11h158z" /> - <glyph glyph-name="ion-social-foursquare" unicode="" horiz-adv-x="320" -d="M281 416c35 0 45 -20 37 -57c-10 -49 -40 -202 -43 -213c-3 -13 -8 -34 -39 -34h-72c-3 0 -3 0 -6 -3c-2 -2 -115 -133 -115 -133c-9 -10 -23 -8 -28 -6s-15 8 -15 26v380s10 40 43 40h238zM275 146c3 11 33 164 43 213zM267 351c2 9 -5 16 -12 16h-191 -c-9 0 -15 -8 -15 -15v-296c0 -1 1 -1 2 0c0 0 70 84 78 94s11 11 23 11h64c9 0 14 8 15 12s8 43 10 51s-6 16 -13 16h-82c-10 0 -18 8 -18 18v13c0 10 8 17 18 17h96s14 6 15 12z" /> - <glyph glyph-name="ion-social-freebsd-devil" unicode="" horiz-adv-x="512" -d="M503 333c19 -37 8 -81 -20 -108s-60 -33 -60 -33c2 -32 16 -59 -41 -102c-43 -32 2 -90 2 -90c10 -14 23 -19 32 -32h-272s15 14 -7 32c0 0 -20 17 -18 29s6 13 9 15s0 7 0 7l-19 19s-13 -13 -44 -13c-38 0 -65 39 -65 39h46s-6 -8 -7 -13c-1 -4 1 -5 1 -5s11 -6 22 -6 -c17 0 33 12 33 12l-24 22l-15 -4l-16 37l39 -10l-1 -15l28 -18s9 9 7 27s-9 26 -9 26s-4 0 -9 -4s-6 -6 -6 -6l-10 44s43 -19 50 -63c3 -20 -6 -35 -6 -35l17 -10s6 5 17 7s23 2 29 -8s5 -12 4 -19s0 -9 6 -11s6 -6 11 -8s15 -6 21 -2s8 11 8 18v16s-9 8 -32 20 -s-54 22 -66 40s-12 44 0 57c9 10 23 25 26 35c4 14 4 42 4 42s-10 16 -8 40c2 30 22 84 96 114c0 0 -40 -55 -20 -80c0 0 37 11 77 9c31 -2 56 -12 73 -28s25 -23 47 -17s28 17 28 33c0 19 -16 51 -16 51s36 -7 58 -51zM195 245c14 4 21 -11 21 -11c14 25 30 60 22 64 -s-64 -25 -66 -88c0 0 6 31 23 35zM232 230c5 7 34 8 37 -17c4 -35 -24 -57 -24 -57s7 -2 23 2c17 4 43 29 43 70s-21 66 -41 62s-38 -60 -38 -60z" /> - <glyph glyph-name="ion-social-github-outline" unicode="" -d="M224 416c124 0 224 -103 224 -230c0 -101 -64 -188 -153 -218h-4c-8 0 -12 7 -12 12c0 8 1 31 1 62c0 21 -8 36 -16 43c50 6 103 25 103 113c0 25 -9 46 -23 62c2 6 10 29 -2 61h-5c-8 0 -27 -3 -57 -24c-18 5 -37 8 -56 8s-38 -3 -56 -8c-30 21 -49 24 -57 24h-5 -c-12 -32 -4 -55 -2 -61c-14 -16 -23 -37 -23 -62c0 -88 52 -107 102 -113c-6 -6 -12 -16 -14 -31c-6 -3 -16 -6 -26 -6c-13 0 -28 5 -39 25c0 0 -13 22 -35 24v0c-2 0 -21 0 -1 -14c0 0 15 -8 25 -34c0 0 10 -33 53 -33c7 0 14 0 22 2v-39c0 -5 -3 -11 -11 -11h-4 -c-89 30 -153 116 -153 218c0 127 100 230 224 230zM146 -0c-15 0 -28 4 -38 9c14 -10 28 -17 44 -23v6v8h-6zM157 73c-16 4 -35 10 -52 24c6 -6 11 -11 13 -16c7 -12 14 -17 25 -17c4 0 9 1 12 2c1 2 1 5 2 7zM347 14c17 13 32 28 45 46c26 37 40 80 40 126 -c0 29 -5 58 -16 84c-10 25 -26 48 -45 68s-41 34 -66 45c-26 11 -53 17 -81 17s-55 -6 -81 -17c-25 -11 -47 -25 -66 -45s-35 -42 -45 -68c-11 -26 -16 -55 -16 -84c0 -46 14 -89 40 -126c10 -14 22 -27 35 -38c-7 8 -11 16 -13 22c-7 18 -15 24 -17 25h-2v1 -c-5 3 -20 13 -15 28c3 9 12 15 25 15h1v0v0c13 -1 24 -6 32 -13c-21 19 -37 48 -37 98c0 24 7 47 21 66c-3 13 -6 34 5 62l3 8l7 2c2 0 5 1 10 1c12 0 31 -3 60 -22c17 4 35 6 53 6v0v0c18 0 36 -2 53 -6c29 19 48 22 60 22c5 0 8 -1 10 -1l7 -2l3 -7c11 -27 8 -50 5 -63 -c14 -19 21 -41 21 -66c0 -92 -55 -117 -92 -125c3 -8 5 -18 5 -30v-51v-6c18 7 35 16 51 28z" /> - <glyph glyph-name="ion-social-github" unicode="" -d="M224 416c124 0 224 -103 224 -230c0 -101 -64 -188 -153 -218h-4c-8 0 -12 7 -12 12c0 8 1 31 1 62c0 21 -8 36 -16 43c50 6 103 25 103 113c0 25 -9 46 -23 62c2 6 10 29 -2 61h-5c-8 0 -27 -3 -57 -24c-18 5 -37 8 -56 8s-38 -3 -56 -8c-30 21 -49 24 -57 24h-5 -c-12 -32 -4 -55 -2 -61c-14 -16 -23 -37 -23 -62c0 -88 52 -107 102 -113c-6 -6 -12 -16 -14 -31c-6 -3 -16 -6 -26 -6c-13 0 -28 5 -39 25c0 0 -13 22 -35 24v0c-2 0 -21 0 -1 -14c0 0 15 -8 25 -34c0 0 10 -33 53 -33c7 0 14 0 22 2v-39c0 -5 -3 -11 -11 -11h-4 -c-89 30 -153 116 -153 218c0 127 100 230 224 230z" /> - <glyph glyph-name="ion-social-google-outline" unicode="" horiz-adv-x="256" -d="M191 366c12 -10 37 -30 37 -68c0 -37 -21 -55 -43 -72c-7 -7 -15 -13 -15 -24s8 -17 14 -22l18 -14c23 -19 43 -36 43 -71c0 -47 -47 -95 -135 -95c-74 0 -110 35 -110 72c0 18 10 44 40 62c32 19 75 21 98 23c-7 9 -16 18 -16 34c0 9 2 14 5 20c-6 0 -11 -1 -16 -1 -c-54 0 -85 40 -85 79c0 23 11 48 33 67c29 24 63 28 91 28h106l-33 -18h-32zM155 142c-4 1 -7 1 -12 1s-32 -1 -54 -8c-11 -4 -44 -16 -44 -52s36 -62 91 -62c49 0 75 24 75 55c0 26 -17 39 -56 66zM170 238c12 12 13 28 13 37c0 36 -22 92 -65 92c-13 0 -28 -6 -36 -16 -c-9 -11 -11 -25 -11 -38c0 -34 20 -89 64 -89c13 0 27 6 35 14z" /> - <glyph glyph-name="ion-social-google" unicode="" horiz-adv-x="288" -d="M210 172c22 -18 45 -36 45 -73c0 -49 -48 -99 -140 -99c-80 0 -115 39 -115 77c0 10 3 42 42 65c27 16 61 20 85 22c-4 7 -8 16 -8 27c0 4 0 7 1 10h-4c-19 0 -46 4 -67 26c-15 15 -24 36 -24 57c0 26 13 53 35 71v0c32 25 70 29 95 29h133l-60 -33h-13 -c11 -13 23 -31 23 -58c0 -40 -25 -59 -45 -74v-1c-6 -6 -11 -10 -11 -17c0 -6 4 -10 10 -15v0zM85 308c0 -13 4 -33 14 -51c7 -12 20 -27 41 -27c10 0 21 4 28 11c10 10 10 25 10 30c0 18 -6 38 -15 54c-7 13 -20 27 -40 27c-11 0 -22 -5 -29 -13c-6 -7 -9 -18 -9 -31z -M206 80c0 20 -13 31 -50 56c-3 0 -4 1 -8 1c-6 0 -32 -2 -51 -8c-16 -6 -37 -16 -37 -42c0 -31 32 -51 80 -51c41 0 66 17 66 44z" /> - <glyph glyph-name="ion-social-googleplus-outline" unicode="" -d="M192 366c12 -10 36 -30 36 -68c0 -37 -21 -55 -43 -72c-7 -7 -15 -13 -15 -24s8 -18 14 -22l18 -14c23 -19 43 -36 43 -71c0 -47 -47 -95 -135 -95c-74 0 -110 35 -110 72c0 18 10 44 40 62c32 19 75 21 98 23c-7 9 -16 18 -16 34c0 9 3 14 5 20c-6 0 -11 -1 -16 -1 -c-54 0 -85 40 -85 79c0 23 10 48 32 67c29 24 64 28 92 28h106l-33 -18h-31zM155 142c-4 0 -7 1 -12 1s-32 -1 -54 -8c-11 -4 -44 -16 -44 -52s36 -62 91 -62c49 0 75 24 75 55c0 26 -17 39 -56 66zM170 238c12 12 13 28 13 37c0 36 -22 92 -65 92c-13 0 -28 -6 -36 -16 -c-9 -11 -11 -24 -11 -37c0 -34 20 -90 64 -90c13 0 27 6 35 14zM448 306v-18h-78v-81h-18v81h-80v18h80v78h18v-78h78z" /> - <glyph glyph-name="ion-social-googleplus" unicode="" -d="M210 172c22 -18 45 -36 45 -73c0 -49 -47 -99 -139 -99c-80 0 -116 39 -116 77c0 10 3 42 42 65c27 16 61 21 85 23c-4 7 -8 15 -8 26c0 4 0 7 1 10h-4c-19 0 -46 4 -67 26c-15 15 -24 36 -24 57c0 26 13 53 35 71v0c32 25 69 29 94 29h134l-60 -33h-13 -c11 -13 23 -31 23 -58c0 -40 -25 -59 -45 -74v-1c-6 -6 -11 -10 -11 -17c0 -6 4 -10 10 -15v0zM85 308c0 -13 4 -33 14 -51c7 -12 21 -27 41 -27c10 0 21 4 28 11c10 10 10 25 10 30c0 18 -6 37 -15 53c-8 13 -20 28 -40 28c-11 0 -23 -5 -29 -13c-6 -7 -9 -18 -9 -31z -M206 80c0 20 -13 31 -50 56c-3 0 -4 1 -8 1c-6 0 -31 -2 -50 -8c-16 -6 -38 -16 -38 -42c0 -31 32 -51 80 -51c41 0 66 17 66 44zM370 306h78v-34h-78v-81h-34v81h-80v34h80v78h34v-78z" /> - <glyph glyph-name="ion-social-hackernews-outline" unicode="" horiz-adv-x="384" -d="M352 352h-320v-320h320v320zM384 384v0v-384h-384v384h384zM233 289h45l-64 -120v-72h-40v72l-66 120h47l40 -84z" /> - <glyph glyph-name="ion-social-hackernews" unicode="" horiz-adv-x="384" -d="M0 384h384v-384h-384v384zM214 169l64 120h-45l-38 -84l-40 84h-47l66 -120v-72h40v72z" /> - <glyph glyph-name="ion-social-html5-outline" unicode="" horiz-adv-x="384" -d="M0 416h384l-35 -403l-157 -45l-157 45zM319 37l30 347h-314l30 -347l127 -36zM84 184l-13 150h241l-4 -50h-184l4 -51h176l-14 -151l-98 -28l-99 28l-6 77h48l3 -39l54 -15l53 15l6 64h-167z" /> - <glyph glyph-name="ion-social-html5" unicode="" horiz-adv-x="384" -d="M0 416h384l-35 -403l-157 -45l-157 45zM308 284l4 50h-241l13 -150h167l-6 -64l-53 -15l-54 15l-3 39h-48l6 -78l99 -27l98 28l14 151h-176l-4 51h184z" /> - <glyph glyph-name="ion-social-instagram-outline" unicode="" horiz-adv-x="384" -d="M384 336v-289c0 -26 -22 -47 -48 -47h-288c-26 0 -48 21 -48 47v289c0 26 22 48 48 48h288c26 0 48 -22 48 -48zM192 272c-44 0 -80 -36 -80 -80s36 -80 80 -80s80 36 80 80s-36 80 -80 80zM352 288v48c0 9 -7 16 -16 16h-48c-9 0 -16 -7 -16 -16v-48c0 -9 7 -16 16 -16 -h48c9 0 16 7 16 16zM337 32c9 0 15 7 15 16v176h-52c3 -10 4 -21 4 -32c0 -30 -11 -58 -32 -79s-50 -33 -80 -33s-58 12 -79 33s-33 49 -33 79c0 11 2 22 5 32h-53v-176c0 -9 8 -16 17 -16h288z" /> - <glyph glyph-name="ion-social-instagram" unicode="" horiz-adv-x="384" -d="M112 192c0 53 27 80 80 80s80 -27 80 -80s-27 -80 -80 -80s-80 27 -80 80zM113 271c-14 -14 -23 -29 -28 -47h-85v112c0 13 4 25 14 34s22 14 35 14h288c13 0 24 -5 33 -14s14 -21 14 -34v-112h-84c-5 18 -14 33 -28 47c-22 22 -49 33 -80 33s-57 -11 -79 -33zM352 300 -v39c0 4 -2 7 -4 9s-5 4 -9 4h-38c-4 0 -7 -2 -9 -4s-4 -5 -4 -9v-39c0 -4 2 -7 4 -9s5 -3 9 -3h38c4 0 7 1 9 3s4 5 4 9zM272 113c22 22 32 48 32 79h80v-144c0 -13 -5 -24 -14 -34s-20 -14 -33 -14h-288c-13 0 -24 4 -34 14s-15 21 -15 34v144h81c0 -31 10 -57 32 -79 -s48 -33 79 -33s58 11 80 33z" /> - <glyph glyph-name="ion-social-javascript-outline" unicode="" -d="M160 344h-48v-196c0 -30 -6 -50 -17 -64c-11 -13 -26 -20 -48 -20c-9 0 -18 1 -25 2l-4 -30c11 -2 25 -4 37 -4c34 0 59 8 76 25c19 18 29 48 29 90v197zM176 360v0v-213c0 -97 -49 -131 -121 -131c-18 0 -40 3 -55 8l8 62c10 -4 24 -6 39 -6c31 0 49 15 49 68v212h80z -M350 352c-34 0 -62 -9 -82 -26c-19 -15 -28 -36 -28 -60c0 -20 7 -36 21 -51c14 -14 34 -26 61 -36c23 -8 38 -15 48 -24c12 -11 18 -23 18 -38c0 -16 -7 -31 -20 -40c-12 -9 -28 -14 -48 -14c-28 0 -52 8 -70 15l-7 -32c18 -8 44 -14 72 -14c38 0 70 9 90 27 -c18 16 27 38 27 63c0 21 -5 36 -17 50s-31 27 -58 37v0v0c-38 15 -72 28 -72 63c0 14 7 27 19 36c11 9 26 13 45 13c24 0 43 -5 57 -11l10 32c-19 6 -42 10 -66 10zM350 368v0c38 0 65 -7 85 -16l-19 -64c-13 7 -35 17 -67 17s-48 -16 -48 -33c0 -22 19 -31 62 -48 -c58 -22 85 -53 85 -102c0 -57 -42 -106 -133 -106c-38 0 -72 10 -91 21l15 63v0c20 -11 49 -21 81 -21c34 0 52 15 52 38c0 21 -15 33 -55 47c-55 20 -93 52 -93 102c0 58 49 102 126 102z" /> - <glyph glyph-name="ion-social-javascript" unicode="" -d="M176 360v0v-213c0 -97 -49 -131 -121 -131c-18 0 -40 3 -55 8l8 62c10 -4 24 -6 39 -6c31 0 49 15 49 68v212h80zM350 368v0c38 0 65 -7 85 -16l-19 -64c-13 7 -35 17 -67 17s-48 -16 -48 -33c0 -22 19 -31 62 -48c58 -22 85 -53 85 -102c0 -57 -42 -106 -133 -106 -c-38 0 -72 10 -91 21l15 63v0c20 -11 49 -21 81 -21c34 0 52 15 52 38c0 21 -15 33 -55 47c-55 20 -93 52 -93 102c0 58 49 102 126 102z" /> - <glyph glyph-name="ion-social-linkedin-outline" unicode="" horiz-adv-x="384" -d="M119 64v0h-55v171h55v-171zM93 261v0v0c-18 0 -29 13 -29 29c0 17 12 30 30 30s29 -13 29 -30c0 -16 -12 -29 -30 -29zM257 239c36 0 63 -24 63 -75v-100h-55v94c0 22 -8 37 -28 37c-15 0 -24 -10 -28 -20c-2 -4 -2 -9 -2 -14v-97h-55v171h55v-24c8 11 21 28 50 28z -M353 384c18 0 31 -13 31 -30v-321c0 -17 -13 -33 -31 -33h-320c-18 0 -33 16 -33 33v321c0 17 15 30 33 30h320zM350 32c1 0 2 1 2 2v316c0 1 -1 2 -2 2h-316s-2 -1 -2 -2v-315s1 -3 3 -3h315z" /> - <glyph glyph-name="ion-social-linkedin" unicode="" horiz-adv-x="384" -d="M353 384c18 0 31 -13 31 -30v-321c0 -17 -13 -33 -31 -33h-320c-18 0 -33 16 -33 33v321c0 17 15 30 33 30h320zM119 64v171h-55v-171h55zM93 261c18 0 30 13 30 29c0 17 -11 30 -29 30s-30 -13 -30 -30c0 -16 11 -29 29 -29v0zM320 64v100c0 51 -27 75 -63 75 -c-29 0 -42 -17 -50 -28v24h-55v-171h55v97c0 5 0 10 2 14c4 10 13 20 28 20c20 0 28 -15 28 -37v-94h55z" /> - <glyph glyph-name="ion-social-markdown" unicode="" -d="M416 352c18 0 32 -14 32 -32v-256c0 -18 -14 -32 -32 -32h-384c-18 0 -32 14 -32 32v256c0 18 14 32 32 32h384zM252 96v0v192h-56l-42 -68l-42 68h-56v-192h56v96l42 -54l42 54v-96h56zM336 96v0l70 96h-42v96h-56v-96h-42z" /> - <glyph glyph-name="ion-social-nodejs" unicode="" horiz-adv-x="384" -d="M192 -32c-6 0 -12 2 -17 5l-53 32c-8 5 -4 6 -1 7c11 4 14 5 25 12c1 1 3 1 4 0l39 -23c1 -1 4 -1 5 0l156 92c1 1 2 2 2 4v187c0 2 0 4 -2 5l-156 94c-1 1 -3 1 -4 0l-155 -94c-2 -1 -3 -3 -3 -5v-187c0 -2 0 -3 2 -4l40 -24c24 -12 38 1 38 15v183c0 3 2 5 5 5h22 -c3 0 5 -2 5 -5v-183c0 -33 -19 -52 -49 -52c-9 0 -17 1 -37 11l-41 24c-10 6 -17 18 -17 30v190c0 12 7 24 17 30l158 95c10 6 24 6 34 0l158 -95c10 -6 17 -18 17 -30v-190c0 -12 -7 -24 -17 -30l-158 -94c-5 -3 -11 -5 -17 -5v0zM241 96c-65 0 -84 31 -84 59c0 3 1 5 4 5 -h21c2 0 5 -2 5 -4c3 -22 16 -31 54 -31c33 0 47 11 47 29c0 11 -3 18 -55 23c-43 4 -71 15 -71 51c0 33 28 52 73 52c46 0 76 -14 79 -51c0 -1 -1 -2 -2 -3s-2 -2 -3 -2h-20c-2 0 -5 2 -5 4c-4 17 -16 23 -49 23c-36 0 -41 -12 -41 -22c0 -12 5 -16 54 -23s72 -16 72 -51 -c0 -36 -29 -59 -79 -59v0v0z" /> - <glyph glyph-name="ion-social-octocat" unicode="" -d="M146 161c9 0 16 -4 22 -13s10 -20 10 -32s-4 -22 -10 -31s-14 -13 -22 -13c-9 0 -17 4 -23 13s-9 19 -9 31s3 24 9 32c6 9 14 13 23 13zM303 161c9 0 16 -4 22 -13s9 -20 9 -32s-3 -22 -9 -31s-13 -13 -22 -13s-18 4 -24 13s-9 19 -9 31s3 24 9 32c6 9 15 13 24 13z -M414 276c24 -27 34 -66 34 -96c0 -24 -1 -46 -6 -65c-6 -19 -13 -35 -21 -47c-9 -12 -19 -23 -32 -32s-24 -17 -34 -21s-22 -8 -36 -10c-13 -2 -24 -4 -31 -4c0 0 -28 -1 -64 -1s-64 1 -64 1c-7 0 -18 2 -31 4c-14 2 -26 6 -36 10s-22 12 -34 21c-13 9 -23 20 -32 32 -c-8 12 -15 28 -21 47c-5 19 -6 41 -6 65c0 31 10 70 34 96c0 0 -2 14 0 39s7 48 16 69c30 -3 67 -20 112 -51c15 4 36 6 62 6c28 0 48 -2 62 -6c20 14 39 24 58 33c19 8 33 13 41 15s13 3 13 3c9 -21 14 -44 16 -69s0 -39 0 -39v0zM348 42c28 13 42 40 42 81 -c0 24 -8 43 -26 59c-9 9 -20 13 -32 15s-31 1 -56 -1s-40 -4 -52 -4s-25 2 -42 3s-30 3 -39 3c-10 0 -20 1 -31 -2s-21 -7 -28 -14c-17 -15 -25 -35 -25 -59c0 -41 13 -68 41 -81c27 -13 69 -18 123 -18h2c54 0 95 5 123 18z" /> - <glyph glyph-name="ion-social-pinterest-outline" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136c14 -14 31 -25 48 -34c1 6 2 10 3 16c4 18 29 122 29 122 -s-8 15 -8 36c0 33 20 58 44 58c20 0 30 -16 30 -34c0 -20 -13 -51 -20 -79c-6 -24 12 -43 35 -43c42 0 71 54 71 119c0 49 -33 85 -93 85c-68 0 -110 -50 -110 -107c0 -20 6 -33 15 -44c4 -5 5 -6 3 -12c-1 -4 -4 -14 -5 -18c-2 -6 -6 -8 -11 -6c-31 13 -46 48 -46 86 -c0 64 54 140 160 140c86 0 142 -63 142 -129c0 -88 -49 -153 -121 -153c-24 0 -47 13 -55 28c0 0 -12 -52 -15 -62c-2 -6 -4 -13 -7 -19c15 -4 31 -6 47 -6c51 0 100 20 136 56z" /> - <glyph glyph-name="ion-social-pinterest" unicode="" -d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224c-22 0 -44 3 -64 9c8 14 18 31 23 48c3 10 16 62 16 62c8 -15 30 -28 54 -28c72 0 121 65 121 153c0 66 -56 129 -142 129c-106 0 -160 -76 -160 -140c0 -39 15 -73 46 -86c5 -2 10 0 12 6c1 4 3 14 4 18 -c2 6 1 7 -3 12c-9 11 -15 24 -15 44c0 57 42 107 110 107c60 0 94 -36 94 -85c0 -65 -29 -119 -71 -119c-24 0 -42 19 -36 43c7 28 20 59 20 79c0 18 -10 34 -30 34c-24 0 -43 -25 -43 -58c0 -21 7 -36 7 -36s-25 -104 -29 -122c-4 -17 -5 -35 -4 -51 -c-79 35 -134 113 -134 205c0 124 100 224 224 224z" /> - <glyph glyph-name="ion-social-python" unicode="" horiz-adv-x="384" -d="M129 199c-29 -5 -49 -30 -49 -57v-43v-3h-15c-29 0 -54 29 -62 69c-2 9 -3 17 -3 27v1c0 53 29 95 65 95h127v16h-96v29c0 26 7 40 46 47c13 2 29 4 45 4s39 -1 55 -4c25 -4 46 -22 46 -47v-57v-31c0 -21 -14 -38 -33 -43c-4 -1 -8 -2 -13 -2h-104h3c-4 0 -8 0 -12 -1z -M140 321c10 0 17 7 17 17s-7 18 -17 18s-18 -8 -18 -18s8 -17 18 -17zM380 225c3 -10 4 -21 4 -33c0 -16 -3 -30 -7 -43c-11 -31 -33 -53 -58 -53h-127v-16h96v-26c0 -26 -23 -40 -46 -47c-35 -10 -68 -9 -97 0c-25 7 -49 22 -49 47v54v33c0 21 14 36 33 41c4 1 8 2 13 2 -h104c3 0 6 1 9 1c27 4 49 28 49 62v38v3h15c28 0 52 -26 61 -63zM244 65c-10 0 -18 -7 -18 -17s8 -18 18 -18s17 8 17 18s-7 17 -17 17z" /> - <glyph glyph-name="ion-social-reddit-outline" unicode="" horiz-adv-x="449" -d="M259 160c0 21 11 31 32 31s32 -10 32 -31s-11 -32 -32 -32s-32 11 -32 32zM127 160c0 21 11 31 32 31s32 -10 32 -31s-11 -32 -32 -32s-32 11 -32 32zM449 197c0 -20 -9 -36 -27 -45c1 -5 1 -9 1 -14c0 -38 -19 -71 -58 -98s-85 -40 -140 -40s-102 13 -141 40 -s-58 59 -58 97c0 5 0 10 1 15c-18 9 -27 24 -27 45c0 14 5 25 15 35s21 15 35 15c13 0 24 -4 33 -13c36 25 79 39 129 41h7l29 98l86 -17c8 19 21 28 41 28c12 0 22 -4 31 -13s13 -20 13 -32s-4 -23 -13 -32s-19 -13 -31 -13s-23 4 -32 13s-13 19 -13 31l-69 14l-24 -77 -c50 -2 94 -16 129 -41c10 9 21 13 34 13c9 0 16 -3 24 -7s14 -10 18 -18s7 -16 7 -25zM375 366c-4 0 -8 -1 -11 -2s-6 -4 -8 -6s-5 -6 -6 -9s-2 -6 -2 -10c0 -8 3 -14 8 -19s12 -8 19 -8c5 0 9 1 13 3s8 6 10 10s4 9 4 14c0 8 -3 14 -8 19s-12 8 -19 8zM18 197 -c0 -11 5 -20 14 -27c7 19 19 37 37 53c-6 4 -12 6 -19 6c-3 0 -7 0 -10 -1s-6 -3 -9 -5s-5 -4 -7 -7s-4 -6 -5 -9s-1 -6 -1 -10zM355 55c34 23 50 51 50 83v9c-1 6 -3 12 -5 18c-6 16 -15 30 -30 43c-5 4 -10 9 -15 12v0c-36 25 -79 37 -130 37s-95 -12 -131 -37v0 -c-5 -3 -10 -8 -15 -12c-15 -13 -24 -27 -30 -43c-2 -6 -4 -12 -5 -18v-9c0 -32 16 -60 50 -83c36 -25 80 -37 131 -37s94 12 130 37zM417 170c9 6 14 16 14 27c0 9 -3 17 -9 23s-13 9 -22 9c-7 0 -14 -2 -20 -6c18 -16 30 -34 37 -53zM289 90l13 -12 -c-20 -20 -45 -30 -77 -30s-58 10 -78 30l13 12c16 -16 38 -24 65 -24s48 8 64 24z" /> - <glyph glyph-name="ion-social-reddit" unicode="" horiz-adv-x="449" -d="M449 197c0 -20 -11 -37 -27 -45c1 -5 1 -9 1 -14c0 -76 -89 -138 -199 -138s-198 61 -198 137c0 5 0 10 1 15c-16 8 -27 25 -27 45c0 28 23 50 50 50c13 0 24 -5 33 -13c33 23 79 39 129 41h2l31 103l90 -18c8 14 22 24 39 24v0h1c25 0 44 -20 44 -45s-19 -45 -44 -45h-1 -v0c-23 0 -42 17 -44 40l-67 14l-22 -74c49 -3 93 -17 125 -40c9 8 21 13 34 13c27 0 49 -22 49 -50zM34 177c5 15 15 29 29 41c-4 3 -9 5 -15 5c-14 0 -25 -11 -25 -25c0 -9 4 -17 11 -21zM358 339c0 -9 7 -17 16 -17s17 8 17 17s-8 17 -17 17s-16 -8 -16 -17zM127 160 -c0 -18 14 -32 32 -32s32 14 32 32s-14 31 -32 31s-32 -13 -32 -31zM224 48c48 0 77 29 78 30l-13 12s-25 -24 -65 -24c-41 0 -64 24 -64 24l-13 -12c1 -1 29 -30 77 -30zM291 128c18 0 32 14 32 32s-14 31 -32 31s-32 -13 -32 -31s14 -32 32 -32zM415 176c7 5 11 13 11 22 -c0 14 -11 25 -25 25c-6 0 -11 -2 -15 -5c14 -12 24 -27 29 -42z" /> - <glyph glyph-name="ion-social-rss-outline" unicode="" horiz-adv-x="384" -d="M56 112c31 0 56 -25 56 -56s-25 -56 -56 -56s-56 25 -56 56s25 56 56 56zM56 16c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40zM0 256c140 0 256 -116 256 -256h-80c0 48 -14 94 -48 128s-80 48 -128 48v80zM240 16c-2 26 -8 52 -19 77 -c-12 28 -30 54 -52 76s-48 40 -76 52c-25 10 -51 16 -77 18v-47c50 -3 92 -22 123 -53s50 -73 53 -123h48zM0 384c212 0 384 -172 384 -384h-80c0 171 -133 304 -304 304v80zM227 228c56 -56 89 -131 93 -212h48c-8 190 -162 344 -352 352v-48c81 -4 155 -36 211 -92z" /> - <glyph glyph-name="ion-social-rss" unicode="" horiz-adv-x="384" -d="M56 112c31 0 56 -25 56 -56s-25 -56 -56 -56s-56 25 -56 56s25 56 56 56zM0 256c140 0 256 -116 256 -256h-80c0 48 -14 94 -48 128s-80 48 -128 48v80zM0 384c212 0 384 -172 384 -384h-80c0 171 -133 304 -304 304v80z" /> - <glyph glyph-name="ion-social-sass" unicode="" horiz-adv-x="512" -d="M512 119v-8c-1 -9 -7 -17 -15 -22s-12 -4 -13 -3s1 3 4 5c13 8 17 20 10 33c-5 10 -15 16 -26 20c-24 8 -48 7 -72 0c4 -12 7 -23 -2 -34c-10 -12 -23 -19 -39 -22c-7 -2 -14 2 -15 9c-3 19 17 36 30 47c-7 11 -11 24 -14 37c-15 -17 -31 -40 -26 -61 -c3 -14 -1 -27 -14 -36s-30 -14 -46 -11c-4 1 -6 5 -5 8c2 14 25 32 35 43c2 2 3 4 1 7c-6 12 -10 23 -14 36c-13 -29 -30 -80 -57 -98c-9 -6 -17 -4 -21 5c-3 8 -2 20 -1 29c-6 -13 -11 -27 -20 -38c-7 -8 -24 -7 -30 1c-16 21 -13 50 -5 73l-29 -15c7 -16 8 -32 4 -49 -c-5 -19 -17 -35 -35 -46c-19 -12 -64 -24 -77 4c-7 16 -4 30 6 44c17 24 48 37 74 50c-32 23 -80 42 -96 80c-15 35 17 68 43 89c59 48 166 95 244 59c15 -7 36 -24 31 -52c-4 -24 -13 -39 -28 -54c-32 -32 -152 -77 -176 -15c-1 1 -1 4 1 4c2 -1 20 -15 43 -16 -c17 -1 36 3 52 8c33 11 71 33 80 67c4 13 -2 28 -15 34c-49 24 -116 -4 -159 -26c-33 -17 -84 -45 -82 -87c1 -37 56 -60 81 -82c15 7 42 15 52 27c11 13 26 25 44 26c8 0 14 -3 16 -10c2 -6 1 -11 0 -19c5 4 11 4 15 -1c12 -14 -22 -50 -10 -66c14 14 21 42 30 59 -c4 8 17 51 26 53c7 2 18 4 25 0c2 -1 3 -3 2 -5c-7 -19 -7 -33 3 -52c14 20 29 43 34 67c1 2 3 3 5 4c7 2 18 3 25 0c3 -1 3 -2 2 -5c-7 -22 -6 -38 6 -58c31 11 69 15 97 -5c-3 2 -7 5 0 0c5 -4 3 -2 0 0c12 -8 19 -18 21 -32zM113 94v0c1 7 -1 13 -3 20 -c-24 -8 -66 -35 -64 -62c1 -10 8 -13 17 -12s19 7 27 13c14 11 22 24 23 41zM216 166c1 3 -2 5 -5 4c-29 -8 -43 -57 -33 -81c1 -3 4 -3 6 -1c17 16 28 56 32 78zM286 84c8 -3 27 17 26 27c-8 -9 -18 -18 -26 -27zM367 102c11 6 16 19 12 30c-8 -6 -21 -19 -20 -31 -c0 -2 6 0 8 1z" /> - <glyph glyph-name="ion-social-skype-outline" unicode="" horiz-adv-x="384" -d="M106 352c-41 0 -74 -33 -74 -73c0 -13 4 -25 10 -36l6 -11l-2 -12c-2 -10 -3 -20 -3 -30c0 -40 16 -77 44 -105s67 -44 107 -44c9 0 19 1 28 3l11 2l9 -5c11 -6 24 -9 36 -9c41 0 74 33 74 73c0 11 -3 22 -8 32l-5 10l3 11c2 10 3 21 3 32c0 40 -16 77 -44 105 -s-67 43 -107 43c-9 0 -18 0 -26 -2l-12 -2l-10 7c-12 7 -26 11 -40 11zM106 384v0c21 0 40 -6 56 -16c10 2 21 2 32 2c101 0 183 -80 183 -180c0 -13 -1 -27 -4 -39c7 -14 11 -29 11 -46c0 -58 -47 -105 -106 -105c-18 0 -35 4 -50 12c-11 -2 -22 -3 -34 -3 -c-101 0 -183 81 -183 181c0 12 2 24 4 36c-9 16 -15 34 -15 53c0 58 47 105 106 105zM288 104c-8 -12 -21 -21 -37 -28s-36 -10 -58 -10c-26 0 -48 5 -65 14c-12 7 -22 15 -30 26s-12 22 -12 33c0 7 3 12 8 17s11 7 19 7c6 0 12 -2 16 -6s7 -8 10 -15s7 -13 11 -18 -s8 -9 15 -12s16 -5 27 -5c15 0 28 4 37 10s13 13 13 22c0 7 -2 13 -7 17c-5 5 -11 9 -19 11c-8 3 -20 5 -34 8c-19 4 -35 9 -48 14c-13 6 -24 13 -32 23s-11 22 -11 36s4 25 12 36c8 10 20 19 36 25c15 6 34 8 54 8c16 0 30 -1 42 -5s23 -9 31 -15s14 -13 18 -20 -s5 -14 5 -21c0 -6 -2 -12 -7 -17s-11 -8 -19 -8c-7 0 -12 2 -16 5c-3 3 -7 7 -11 14c-5 8 -10 15 -16 20s-17 8 -31 8c-13 0 -23 -3 -31 -8s-12 -11 -12 -18c0 -4 2 -7 4 -10c3 -3 6 -6 11 -8s10 -5 15 -6s13 -3 25 -6c15 -3 28 -6 40 -10s23 -8 32 -14s15 -13 20 -22 -s8 -20 8 -32c0 -15 -5 -28 -13 -40z" /> - <glyph glyph-name="ion-social-skype" unicode="" horiz-adv-x="384" -d="M373 151c7 -14 11 -29 11 -46c0 -58 -47 -105 -106 -105c-18 0 -35 4 -50 12c-11 -2 -22 -3 -34 -3c-101 0 -183 81 -183 181c0 12 2 24 4 36c-9 16 -15 34 -15 53c0 58 47 105 106 105c21 0 41 -6 57 -16c10 2 20 2 31 2c101 0 183 -80 183 -180c0 -13 -1 -27 -4 -39z -M288 104c9 12 12 25 12 40c0 12 -2 23 -7 32s-12 16 -21 22s-19 10 -31 14s-26 7 -41 10c-12 3 -20 5 -25 6s-10 4 -15 6s-7 5 -10 8c-2 3 -4 6 -4 10c0 7 3 13 11 18s19 7 32 7c14 0 25 -2 31 -7s11 -12 16 -20c4 -7 8 -11 11 -14c4 -3 9 -5 16 -5c8 0 13 3 18 8s8 11 8 17 -c0 7 -2 14 -6 21s-10 14 -18 20s-18 11 -30 15s-27 5 -43 5c-20 0 -38 -2 -53 -8c-16 -6 -28 -15 -36 -25c-8 -11 -12 -22 -12 -36s3 -26 11 -36s19 -17 32 -23c13 -5 29 -10 48 -14c14 -3 26 -5 34 -8c8 -2 14 -6 19 -11c5 -4 7 -10 7 -17c0 -9 -4 -17 -13 -23 -s-22 -9 -37 -9c-11 0 -20 2 -27 5s-11 6 -15 11s-8 12 -11 19s-6 11 -10 15s-10 6 -16 6c-8 0 -14 -2 -19 -7s-8 -10 -8 -17c0 -11 4 -22 12 -33s18 -19 30 -26c17 -9 39 -14 65 -14c22 0 42 3 58 10s29 16 37 28z" /> - <glyph glyph-name="ion-social-snapchat-outline" unicode="" horiz-adv-x="480" -d="M240 400v0v0c-71 0 -128 -54 -118 -128c2 -15 3 -32 4 -45c0 0 -2 -5 -12 -5c-6 0 -15 2 -28 7c-2 1 -4 1 -6 1c-8 0 -13 -6 -14 -12c0 -5 4 -11 8 -13c14 -7 47 -10 47 -33s-23 -47 -41 -64s-64 -21 -64 -21s0 -21 32 -29s32 -5 33 -13c2 -15 1 -22 11 -22c2 0 4 1 6 1 -c8 1 20 3 32 3c11 0 23 -2 34 -9c23 -15 41 -34 76 -34s53 19 76 34c11 7 24 9 35 9c12 0 23 -2 31 -3c2 0 4 -1 6 -1c10 0 9 7 11 22c1 8 1 5 33 13s32 29 32 29s-46 4 -64 21s-41 41 -41 64s33 26 47 33c4 2 9 8 9 13c-1 6 -6 12 -14 12c-2 0 -5 0 -7 -1 -c-13 -5 -21 -6 -27 -6c-10 0 -13 4 -13 4c1 13 2 30 4 45c10 74 -47 128 -118 128zM240 416v0c41 0 80 -16 105 -45c24 -28 34 -63 29 -101c-1 -11 -2 -22 -3 -31c4 1 10 2 18 5c4 1 8 2 12 2c16 0 29 -12 30 -27c1 -13 -9 -25 -18 -29c-4 -2 -9 -3 -14 -5 -c-7 -2 -14 -5 -19 -8c-4 -3 -5 -4 -5 -5c0 -16 20 -37 36 -52c11 -10 39 -16 54 -17l15 -1v-14c0 -2 0 -11 -6 -21c-5 -8 -16 -19 -38 -24c-6 -1 -11 -3 -15 -4c-2 -1 -5 -1 -7 -1v-1c-1 -7 -1 -13 -4 -18c-2 -5 -9 -12 -22 -12c-2 0 -6 0 -9 1c-2 0 -3 1 -5 1 -c-7 1 -15 2 -23 2c-10 0 -19 -2 -26 -6c-4 -3 -9 -7 -14 -10c-18 -13 -38 -27 -71 -27s-53 14 -71 27c-5 3 -9 7 -14 10c-7 4 -15 6 -25 6c-8 0 -17 -1 -24 -2c-2 0 -3 -1 -5 -1c-3 -1 -7 -1 -9 -1c-13 0 -20 7 -22 12c-3 5 -3 11 -4 18v1c-2 0 -4 0 -6 1c-4 1 -10 3 -16 4 -c-22 5 -33 16 -38 24c-6 10 -6 18 -6 20v15l15 1c16 1 44 7 54 17c29 27 36 43 36 52c0 1 0 2 -4 5c-5 3 -13 6 -20 8c-5 2 -10 3 -14 5c-9 4 -18 16 -17 29c1 15 14 27 30 27c4 0 8 0 12 -2c8 -3 13 -4 17 -5c-1 9 -2 19 -3 30c-5 38 5 74 29 102c25 29 64 45 105 45v0z -M240 219c-21 0 -41 8 -56 23c-3 3 -3 9 0 12s9 3 12 0c12 -12 27 -19 44 -19c16 0 32 7 44 19c3 3 9 3 12 0s3 -9 0 -12c-15 -15 -35 -23 -56 -23zM176 296c0 16 5 24 16 24s16 -8 16 -24s-5 -24 -16 -24s-16 8 -16 24zM272 296c0 16 5 24 16 24s16 -8 16 -24 -s-5 -24 -16 -24s-16 8 -16 24z" /> - <glyph glyph-name="ion-social-snapchat" unicode="" horiz-adv-x="480" -d="M480 88c0 -2 0 -11 -6 -21c-5 -8 -16 -19 -38 -24c-6 -1 -11 -3 -15 -4c-2 -1 -5 -1 -7 -1v-1c-1 -7 -1 -13 -4 -18c-2 -5 -9 -12 -22 -12c-2 0 -6 0 -9 1c-2 0 -3 1 -5 1c-7 1 -15 2 -23 2c-10 0 -19 -2 -26 -6c-4 -3 -9 -7 -14 -10c-18 -13 -38 -27 -71 -27 -s-53 14 -71 27c-5 3 -9 7 -14 10c-7 4 -15 6 -25 6c-8 0 -17 -1 -24 -2c-2 0 -3 -1 -5 -1c-3 -1 -7 -1 -9 -1c-13 0 -20 7 -22 12c-3 5 -3 11 -4 18v1c-2 0 -4 0 -6 1c-4 1 -10 3 -16 4c-22 5 -33 16 -38 24c-6 10 -6 18 -6 20v15l15 1c16 1 44 7 54 17c29 27 36 43 36 52 -c0 1 0 2 -4 5c-5 3 -13 6 -20 8c-5 2 -10 3 -14 5c-9 4 -18 16 -17 29c1 15 14 27 30 27c4 0 8 0 12 -2c8 -3 13 -4 17 -5c-1 9 -2 19 -3 30c-5 38 5 74 29 102c25 29 64 45 105 45v0c41 0 80 -16 105 -45c24 -28 34 -63 29 -101c-1 -11 -2 -22 -3 -31c4 1 10 2 18 5 -c4 1 8 2 12 2c16 0 29 -12 30 -27c1 -13 -9 -25 -18 -29c-4 -2 -9 -3 -14 -5c-7 -2 -14 -5 -19 -8c-4 -3 -5 -4 -5 -5c0 -16 20 -37 36 -52c11 -10 39 -16 54 -17l15 -1v-14zM192 320c-9 0 -16 -11 -16 -24s7 -24 16 -24s16 11 16 24s-7 24 -16 24zM296 242c3 3 3 9 0 12 -s-9 3 -12 0c-12 -12 -28 -19 -44 -19c-17 0 -32 7 -44 19c-3 3 -9 3 -12 0s-3 -9 0 -12c15 -15 35 -23 56 -23s41 8 56 23zM288 272c9 0 16 11 16 24s-7 24 -16 24s-16 -11 -16 -24s7 -24 16 -24z" /> - <glyph glyph-name="ion-social-tumblr-outline" unicode="" horiz-adv-x="256" -d="M193 52c21 0 42 6 63 20v-65c-18 -8 -34 -15 -48 -18s-28 -5 -45 -5c-19 0 -35 2 -50 7c-14 5 -28 12 -38 21s-17 18 -21 28s-6 25 -6 44v140h-48v58c16 5 30 14 42 24s19 21 26 35s11 37 14 59h62v-112h96v-64h-96v-101c0 -24 1 -40 4 -47c2 -7 7 -12 14 -16 -c9 -6 19 -8 31 -8zM240 17v29c-15 -6 -31 -10 -47 -10c-15 0 -28 3 -40 10c-10 6 -17 15 -21 25c-2 6 -4 17 -4 52v117h96v32h-96v112h-32c-2 -16 -7 -36 -14 -50c-8 -16 -17 -29 -30 -40c-11 -9 -23 -17 -36 -23v-31h48v-156c0 -21 2 -32 4 -38c3 -8 10 -15 18 -22 -c9 -8 19 -14 31 -18c13 -4 29 -6 46 -6c16 0 28 2 41 5c11 2 23 6 36 12z" /> - <glyph glyph-name="ion-social-tumblr" unicode="" horiz-adv-x="256" -d="M193 52c21 0 42 6 63 20v-65c-18 -8 -34 -15 -48 -18s-28 -5 -45 -5c-19 0 -35 2 -50 7c-14 5 -28 12 -38 21s-17 18 -21 28s-6 25 -6 44v140h-48v58c16 5 30 14 42 24s19 21 26 35s11 37 14 59h62v-112h96v-64h-96v-101c0 -24 1 -40 4 -47c2 -7 7 -12 14 -16 -c9 -6 19 -8 31 -8z" /> - <glyph glyph-name="ion-social-tux" unicode="" horiz-adv-x="383" -d="M189 347c2 2 -1 -1 0 0c2 2 4 4 6 5c-3 -2 -5 -4 -7 -8c0 1 0 2 1 3zM361 52c7 -4 23 -11 21 -22c-2 -10 -17 -15 -24 -19c-15 -8 -28 -14 -41 -25c-9 -8 -17 -15 -29 -17c-11 -2 -25 -1 -33 8c-5 5 -7 11 -15 12c-25 5 -54 4 -79 0c-13 -2 -21 -11 -32 -17 -c-10 -5 -20 -5 -30 -1c-13 5 -27 10 -41 13s-29 5 -43 9c-31 8 -5 30 -11 50c-3 12 -10 29 8 30c9 1 27 -1 31 11c2 7 -2 15 2 22s-1 17 1 25c4 18 19 32 25 49c5 14 8 25 18 37c9 11 22 22 29 34c10 18 9 35 8 55c-1 17 -1 33 -2 50c0 33 20 60 58 60h14 -c38 0 63 -32 64 -69c0 -19 -5 -38 5 -67c15 -27 36 -48 52 -73c10 -16 16 -31 20 -49c3 -14 9 -31 7 -45c-1 -6 -2 -9 -4 -11c3 -1 7 -2 9 -5c3 -4 2 -11 0 -26c-1 -8 5 -15 12 -19zM137 -3c2 20 -15 39 -25 56c-10 16 -21 43 -39 52c-8 4 -19 5 -23 -5c-2 -7 0 -19 -2 -22 -c-4 -9 -14 -10 -23 -11c-6 0 -17 0 -17 -8c1 -10 10 -20 7 -30c-2 -7 -8 -12 -8 -19c0 -14 38 -15 47 -17c19 -4 37 -14 57 -16c12 -1 25 7 26 20zM253 62c-2 10 2 -10 0 0s-5 28 1 35c4 5 10 6 17 5c0 4 1 9 3 12c8 13 29 8 39 0l-1 2c-3 4 -8 9 -13 10c0 0 4 12 2 34 -c-4 40 -33 62 -33 62c27 -30 27 -58 27 -72c0 -6 -1 -18 -4 -24c-4 -1 -7 -2 -11 -4c-10 -5 -8 2 -8 10c0 18 -2 36 -7 54c-3 9 -7 17 -13 24c-4 5 -4 9 -5 15c-3 12 -9 22 -16 32c-7 9 -7 17 -5 28c1 7 2 14 -6 17c-6 2 -26 5 -27 14c-1 6 -1 16 5 20c16 14 30 -11 17 -24 -c-3 -3 7 -4 8 -4c4 1 4 7 5 10c1 4 1 9 1 13c0 17 -18 32 -34 21c-6 -4 -9 -11 -10 -17c0 -2 -1 -20 0 -20c-4 0 -7 5 -11 5c-3 0 -7 0 -10 -1c0 0 2 14 -2 22c-4 9 -18 16 -24 4s-3 -25 0 -31s4 -6 4 -6c2 1 5 4 5 4s-6 3 -7 11c-1 9 3 14 7 15s10 -2 12 -8s0 -13 0 -13 -c-7 -6 -30 -18 -22 -28c14 -18 33 -15 52 -9c8 3 18 5 24 12c3 3 11 2 8 -4c-2 -5 -18 -7 -22 -9c-9 -4 -18 -8 -28 -10c-6 -1 -13 -5 -28 9c7 -6 8 -16 17 -20c13 -6 33 9 44 15c1 1 16 5 14 0c-1 -4 -11 -7 -15 -9c-11 -6 -23 -21 -36 -22c-8 -1 -21 16 -25 22 -c-1 1 -5 9 -6 4c-1 -8 2 -14 -3 -21c-6 -9 -11 -18 -13 -29c-1 -6 0 -11 -3 -16c-11 -15 -17 -33 -19 -51c0 -4 3 -43 -5 -41c-18 5 -17 33 -14 47c-3 -12 -8 -30 2 -44c12 -15 99 -55 53 -80c7 -14 14 -25 12 -41c8 7 2 20 -1 28c0 0 17 -12 38 -10c17 2 32 7 46 16 -c6 4 11 9 16 14c1 2 4 6 6 7l1 -11c2 -17 -12 -27 -10 -34c4 8 11 14 13 24c3 12 0 24 -2 36zM155 323v0v-3c2 0 2 5 1 8c-1 4 -3 6 -4 6h-2c3 -2 5 -6 5 -11zM210 335c3 -2 0 0 0 0c3 -2 5 -5 5 -10v-3c2 0 3 4 2 7s-3 6 -5 6h-2zM347 15c24 11 -24 -10 0 0 -c24 11 35 17 20 26c-17 10 -26 13 -26 29c0 5 4 16 2 22c-1 4 -6 5 -9 5c-10 -10 -17 -25 -34 -25c-14 0 -25 11 -28 24c-4 2 -10 1 -13 -4c-6 -12 1 -29 3 -41c2 -18 -4 -35 -2 -53c2 -21 26 -22 40 -13c16 10 29 22 47 30z" /> - <glyph glyph-name="ion-social-twitch-outline" unicode="" horiz-adv-x="416" -d="M32 416h384v-272l-112 -112h-80l-64 -64h-64v64h-96v304zM368 160v208h-304v-272h80v-64l64 64h96zM272 176v129h48v-129h-48zM160 176v129h48v-129h-48z" /> - <glyph glyph-name="ion-social-twitch" unicode="" horiz-adv-x="416" -d="M32 416h384v-272l-112 -112h-80l-64 -64h-64v64h-96v304zM208 176v129h-48v-129h48zM320 176v129h-48v-129h48z" /> - <glyph glyph-name="ion-social-twitter-outline" unicode="" horiz-adv-x="472" -d="M472 338c-13 -20 -29 -36 -48 -50v-12c0 -128 -98 -276 -276 -276c-55 0 -105 16 -148 44c8 -1 15 -2 23 -2c45 0 87 16 120 42c-42 1 -78 29 -90 67c6 -1 12 -2 18 -2c9 0 18 2 26 4c-44 9 -78 48 -78 95v1c13 -7 28 -12 44 -12c-26 17 -43 47 -43 81c0 18 5 34 13 48 -c48 -59 119 -97 199 -101c-2 7 -2 14 -2 22c0 54 43 97 97 97c28 0 52 -12 70 -31c22 4 43 13 62 24c-7 -23 -23 -42 -43 -54c20 2 39 7 56 15zM414 301c3 2 8 6 11 8c-2 0 -11 -2 -19 -1s-21 5 -21 5s14 13 18 17l11 11c-4 -1 -10 -2 -14 -3l-8 -2l-6 6 -c-15 16 -37 26 -59 26c-45 0 -81 -37 -81 -81c0 -6 1 -12 2 -18l5 -21l-22 1c-42 2 -81 13 -118 32c-28 14 -53 34 -75 56c-1 -6 -2 -13 -2 -19c0 -27 14 -53 36 -68c0 0 33 -23 46 -29c-24 -2 -56 0 -56 0c-8 0 -16 1 -24 3c8 -28 32 -50 62 -56l61 -10l-61 -21 -c-7 -2 -14 -3 -21 -3c15 -20 38 -34 64 -34l45 -1l-35 -28c-18 -14 -38 -25 -60 -33c-10 -3 -19 -6 -29 -8c27 -9 55 -14 84 -14c40 0 78 8 112 24c31 14 58 34 81 60c22 24 38 53 50 84c11 30 17 62 17 92v12l-1 8z" /> - <glyph glyph-name="ion-social-twitter" unicode="" horiz-adv-x="472" -d="M472 338c-13 -20 -29 -36 -48 -50v-12c0 -128 -98 -276 -276 -276c-55 0 -105 16 -148 44c8 -1 15 -2 23 -2c45 0 87 16 120 42c-42 1 -78 29 -90 67c6 -1 12 -2 18 -2c9 0 18 2 26 4c-44 9 -78 48 -78 95v1c13 -7 28 -12 44 -12c-26 17 -43 47 -43 81c0 18 5 34 13 48 -c48 -59 119 -97 199 -101c-2 7 -2 14 -2 22c0 54 43 97 97 97c28 0 52 -12 70 -31c22 4 43 13 62 24c-7 -23 -23 -42 -43 -54c20 2 39 7 56 15z" /> - <glyph glyph-name="ion-social-usd-outline" unicode="" horiz-adv-x="320" -d="M125 345c11 2 19 3 19 3v-131l-22 6c-15 5 -27 11 -36 19c-12 10 -19 25 -19 43c0 13 4 24 11 33c6 8 13 14 22 19c7 4 17 6 25 8zM128 238v92c-7 -2 -15 -4 -21 -7c-7 -4 -12 -9 -17 -15s-7 -14 -7 -23c0 -13 4 -24 13 -31c8 -7 20 -12 32 -16zM252 151 -c10 -10 15 -24 15 -42c0 -9 -1 -18 -5 -27s-11 -17 -20 -24c-8 -6 -18 -11 -31 -15c-6 -2 -11 -3 -17 -4s-18 -1 -18 -1v145l20 -5c10 -3 19 -6 28 -9c10 -4 20 -10 28 -18zM247 89c3 7 4 13 4 20c0 14 -3 24 -10 31s-15 11 -23 14s-16 5 -26 8v-107c6 1 10 2 14 3 -c11 3 20 8 27 13s11 11 14 18zM315 145c3 -10 5 -19 5 -29c0 -21 -5 -38 -14 -53s-20 -26 -35 -35s-31 -17 -50 -21c-10 -2 -19 -3 -29 -4v-35h-64v35c-9 1 -19 4 -28 6c-20 5 -36 12 -51 23s-26 24 -35 41c-8 16 -13 34 -14 55h69c0 -12 2 -24 7 -33c5 -10 12 -17 21 -23 -s20 -11 31 -14v120c-8 2 -18 4 -27 6c-17 4 -30 9 -41 16s-20 15 -27 23s-11 17 -14 26s-4 18 -4 28c0 18 4 34 12 48s19 25 33 34s29 16 46 20c7 2 15 3 22 4v33h64v-33c9 -1 16 -4 24 -6c18 -5 34 -12 48 -22s25 -22 33 -37c7 -13 11 -28 12 -46h-69c-3 21 -12 37 -26 46 -c-7 4 -13 8 -22 10v-106c9 -2 16 -4 25 -6c12 -3 22 -6 27 -7c13 -4 23 -9 33 -15c10 -7 18 -14 24 -22s11 -17 14 -27zM293 72c7 12 11 27 11 44c0 8 -1 16 -4 24s-7 15 -12 22s-12 13 -20 19c-8 5 -18 10 -29 13c-5 1 -13 3 -24 6h-1l-4 1c-7 2 -13 4 -21 6l-13 3v137 -s9 -1 19 -4s19 -6 28 -12c15 -9 25 -24 30 -43h38c-2 8 -4 15 -8 22c-7 13 -16 24 -28 32c-12 9 -27 16 -43 20c-8 2 -16 4 -23 5l-13 2v31h-32v-31l-14 -2c-7 -1 -14 -2 -20 -4c-15 -4 -29 -10 -41 -18s-21 -16 -28 -28c-7 -11 -10 -24 -10 -40c0 -8 1 -15 3 -23 -c2 -7 6 -14 11 -21s14 -13 23 -19c10 -6 22 -10 37 -14v0v0c4 -1 8 -2 11 -3c5 -1 11 -3 16 -4l12 -3v-151s-8 1 -20 4s-26 8 -36 15c-11 8 -20 18 -26 30c-4 7 -6 16 -8 24h-36c2 -11 5 -23 10 -32c8 -14 17 -26 30 -35c13 -10 28 -16 46 -21c8 -2 17 -4 26 -5l14 -2v-33 -h32v33l15 1c9 1 17 3 26 5c17 4 32 10 45 18s23 19 31 31z" /> - <glyph glyph-name="ion-social-usd" unicode="" horiz-adv-x="320" -d="M315 145c3 -10 5 -19 5 -29c0 -21 -5 -38 -14 -53s-20 -26 -35 -35s-31 -17 -50 -21c-10 -2 -19 -3 -29 -4v-35h-64v35c-9 1 -19 4 -28 6c-20 5 -36 12 -51 23s-26 24 -35 41c-8 16 -13 34 -14 55h69c0 -12 2 -24 7 -33c5 -10 12 -17 21 -23s20 -11 31 -14v120 -c-8 2 -18 4 -27 6c-17 4 -30 9 -41 16s-20 15 -27 23s-11 17 -14 26s-4 18 -4 28c0 18 4 34 12 48s19 25 33 34s29 16 46 20c7 2 15 3 22 4v33h64v-33c9 -1 16 -4 24 -6c18 -5 34 -12 48 -22s25 -22 33 -37c7 -13 11 -28 12 -46h-69c-3 21 -12 37 -26 46c-7 4 -13 8 -22 10 -v-106c9 -2 16 -4 25 -6c12 -3 22 -6 27 -7c13 -4 23 -9 33 -15c10 -7 18 -14 24 -22s11 -17 14 -27zM128 238v92c-7 -2 -15 -4 -21 -7c-7 -4 -12 -9 -17 -15s-7 -14 -7 -23c0 -13 4 -24 13 -31c8 -7 20 -12 32 -16zM247 89c3 7 4 13 4 20c0 14 -3 24 -10 31s-15 11 -23 14 -s-16 5 -26 8v-107c6 1 10 2 14 3c11 3 20 8 27 13s11 11 14 18z" /> - <glyph glyph-name="ion-social-vimeo-outline" unicode="" -d="M445 334c7 -33 1 -66 -13 -97s-31 -59 -51 -87c-26 -36 -52 -71 -85 -101c-19 -18 -41 -35 -66 -44c-10 -4 -19 -5 -27 -5c-17 0 -31 9 -44 27c-14 19 -22 40 -28 63c-12 45 -25 90 -38 134c-4 12 -9 22 -15 33c-3 5 -8 10 -12 14c-2 2 -5 3 -8 3s-6 -1 -9 -3 -c-10 -6 -28 -18 -28 -18l-21 27c26 24 82 71 82 71c11 9 33 25 48 27h8c18 0 32 -7 42 -22c11 -17 15 -37 18 -57c7 -41 12 -82 24 -122c3 -10 7 -20 12 -29c4 -7 9 -10 14 -10c4 0 7 2 11 5s7 6 10 10c20 24 37 52 48 81c3 9 3 17 3 27c0 13 -10 25 -25 26h-7 -c-11 0 -20 -2 -32 -7c6 24 24 62 54 84c20 14 45 20 67 20c10 0 20 -2 27 -4c23 -8 36 -23 41 -46zM418 244c13 30 17 59 11 87c-4 19 -13 28 -30 34c-6 2 -14 3 -22 3c-21 0 -42 -6 -57 -17c-16 -12 -29 -30 -38 -48h6h8c23 -1 39 -19 40 -41c0 -10 0 -22 -4 -34 -c-11 -29 -29 -58 -51 -85c-4 -4 -7 -9 -12 -13c-7 -6 -15 -8 -22 -8c-8 0 -18 3 -27 18c-7 11 -11 22 -14 32c-10 31 -14 64 -19 95c-2 10 -3 19 -5 29c-3 17 -6 36 -16 51c-7 10 -16 15 -28 15h-6c-8 -1 -25 -11 -40 -23c-2 -2 -43 -37 -70 -61l2 -3c5 4 12 7 16 10 -c6 3 12 5 18 5c7 0 13 -3 18 -7c8 -7 13 -12 16 -18c6 -11 12 -24 16 -37c13 -44 26 -88 38 -133c5 -19 13 -41 26 -59s23 -20 31 -20c6 0 13 1 21 4c23 8 43 25 61 41c32 29 57 63 83 99v0c21 28 37 55 50 84z" /> - <glyph glyph-name="ion-social-vimeo" unicode="" -d="M445 334c7 -33 1 -66 -13 -97s-31 -59 -51 -87c-26 -36 -52 -71 -85 -101c-19 -18 -41 -35 -66 -44c-31 -11 -52 -5 -71 22c-14 19 -22 40 -28 63c-12 45 -25 90 -38 134c-4 12 -9 22 -15 33c-3 5 -8 10 -12 14c-5 4 -11 3 -17 0c-10 -6 -28 -18 -28 -18l-21 27 -c26 24 82 71 82 71c11 9 33 25 48 27c21 3 38 -4 50 -22c11 -17 15 -37 18 -57c7 -41 11 -82 23 -122c3 -10 8 -20 13 -29c7 -11 15 -13 25 -5c4 3 7 6 10 10c20 24 37 52 48 81c3 9 3 17 3 27c0 13 -10 25 -25 26s-24 -1 -39 -7c6 24 24 62 54 84c29 21 71 24 94 16 -s36 -23 41 -46z" /> - <glyph glyph-name="ion-social-whatsapp-outline" unicode="" -d="M178 294c4 -11 15 -39 16 -42s2 -6 0 -10s-3 -6 -6 -9s-6 -7 -9 -9c-3 -3 -6 -6 -3 -12s14 -24 30 -39c21 -20 38 -27 44 -30s9 -3 12 1s15 16 19 21s8 5 13 3s31 -17 37 -20s10 -5 11 -7s0 -13 -5 -26s-28 -24 -38 -25s-11 -8 -67 16s-90 84 -93 88s-22 31 -21 58 -s17 41 22 46s11 7 15 7h10s9 0 13 -11zM228 384c-50 0 -97 -20 -133 -55c-35 -35 -55 -81 -55 -131c0 -34 9 -67 27 -96l8 -13l-5 -14l-19 -57l61 19l13 4l12 -6c28 -15 59 -23 91 -23c50 0 97 19 133 54c35 35 55 82 55 132s-20 96 -55 131c-36 35 -83 55 -133 55zM228 416 -v0c121 0 220 -97 220 -218s-99 -218 -220 -218c-39 0 -74 10 -106 27l-122 -39l40 117c-20 33 -32 72 -32 113c0 121 99 218 220 218z" /> - <glyph glyph-name="ion-social-whatsapp" unicode="" -d="M228 416c121 0 220 -97 220 -218s-99 -218 -220 -218c-39 0 -74 10 -106 27l-122 -39l40 117c-20 33 -32 72 -32 113c0 121 99 218 220 218zM337 115c5 13 6 24 5 26s-5 4 -11 7s-32 18 -37 20s-9 2 -13 -3s-16 -17 -19 -21s-6 -4 -12 -1s-23 10 -44 30 -c-16 15 -27 33 -30 39s0 9 3 12c3 2 6 6 9 9s4 5 6 9s1 7 0 10s-12 31 -16 42s-10 11 -13 11h-10s-10 -2 -15 -7s-21 -19 -22 -46s18 -54 21 -58s37 -64 93 -88s57 -17 67 -16s33 12 38 25z" /> - <glyph glyph-name="ion-social-windows-outline" unicode="" -d="M432 167h-216v-149l216 -32v181zM448 183v0v-215l-248 36v179h248zM168 167h-152v-120l152 -22v142zM184 183v0v-177l-184 27v150h184zM432 398v0l-216 -31v-152h216v183zM448 416v0v-217h-248v182zM168 360v0l-152 -22v-123h152v145zM184 378v0v-179h-184v153z" /> - <glyph glyph-name="ion-social-windows" unicode="" -d="M448 183v0v-215l-248 36v179h248zM184 183v0v-177l-184 27v150h184zM448 416v0v-217h-248v182zM184 378v0v-179h-184v153z" /> - <glyph glyph-name="ion-social-wordpress-outline" unicode="" horiz-adv-x="384" -d="M192 384c106 0 192 -86 192 -192c0 -9 -1 -18 -2 -26c-12 -85 -79 -153 -165 -164c-8 -1 -17 -2 -25 -2c-106 0 -192 86 -192 192s86 192 192 192zM19 192c0 -68 40 -127 98 -155l-83 225c-10 -21 -15 -45 -15 -70zM214 21c12 2 24 4 35 8c0 1 -1 2 -1 3l-53 145l-33 -96 -v0l-19 -55c15 -5 32 -7 49 -7c8 0 15 1 22 2zM216 273l62 -186l17 58c9 22 13 41 13 56c0 21 -7 35 -14 47c-9 14 -17 27 -17 41c0 16 12 30 29 30h2c-31 28 -71 45 -116 45c-60 0 -113 -30 -144 -77c4 0 8 -1 11 -1c18 0 46 3 46 3c9 1 10 -14 1 -15c0 0 -10 -1 -20 -1 -l63 -187l38 113l-27 74c-9 0 -18 1 -18 1c-9 0 -8 16 1 15c0 0 28 -3 45 -3c18 0 46 3 46 3c9 1 11 -14 2 -15c0 0 -10 -1 -20 -1zM279 43c45 26 77 71 84 125c1 8 2 16 2 24c0 30 -8 58 -22 83c1 -6 1 -12 1 -18c0 -18 -3 -37 -13 -62l-39 -113z" /> - <glyph glyph-name="ion-social-wordpress" unicode="" horiz-adv-x="384" -d="M195 177l53 -146c0 -1 6 -13 9 -19c-3 -1 -5 -2 -8 -3v0c-10 -3 -21 -6 -32 -7c-8 -1 -17 -2 -25 -2c-17 0 -34 2 -50 6v0c-2 0 -3 2 -5 2l25 73v0zM17 268c6 0 7 -1 15 -1l93 -255c-3 1 -5 2 -8 3c-63 27 -109 87 -116 158c-1 6 -1 13 -1 19c0 25 7 53 17 76zM366 273 -c11 -24 18 -52 18 -81c0 -9 -1 -18 -2 -26c-9 -65 -50 -120 -107 -147c-2 -1 -3 -1 -5 -2l22 65l39 113c10 25 13 45 13 62v19v0c-1 18 -10 44 -36 43h-2c-17 0 -29 -14 -29 -30c0 -14 8 -27 17 -41c7 -12 14 -26 14 -47c0 -15 -4 -34 -13 -56l-17 -58l-62 186 -c10 0 20 1 20 1c9 1 7 16 -2 15c0 0 -28 -3 -46 -3c-17 0 -45 3 -45 3c-9 1 -10 -15 -1 -15c0 0 9 -1 18 -1l27 -74l-38 -113l-63 187c10 0 20 2 20 2c9 1 8 15 -1 14c0 0 -28 -2 -46 -2h-34c5 9 11 17 17 25c35 44 90 72 150 72c24 0 48 -5 69 -13c34 -13 63 -36 85 -65 -c2 -2 3 -5 5 -7c6 -8 11 -17 15 -26z" /> - <glyph glyph-name="ion-social-yahoo-outline" unicode="" horiz-adv-x="320" -d="M289 380c11 0 21 1 31 4l-128 -213v-171c-10 4 -21 4 -32 4s-22 0 -32 -4v171l-128 213c10 -4 21 -4 32 -4s22 0 32 4l96 -160l96 160c10 -4 22 -4 33 -4zM178 180l111 184h-1c-7 0 -15 0 -24 2l-90 -150l-14 -23l-14 23l-89 150c-9 -2 -17 -2 -25 -2h-1l111 -184l2 -4 -v-5v-151c6 1 11 0 16 0s11 1 16 0v151v5z" /> - <glyph glyph-name="ion-social-yahoo" unicode="" horiz-adv-x="320" -d="M289 380c11 0 21 1 31 4l-128 -213v-171c-10 4 -21 4 -32 4s-22 0 -32 -4v171l-128 213c10 -4 21 -4 32 -4s22 0 32 4l96 -160l96 160c10 -4 22 -4 33 -4z" /> - <glyph glyph-name="ion-social-yen-outline" unicode="" horiz-adv-x="384" -d="M384 416l-112 -208h48v-48h-73l-15 -31v-17h88v-48h-88v-96h-80v96h-88v48h88v17l-14 31h-74v48h48l-112 208h80l112 -221l112 221h80zM304 192h-59l13 24l99 184v0h-43l-122 -240l-122 240h-43l99 -184l13 -24h-59v-16h68l20 -44v-36h-88v-16h88v-96h48v96h88v16h-88v37 -l21 43h67v16z" /> - <glyph glyph-name="ion-social-yen" unicode="" horiz-adv-x="384" -d="M384 416l-112 -208h48v-48h-73l-15 -31v-17h88v-48h-88v-96h-80v96h-88v48h88v17l-14 31h-74v48h48l-112 208h80l112 -221l112 221h80z" /> - <glyph glyph-name="ion-social-youtube-outline" unicode="" horiz-adv-x="512" -d="M265 352v0h-9h-9c-65 0 -118 -2 -168 -4h-1h-1c-23 0 -42 -22 -42 -49v-1v-1c-2 -34 -3 -70 -3 -105v0v0c0 -35 1 -70 3 -104v-2v-1c0 -14 5 -26 14 -36c8 -9 17 -13 28 -13h1h1c52 -2 108 -4 166 -4h11v0v0h11c58 0 113 2 166 4h1h1c11 0 20 4 28 13c9 10 14 22 14 36v1 -v2c2 34 3 68 3 104v0v0c0 36 -1 71 -3 105v1v2c0 27 -19 49 -42 49h-1h-1c-49 2 -103 3 -168 3zM265 384v0c58 0 115 0 170 -3c41 0 74 -36 74 -81c2 -36 3 -72 3 -108s-1 -71 -3 -107c0 -45 -33 -81 -74 -81c-55 -3 -111 -4 -168 -4h-11h-11c-57 0 -113 1 -168 4 -c-41 0 -74 36 -74 81c-2 36 -3 71 -3 107s2 71 4 107c0 45 32 82 73 82c55 2 112 3 170 3h9h9zM207 94v197l145 -99z" /> - <glyph glyph-name="ion-social-youtube" unicode="" horiz-adv-x="512" -d="M509 299c2 -36 3 -71 3 -107s-1 -71 -3 -107c0 -45 -33 -81 -74 -81c-58 -3 -118 -4 -179 -4s-121 1 -179 4c-41 0 -74 36 -74 81c-2 36 -3 71 -3 107s2 71 4 107c0 45 32 81 73 81c55 3 112 4 170 4h9h9c58 0 115 -1 170 -4c41 0 74 -36 74 -81zM207 94l145 98l-145 99 -v-197z" /> - <glyph glyph-name="ion-soup-can-outline" unicode="" horiz-adv-x="320" -d="M160 304c-88 0 -160 29 -160 64s72 64 160 64s160 -29 160 -64s-72 -64 -160 -64zM160 415c-70 0 -126 -19 -126 -43s56 -43 126 -43s126 19 126 43s-56 43 -126 43zM161 288c88 0 158 29 159 64c0 -5 0 -33 -8 -40v-240c0 -35 -64 -64 -152 -64s-152 29 -152 64v240 -c-8 6 -8 40 -8 40c0 -35 73 -64 161 -64zM280 72v80c-18 -10 -43 -17 -72 -21h-2c-6 -20 -24 -35 -46 -35s-40 15 -46 35h-2c-29 4 -54 11 -72 21v-80c1 -2 9 -10 30 -18c24 -9 55 -14 90 -14s67 5 91 14c21 8 29 16 29 18zM280 184v91c-33 -12 -75 -19 -119 -19 -c-45 0 -87 7 -121 19v-91c18 -10 43 -17 73 -21h3c7 17 24 29 44 29s37 -12 44 -29h3c30 4 55 11 73 21zM178 -16zM160 -16h1h-1v0zM312 32l8 -16c0 -7 -3 -14 -8 -20c-21 -26 -81 -44 -152 -44s-131 18 -152 44c-5 6 -8 13 -8 20l8 16v16c0 -35 63 -64 152 -64 -s152 28 152 64v-16z" /> - <glyph glyph-name="ion-soup-can" unicode="" horiz-adv-x="320" -d="M0 368c0 43 53 64 160 64s160 -21 160 -64s-53 -64 -160 -64s-160 21 -160 64zM160 8c-44 0 -80 6 -109 18s-43 28 -43 46v128c0 -9 4 -19 13 -27s21 -15 37 -21s33 -10 54 -13c1 -12 7 -23 16 -31s20 -12 32 -12s23 4 32 12s15 19 16 31c31 4 56 12 75 23s29 24 29 38 -v-128c0 -18 -14 -34 -43 -46s-65 -18 -109 -18zM160 288c44 0 82 6 113 18s47 28 47 46v-8c0 -5 -1 -11 -2 -18s-3 -11 -6 -14v-96c0 -14 -10 -27 -29 -38s-44 -19 -76 -23c-2 11 -8 19 -17 26s-19 11 -30 11s-21 -4 -30 -11s-15 -15 -17 -26c-32 4 -57 12 -76 23 -s-29 24 -29 38v96c-5 5 -8 18 -8 40c0 -18 16 -34 47 -46s69 -18 113 -18zM312 56v-24l8 -16c0 -7 -3 -14 -8 -20c-11 -13 -30 -24 -58 -32s-59 -12 -94 -12s-66 4 -94 12s-47 19 -58 32c-5 6 -8 13 -8 20l8 16v24c0 -18 14 -34 43 -46s65 -18 109 -18s80 6 109 18 -s43 28 43 46z" /> - <glyph glyph-name="ion-speakerphone" unicode="" -d="M39 266c0 -37 20 -69 50 -86c-1 0 -2 1 -3 1s-4 1 -5 1v0c-35 3 -62 33 -69 69c-6 0 -12 7 -12 16c0 8 5 15 11 16c6 42 40 75 81 75h8c-36 -15 -61 -51 -61 -92zM433 357c10 -25 15 -56 15 -88s-5 -63 -15 -88l-3 -9c-6 -14 -15 -26 -24 -34c-10 -10 -22 -19 -34 -20h-3 -c-7 0 -15 2 -22 5c-3 2 -10 5 -10 5c-22 10 -84 28 -115 29c-4 -8 -10 -20 -12 -30c-2 -9 -6 -27 -7 -61c-1 -32 1 -59 3 -82c0 -2 1 -5 1 -7c0 -6 -2 -9 -9 -9h-77c-6 0 -9 3 -9 6v7c2 72 25 140 26 145c2 9 5 17 7 30c2 12 -27 13 -40 24c-29 17 -47 49 -47 86 -c0 41 25 77 59 92h42h19c58 3 114 21 163 50c1 1 3 1 4 2v0c8 4 16 6 24 6c13 0 26 -6 37 -16c9 -9 18 -21 24 -35c1 -3 2 -5 3 -8zM410 180c9 22 15 54 15 89s-6 66 -15 88c-8 18 -19 29 -30 29s-21 -11 -29 -29c-9 -22 -15 -53 -15 -88s6 -67 15 -89c8 -19 18 -33 29 -33 -s22 15 30 33z" /> - <glyph glyph-name="ion-speedometer" unicode="" -d="M312 192l8 -8l-64 -84v-4c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32h4zM224 352c124 0 224 -100 224 -224c0 -34 -8 -67 -22 -96h-36c15 27 25 57 26 88h-32v16h32c-1 29 -9 56 -22 81l-27 -15l-8 13l27 16c-8 12 -16 23 -26 33s-21 18 -33 26l-16 -27l-14 8 -l16 27c-25 13 -52 21 -81 22v-32h-16v32c-29 -1 -56 -9 -81 -22l16 -27l-14 -8l-16 27c-12 -8 -23 -16 -33 -26s-19 -21 -26 -33l28 -16l-8 -13l-28 15c-13 -25 -21 -52 -22 -81h32v-16h-32c1 -31 11 -61 26 -88h-36c-14 29 -22 62 -22 96c0 124 100 224 224 224z" /> - <glyph glyph-name="ion-spoon" unicode="" horiz-adv-x="128" -d="M128 288c0 64 -26 128 -64 128s-64 -64 -64 -128v0c1 -25 16 -54 37 -64l1 -1v0c3 -2 10 -6 10 -10c0 0 -16 -199 -16 -210s4 -20 10 -26s14 -9 22 -9v0v0c8 0 16 3 22 9s10 13 10 26s-16 210 -16 210c0 4 7 8 10 10l1 1c22 10 37 38 37 64z" /> - <glyph glyph-name="ion-star" unicode="" -d="M448 248l-139 -104l55 -176l-140 112l-140 -112l55 176l-139 104h172l52 168l53 -168h171z" /> - <glyph glyph-name="ion-stats-bars" unicode="" horiz-adv-x="352" -d="M96 32v320h64v-320h-64zM0 32v96h64v-96h-64zM192 32v160h64v-160h-64zM288 32v224h64v-224h-64z" /> - <glyph glyph-name="ion-steam" unicode="" horiz-adv-x="512" -d="M480 240c0 -20 -16 -37 -37 -37c-20 0 -37 16 -37 37c0 20 16 37 37 37c20 0 37 -17 37 -37zM443 309c38 0 69 -31 69 -69s-31 -70 -69 -70l-67 -48c-2 -26 -24 -47 -51 -47c-25 0 -46 18 -51 41l-196 78c-8 -5 -16 -7 -26 -7c-28 0 -52 24 -52 52s24 52 52 52 -c25 0 45 -18 50 -41l196 -79c8 5 17 8 27 8c2 0 3 -1 5 -1l43 62c0 38 32 69 70 69zM443 286c-26 0 -47 -20 -47 -46s21 -47 47 -47s46 21 46 47s-20 46 -46 46zM52 277c-21 0 -38 -17 -38 -38s17 -38 38 -38c3 0 5 0 8 1l-16 6v0c-15 7 -22 24 -16 39s24 23 39 17v0l19 -7 -c-6 12 -19 20 -34 20zM325 165c-3 0 -6 -1 -9 -1l16 -6c16 -6 23 -24 17 -40s-23 -23 -39 -17c-6 3 -13 6 -19 8c6 -12 19 -20 34 -20c21 0 38 17 38 38s-17 38 -38 38z" /> - <glyph glyph-name="ion-stop" unicode="" horiz-adv-x="384" -d="M373 384c6 0 11 -5 11 -11v-362c0 -6 -5 -11 -11 -11h-362c-6 0 -11 5 -11 11v362c0 6 5 11 11 11h362z" /> - <glyph glyph-name="ion-thermometer" unicode="" horiz-adv-x="160" -d="M127 112c20 -14 33 -38 33 -64c0 -44 -36 -80 -80 -80s-80 36 -80 80c0 27 13 51 33 65v257c0 26 21 46 47 46s47 -20 47 -46v-258zM65 370v-50h30v50c0 8 -7 14 -15 14s-15 -6 -15 -14zM96 160v16h-16v-16h16zM96 192v64h-16v-64h16z" /> - <glyph glyph-name="ion-thumbsdown" unicode="" horiz-adv-x="384" -d="M24 195c-10 5 -18 17 -18 29c0 14 8 25 20 30c-4 5 -6 12 -6 19c0 14 8 25 20 30c-3 5 -5 11 -5 17c0 18 11 24 35 30s74 12 126 9c23 -1 55 -7 76 -7v32h112v-240h-112v16c-15 -1 -31 -4 -40 -14c-22 -23 -40 -65 -40 -108c0 -19 1 -29 -4 -34c-13 -13 -44 9 -52 37 -c-9 34 -1 62 1 87h-103c-19 0 -34 15 -34 34c0 15 10 29 24 33zM336 352c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16z" /> - <glyph glyph-name="ion-thumbsup" unicode="" horiz-adv-x="384" -d="M360 189c10 -5 18 -17 18 -29c0 -14 -8 -25 -20 -30c4 -5 6 -12 6 -19c0 -14 -8 -25 -20 -30c3 -5 5 -11 5 -17c0 -18 -11 -24 -35 -30s-74 -12 -126 -9c-23 1 -55 7 -76 7v-32h-112v240h112v-16c15 1 31 4 40 14c22 23 40 65 40 108c0 19 -1 29 4 34c13 13 44 -9 52 -37 -c9 -34 1 -62 -1 -87h103c19 0 34 -15 34 -34c0 -15 -10 -29 -24 -33zM48 32c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16z" /> - <glyph glyph-name="ion-toggle-filled" unicode="" -d="M320 240c26 0 48 -22 48 -48s-22 -48 -48 -48s-48 22 -48 48s22 48 48 48zM320 320c71 0 128 -57 128 -128s-57 -128 -128 -128h-192c-71 0 -128 57 -128 128s57 128 128 128h192zM320 112c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80z" /> - <glyph glyph-name="ion-toggle" unicode="" -d="M320 288h-192c-53 0 -96 -43 -96 -96s43 -96 96 -96h192c53 0 96 43 96 96s-43 96 -96 96zM320 320v0c71 0 128 -57 128 -128s-57 -128 -128 -128h-192c-71 0 -128 57 -128 128s57 128 128 128h192zM128 240c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48 -s-22 48 -48 48zM128 272v0c44 0 80 -36 80 -80s-36 -80 -80 -80s-80 36 -80 80s36 80 80 80z" /> - <glyph glyph-name="ion-transgender" unicode="" horiz-adv-x="512" -d="M368 448h144v-144h-40v76l-101 -100c8 -17 13 -36 13 -56c0 -63 -46 -115 -104 -126v-52h72v-46h-72v-64h-48v64h-72v46h72v52c-59 11 -104 63 -104 126c0 20 5 39 13 56l-22 22l-36 -36l-33 33l36 36l-46 45v-76h-40v144h144v-40h-70l43 -42l36 36l33 -33l-36 -36 -l17 -17c23 22 54 36 89 36c27 0 53 -8 74 -23c0 0 6 -5 15 -13l93 92h-70v40zM256 144c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80z" /> - <glyph glyph-name="ion-trash-a" unicode="" horiz-adv-x="352" -d="M261 320v0h91v-32h-9s-5 -1 -8 -4s-4 -9 -4 -9l-19 -241c-2 -29 -2 -34 -36 -34h-200c-34 0 -34 5 -36 34l-19 242s-1 6 -4 9s-8 3 -8 3h-9v32h91v29c0 19 14 35 34 35h101c20 0 35 -16 35 -35v-29zM112 349v-29h128v29c0 10 -9 15 -19 15h-91c-10 0 -18 -5 -18 -15z -M104 64h20l-10 192h-21zM187 64v192h-22v-192h22zM249 64l10 192h-20l-11 -192h21z" /> - <glyph glyph-name="ion-trash-b" unicode="" horiz-adv-x="320" -d="M318 315c3 -12 4 -11 -7 -11h-302c-11 0 -10 -1 -7 11c2 9 4 13 4 13c3 9 9 9 19 11l53 7c7 1 7 1 10 7c9 20 10 31 20 31h103c10 0 12 -11 21 -31c3 -6 3 -6 10 -7l53 -6c10 -2 16 -2 19 -11c0 0 2 -5 4 -14zM283 272c17 0 18 -2 17 -15l-19 -242c-2 -12 -2 -15 -17 -15 -h-208c-15 0 -15 3 -17 15l-19 242c-1 12 0 15 17 15h246z" /> - <glyph glyph-name="ion-trophy" unicode="" -d="M448 345c0 -25 2 -73 -22 -122c-15 -30 -36 -55 -63 -75c-23 -16 -49 -28 -77 -35c-16 -17 -32 -27 -46 -31v-33s0 -49 99 -49h13v-32h-256v32h13c85 0 97 35 99 46v36c-14 4 -30 14 -46 31c-28 7 -55 19 -77 35c-27 20 -48 45 -63 75c-17 36 -21 71 -22 97v0v11v0v21v0 -h80c-2 35 0 64 0 64h143h1h1h142s2 -29 0 -64h81v-7zM51 237c17 -34 43 -61 77 -78c-22 40 -33 84 -42 135c-1 8 -2 17 -3 26h-51c1 -23 5 -53 19 -83zM397 237c14 30 18 60 19 83h-51c-1 -9 -3 -18 -4 -26c-9 -51 -20 -95 -42 -135c34 17 61 43 78 78z" /> - <glyph glyph-name="ion-tshirt-outline" unicode="" -d="M146 362l-104 -31l11 -32l39 4l38 5l-2 -38l-14 -255h220l-14 255l-2 38l38 -5l39 -4l11 32l-104 31c-6 -8 -13 -14 -21 -19c-15 -10 -34 -15 -57 -15v0v0c-34 1 -59 11 -78 34zM288 400v0l160 -48l-32 -88l-64 8l16 -289h-288l16 289l-64 -8l-32 88l160 48 -c14 -27 31 -39 64 -40c33 0 50 13 64 40z" /> - <glyph glyph-name="ion-tshirt" unicode="" -d="M448 352l-32 -88l-64 8l16 -288h-288l16 288l-64 -8l-32 88l160 48c14 -27 31 -39 64 -40c33 0 50 13 64 40z" /> - <glyph glyph-name="ion-umbrella" unicode="" -d="M344 160v0v0v0zM104 160v0v0v0zM240 399c116 -8 208 -109 208 -227v-12c-4 25 -26 52 -52 52c-29 0 -52 -23 -52 -52v0c0 29 -23 52 -52 52s-49 -12 -52 -45v-135c0 -17 -6 -33 -18 -45s-29 -19 -46 -19c-35 0 -63 29 -63 64c0 9 7 16 16 16s16 -7 16 -16 -c0 -18 14 -32 31 -32c18 0 32 14 32 32v134c-1 24 -26 46 -52 46c-29 0 -52 -23 -52 -52v0c0 29 -23 52 -52 52c-27 0 -49 -26 -52 -52v18c0 118 92 213 208 221v1c0 9 7 16 16 16s16 -7 16 -16v-1z" /> - <glyph glyph-name="ion-university" unicode="" -d="M224 384l224 -111l-92 -60l-132 -85l-160 102v-198l-32 16v203l-32 21zM358 192l10 -82c-16 -12 -112 -78 -144 -110c-32 32 -128 98 -144 110l9 82l135 -88z" /> - <glyph glyph-name="ion-unlocked" unicode="" horiz-adv-x="384" -d="M22 -32c-12 0 -22 10 -22 22v212c0 12 10 22 22 22h3h19v31c0 42 17 87 43 115s64 46 105 46v0v0c41 0 79 -18 105 -46c20 -21 33 -51 39 -82h-53c-5 18 -13 35 -24 47v0v1c-18 19 -42 29 -67 29v0v0c-25 0 -49 -10 -67 -29v-1v0c-18 -19 -28 -53 -28 -80v-31h265 -c12 0 22 -10 22 -22v-212c0 -12 -10 -22 -22 -22h-340z" /> - <glyph glyph-name="ion-upload" unicode="" -d="M366 215c45 0 82 -37 82 -83s-37 -84 -82 -84h-110v80h48l-80 84l-80 -84h48v-80h-102c-49 0 -90 41 -90 91c0 40 26 74 61 86c5 29 29 51 59 51c10 0 18 -3 26 -7c19 40 59 67 105 67c64 0 115 -53 115 -118v-3z" /> - <glyph glyph-name="ion-usb" unicode="" horiz-adv-x="256" -d="M16 228v0v0zM256 320c0 -11 -6 -21 -14 -27v0c-2 -1 -3 -5 -3 -7c-1 -20 -3 -36 -9 -50c-7 -19 -20 -33 -39 -46c-17 -12 -29 -21 -36 -34c-7 -12 -11 -28 -11 -53v-24c0 -7 2 -13 10 -18c4 -2 7 -6 10 -9c8 -9 14 -21 14 -34c0 -28 -22 -50 -50 -50s-50 22 -50 50v1v0 -c0 18 10 33 24 42c5 4 9 5 9 18v0c0 14 -3 17 -10 27s-18 17 -32 26c-19 13 -33 27 -40 46c-6 15 -8 31 -9 39s-2 9 -4 11c-10 6 -16 16 -16 28c0 18 14 32 32 32s32 -14 32 -32c0 -10 -4 -20 -12 -26c-3 -2 -4 -11 -4 -14v0v0c0 -9 3 -18 7 -28c10 -21 45 -44 52 -44 -s8 5 8 12v196s-1 2 -3 4h-1v1v0c-9 6 -15 16 -15 27c0 18 14 32 32 32s32 -14 32 -32c0 -11 -5 -21 -14 -27v0c-2 -2 -2 -3 -2 -5v-140c0 -10 2 -12 8 -11c13 3 48 30 52 43c3 10 6 23 7 41v1c0 2 -2 4 -3 6c-10 6 -16 16 -16 28c0 18 14 32 32 32s32 -14 32 -32zM32 240 -c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM128 368c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM224 304c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16z" /> - <glyph glyph-name="ion-videocamera" unicode="" -d="M335 263v-66l113 35v-89v-88l-113 35v-65c0 -5 -4 -9 -9 -9h-317c-5 0 -9 4 -9 9v12v55v171c0 5 4 9 9 9h208v38c0 4 -6 10 -10 10h-176v48h178c36 0 65 -29 65 -64v-32h52c5 0 9 -4 9 -9zM226 107c20 0 36 16 36 36s-16 35 -36 35s-36 -15 -36 -35c0 -10 4 -19 11 -26 -h-68c7 7 11 16 11 26c0 20 -16 36 -36 36s-36 -16 -36 -36s16 -36 36 -36h12h95h11z" /> - <glyph glyph-name="ion-volume-high" unicode="" -d="M199 40l-95 88h-104v128h104l95 88v-304zM255 92l-20 16c17 24 27 52 27 84s-10 60 -27 84l20 16c20 -28 33 -63 33 -100s-13 -72 -33 -100zM322 46l-21 16c27 36 43 81 43 130s-16 94 -43 130l21 16c30 -41 48 -91 48 -146s-18 -105 -48 -146zM365 369l20 15 -c39 -54 63 -120 63 -192s-24 -138 -63 -192l-20 15c36 49 58 111 58 177s-22 128 -58 177z" /> - <glyph glyph-name="ion-volume-low" unicode="" horiz-adv-x="288" -d="M199 40l-95 88h-104v128h104l95 88v-304zM255 92l-20 16c17 24 28 52 28 84s-11 60 -28 84l20 16c20 -28 33 -63 33 -100s-13 -72 -33 -100z" /> - <glyph glyph-name="ion-volume-medium" unicode="" horiz-adv-x="370" -d="M199 40l-95 88h-104v128h104l95 88v-304zM255 92l-20 16c17 24 28 52 28 84s-11 60 -28 84l20 16c20 -28 33 -63 33 -100s-13 -72 -33 -100zM322 46l-21 16c27 36 43 81 43 130s-16 94 -43 130l21 16c30 -41 48 -91 48 -146s-18 -105 -48 -146z" /> - <glyph glyph-name="ion-volume-mute" unicode="" -d="M224 231l47 51v-180l-47 51h-65v78h65zM332 388c69 -38 116 -112 116 -196c0 -124 -100 -224 -224 -224c-39 0 -76 10 -108 27l-1 1c-69 38 -115 112 -115 196c0 124 100 224 224 224c39 0 75 -10 107 -28h1zM362 93c20 28 33 62 33 99c0 66 -38 123 -92 151 -c-6 3 -11 6 -17 8c-19 7 -40 11 -62 11c-37 0 -71 -12 -99 -32l73 -74h-76l-36 35c-20 -28 -32 -62 -32 -99c0 -65 36 -121 90 -150c6 -3 13 -7 19 -9c19 -7 39 -11 61 -11c37 0 72 12 100 32l-20 20v77z" /> - <glyph glyph-name="ion-wand" unicode="" -d="M192 208l48 48l48 -48l-48 -48zM0 16l176 176l48 -48l-176 -176zM224 352v64h32v-64h-32zM398 344l-45 -45l-23 22l46 45zM127 299l-45 45l22 22l45 -45zM376 50l-46 45l23 23l45 -46zM384 192v32h64v-32h-64z" /> - <glyph glyph-name="ion-waterdrop" unicode="" horiz-adv-x="320" -d="M175 409c40 -41 145 -160 145 -288c0 -85 -72 -153 -160 -153c-56 0 -106 27 -134 69c-6 9 -11 19 -15 29c-7 17 -11 35 -11 55v4c1 67 31 131 64 183c20 31 42 57 59 77c9 10 16 18 22 24l1 1v0c4 3 8 6 14 6c5 0 10 -3 14 -6v0zM160 24c55 0 100 45 100 100 -c0 14 -3 28 -8 40c-17 -65 -70 -116 -136 -130c13 -6 28 -10 44 -10z" /> - <glyph glyph-name="ion-wifi" unicode="" -d="M224 352c80 0 156 -30 214 -84l10 -10l-10 -9l-32 -32l-10 -10l-9 9c-44 41 -103 64 -163 64s-119 -23 -163 -64l-9 -9l-10 10l-32 32l-10 9l10 10c58 54 134 84 214 84v0zM365 192l11 -10l-10 -10l-33 -32l-9 -9l-10 8c-25 22 -57 35 -90 35s-65 -13 -90 -35l-10 -8 -l-9 9l-33 32l-10 10l11 10c37 33 83 52 132 54v0h9v0v0c52 0 102 -19 141 -54zM224 32l-10 10l-52 52l-11 10l12 10c17 11 32 20 61 20s47 -9 62 -20l11 -10l-10 -10l-53 -52z" /> - <glyph glyph-name="ion-wineglass" unicode="" horiz-adv-x="256" -d="M167 153c-11 -4 -24 -8 -24 -32v-94c0 -11 4 -19 12 -25c3 -2 7 -4 15 -6c32 -9 48 -16 50 -18c2 -1 4 -3 4 -7c0 0 -14 -3 -96 -3s-96 3 -96 3c0 4 2 6 4 7c2 2 18 9 50 18c8 2 11 4 14 6c8 6 11 14 11 25v94c0 24 -11 28 -22 32s-18 6 -26 11c-12 7 -23 16 -32 26 -c-20 23 -31 52 -31 87c0 50 4 100 8 114s14 25 31 25h178c17 0 27 -11 31 -25s8 -65 8 -115c0 -35 -11 -63 -31 -86c-9 -10 -20 -19 -32 -26c-8 -5 -15 -7 -26 -11zM128 178c26 0 50 11 67 28l6 6c16 18 22 35 23 65s-2 83 -8 107h-177c-7 -35 -8 -80 -7 -108s7 -46 23 -64 -c2 -3 4 -6 7 -8c17 -16 41 -26 66 -26zM208 277c0 -10 -1 -20 -4 -29s-8 -18 -15 -25l-5 -5c-14 -14 -34 -23 -56 -23c-21 0 -41 8 -55 22l-6 6c-7 7 -12 16 -15 25s-3 15 -4 29c-1 9 0 34 1 53c1 10 2 19 3 22h153c1 -6 2 -14 2 -22c1 -21 1 -45 1 -53zM192 269v0v26 -c0 4 -4 8 -8 8s-8 -4 -8 -8v-26c0 -3 1 -6 3 -7c1 -1 3 -1 5 -1c4 0 8 3 8 8zM191 316c1 2 1 4 1 6s-2 4 -4 5s-4 1 -6 1s-4 -1 -5 -3s-1 -4 -1 -6s2 -4 4 -5s4 -1 6 -1s4 1 5 3z" /> - <glyph glyph-name="ion-woman" unicode="" horiz-adv-x="192" -d="M30 299c3 12 17 33 42 34h48c24 -1 38 -22 42 -34l29 -104c6 -23 -21 -32 -27 -10l-26 96h-9l46 -169h-43v-127c0 -23 -31 -23 -31 0v127h-10v-127c0 -23 -32 -23 -32 0v127h-42l45 169h-7l-27 -96c-7 -21 -33 -13 -27 10zM133 379c0 -21 -17 -37 -37 -37s-37 16 -37 37 -s17 37 37 37s37 -16 37 -37z" /> - <glyph glyph-name="ion-wrench" unicode="" -d="M430 333c14 -14 19 -31 18 -44s-6 -39 -32 -65s-77 -42 -113 -24c-5 3 -13 5 -21 -3c-10 -9 -202 -215 -202 -215c-17 -19 -48 -18 -66 0s-19 49 0 66c0 0 207 194 215 202s5 16 3 22c-20 47 2 89 24 112c22 24 51 31 65 32c13 1 31 -5 44 -18l-57 -56l10 -56l55 -10z -M59 5c6 6 6 17 0 23s-16 6 -22 0s-6 -17 0 -23s16 -6 22 0z" /> - <glyph glyph-name="ion-xbox" unicode="" -d="M95 200c-49 -72 -50 -139 -50 -143c-28 38 -45 84 -45 135c0 67 30 128 77 169l3 -1c51 -18 93 -68 93 -68s-38 -33 -78 -92zM448 192c0 -51 -17 -97 -45 -135c0 4 -1 71 -50 143c-40 59 -78 92 -78 92s42 50 93 68l3 1c47 -41 77 -102 77 -169zM169 367 -c-37 17 -65 12 -72 10c36 25 80 39 127 39s91 -14 127 -39c-7 2 -35 6 -72 -10c-29 -13 -55 -35 -55 -35s-26 22 -55 35zM327 155c40 -49 54 -85 62 -108l2 -5c-41 -46 -101 -74 -167 -74s-126 28 -167 74l1 5c8 23 23 59 63 108c46 57 103 94 103 94s57 -37 103 -94z" /> - </font> -</defs></svg> diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.ttf b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.ttf Binary files differdeleted file mode 100755 index c4e46324..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.ttf +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.woff b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.woff Binary files differdeleted file mode 100755 index 5f3a14e0..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/ionicons.woff +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-bold-webfont.woff b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-bold-webfont.woff Binary files differdeleted file mode 100755 index 97aa9ea6..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-bold-webfont.woff +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-italic-webfont.woff b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-italic-webfont.woff Binary files differdeleted file mode 100755 index 787d47cb..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-italic-webfont.woff +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-light-webfont.woff b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-light-webfont.woff Binary files differdeleted file mode 100755 index 45f21c23..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-light-webfont.woff +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-medium-webfont.woff b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-medium-webfont.woff Binary files differdeleted file mode 100755 index 4fb708fd..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-medium-webfont.woff +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-regular-webfont.woff b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-regular-webfont.woff Binary files differdeleted file mode 100755 index b51127f3..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/fonts/pfdintextpro-regular-webfont.woff +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/index.css b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/index.css deleted file mode 100755 index a67e4bcf..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/index.css +++ /dev/null @@ -1,61 +0,0 @@ -* { - -webkit-tap-highlight-color: rgba(0,0,0,0); -} -body, html { - height: 100%; - width: 100%; - margin: 0px; - padding: 0px; - overflow: hidden; -} -body.loading { - opacity: 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: #fff; - font-family: pfd, sans-serif; - font-size: 12px; -} - -.loader { - z-index: 2; - width: 80px; - height: 80px; - position: absolute; - top: 50vh; - left: 50%; - margin-top: -60px; - margin-left: -40px; - display: none; -} -.loader:before { - content: ''; - border-radius: 50%; - border-top: 3px solid #999; - border-right: 3px solid transparent; - animation: loading .5s linear infinite; - -webkit-animation: loading .5s linear infinite; - width: 80px; - height: 80px; - display: block; -} -.loading .loader { display: block; } -@keyframes loading { - to {transform: rotate(360deg)} -} -@-webkit-keyframes loading { - to {-webkit-transform: rotate(360deg)} -} - -.scroll { - position: absolute; - width: 100%; -} - -.error_hilite { - color: red !important; - border-color: red !important; -} diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/nav.css b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/nav.css deleted file mode 100755 index 28385680..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/nav.css +++ /dev/null @@ -1,442 +0,0 @@ - -/* NAV BAR */ - -#nav { - position: absolute; - top: 0; left: 0; - width: 249px; - -webkit-transform: translateZ(0) translateX(-249px); - -webkit-transition: -webkit-transform 0.1s; - background: #fff; -} -#content { - position: absolute; - top: 0; left: 0; - width: 100%; height: 100%; - overflow: hidden; - -webkit-transform: translateZ(0) translateX(0px); - -webkit-transition: -webkit-transform 0.1s; -} -.nav #nav { - -webkit-transform: translateZ(0) translateX(0); -} -.nav #content { - -webkit-transform: translateZ(0) translateX(249px); -} -#nav .logo { - background-image: url(../img/small-logo.png); - background-repeat: no-repeat; - background-position: center center; - background-size: contain; - width: 120px; - height: 80px; - margin-left: 20px; - display: block !important; -} -#nav .menu span { - display: block; - font-size: 14px; - letter-spacing:1.25px; - text-shadow:0px 0px 1px rgba(0,0,0,.2); - color: #000; -} - -#nav .main_menu span { - padding: 30px 0 10px 20px; -} - -#nav .account_menu span, #nav .faq_menu span { - padding: 20px 0 0px 20px; -} -#nav .account_menu span.menu-emphasis, -#nav .faq_menu span.menu-emphasis { - padding-top: 28px; -} - -#nav .faq_menu span:last-child { - padding-bottom:45px!important; -} - -#nav .main_menu { display: block; animation: mfadein 0.3s; } -#nav .account_menu { display: none; } -#nav .faq_menu { display: none; } -#nav.faq .main_menu, -#nav.account .main_menu { display: none; } -#nav.account .account_menu { display: block; } -#nav.faq .faq_menu { display: block; animation: mfadein 0.3s; } - -@keyframes mfadein { 0% { display: none; opacity: 0; } 1% { display:block; opacity: 0; } 100% { opacity: 1; } } - -#nav .submenu { - position: absolute; - width: 100%; - padding: 20px 0; - top:0; - border-top: 1px solid #ddd; -} - -#nav .submenu span { - display: block; - font-size: 14px; - letter-spacing:1.25px; - color: #bbb; - padding: 4px 0 12px 20px -} - -#nav .social { - position: absolute; - bottom: 0; - left: 0; - border-top: 1px solid #ddd; -} -#nav .social span { - display: block; - float: left; - width: 61px; - border-left: 1px solid #ddd; - color: #bbb; - font-size: 18px; - padding: 5px 0; - text-align: center; -} - -#nav-container { - display:flex; - height:calc(100vh - 40px); - width:100%; - position:absolute; - flex-direction: column; -} - -#nav-row { - box-sizing:border-box; - padding-bottom:30px; -} - -#nav-fill { - flex: 1; - position:relative; -} - -.menu-emphasis { -font-weight:bold; -padding-bottom:0px; -} - -/* INTRO PAGE WITH SPINNING COMPASS */ - -#intro { - display: none; -} -.intro #intro { - display: block; -} -.intro #header, -.intro #footer { - display: none; -} -#intro div { - position: absolute; - top: 50%; left: 50%; - width: 200px; - padding: 50px; - text-align: center; - font-size: 17px; -} -#intro #compass { - pointer-events: none; - background-image: url(../img/compass-logo.png); - background-repeat: no-repeat; - background-position: center center; - background-size: 230px 230px; - width: 230px; - height: 230px; - padding: 0px; - border-radius: 50%; -} -#intro .store { - -webkit-transform: translateX(-50%) translateY(-50%) translateY(145px) rotateZ(0deg); -} -#intro .hub { - -webkit-transform: translateX(-50%) translateY(-50%) translateX(140px) rotateZ(90deg); -} -#intro .story { - -webkit-transform: translateX(-50%) translateY(-50%) translateY(-145px) rotateZ(0deg); -} -#intro .archive { - -webkit-transform: translateX(-50%) translateY(-50%) translateX(-140px) rotateZ(270deg); -} -#intro .latlng { - position: absolute; - bottom: 5%; left: 0; width: 100%; - text-align: center; - z-index: 2 -} - -#intro .alert { - box-sizing: border-box; - width: calc(100vw); - text-align: center; - font-size: 14pt; - font-weight: bold; - line-height: 0; - text-transform: uppercase; - color: #3E6616; - position: absolute; - height: 0; - left: 0; - top: auto; - bottom: calc(25vh - 58px); - margin: auto 0; - padding: 0; -} - - -/* HEADER AND FOOTER ON MOST PAGES */ - -#header { - display: block; - position: absolute; - top: 0; left: 0; width: 100%; - height: 42px; - border-bottom: 1px solid black; -} -#header .logo { - background-image: url(../img/small-logo.png); - background-repeat: no-repeat; - background-position: center center; - position: absolute; - background-size: contain; - width: 100px; height: 40px; - left: 50%; top: -4px; - margin-left: -50px; - top:0px; -} -#header .burger { - display: inline-block; - font-size: 24px; - padding: 9px 10px 5px; -} - -#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; - background-image:url(../img/cart-box.png); - background-size:100%; - background-repeat:no-repeat; -} - -.cart .cart_count { - position: absolute; - top: 50%; - left: 50%; - transform: translateY(-50%) translateX(-50%); - color: #bbb; - font-size:12.35px; -} - -#header .cart::before { - position: absolute; - content: ''; - left: 50%; - transform: translateX(-50%); - color: #a9a9a9; - background-image: url(../img/small-cart-handle.png); - font-size: 20px; - background-size: 16px 8px; - background-repeat: no-repeat; - background-position: center; - width: 16px; - height: 8px; - top: calc(-50%); - opacity: 0.3; -} - -#footer { - display: block; - position: absolute; - bottom: 0; left: 0; width: 100%; - background: #fff; - border-top: 1px solid #ddd; - z-index: 1; -} -#footer div { - width: 50%; - text-align: center; - padding: 10px 0; - color: #000; - float: left; - font-size:14px; - font-weight:bold; -} -#footer .ok { - color: #000; -} -#footer .ok.wide { - width: 100%; -} -#footer .ok.disabled { - color: #bbb; -} - - -/* CURTAIN FOR LOGIN AND SELECTOR VIEWS */ - -#curtain { - pointer-events: none; - position: absolute; - top: 0; left: 0; - width: 100%; height: 100%; - background: rgba(255,255,255,0.8); - opacity: 0; - -webkit-transition: opacity 0.2s; - transition: opacity 0.2s; -} -#curtain.visible { - pointer-events: auto; - opacity: 1; - z-index: 2; -} -#curtain.white { - background: rgba(255,255,255,0.8); -} -#curtain.dark { - background: rgba(72,72,72,0.8); -} -#curtain.loading .loader { - display: block; -} - - -/* SELECTOR */ - -#selector { - display: none; - position: absolute; - z-index: 2; - box-sizing:border-box; - min-width:100px; - animation: selector-spring .15s forwards; - animation-timing-function: cubic-bezier(.43,1,.89,.95) -} - -@keyframes selector-spring { - 0% { - margin-top: 15px - } - 100% { - margin-top: 0 - } -} - -#selector:not(.selector-outer-wrap) .options div { - background: white; - text-align: center; - padding: 7px 12px; - box-sizing:border-box; - font-size: 14px; - border-left:1px solid black; - border-right:1px solid black; - border-top:1px solid black; -} - -#selector:not(.selector-outer-wrap) .options div:last-of-type { - border-bottom:1px solid black -} - -.selector-full { - width: 100% !important; - box-sizing:border-box -} - -.selector-full > div > div { - 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, -#collection, #product, #search, #closed, -#login, #logout, #signup, -#cart, -#profile, #shipping, #payment, #settings, #orders { - position: absolute; - top: 43px; - height: -webkit-calc(100% - 43px - 39px); - height: calc(100% - 43px - 39px); - 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); - height: calc(100% - 43px); -} - -h1 { - text-align: center; - margin: 0; - padding: 16px 10px 12px 10px; - border-bottom: 1px solid #000; - font-size: 14px; - color: #000; - letter-spacing: 1px; - font-weight: bold; -} - -.msg { - margin: 20px; - display: inline-block; -} - -.msg-condensed { - margin:6px!important; -} diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/products.css b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/products.css deleted file mode 100755 index c4599866..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/products.css +++ /dev/null @@ -1,258 +0,0 @@ -.collection #collection { display: block } -#collection { - display: none; - text-align: center; -} -#collection .item { - text-align: center; - display: inline-block; - max-width: 49vw; -} -#collection .item img { - width: 49vw; - height: 63vw; -} -#collection.gray { - background: rgba(245,245,245,1.0); -} - -#collection.single .item { - max-width: 98vw; -} -#collection.single .item img { - width: 98vw; - height: 126vw; -} - -#collection .item .product-title { - padding-bottom: 18px; - display: inline-block; -} - -.product #product { display: block } -#product { - display: none; -} -#product .style { - text-transform: uppercase; - box-sizing:border-box -} - -#product.loading #gallery, -#product.loading .content { - display: none; -} -#product.loading .loader { - display: block; -} - -.gallery { - width: 100vw; - height: 52vh; -} -.gallery.gray { - background: rgba(245,245,245,1.0); -} - -.gallery .item { - width: 100vw; - height: 52vh; - background-size: contain; - background-position: center center; - background-repeat: no-repeat; -} - -.gallery .item iframe { - width: 100%; - height: 100%; - border: 0; - padding: 0; - margin: 0; -} - -.search #search { display: block } -#search { - display: none; -} - -.closed #closed { display: block } -#closed { - display: none; - background-size: cover; - background-position: center; - background-repeat: no-repeat; - background-color: #eee; - transition: background 0.5s ease-in; -} -#closed .closed_store_msg { - position: absolute; - bottom: 20vh; - background: rgba(255,255,255,0.9); - padding-top: 20px; - padding-bottom: 10px; - text-align: center; - width: 100%; -} - -.product .content { - box-sizing:border-box; - width:calc(100vw - 50px); - position:relative; - margin:0 auto 40px; - padding:0; -} - -.product .product-header { - font-size:14px; - margin:18px 0 0; - max-width:60%; - position:relative; - font-weight:bold; -} -.product .product-header.wide { - max-width:100%; -} - -.product-group { - margin-top: 28px; - margin-bottom: 18px; - font-weight: bold; - text-align: center; - font-size: 17px; -} -.product-group:first-child { - margin-top: 0; -} - -#product::before { - content:''; - width:100%; - background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1)); - height:40px; - z-index:2; - position:absolute; - bottom:0px; - left:0 -} - -.product .style { - padding:4px 9px; - border:1px solid black; - float:left -} - -.product .share { - float:right; - padding:4px 9px; - border:1px solid black; -} - -.product .type { - display:table-cell; - font-size:14px; -} - -.product .size { - padding-right:16px; - position:relative; - box-sizing:border-box -} - -.product .price { - display:table-cell; - font-size:14px; - text-align:right; - vertical-align:bottom -} - -.product .price, .product .type { - font-weight:bold; - margin:0; - padding: 0 0 7px; -} - -.type-price { - display:table; - position:relative; - width:100% -} - -.style-share { - letter-spacing:0.5px; - font-size:12.35px -} - -.size-color { - position:relative; - font-size:12.35px -} - -.type-price, .style-share { - clear:both; - position:relative; - box-sizing:border-box -} - - -.size::after { - content: ''; - display: inline-block; - width: 1px; - height: calc(100% + 4px); - transform: translateY(-2px); - position: absolute; - top: 0; - right:5px; - background: #999; -} - - -.product .fit { - clear:both; - font-size:9px; - letter-spacing:0.5px; - text-decoration:underline; - text-transform:uppercase; - padding:12px 0 0; - -} - -.product .content .fit { - -} - -#product .gallery-prev, -#product .gallery-next { - top: 26vh; -} - -#product .content .body { - letter-spacing:0.35px; - font-size:12px; - box-sizing:border-box; - margin:0px auto 20px; - clear:both; - padding:13px 0; -} - -#collection .content { -position:relative; -padding-top:45px; -padding-bottom:45px; -} - -#collection h1 { - background-color: white; -} - -#collection h1.single-dept { - background-image: url(../img/angle-down.png); - background-size: contain; - background-position: top right; - background-repeat: no-repeat; -} - -#selector { - z-index:9 -} - diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/vendor/flickity.css b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/vendor/flickity.css deleted file mode 100755 index b8eca4e4..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/css/vendor/flickity.css +++ /dev/null @@ -1,141 +0,0 @@ -/*! Flickity v1.0.2 -http://flickity.metafizzy.co ----------------------------------------------- */ - -.flickity-enabled { - position: relative; -} - -.flickity-enabled:focus { outline: none; } - -.flickity-viewport { - overflow: hidden; - position: relative; - height: 100%; -} - -.flickity-slider { - position: absolute; - width: 100%; - height: 100%; -} - -/* draggable */ - -.flickity-enabled.is-draggable { - -webkit-tap-highlight-color: transparent; - tap-highlight-color: transparent; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.flickity-enabled.is-draggable .flickity-viewport { - cursor: move; - cursor: -webkit-grab; - cursor: grab; -} - -.flickity-enabled.is-draggable .flickity-viewport.is-pointer-down { - cursor: -webkit-grabbing; - cursor: grabbing; -} - -/* ---- previous/next buttons ---- */ - -.flickity-prev-next-button { - position: absolute; - top: 50%; - width: 44px; - height: 44px; - border: none; - border-radius: 50%; - background: white; - background: hsla(0, 0%, 100%, 0.75); - cursor: pointer; - /* vertically center */ - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); -} - -.flickity-prev-next-button:hover { background: white; } - -.flickity-prev-next-button:focus { - outline: none; - box-shadow: 0 0 0 5px #09F; -} - -.flickity-prev-next-button:active { - filter: alpha(opacity=60); /* IE8 */ - opacity: 0.6; -} - -.flickity-prev-next-button.previous { left: 10px; } -.flickity-prev-next-button.next { right: 10px; } -/* right to left */ -.flickity-rtl .flickity-prev-next-button.previous { - left: auto; - right: 10px; -} -.flickity-rtl .flickity-prev-next-button.next { - right: auto; - left: 10px; -} - -.flickity-prev-next-button:disabled { - filter: alpha(opacity=30); /* IE8 */ - opacity: 0.3; - cursor: auto; -} - -.flickity-prev-next-button svg { - position: absolute; - left: 20%; - top: 20%; - width: 60%; - height: 60%; -} - -.flickity-prev-next-button .arrow { - fill: #333; -} - -/* color & size if no SVG - IE8 and Android 2.3 */ -.flickity-prev-next-button.no-svg { - color: #333; - font-size: 26px; -} - -/* ---- page dots ---- */ - -.flickity-page-dots { - position: absolute; - width: 100%; - bottom: -25px; - padding: 0; - margin: 0; - list-style: none; - text-align: center; - line-height: 1; -} - -.flickity-rtl .flickity-page-dots { direction: rtl; } - -.flickity-page-dots .dot { - display: inline-block; - width: 10px; - height: 10px; - margin: 0 8px; - background: #333; - border-radius: 50%; - filter: alpha(opacity=25); /* IE8 */ - opacity: 0.25; - cursor: pointer; -} - -.flickity-page-dots .dot.is-selected { - filter: alpha(opacity=100); /* IE8 */ - opacity: 1; -} diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/db.json b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/db.json deleted file mode 100644 index 7e0fa471..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/db.json +++ /dev/null @@ -1,2124 +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": "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-over-shirt-in-nylon-metal", - "date": "Tue, 26 Jan 2016 12:00:00 GMT", - "title": "SS_’016 Over Shirt in Nylon Metal", - "subtitle": "Stone Island App Exclusive Colorway", - "body": "NYLON 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.", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/5f8ea79e-89b1-497a-a64d-ab1616a73d14.JPG", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/dcbdc373-b95c-4891-86ba-6dc39e13f49d.JPG", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/6828eb54-ebbf-412f-a246-5b208f8e6733.JPG", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/0ef84bf3-5b79-4e34-b115-9a31821cec24.JPG", - "caption": "" - } - ], - "__index": "1", - "dateCreated": "Tue, 26 Jan 2016 15:31:47 GMT" - }, - { - "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/76ecda74-afef-406b-9b17-2d940700a1f6.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/f96e6884-f558-4da4-bce6-dc6fa4137442.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/b22d0c15-e948-4b74-b275-c25cfdd824ec.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/2d5d5ced-3383-4203-affc-3fd0aff991b3.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/5698df03-ab54-4f08-ac64-5bdde9e9ba05.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/36c356ef-ffbd-47b4-8103-3310fc46eb6e.png", - "caption": "" - } - ], - "__index": 2, - "dateCreated": "Wed, 27 Jan 2016 01:57:35 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/83cc1844-73f2-4b76-b968-4d8225d84c5b.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/ae57c043-dc9c-43fb-a64f-867cece10c77.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/ea1b402b-fc94-4363-aa97-88806b6aadd1.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/bdcfd9d4-ae84-45de-8d80-3c91c8f8ce81.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/1c194494-d6e6-45ed-8a00-d4c337c2a104.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/83832a1b-14e7-41d2-afc9-12956cae78c9.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/944abccb-b2d0-40ee-88eb-7ee027127878.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/35290536-15b7-43de-9bbe-e3ee199fe520.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/b3538dbb-b203-49d4-93b7-59826fcf6298.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/9e5f54c7-ae5d-432a-b45e-2cbc2c98970c.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/eb961f79-587a-4df6-bac3-7159b313a6c2.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/eada5a2f-0de2-4a40-9e7a-409e1de28b4e.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/b8264d5d-d0cf-4e84-a7d2-0e241f7337c2.png", - "caption": "" - } - ], - "__index": "3", - "dateCreated": "Wed, 27 Jan 2016 01:58:22 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.", - "link": "http://www.stoneisland.com/experience/us/nikelab-x-stone-island/", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/783b5830-6f63-41df-ad3e-22e8a6ecb640.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/332d5d23-1661-4444-b9d3-fcebda25e17d.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/66ad13cd-11cd-477d-af29-1bac747c7fc7.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/f11681bb-e698-4206-a147-4083ef881180.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/4ae2c8e5-a7b0-4787-a564-86efee2a75f8.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/f88aa2e4-0359-4114-855c-f742c3347217.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/3adb8ecb-e656-40fd-b1d3-26afd25c1443.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/e13421b7-ace5-4540-a051-a6aaba198092.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/4ff448bf-bd24-40a2-86ff-ead87e3abc95.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/0ed0705a-7804-4ecb-871e-fb7da49d17c3.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/db63550e-4026-4dac-ae8c-23ae0c4ddcbf.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/7cde7501-df12-4849-9dc6-24e09917da4f.png", - "caption": "" - } - ], - "__index": 4, - "dateCreated": "Wed, 27 Jan 2016 02:06:13 GMT" - }, - { - "id": "45546-garment-dyed-pixel-reflective-", - "date": "Thu, 11 Feb 2016 12:00:00 GMT", - "title": "45546 GARMENT DYED PIXEL REFLECTIVE ", - "subtitle": "APP EXCLUSIVE 2/11 - 2/15", - "body": "GARMENT DYED PIXEL REFLECTIVE: STONE ISLAND’s research introduces garment dyeing on reflective fabrics. The landmark iridescent Nylon Metal fabric is printed with a resin substance containing thousands of glass microspheres. The garment dyeing procedure lends extraordinary colors to the textile base while the Pixel Reflective printing provides it with a strong capacity to reflect even the weakest light sources. A special agent was added to the dyeing bath for an anti-drop effect.\r\n\r\nLong Bomber jacket in Pixel reflective fabric. Garment dyed. Ribbed neckline and cuffs. Flap pockets with button flap on front. Straight pocket on chest with nylon tape edge. Windproof pocket with Velcro fastening on arm. Zip fastening.", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/6184e4f6-a1f5-483a-8151-4f425ea49da3.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/e179b0eb-9476-41a5-9a83-ccc9ce824d78.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/e451542c-392f-4fcc-ad80-142ab3551f16.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/8c593568-64c8-4bd2-bcab-d90ed83438f8.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/adb18f34-2968-4981-a5d1-a81a09f7e9c3.jpg", - "caption": "" - } - ], - "__index": "5", - "dateCreated": "Thu, 11 Feb 2016 15:01:24 GMT" - }, - { - "id": "stone-island_los-angeles", - "date": "Tue, 23 Feb 2016 12:00:00 GMT", - "title": "STONE ISLAND_LOS ANGELES", - "subtitle": "", - "body": "Stone Island opens first US retail location at 145 S La Brea Ave, Los Angeles.\r\n\r\nThe destination offers Stone Island collections, alongside curated brand experiences and presentations.\r\n\r\nThe store’s inaugural exhibition features “Reflective Research ‘992 — ‘015” which will run through March 13th, 2016\r\n\r\nSTONE ISLAND_LOS ANGELES\r\n145 S La Brea Avenue, Los Angeles, CA 90036\r\n\r\nMonday - Saturday 11AM - 7PM\r\nSunday - 11AM - 6PM", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/9d82d33c-e9ea-47b4-8aeb-8e316843bca8.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/4029fc99-1fa6-41ce-b0b2-bf05657333d1.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/d40cf381-c20f-4577-8326-e2f31e10875a.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/0749fbcf-1bfc-41b2-8540-5c6d358eddd3.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/4c13a8cc-c47e-4837-95b5-70a69f111a21.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/90c03aa2-869b-48b5-87aa-da22bffac4a7.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/a0807612-4ee0-494e-9820-c0426b3ac166.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/44ab5342-68d2-410c-90e5-2130f2fdc80d.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/c4aa9eea-7446-4309-a885-cdd50078880e.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/44342be6-39ef-4612-b76f-aa1c0c1b9a9c.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/60ae0f89-3d2d-4f6e-885c-fd3f2797c8a0.jpg", - "caption": "" - } - ], - "__index": "6", - "dateCreated": "Tue, 23 Feb 2016 18:02:12 GMT" - }, - { - "id": "stone-island-ss_-016-icons", - "date": "Wed, 24 Feb 2016 12:00:00 GMT", - "title": "Stone Island SS_'016 Icons", - "subtitle": "", - "body": "", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/afb364d3-a8fc-40e1-a922-d93d57a10f07.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/ccbcec28-fe70-4f60-8806-2dcce06b3121.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/af25c582-bca2-4365-b8f8-a262eae0e1ac.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/408d6ecb-fa1f-4d65-9e29-3e94574ff26a.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/6df375f6-9261-46e2-994a-b48b4b2b33c4.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/f6eb87a7-ffbb-4a65-a3e4-299c8d22f0a9.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/4593fb77-3bc7-475a-ac56-a42f3a40d2ef.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/8d7f419b-5342-4ccc-beeb-8354cc5823a1.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/8169511b-c904-42cf-8f26-077df472d6a9.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/adf18770-73fb-4f4b-bf9a-20efd5f72a53.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/30c9f8f4-92cb-4f51-a050-0d54e73dc862.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/cf274bc6-2690-4625-9902-5417d257e7e5.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/3a16057d-b939-4d82-b9b5-5f3ba5019dd8.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/b9baed9e-f7b5-46d8-bedf-bdf479a73797.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/fc14ba8f-920a-490b-b881-2bfea3c225cc.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/cf6f23c9-f24a-4a5c-945c-4ceed52c655f.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/061184a8-adef-4630-8fa7-527ba6a83d93.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/24c11eff-4795-4782-b8f2-8f92edfb428e.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/a7bab9ac-e23e-4f65-96b8-1dbbcef0299f.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/b49d11ad-02f6-4f5a-ae7b-dbc0d5782141.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/ea63d777-09f9-4813-b348-aafef19f5137.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/08c31779-5223-479a-b242-dcb7c9185d71.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/79058530-adc3-4415-9a01-268731f8c439.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/b5c527a5-dd95-4bfd-91d3-ae269d9aa31e.png", - "caption": "" - } - ], - "__index": "7", - "dateCreated": "Wed, 24 Feb 2016 19:18:05 GMT" - }, - { - "id": "44537-water-repellent-wool-ghost-piece-", - "date": "Tue, 01 Mar 2016 12:00:00 GMT", - "title": "44537 WATER REPELLENT WOOL - GHOST PIECE ", - "subtitle": "APP EXCLUSIVE 3/1 - 3/7", - "body": "WATER REPELLENT WOOL: 100% naturally water repellent wool. The specific fiber processing allow increased yarn contractility and the ultra-tight compact density weaving with high temperature finishing make the fabric windproof, breathable and water repellent without the need of chemicals, coating or lamination techniques.\r\n\r\nHooded jacket in water repellent wool. Diagonal pockets with zip fastening. Two pockets with slanting flap closed by hidden snaps on chest. Heat sealed tapes on inner seams. Tyvek® half lining with nylon mesh, in the hood as well. Hidden zip and snap fastening. \r\n\r\nGhost pieces are based on the concept of camouflage and are entirely monochromatic. Even their STONE ISLAND badges have been created in special mono-color versions to blend with the garment.", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/f5ceb26d-9830-4103-a29a-974c352617bf.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/48728c3c-5ee9-4b4c-abf3-5577eddab822.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/13fad590-9dd7-4529-a7e0-2e2685351bc8.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/c4ac3668-67b4-4287-bf87-f12df58c96c4.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/e4dd378e-034d-49cf-a683-7d267cb8e7c7.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/264d3e31-cf18-4e88-866c-feff0fd5377e.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/69d6714a-5b78-46f0-917e-2765f7ece13f.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/0b278eda-2223-4d73-874b-c4b1f163d0c8.png", - "caption": "" - } - ], - "__index": "8", - "dateCreated": "Tue, 01 Mar 2016 15:00:17 GMT" - }, - { - "id": "stone-island-supreme-", - "date": "Mon, 14 Mar 2016 12:00:00 GMT", - "title": "Stone Island / Supreme ", - "subtitle": "Co-Lab SS '016_Preview", - "body": "Third collaboration with the cult US skate brand Supreme.\r\nOuterwear, lightweight garments and accessories represent the fusion between the fabric research of Stone Island and the iconic style of Supreme.\r\n\r\nIN THE US AND CANADA THE CO-LAB WILL BE AVAILABLE FROM MARCH 17TH ON THE FOLLOWING CHANNELS: \r\nSTONE ISLAND APP AND STONE ISLAND LOS ANGELES STORE. SUPREME NEW YORK AND LOS ANGELES STORES, SUPREME APP AND ONLINE STORE.\r\n\r\nSTONE ISLAND FOR SUPREME \r\n701S1 HEAT REACTIVE – THERMOSENSITIVE FABRIC\r\nTrench coat in Heat Reactive fabric, changing color depending on temperature. The molecules of the micro pigments encapsulated in the coating change the path of light, the garment gradually turns to a lighter color as the temperature rises and becomes darker again as it drops.\r\nDetachable hood. Hand pockets with hidden snap fastening. Strap at cuffs, adjustable through snaps. Central back slit with hidden snap fastening. Hidden buttons fastening.Stone Island badge with white embroidery, reserved for garments that are made using advanced research into fabrics or processes. \r\n\r\nSTONE ISLAND FOR SUPREME \r\n401S2 NYLON METAL\r\nTrack Jacket in NYLON METAL. One of the most versatile fabrics born of Stone Island textile research. The trilobate structure of the nylon yarn and the grey weft/white warp color weave are the grounds of its distinctive metallic and iridescent sheen, when garment dyed. 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\nStand up collar. Tonal Supreme water based print on left sleeve. Welt pockets on front with double snap fastening. Elasticated cuffs and bottom band. Inner nylon mesh lining. Zip fastening.\r\n\r\nSTONE ISLAND FOR SUPREME \r\n401S3 NYLON METAL 4C PRINTED\r\nTrack Jacket in NYLON METAL 4C PRINTED. Nylon Metal is one of the most versatile fabrics born of Stone Island textile research. The trilobate structure of the nylon yarn and the grey weft/white warp color weave are the grounds of its distinctive metallic sheen. The fabric is printed with a 4 color pigment Supreme camouflage motif. The garment is washed at 40°C (104°F) with the addition of a special anti-drop agent.\r\nStand up collar. Supreme water based print on left sleeve. Welt pockets on front with double snap fastening. Elasticated cuffs and bottom band. Inner nylon mesh lining. Zip fastening.\r\n\r\nSTONE ISLAND FOR SUPREME \r\n301S2 NYLON METAL\r\nTrack Pants in NYLON METAL, one of the most versatile fabrics born of Stone Island textile research. The trilobate structure of the nylon yarn and the grey weft/white warp color weave are the grounds of its distinctive metallic and iridescent sheen, when garment dyed. The finished piece undergoes an elaborate double dye procedure providing different tones, intensities and colors to the fibers and textile accessories of the garment. \r\nTonal Supreme water based print on left leg. On seam hand pockets with snap fastening. One slit back pocket with hidden zip fastening. Elasticated waistband with inner drawstring. Elasticated leg bottom with side zip fastening. Inner nylon mesh lining.\r\n\r\nSTONE ISLAND FOR SUPREME \r\n301S3 NYLON METAL 4C PRINTED \r\nTrack Pants in NYLON METAL 4C PRINTED. Nylon Metal is one of the most versatile fabrics born of Stone Island textile research. The trilobate structure of the nylon yarn and the grey weft/white warp color weave are the grounds of its distinctive metallic sheen. The fabric is printed with a 4 color pigment Supreme camouflage motif. The garment is washed at 40°C (104°F). \r\nSupreme water based print on one leg. On seam hand pockets with snap fastening. One slit back pocket with hidden zip fastening. Elasticated waistband with inner drawstring. Elasticated leg bottom with side zip fastening. Inner nylon mesh lining.\r\n\r\nSTONE ISLAND FOR SUPREME \r\n501S7 COMPASS PIN SWEATER IN PIMA COTTON\r\nCrewneck sweater in 100% Pima Cotton. By using only selected long staples, Pima cotton has a superior soft hand and extra smooth feel.\r\nReflective tonal Stone Island/Supreme Compass Pin transfer print on chest. Ribbed cuffs and bottom band.\r\n\r\nSTONE ISLAND FOR SUPREME\r\n201S4 ALL OVER PLACED PRINT \r\nLong-sleeve T-Shirt in slightly raw cotton. The striped motif is pigment printed. The cutting of the piece respects the stripes placement with the Supreme print on back. Slight enzyme wash to loosen the hand of the print. \r\nStand up collar. Metal zip collar fastening. Topstitch seams on shoulders, with interior taping. Side splits on bottom sides. \r\n\r\nSTONE ISLAND FOR SUPREME \r\n901S5 COMPASS PIN DRYBAG® BY ORTLIEB\r\nDuffle bag in ultra-resistant waterproof PVC. The glossy and super resistant, heat sealed PVC Drybag® by Ortlieb carries the exclusive patented airtight waterproof zip for extreme protection. When air is captured inside the duffle bag it can act as a pillow.\r\nZip fastening. Big polyester strap handles. Supreme logo print on one side, Stone Island logo print on the other. Both ends are printed with the Stone Island/Supreme Compass Pin. Adjustable shoulder strap with padded piece carrying the Stone Island Compass logo. Pockets inside.\r\n\r\n903S6 STONE ISLAND HEAT REACTIVE\r\nTHERMOSENSITIVE FABRIC\r\nSupreme crusher in Stone Island Heat Reactive fabric, changing color depending on temperature. The molecules of the micro pigments encapsulated in the coating change the path of light, the garment gradually turns to a lighter color as the temperature rises and becomes darker again as it drops. \r\nStone Island patch logo on front. \r\n\r\n902S6 STONE ISLAND HEAT REACTIVE \r\nTHERMOSENSITIVE FABRIC\r\nSupreme six panels cap in Stone Island Heat Reactive fabric, changing color depending on temperature. The molecules of the micro pigments encapsulated in the coating change the path of light, the garment gradually turns to a lighter color as the temperature rises and becomes darker again as it drops.\r\nStone Island patch logo on front. Supreme embroidered logo on back. Adjustable closure.", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/69862dba-1df3-4f98-9dae-91783a4b2877.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/428df6c6-c60d-4f11-b00d-e90343118a13.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/b539aa07-328a-40b6-a993-daa2e05d8ff5.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/87f32651-1a69-4e6e-bb18-769bfc0fdbb1.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/dabb2e39-5700-4440-8c99-fbeaece6ec09.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/b445d653-4c81-48d5-98d3-3f4848d277d4.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/91326bed-8f98-4049-8883-bbda6226f95f.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/4d74363f-3362-4948-bac0-c6c8e4eb32e6.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/ddb040f9-a8b4-4f91-87a0-02fc53bfbe4f.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/358b2608-eef7-4580-b016-9cac172c1e55.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/51085eff-b0c7-4e09-af58-d68bec8b3d91.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/4907a7cd-0f1e-42ce-b7d0-9ad112ae478f.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/0b5f7a26-f879-4421-afe0-82996f6610f7.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/fc45fc87-a048-4fd3-8ff9-c58d5f5a7d15.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/7c6308b8-a99c-4b1b-8aad-c2d6dfc1a93f.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/681692a6-5b64-4f43-91ca-77ca7b45228e.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/5f5543bc-921a-4285-a4da-034910744976.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/097d40ba-f82c-4b0e-a614-de440e21345c.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/6787ab06-a7c5-4029-ac05-4e53d67a964b.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/378a4db2-e228-448d-83d6-e2735a89bdb9.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/61ec3ce3-b8bb-4544-b51f-779721bbb7b0.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/cd072dde-ec8e-4f23-b263-4fd83b04b9cf.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/a50b89e8-07e4-4da2-bf69-1b02f84feae7.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/04a57bfd-5e22-42df-a415-4dbec1d7c193.jpg", - "caption": "" - } - ], - "__index": "9", - "dateCreated": "Mon, 14 Mar 2016 13:57:55 GMT" - }, - { - "id": "70329-tank-shield-multi-layer-fusion-technology-", - "date": "Thu, 21 Apr 2016 12:00:00 GMT", - "title": "70329 TANK SHIELD - MULTI LAYER FUSION TECHNOLOGY ", - "subtitle": "", - "body": "Exclusive MULTI LAYER FUSION TECHNOLOGY. The garment, made in an opaque polyester tela, is preassembled and then entirely laminated with slightly overlapping panels producing a performing membrane to isolate hermetically the outer textile base and stitching. This technique guarantees improved waterproofness and breathability compared to common lamination techniques. \r\n\r\nCar coat using highly performing fabric and construction. Diagonal pockets with zip fastening. Adjustable straps at cuffs. Central vent on back. Zip and snap fastening.", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/77035181-a6e8-4817-a4f2-3dfee6afd509.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/f96d0cc2-a005-4c28-9dd4-467a204e6bc5.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/9b2305c6-20e6-4731-84e3-64fcf4d293ab.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/65ac1990-4390-4d84-bbbc-9afcdf61a1ad.png", - "caption": "" - } - ], - "__index": "10", - "dateCreated": "Thu, 21 Apr 2016 14:00:47 GMT" - }, - { - "id": "109ln-t-co-old", - "date": "Tue, 14 Jun 2016 12:00:00 GMT", - "title": "109LN T.CO+OLD", - "subtitle": "", - "body": "Hooded over shirt in stretch cotton broken twill. Garment dyed to create an OLD effect, an exclusive dyeing treatment and subsequent fading on the finished garment to create a slightly worn and three-dimensional appearance. Flat pockets at sides. Chest pockets with horizontal zip fastening. Ergonomic shaped sleeves. Hood edged with cotton tape. Zip fastening.", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/b4329a3b-0349-4473-af22-4b6f5151e337.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/7f762552-b961-4ab3-9ec3-97b5221bad3d.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/c003b009-79bc-491d-b3a7-3b79c8f4d0f0.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/fc12babb-8c79-423c-a1a5-68664e177952.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/5ba840fd-8159-496c-a1e4-772ce0c67510.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/73287608-5669-4404-8bf3-ddae63fd9131.png", - "caption": "" - } - ], - "__index": 10, - "dateCreated": "Tue, 14 Jun 2016 15:07:41 GMT" - }, - { - "id": "icon-imagery_fw-016-017", - "date": "Thu, 07 Jul 2016 12:00:00 GMT", - "title": "ICON IMAGERY_FW '016 '017", - "subtitle": "", - "body": "", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/4ad2bab9-2a63-4991-bf1e-2b1f616801fd.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/3c959c20-2534-477d-a77f-9eb59dfc5d93.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/e83dea7b-4672-4a02-bc85-def9929af6f0.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/0aa5e8d3-dc41-4c7f-a118-9007957674bb.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/681f033b-61aa-4ec0-8faf-2ac9e9874290.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/e68fdfa1-b543-42d1-84ca-db2f3b52d90d.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/4abf9ef6-38ea-46fa-a0bc-9911b18fa106.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/e904dc23-a492-42ab-be30-0f3df2b3c957.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/0fb47449-d80f-4478-85c9-25d53d269967.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/cf1205ae-63cd-4eab-86e4-b9008322a16b.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/9e601e11-75c8-49f9-bdfe-eda859a27282.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/4062566b-aaf5-48af-803e-0b9ad492cad4.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/6aaf42eb-68a8-4428-9bf5-2990adefa030.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/154300df-032b-4c1c-86c2-d63f48931415.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/1ed22a93-d2cd-43f8-a9c1-aafd376a4a16.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/06b2a209-14e9-422c-acf5-633992a4c9d4.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/98889f73-3320-4ee9-9ecd-30d36c6ad123.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/a2259e94-8c11-4afc-9b0f-0852b9fa5a7d.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/4eecf0ec-1bc0-4f54-a0c0-21466f272ca9.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/0d6b242b-b9aa-483f-b99a-d1bfbb03bacb.png", - "caption": "" - } - ], - "__index": "11", - "dateCreated": "Thu, 07 Jul 2016 18:14:16 GMT" - }, - { - "id": "457j4-stone-island-house-check-jacquard-on-nylon-metal-black-watro-", - "date": "Tue, 12 Jul 2016 12:00:00 GMT", - "title": "457J4 STONE ISLAND HOUSE CHECK JACQUARD ON NYLON METAL BLACK WATRO ", - "subtitle": "App exclusive 7/12 - 7/18", - "body": "STONE ISLAND HOUSE CHECK JACQUARD ON NYLON METAL BLACK WATRO: Long anorak in Nylon Metal Black Watro with jacquard motive. 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 iridescent sheen of Nylon Metal. Jacquard technique creates a rip-stop design on the surface that is derived from the Stone Island House Check and integrates the star in the vertical and horizontal checked pattern. The fabric has been resin treated inside to achieve a mild water resistance. Garment dyed through double color recipe with the addition of a special anti-drop agent.\r\n\r\nDrawstring around the raised collar. Two large pockets on the front with hidden snap fastening. The pockets are contoured by zip; the garment can be folded away and packed into the zipped front pockets. Elastic tape at cuffs. Drawstring bottom hem.", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/7e1ec747-7322-43d4-b9c6-aec9104bf351.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/8b75a21c-d372-4acd-99ca-9556c7c3088c.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/db0fc358-7447-4623-a0bb-3f6cee5ce8b7.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/ae096f9c-3699-4e7f-b6a0-36ccf93ca5f9.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/d4fa8667-27aa-4c60-a363-6493620be435.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/70fa7875-bd70-4572-9612-f7d039238126.png", - "caption": "" - } - ], - "__index": "12", - "dateCreated": "Tue, 12 Jul 2016 15:15:33 GMT" - }, - { - "id": "stone-island-opens-new-york-store", - "date": "Thu, 14 Jul 2016 12:00:00 GMT", - "title": "STONE ISLAND OPENS NEW YORK STORE", - "subtitle": "", - "body": "Stone Island opens New York store, located at 41 Greene St. New York, NY 10013.\r\n\r\nThe unique location — a classic SoHo building from 1910 that last autumn hosted the exhibition “Reflective Research ‘992 – ‘015”— measures 3,500 SF and has undergone significant architectural renovation to create an archetypal Stone Island environment. Presenting both Stone Island and Stone Island Shadow Project collections, the flagship store in New York will carry special and exclusive products and installations in its dedicated Hub presentation space.\r\n\r\nStone Island New York\r\n41 Greene St, New York, NY 10013\r\nHours: Monday—Saturday, 11am-7pm, and Sunday, 11am-6pm.", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/b627cfa1-0782-42c3-9487-a57428893fda.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/2ac003a6-f035-49cb-bc27-2da6a3ce4ffb.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/c636b626-4fdb-4ac6-818a-35c26b520e0e.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/55a429b6-2f47-4c79-86f6-05db5d7fa7eb.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/d4636f88-d11f-4fca-af70-df941378bca0.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/aaf8f0a5-a420-427b-af4b-bad00b5709fd.jpg", - "caption": "" - } - ], - "__index": "14", - "dateCreated": "Thu, 14 Jul 2016 17:16:01 GMT" - }, - { - "id": "10112-nylon-metal", - "date": "Tue, 23 Aug 2016 12:00:00 GMT", - "title": "10112 NYLON METAL", - "subtitle": "", - "body": "NYLON METAL: Over shirt in Nylon Metal doubled inside in jersey. The trilobate structure of the nylon yarn, with its gray weft and white ready to dye warp colors, is the grounds of the distinctive metallic and iridescent sheen of Nylon Metal. The finished piece undergoes an elaborate double dye process providing the fibers and textile accessories of the garment with different tones, intensities and shades.\r\n\r\nFront yoke with inseam pocket alongside the closure with hidden zips. Snaps at cuffs. Zip fastening.", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/b2b4036c-5b9f-4537-9b16-9b823835d1c1.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/11eb738b-98a4-4ba3-a39a-63e19915c584.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/9a6f91ee-6950-4efd-9f2e-a75d47100169.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/a8dfb935-a952-419e-ac89-932ec755d5ae.png", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/75214c5d-5840-485f-b836-6cd8e9cb9ed2.png", - "caption": "" - } - ], - "__index": "15", - "dateCreated": "Tue, 23 Aug 2016 14:03:29 GMT" - }, - { - "id": "stone-island-chinatown-invitational", - "date": "Tue, 30 Aug 2016 12:00:00 GMT", - "title": "Stone Island Chinatown Invitational", - "subtitle": "", - "body": "Earlier this summer the Chinatown Soccer Club (CSC) hosted the 2016 Chinatown Invitational in Lower Manhattan. This year’s tournament featured four teams from around the world: CSC (New York), Ringleaders FC (Montreal), Soho Warriors FC (London), and Stone Island FC (Milan). The participating teams comprised an eclectic group of creatives united by a shared love of soccer.\r\n\r\nWriter, director, and CSC member, Alexander Klein, documented the invitational, capturing the diversity and camaraderie of the tournament, stating \"The short film was inspired by the pitches of downtown New York. It’s soccer infused with the sights, sounds, and energy of New York City — creating a sporting flavor unlike anything else in the world.\" Earlier this year he shot the soccer-documentary WE ARE SAN MARINO, narrated by Alex Karpovsky, for BitTorrent Now. \r\n\r\nThe short film will be presented by Stone Island from 6-9 tonight at the Nanogallery (100 Forsyth Street) and be on show through September 11. Alongside the film will be an installation of imagery, shot before and during the tournament by CSC members and photographers, Pep Kim and Dominic Neitz.", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/907548da-f870-420a-aff3-d4fec07cfd55.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/197f894b-e7dd-43b8-a603-12bff46f3c2f.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/b89ea6bb-0128-4259-8bb6-28ca631dd61b.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/a1913c20-5c80-4303-bcdb-69dcdf261043.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/79dd20cd-08b8-490d-b678-f98210ba8692.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/df4affac-20c9-4186-9c28-1d6efcb6cd85.jpg", - "caption": "" - } - ], - "__index": "10", - "dateCreated": "Tue, 30 Aug 2016 16:02:48 GMT" - }, - { - "id": "polypropylene-denim", - "date": "Mon, 26 Sep 2016 12:00:00 GMT", - "title": "POLYPROPYLENE DENIM", - "subtitle": "APP EXCLUSIVE PREVIEW FROM 9/27 TO 10/3", - "body": "A new interpretation of a classic.\r\nPolypropylene, a material with antibacterial properties, is the lightest available fiber on earth.\r\nEven very bulky garments made in this material astonish for their specific lightness.\r\nThese denim cloth weaves a polypropylene yarn into an indigo dyed cotton warp. The result is an impeccable denim tela with a drastically reduced weight: it has the look of a 19 ounce material but weighs only 10.\r\nThe jumpsuit, the outerwear pieces, the trousers and backpack have undergone the DARK treatment, a manual sanding and light stonewash as well as an enzyme wash.\r\n \r\nPOLYPROPYLENE INDIGO KNIT is made by weaving yarns, an innovative technique from the knitwear industry. For this project a yarn was especially created from indigo dyed polypropylene and cotton yarn with chain construction.\r\n \r\nThe INDIGO FLEECE features WASH treatment.", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/ab51e2e6-19d6-4bfd-b8aa-7089bd49635b.jpg", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/091aa545-2605-4374-9437-e375d096d75c.jpg", - "caption": "" - } - ], - "__index": 10, - "dateCreated": "Tue, 27 Sep 2016 14:02:10 GMT" - }, - { - "id": "polypropylene-denim-video", - "date": "Tue, 27 Sep 2016 12:00:00 GMT", - "title": "POLYPROPYLENE DENIM VIDEO", - "subtitle": "APP EXCLUSIVE PREVIEW FROM 9/27 TO 10/3", - "body": "", - "link": "https://www.youtube.com/watch?v=twiCdserZ1M&feature=youtu.be", - "store": "true", - "__index": 11, - "dateCreated": "Tue, 27 Sep 2016 14:02:50 GMT", - "image": [ - { - "uri": "https://i.ytimg.com/vi/twiCdserZ1M/maxresdefault.jpg", - "width": "1920", - "height": "1080", - "caption": "" - } - ] - }, - { - "id": "garment-dyed-crinkle-reps-and-overalls-in-mussola-gommata", - "date": "Wed, 05 Oct 2016 12:00:00 GMT", - "title": "GARMENT DYED CRINKLE REPS AND OVERALLS IN MUSSOLA GOMMATA", - "subtitle": "APP EXCLUSIVE FROM 10/6 TO 10/12", - "body": "70223_Long down jacket in light nylon rep with an ultra-tight weaving construction. The resin coating of its inner face makes it wind resistant and mildly water resistant. \r\nThe dye bath gives the resin-treated fabric a slightly crinkled appearance on the surface.\r\n\r\nF0211_Overalls in Mussola Gommata, an exclusive fabric created by laminating an ultra light cotton muslin to an outer matte transparent polyurethane film. Rear and bottom front leg in Nylon Metal, with a metallic/iridescent appearance. The special double dye recipe provides the garment with unique shades. ", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/96660fe0-8b04-11e6-bd08-255bc61066e4.jpg", - "width": "827", - "height": "1240", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/96761570-8b04-11e6-bd08-255bc61066e4.jpg", - "width": "827", - "height": "1240", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/96800080-8b04-11e6-bd08-255bc61066e4.jpg", - "width": "827", - "height": "1240", - "caption": "" - } - ], - "__index": 12, - "dateCreated": "Wed, 05 Oct 2016 14:04:36 GMT" - }, - { - "id": "limited-edition-ice-jacket-resin-t-shell-down_fluo-pink-", - "date": "Tue, 11 Oct 2016 12:00:00 GMT", - "title": "LIMITED EDITION: ICE JACKET RESIN-T SHELL DOWN_FLUO PINK ", - "subtitle": "APP EXCLUSIVE FROM 10/13 TO 10/19", - "body": "70999_Parka/Down Jacket limited edition featuring a fluorescent pink internal down. \r\n\r\nThe jacket has a very light translucent nylon shell that changes color according to temperature variations thanks to a special thermo-chromatic resin coating.
\r\nInside the shell, a removable premium feather down jacket in fluorescent pink nylon creates further color play.
\r\n\r\nStone Island presents the new Ice Jacket, the evolution of the historical thermo-chromatic garment introduced in 1988.
\r\n\r\nThe Jacket will be on sale exclusively at Stone Island stores in New York and Los Angeles and on this App starting from 13 October.
", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/aab445e0-8fc1-11e6-bd08-255bc61066e4.jpg", - "width": "1334", - "height": "1000", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/a997d960-8fc1-11e6-bd08-255bc61066e4.jpg", - "width": "906", - "height": "1181", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/a97cfe60-8fc1-11e6-bd08-255bc61066e4.jpg", - "width": "906", - "height": "1181", - "caption": "" - } - ], - "__index": 17, - "dateCreated": "Tue, 11 Oct 2016 15:01:20 GMT" - }, - { - "id": "featherweight-leather-down", - "date": "Wed, 19 Oct 2016 12:00:00 GMT", - "title": "Featherweight Leather Down", - "subtitle": "APP EXCLUSIVE FROM 10/20 TO 10/26", - "body": "00196_Ultralight leather down jacket with inside insulation in nylon technical mesh filled with the finest down by direct injection. The insulation is heat sealed along the external leather seams with an artisan technique.
Completely heat sealed. ", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/f2c7b2d0-9607-11e6-bd08-255bc61066e4.jpg", - "width": "1000", - "height": "1335", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/f2730320-9607-11e6-bd08-255bc61066e4.jpg", - "width": "1000", - "height": "749", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/f2b5d880-9607-11e6-bd08-255bc61066e4.jpg", - "width": "1000", - "height": "749", - "caption": "" - } - ], - "__index": 18, - "dateCreated": "Wed, 19 Oct 2016 14:26:10 GMT" - }, - { - "id": "prototype-research-series_video", - "date": "Wed, 02 Nov 2016 12:00:00 GMT", - "title": "Prototype Research Series_Video", - "subtitle": "", - "body": "The STONE ISLAND _ Prototype Research Series are native limited editions. Numbered garments are made in fabrics and with treatments born from research and experimentation processes that have not yet been industrialized.\r\n\r\n
Series 01 presents LASERING ON LIQUID REFLECTIVE BASE, a piece made in a highly reflective fabric, entirely hand sprayed with a resin-based color.
A laser beam etches the surface, producing a graphic motif on the finished garment.
\r\n\r\nThe first drop of the project will be on sale exclusively on the Stone Island App starting Friday, 4 November.", - "link": "https://www.youtube.com/watch?v=PjhAdGglfa8", - "store": "false", - "__index": 19, - "dateCreated": "Wed, 02 Nov 2016 17:05:50 GMT", - "image": [] - }, - { - "id": "prototype-research_series-01-br-701r1_lasering-on-liquid-reflective-base", - "date": "Fri, 04 Nov 2016 12:00:00 GMT", - "title": "PROTOTYPE RESEARCH_SERIES 01 <br>701R1_LASERING ON LIQUID REFLECTIVE BASE", - "subtitle": "
LIMITED EDITION - NUMBERED 01 TO 100", - "body": "Anorak in an exclusive custom made highly reflective fabric, thanks to a resin coating embedding thousands of glass microspheres, individually hand sprayed with a resin-based color and then oven dried.
A numerical control laser beam etches the surface, producing a three dimensional tone-on-tone effect on the finished garment.\r\n\r\nThe backside features the lasered Stone Island logo.
The high level of artisanship involved in the process makes each garment unique and unrepeatable.
\r\n\r\nExclusively available on Stone Island App
", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/87b07d60-a29b-11e6-bd08-255bc61066e4.jpg", - "width": "1211", - "height": "1477", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/8832ccc0-a29b-11e6-bd08-255bc61066e4.jpg", - "width": "1211", - "height": "1477", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/88604560-a29b-11e6-bd08-255bc61066e4.jpg", - "width": "1211", - "height": "1477", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/88db8fe0-a29b-11e6-bd08-255bc61066e4.jpg", - "width": "1211", - "height": "1477", - "caption": "" - } - ], - "__index": 20, - "dateCreated": "Fri, 04 Nov 2016 15:27:17 GMT" - }, - { - "id": "nikelab-x-stone-island_preview", - "date": "Wed, 09 Nov 2016 12:00:00 GMT", - "title": "NIKELAB X STONE ISLAND_PREVIEW", - "subtitle": "", - "body": "The third collaboration between NikeLab and Stone Island, concluding the year of the Windrunner.\r\n\r\nThe Nike Windrunner, remastered with parka length, volumes and functions, is made in JACQUARD GRID ON WOOL FUR, exclusively engineered by Stone Island for this co-lab.\r\n\r\nThe garment is composed of an outer face in a jacquard engineered tonic nylon rip stop grid that is bonded to a water and wind resistant membrane and to an inner 100% wool fur on cotton layer.\r\nNike’s distinctive Windrunner chevron is made in nylon tape. Through a complex garment dyeing recipe, the jacquard grid and the inner woolen fur both capture high definition contrasts and subtle tonal shades, while respecting the performance features of the membrane.\r\n\r\nNikeLab x Stone Island will be on sale from Thursday, November 17 in Stone Island flagship stores, on the Stone Island app, in NikeLab stores and on nike.com/nikelab.", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/64ea2d80-a697-11e6-bd08-255bc61066e4.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/64f2e010-a697-11e6-bd08-255bc61066e4.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/64ed3ac0-a697-11e6-bd08-255bc61066e4.jpg", - "width": "776", - "height": "1012", - "caption": "" - } - ], - "__index": 21, - "dateCreated": "Wed, 09 Nov 2016 16:13:18 GMT" - }, - { - "id": "spring-summer_-017-lookbook", - "date": "Tue, 13 Dec 2016 12:00:00 GMT", - "title": "SPRING SUMMER_'017 LOOKBOOK", - "subtitle": "", - "body": "SS'017 Crinkle Reps Bomber special preview exclusive available from December 15th on the Stone Island App.", - "link": "", - "store": "false", - "__index": 22, - "dateCreated": "Tue, 13 Dec 2016 14:58:50 GMT", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/21ba23d0-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/200ee4d0-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/1e2f2850-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/1c8066e0-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/197bb260-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/17803080-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/15b7f3a0-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/13b4f7b0-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/0579ee80-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/036dcad0-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/01a9aca0-c145-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/ff9ec170-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/fda98120-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/fb383300-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/f918fc80-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/f73bb100-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/f4906720-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/f27a7f70-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/f0134370-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/e950eab0-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/e35404d0-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/debfd6b0-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/daa98b20-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d7f95f40-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d4cde8e0-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d1b97cf0-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/ceb2cca0-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/c87b4ec0-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/c3b206e0-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/bf0101f0-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/bac04b00-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/b823a720-c144-11e6-bd08-255bc61066e4.jpg", - "width": "800", - "height": "1200", - "caption": "" - } - ] - }, - { - "id": "stone-island_spring-summer_-017_video-teaser", - "date": "Wed, 11 Jan 2017 12:00:00 GMT", - "title": "Stone Island_Spring Summer_'017_Video teaser", - "subtitle": "", - "body": "", - "link": "https://youtu.be/iia_oPZPY_Y", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/93699100-d8dd-11e6-abc7-59ceb822d9d2.jpg", - "width": "1920", - "height": "1080", - "caption": "" - } - ], - "__index": 23, - "dateCreated": "Thu, 12 Jan 2017 15:42:24 GMT" - }, - { - "id": "stone-island_spring-summer_-017_icon-imagery", - "date": "Thu, 12 Jan 2017 12:00:00 GMT", - "title": "Stone Island_Spring Summer_'017_Icon Imagery", - "subtitle": "", - "body": "", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d5f07520-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d4b13e60-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d57c7da0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d6bb1820-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d432bf90-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d4f54c40-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d33043b0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d58222f0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d28f21b0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d1f1a930-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d3219db0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d32658a0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d0611e20-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d131b490-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d07bf920-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d1d2fda0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d21006a0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/d01d5e60-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/cec19ef0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/cd455f30-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/ce493aa0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/ce8224f0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/ce774f80-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/cd49a4f0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/cd0e49a0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/cbc771c0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/cac06200-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/c9ca6940-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/cbbe22f0-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/cbba5260-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/ca202a60-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/ca130b00-d8d8-11e6-abc7-59ceb822d9d2.jpg", - "width": "776", - "height": "1012", - "caption": "" - } - ], - "__index": 24, - "dateCreated": "Thu, 12 Jan 2017 15:46:04 GMT" - }, - { - "id": "nikelab-x-stone-island-sock-dart-mid_preview-stone-island-research-meets-nike-design", - "date": "Thu, 19 Jan 2017 12:00:00 GMT", - "title": "NIKELAB X STONE ISLAND SOCK DART MID_PREVIEW
STONE ISLAND RESEARCH MEETS NIKE DESIGN", - "subtitle": "", - "body": "With this collaboration Stone Island has been challenged to apply its research skills on Nike fabrics in an interpretation of the Nike Sock Dart Mid Slip On Shoe.
Applying the personal approach to investigation and the development of new technologies, Stone Island has tested several techniques in able to combine a graphic look and feel with functionality, in order to find the right meeting point between its know-how and Nike’s design.
The outcome is a glossy and elastic engineered zonal silicone print, adding structure and protection to the hyper-stretch breathable sandwich mesh used for the upper, still maintains the flexibility attributes that are signature to the Sock Dart.
The new mid-cut silhouette has an extended collar with a leather grain deboss pattern and poly spandex lining.
Glossy molded midfoot adjustable strap.
New Duralon foam outsole: the forefoot features a multidirectional sipe pattern for water dispersion and improved traction.
NikeLab x Stone Island Sock Dart Mid will be released in three colorways: black, obsidian bleu and - exclusively at flagship stores - in sequoia green.
It will be on sale from Thursday, January 26 in Stone Island flagship stores, on the Stone Island app, in NikeLab stores and on nike.com/nikelab.", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/a6e5c860-de47-11e6-abc7-59ceb822d9d2.jpg", - "width": "1000", - "height": "563", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/89838140-de47-11e6-abc7-59ceb822d9d2.jpg", - "width": "770", - "height": "488", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/89aa4320-de47-11e6-abc7-59ceb822d9d2.jpg", - "width": "770", - "height": "488", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/89a7ab10-de47-11e6-abc7-59ceb822d9d2.jpg", - "width": "770", - "height": "488", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/89378420-de47-11e6-abc7-59ceb822d9d2.jpg", - "width": "770", - "height": "488", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/89548200-de47-11e6-abc7-59ceb822d9d2.jpg", - "width": "770", - "height": "488", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/890c5570-de47-11e6-abc7-59ceb822d9d2.jpg", - "width": "770", - "height": "488", - "caption": "" - } - ], - "__index": 25, - "dateCreated": "Thu, 19 Jan 2017 13:44:32 GMT" - }, - { - "id": "hand-corrosion_stone-island-app-exclusive-colorways", - "date": "Sun, 22 Jan 2017 12:00:00 GMT", - "title": "Hand Corrosion_Stone Island App Exclusive Colorways", - "subtitle": "", - "body": "An artisan process with corrosive paste
that makes each garment unique and unrepeatable.
\r\n\r\nHAND CORROSION\r\nGarments are dyed with special recipes and then decolored by hand with a corrosive paste.
The Stone Island badge is attached to the pieces during the manual fading and features the same corrosion marks.
Residual dye highlights the architecture of the garments.
This artisan process makes each piece unique and unrepeatable.\r\n\r\nSTONE ISLAND APP EXCLUSIVE COLORWAYS \r\n\r\n45131_Yellow Field Jacket made in military-derived cotton satin, garment dyed with special corrodible colorants and then manually faded, steamed and intensely washed with the addition of an anti-drop agent.\r\n\r\n
541A1_Black cotton crew neck. Worked in brioche stitch knit. Garment dyed with special corrodible colorants and then faded by hand with a corrosive paste, steamed and intensely washed. ", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/020846f0-e17c-11e6-abc7-59ceb822d9d2.jpg", - "width": "580", - "height": "813", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/023d60b0-e17c-11e6-abc7-59ceb822d9d2.jpg", - "width": "580", - "height": "813", - "caption": "" - } - ], - "__index": 26, - "dateCreated": "Mon, 23 Jan 2017 14:57:23 GMT" - }, - { - "id": "hand-corrosion-video", - "date": "Mon, 23 Jan 2017 12:00:00 GMT", - "title": "Hand Corrosion Video", - "subtitle": "", - "body": "An artisan process with corrosive paste\r\nthat makes each garment unique and unrepeatable.", - "link": "https://youtu.be/1u6OovE0cY4", - "store": "true", - "__index": 27, - "dateCreated": "Mon, 23 Jan 2017 15:21:19 GMT", - "image": [] - }, - { - "id": "nylon-metal-color-weft_app-exclusive-colorway", - "date": "Tue, 14 Feb 2017 12:00:00 GMT", - "title": "Nylon Metal Color Weft_App Exclusive Colorway", - "subtitle": "", - "body": "The evolution of one of the most iconic Stone Island fabrics\r\nUnprecedented iridescent colors \r\n\r\nNYLON METAL COLOR WEFT\r\n\r\n10245_Over shirt in Nylon Metal with colored weaved yarns.
Two pockets with flap and button fastening on chest.
Hidden zip fastening.
\r\n\r\nThe metallic and iridescent aspect of Nylon Metal, one of the most versatile fabrics issued from the STONE ISLAND textile research, is enhanced with colored tones thanks to the tint of its weft yarns. Garments made in this fabric undergo an elaborate double recipe dye process enhancing its chromatic iridescences.
\r\n\r\nAPP EXCLUSIVE FROM 2/16 TO 2/20", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/undefined/579783e0-f2c7-11e6-abc7-59ceb822d9d2.jpg", - "width": "466", - "height": "692", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/57936530-f2c7-11e6-abc7-59ceb822d9d2.jpg", - "width": "466", - "height": "692", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/57861ec0-f2c7-11e6-abc7-59ceb822d9d2.jpg", - "width": "466", - "height": "692", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/57a16ef0-f2c7-11e6-abc7-59ceb822d9d2.jpg", - "width": "466", - "height": "692", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/57a2a770-f2c7-11e6-abc7-59ceb822d9d2.jpg", - "width": "466", - "height": "692", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/578e0e00-f2c7-11e6-abc7-59ceb822d9d2.jpg", - "width": "466", - "height": "692", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/57ef67e0-f2c7-11e6-abc7-59ceb822d9d2.jpg", - "width": "466", - "height": "692", - "caption": "" - }, - { - "uri": "https://ltho.s3.amazonaws.com/undefined/58036510-f2c7-11e6-abc7-59ceb822d9d2.jpg", - "width": "466", - "height": "692", - "caption": "" - } - ], - "__index": 28, - "dateCreated": "Tue, 14 Feb 2017 15:08:43 GMT" - }, - { - "id": "garment-dyed-plated-reflective", - "date": "Thu, 02 Mar 2017 12:00:00 GMT", - "title": "GARMENT DYED PLATED REFLECTIVE", - "subtitle": "", - "body": "The new Reflective Jacket is made with an innovative fabric engineered to be garment-dyed.\r\nIts nylon tela base is plated with a highly reflective resin coating, while the details in Mussola Gommata and fabric mixes highlight the garment-dye technique.\r\n\r\nSTONE ISLAND APP EXCLUSIVE COLORWAYS PINK QUARTZ AND AVIO BLUE\r\n\r\n453S6_Hooded jacket constructed with parts in Mussola Gommata. \r\nThe finished piece is garment dyed with specific double dye recipes lending color to the textile base while respecting the reflective surface.", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://marsupial.s3.amazonaws.com/stoneisland/b9fe8eb0-ff6b-11e6-8ca3-81835dc6c47b.jpg", - "width": "580", - "height": "813", - "caption": "" - }, - { - "uri": "https://marsupial.s3.amazonaws.com/stoneisland/ba1a7b20-ff6b-11e6-8ca3-81835dc6c47b.jpg", - "width": "580", - "height": "813", - "caption": "" - } - ], - "__index": 29, - "dateCreated": "Thu, 02 Mar 2017 17:17:11 GMT" - }, - { - "id": "stone-island-marina_tank-shield-featuring-multi-layer-fusion-technology-", - "date": "Thu, 09 Mar 2017 12:00:00 GMT", - "title": "STONE ISLAND MARINA_TANK SHIELD
FEATURING MULTI LAYER FUSION TECHNOLOGY ", - "subtitle": "", - "body": "703X1_Trench Coat characterized by highly performing
fabric and construction. Fold-away hood into stand up collar.
\r\n\r\nGarments pre-assembled and then laminated to membrane-bonded panels, hermetically sealing the external base fabric and all seams.\r\n
The exclusive Multi Layer Fusion Technology guarantees maximum waterproofness and breathability.
\r\nStripes on sleeves and logo on back are created with laser technology, revealing the inside membrane.\r\n\r\n
APP EXCLUSIVE FROM 3/10 TO 3/16", - "link": "", - "store": "false", - "image": [ - { - "uri": "https://marsupial.s3.amazonaws.com/stoneisland/782e15f0-04d9-11e7-9f22-910070d5f727.jpg", - "width": "1304", - "height": "1229", - "caption": "" - }, - { - "uri": "https://marsupial.s3.amazonaws.com/stoneisland/781adc10-04d9-11e7-9f22-910070d5f727.jpg", - "width": "1571", - "height": "2000", - "caption": "" - }, - { - "uri": "https://marsupial.s3.amazonaws.com/stoneisland/779ea730-04d9-11e7-9f22-910070d5f727.jpg", - "width": "1571", - "height": "2000", - "caption": "" - } - ], - "__index": 30, - "dateCreated": "Thu, 09 Mar 2017 15:03:13 GMT" - }, - { - "id": "stone-island-marina_corrosion-print_app-exclusive-preview", - "date": "Thu, 23 Mar 2017 12:00:00 GMT", - "title": "Stone Island Marina_Corrosion Print_App Exclusive Preview", - "subtitle": "", - "body": "T-shirt and bermuda shorts made in black printed cotton with placed reserve Stone Island Marina motif.
A further striped motif is printed through the corrosion of the base fabric color.
\r\n\r\nBackpack in ultra-resistant waterproof PVC with waterproof zip fastening.
Thermal printed Stone Island Marina graphic and stripes.\r\n\r\n
APP EXCLUSIVE FROM 3/24 TO 3/29", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://marsupial.s3.amazonaws.com/stoneisland/974bb740-0fd2-11e7-85aa-87522fc1a5c5.jpg", - "width": "580", - "height": "813", - "caption": "" - }, - { - "uri": "https://marsupial.s3.amazonaws.com/stoneisland/969bef40-0fd2-11e7-85aa-87522fc1a5c5.jpg", - "width": "580", - "height": "813", - "caption": "" - } - ], - "__index": 31, - "dateCreated": "Thu, 23 Mar 2017 14:22:34 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://marsupial.s3.amazonaws.com/stoneisland/cfffd4b0-14b7-11e7-b4a1-69af24d3ff84.jpg", - "width": "580", - "height": "813", - "caption": "" - } - ], - "__index": 0, - "dateCreated": "Fri, 20 Nov 2015 00:45:03 GMT", - "collection": "", - "FitsLarge": "false", - "BackgroundIsGray": "false", - "CollectionId": "", - "StoreStatus": "closed", - "OpensOn": "", - "DepartmentId": "", - "StoreClosedMessageOne": "", - "StoreClosedMessageTwo": "", - "FittingCodes": "", - "DepartmentStoreStatus": "closed", - "Departments": [ - { - "text": "STONE ISLAND MARINA_CORROSION PRINT <br>& ORTLIEB DRY BAGS", - "uri": "DrpppMrnCrrsn" - } - ], - "GroupBy": "size", - "FilterBy": "size", - "ShowProductNameOnCollectionPage": true - } - ] -}
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/CDVNotification.bundle/beep.wav b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/CDVNotification.bundle/beep.wav Binary files differdeleted file mode 100755 index 05f5997f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/CDVNotification.bundle/beep.wav +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-568h@2x~iphone.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-568h@2x~iphone.png Binary files differdeleted file mode 100755 index 47079c45..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-568h@2x~iphone.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-667h.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-667h.png Binary files differdeleted file mode 100755 index 57a8f40e..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-667h.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-736h.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-736h.png Binary files differdeleted file mode 100755 index 2f00da21..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-736h.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Landscape-736h.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Landscape-736h.png Binary files differdeleted file mode 100755 index fc6512f7..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Landscape-736h.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Landscape@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Landscape@2x~ipad.png Binary files differdeleted file mode 100755 index f0fa0658..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Landscape@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Landscape~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Landscape~ipad.png Binary files differdeleted file mode 100755 index 89964903..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Landscape~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Portrait@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Portrait@2x~ipad.png Binary files differdeleted file mode 100755 index 9002f6f3..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Portrait@2x~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Portrait~ipad.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Portrait~ipad.png Binary files differdeleted file mode 100755 index 2916e875..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default-Portrait~ipad.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default@2x~iphone.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default@2x~iphone.png Binary files differdeleted file mode 100755 index 13ada67a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default@2x~iphone.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default~iphone.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default~iphone.png Binary files differdeleted file mode 100755 index 19d2b2ae..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/Resources/splash/Default~iphone.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/angle-down.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/angle-down.png Binary files differdeleted file mode 100644 index e0b3b00f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/angle-down.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/bottom-fade.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/bottom-fade.png Binary files differdeleted file mode 100755 index 2765c9bf..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/bottom-fade.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/cart-box.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/cart-box.png Binary files differdeleted file mode 100755 index 4f2ff471..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/cart-box.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/cart-handle.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/cart-handle.png Binary files differdeleted file mode 100755 index 96b9e400..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/cart-handle.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/compass-logo.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/compass-logo.png Binary files differdeleted file mode 100755 index bdc8d946..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/compass-logo.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/compass-logo.png.old b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/compass-logo.png.old Binary files differdeleted file mode 100755 index d280a7fa..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/compass-logo.png.old +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/fade-to-bottom-threshold.gif b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/fade-to-bottom-threshold.gif Binary files differdeleted file mode 100755 index 808757e9..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/fade-to-bottom-threshold.gif +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/fade-to-bottom.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/fade-to-bottom.png Binary files differdeleted file mode 100755 index 2765c9bf..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/fade-to-bottom.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/left-arrow.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/left-arrow.png Binary files differdeleted file mode 100755 index d19f48f3..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/left-arrow.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/right-arrow.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/right-arrow.png Binary files differdeleted file mode 100755 index 00b62502..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/right-arrow.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/small-cart-box.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/small-cart-box.png Binary files differdeleted file mode 100755 index 59ebcd70..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/small-cart-box.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/small-cart-handle.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/small-cart-handle.png Binary files differdeleted file mode 100755 index 6b3567c2..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/small-cart-handle.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/small-logo.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/small-logo.png Binary files differdeleted file mode 100755 index 7b6e1b0d..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/small-logo.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/spinner.gif b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/spinner.gif Binary files differdeleted file mode 100755 index d9e986d3..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/spinner.gif +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/wide-logo.png b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/wide-logo.png Binary files differdeleted file mode 100755 index a7f4a2ac..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/img/wide-logo.png +++ /dev/null diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/index.html b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/index.html deleted file mode 100755 index 0b10cd52..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/index.html +++ /dev/null @@ -1,1154 +0,0 @@ -<!doctype html> -<html> -<head> - <!-- - Customize this policy to fit your own app's needs. For more guidance, see: - https://github.com/apache/cordova-plugin-whitelist/blob/master/README.md#content-security-policy - Some notes: - * 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 inline scripts in order to mitigate risk of XSS vulnerabilities. To change this: - * Enable inline JS: add 'unsafe-inline' to default-src - --> - - -<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"> - <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width"> - <link rel="stylesheet" type="text/css" href="css/fonts/fonts.css"> - <link rel="stylesheet" type="text/css" href="css/fonts/ionicons.css"> - <link rel="stylesheet" type="text/css" href="css/vendor/flickity.css"> - <link rel="stylesheet" type="text/css" href="css/index.css"> - <link rel="stylesheet" type="text/css" href="css/nav.css"> - <link rel="stylesheet" type="text/css" href="css/account.css"> - <link rel="stylesheet" type="text/css" href="css/products.css"> - <link rel="stylesheet" type="text/css" href="css/cart.css"> - <link rel="stylesheet" type="text/css" href="css/blogs.css"> - <title>Stone Island</title> -</head> -<body class="loading"> - -<div id="nav"> - <div id="nav-container"> - <div id="nav-row"> - <!-- flex --> - - <span class="menu"> - <div class="logo"></div> - <div class="main_menu"> - <span class="store">STORE</span> - <span class="hub">HUB</span> - <span class="story">STORY</span> - <span class="archive">ARCHIVE</span> - </div> - <div class="account_menu"> - <span class="account_back menu-emphasis">< ACCOUNT</span> - <span class="profile">PROFILE</span> - <span class="payment">PAYMENT</span> - <span class="shipping">SHIPPING</span> - <span class="orders">ORDERS</span> - <span class="return_link">RETURN</span> - <span class="settings">NOTIFICATIONS</span> - </div> - <div class="faq_menu"> - <span class="faq_back menu-emphasis">< FAQ</span> - <span class="privacy">PRIVACY POLICY</span> - <span class="terms">TERMS AND CONDITIONS</span> - <span class="returns">RETURN POLICY</span> - <span class="care">CUSTOMER CARE</span> - </div> - </span> - - </div> - <div id="nav-fill"> - <!-- flex fill --> - <span class="submenu"> - <div class="main_menu"> - <span class="account">ACCOUNT</span> - <span class="login">LOGIN</span> - <span class="faq">FAQ</span> - </div> - <div class="account_menu"> - <span class="logout">LOGOUT</span> - <span class="faq">FAQ</span> - <span class="main">MAIN MENU</span> - </div> - <div class="faq_menu"> - <span class="account">ACCOUNT</span> - <span class="login">LOGIN</span> - <span class="logout">LOGOUT</span> - <span class="main">MAIN MENU</span> - </div> - </span> - </div> - <!-- end flex --> - </div> - - <span class="social"> - <span class="fb ion-social-facebook"></span> - <span class="insta ion-social-instagram-outline"></span> - <span class="tw ion-social-twitter"></span> - <span class="yt ion-social-youtube"></span> - </span> -</div> - -<div id="content"> - - <div id="intro"> - <div id="compass"></div> - <div class="store">STORE</div> - <div class="hub">HUB</div> - <div class="story">STORY</div> - <div class="archive">ARCHIVE</div> - <div class="alert"></div> - <span class="latlng">+40° 58' 90.9" N 74° 04' 46.3" W</span> - </div> - - <div id="header"> - <span class="burger ion-android-menu"></span> - <span class="logo"></span> - <span class="cart_rapper"><span class="cart"><span class="cart_count">0</span></span></span> - </div> - - <div id="footer"> - <!-- 'Cancel' i think needs to go BACK in the navigation.. rather than jumping to the home screen --> - <div class="cancel">CANCEL</div> - <div class="ok">OK</div> - </div> - - - <!-- BLOGS ================================================ --> - - <div id="story"> - <div class="scroll"> - <h1>STORY</h1> - <img> - <ul class="links"></ul> - <div class="content"> - <script type="text/html" class="template"> - <div data-id="{{id}}"> - <div class="body">{{body}}</div> - </div> - </script> - </div> - </div> - </div> - - <div id="hub"> - <div class="scroll"> - <h1>HUB</h1> - <div class="content"> - <script type="text/html" class="template"> - <div class="hub_item" data-id="{{id}}"> - <div class="gallery gallery-{{id}}"></div> - <div class="gallery-left"></div> - <div class="gallery-right"></div> - <div class="content-header"> - <div class="content-share"> - SHARE + - </div> - <span class="title">{{title}}</span> - <span class="subtitle">{{subtitle}}</span> - <span class="date"> - {{date}} - <span class="store"> - | <b><u>STORE</u></b> - </span> - </span> - </div> - <div class="body">{{body}}</div> - </div> - </script> - </div> - </div> - <div class="fade-cover"></div> - </div> - - <div id="archive"> - <div class="scroll"> - <div class="content"> - - <script type="text/html" class="template"> - <div class="image" style="background-image:url({{image}})"></div> - <div class="text"> - <h2> - <b>{{code}}</b><br> - {{label}} - </h2> - <div class="body"> - {{caption}} - </div> - </div> - - </script> - - </div> - </div> - <div class="menu"> - <div class="items"> - <script type="text/html" class="template"> - <div class="item">{{title}}</div> - </script> - </div> - </div> - <div class="heading"> - <h1>ARCHIVE</h1> - <div class="subtitle">'982'015</div> - </div> - </div> - - <div id="privacy" class="page"> - <div class="scroll"> - <h1>PRIVACY POLICY</h1> - <div class="content"></div> - </div> - </div> - <div id="terms" class="page"> - <div class="scroll"> - <h1>TERMS AND CONDITIONS</h1> - <div class="content"></div> - </div> - </div> - <div id="returns" class="page"> - <div class="scroll"> - <h1>RETURN POLICY</h1> - <div class="content"></div> - </div> - </div> - <div id="care" class="page"> - <div class="scroll"> - <h1>CUSTOMER CARE</h1> - <div class="content"></div> - </div> - </div> - - - <!-- STORE ================================================ --> - - <div id="collection"> - <div class="scroll"> - <h1>LOADING...</h1> - <div class="loader"></div> - <div class="content"> - <script type="text/html" class="template"> - <div class="item" data-code="{{code8}}"> - <img src="{{image}}"> - </div> - </script> - </div> - </div> - </div> - - <div id="search"> - <div class="scroll"> - <h1>SEARCH</h1> - <div class="form"> - <input type="text" class="q" placeholder="ENTER YOUR SEARCH"> - </div> - </div> - </div> - - <div id="product"> - <div class="scroll"> - <div class="loader"></div> - <div id="gallery" class="gallery"> - <script type="text/html" class="template"> - <div class="item" style="background-image:url({{image}})"></div> - </script> - </div> - <div class="gallery-left"></div> - <div class="gallery-right"></div> - <div class="content"> - <div class="product-header"> - <span class="title"></span> - </div> - <div class="type-price"> - <span class="type"></span> - <span class="price"></span> - </div> - <div class="style-share"> - <span class="style"> - <div class="size-color"> - <span class="size"></span> - <span class="color"></span> - </div> - </span> - <span class="share">SHARE +</span> - </div> - <div class="fit">Fits Large</div> - <div class="body"> - </div> - <div class="sizing"> - <b>Sizing:</b> The products of this collaboration fit slightly larger than the classic Stone Island garments. - <br><br> - We suggest you choose a smaller size than yours. - </div> - </div> - </div> - </div> - - <div id="closed"> - <div class="closed_store_msg"> - <h3> - LOADING THE STORE, PLEASE WAIT - </h3> - <h4> - </h4> - <div class="website_link"> - visit<br> - <b>www.stoneisland.com</b> - </div> - </div> - </div> - - - <!-- ACCOUNT ================================================ --> - - <div id="login"> - <div class="scroll"> - <h1>LOGIN</h1> - <div class="form"> - <div class="container"> - <div class="container-row"> - <input type="email" name="Email" placeholder="EMAIL ADDRESS" required tabindex="1"> - <form><input type="password" name="Password" placeholder="PASSWORD" required tabindex="2"></form> - </div> - <div class="container-fill"> - <div class="container-message premessage"> - <div class="newuser">New User?</div> - <div class="forgotpassword">Forgot Password?</div> - </div> - <div class="container-message submessage"> - <span class="msg"></span> - </div> - </div> - </div> - <input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;"> - </div> - </div> - </div> - - <div id="logout"> - <div class="scroll"> - <h1>LOGOUT</h1> - <div class="container"> - <div class="container-fill"> - <span class="container-message msg"> - You are now logged out. - </span> - </div> - </div> - </div> - </div> - - <div id="signup"> - <div class="scroll"> - <h1>NEW USER</h1> - <div class="form"> - <div class="container"> - <div class="container-row"> - <input type="text" name="Name" placeholder="FIRST NAME" required tabindex="1"> - <input type="text" name="Surname" placeholder="LAST NAME" required tabindex="2"> - <input type="email" name="Email" placeholder="EMAIL ADDRESS" required tabindex="3"> - <input type="email" name="ConfirmEmail" placeholder="CONFIRM EMAIL ADDRESS" required tabindex="4"> - <div class="select-wrapper date-wrapper"> - <span>BIRTHDAY (OPTIONAL)</span> - <input type="date" name="BirthDay" min="1900-01-01" placeholder="BIRTHDAY (MM/DD/YYYY)" required tabindex="5"> - </div> - - <h2>PASSWORD</h2> - <input type="password" name="Password" placeholder="PASSWORD (7 CHARACTERS OR MORE)" required tabindex="6"> - <input type="password" name="Password2" placeholder="CONFIRM PASSWORD" required tabindex="7"> - </div> - - <div class="container-row"> - <div class="checkbox-container "> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input type="checkbox" id="checkbox-data-profiling" name="DataProfiling" value="true" required tabindex="8"> - <label for="checkbox-data-profiling"></label> - </div> - <label class="checkbox-caption" for="checkbox-data-profiling"> - I agree that YOOX and SPORTSWEAR COMPANY may collect my personal information for marketing purposes (newsletters, news and promotions). - </label> - </div> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input type="checkbox" id="checkbox-shopping-data-profiling" name="DataProfiling" value="true" required tabindex="9"> - <label for="checkbox-shopping-data-profiling"></label> - </div> - <label class="checkbox-caption" for="checkbox-shopping-data-profiling"> - I agree that YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may collect my personal information for creating a profile of my shopping habits. - </label> - </div> - <div class="privacy-msg"> - Consult our <u>PRIVACY POLICY</u> for further information. - </div> - </div> - </div> - </div> - </div> - </div> - </div> - - <div id="profile"> - <div class="scroll"> - <h1>PROFILE</h1> - <div class="form"> - <div class="container"> - <div class="container-row"> - <input type="text" name="Name" placeholder="FIRST NAME" required tabindex="1"> - <input type="text" name="Surname" placeholder="LAST NAME" required tabindex="2"> - <input type="email" name="Email" placeholder="EMAIL ADDRESS" required tabindex="3"> - <div class="select-wrapper date-wrapper"> - <span>BIRTHDAY (MM/DD/YYYY)</span> - <input type="date" name="BirthDay" min="1900-01-01" placeholder="BIRTHDAY (MM/DD/YYYY)" required tabindex="4"> - </div> - - <h2>CHANGE PASSWORD</h2> - <input type="password" name="CurrentPassword" placeholder="CURRENT PASSWORD" required> - <input type="password" name="NewPassword" placeholder="NEW PASSWORD (7 CHARACTERS OR MORE)" required tabindex="5"> - <div class="container-fill container-fill-condensed"> - <div class="container-message container-message-condensed"> - <span class="msg msg-condensed"> - </span> - </div> - </div> - <div class="container-row"> - <div class="checkbox-container"> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input type="checkbox" id="receive-newsletter-profile" name="YooxLetter" value="true" required tabindex="6"> - <label for="receive-newsletter-profile"></label> - </div> - <label class="checkbox-caption" for="receive-newsletter-profile"> - <b>Newsletter</b><br> - Receive Stone Island Newsletter - </label> - </div> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input type="checkbox" id="checkbox-shopping-data-profiling-profile" name="DataProfiling" value="true" required tabindex="7"> - <label for="checkbox-shopping-data-profiling-profile"></label> - </div> - <label class="checkbox-caption" for="checkbox-shopping-data-profiling-profile"> - I agree that YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may collect my personal information for creating a profile of my shopping habits. - </label> - </div> - <div class="privacy-msg"> - Consult our <u>PRIVACY POLICY</u> for further information. - </div> - </div> - </div> - </div> - </div> - </div> - </div> - </div> - - - <div id="shipping"> - <div class="scroll"> - <h1>SHIPPING</h1> - <div class="form"> - <div class="container"> - <div class="container-row"> - <div class="address"></div> - </div> - <div class="container-fill"> - <div class="container-message"> - <span class="msg"> - * Your personal and payment<br> - information will always remain private - </span> - </div> - </div> - </div> - </div> - </div> - </div> - - <div id="payment"> - <div class="scroll"> - <h1>PAYMENT</h1> - <div class="form"> - <div class="container"> - <div class="container-row"> - <div class="cc"></div> - <div class="address"></div> - </div> - <div class="container-fill"> - <div class="container-message"> - <span class="msg"> - * Your personal and payment<br> - information will always remain private - </span> - </div> - </div> - </div> - </div> - </div> - </div> - - <div id="settings"> - <div class="scroll"> - <h1>NOTIFICATIONS</h1> - <div class="form"> - <div class="toggle-container"> - <div class="toggle-row"> - <div class="caption"> - <h3>Store</h3> - Receive notifications for Store - </div> - <div class="toggle"> - <input type="checkbox" id="store-notifications" name="store" class="switch"> - <label for="store-notifications"></label> - </div> - </div> - <div class="toggle-row"> - <div class="caption"> - <h3>Hub</h3> - Receive notifications for Hub - </div> - <div class="toggle"> - <input type="checkbox" id="hub-notifications" name="hub" class="switch"> - <label for="hub-notifications"></label> - </div> - </div> - </div> - </div> - </div> - </div> - - <div id="orders"> - <div class="scroll"> - <h1>ORDERS</h1> - <div id="order_list"> - <div class="list"></div> - <div class="empty">You have no orders.</div> - <script type="text/html" class="list_template"> - <div class="item" data-id="{{id}}"> - <div class="details-container"> - <div class="details"> - Details > - </div> - <div class="txt"> - - <span class="text-date">{{date}}</span> - <span class="text-id">ORDER #: {{id}}</span> - <span class="text-total">ORDER TOTAL: {{total}}</span> - </div> - </div> - <div class="images"> - </div> - </div> - </script> - </div> - - <div id="single_order"> - <div class="order_section"> - <h2>ORDER SUMMARY</h2> - - <div class="rows"> - <script type="text/html" class="item_template"> - <div class="cart_item_info"> - <span class="sku">{{sku}}</span> - <span class="title">{{title}}</span> - <span class="type">{{type}}</span> - <div class="meta"> - <div class="meta-size"><b>SIZE:</b> {{size}}</div> - <div class="meta-color"><b>COLOR:</b> {{color}}</div> - <div class="meta-quantity"><b>QUANTITY:</b> {{quantity}}</div> - </div> - </div> - <div class="cart_item_price"> - <span class="price">{{price}}</span> - </div> - </script> - </div> - <div class="cart-summary"> - <div class="cart-summary-row"> - <span class="label">SUB TOTAL</span> - <span class="subtotal"></span> - </div> - <div class="cart-summary-row"> - <span class="label">ESTIMATED SHIPPING & HANDLING</span> - <span class="shipping"></span> - </div> - <div class="cart-summary-row"> - <span class="label">TAX</span> - <span class="tax"></span> - </div> - <div class="cart-summary-row"> - <span class="label">TOTAL</span> - <span class="total"></span> - </div> - </div> - </div> - - <div class="order_section"> - <h2>SHIP TO</h2> - <div class="order_section_container"> - <div class="shipping_address"></div> - <div class="shipping_method"></div> - </div> - </div> - - </div> - </div> - </div> - - <!-- CART ================================================ --> - - <div id="cart"> - <h1> - <span class="full_msg"> - YOUR CART / <span class="itemcount"></span> - </span> - <span class="empty_msg"> - YOUR CART IS EMPTY - </span> - </h1> - - <div class="steps"> - <span class="summary_step">SUMMARY</span> - <span class="shipping_step">SHIPPING</span> - <span class="payment_step">BILLING</span> - </div> - - <div id="cart_summary"> - <div class="scroll"> - <div class="summary-container container"> - <div class="container-row"> - <div class="cart_body"> - <div class="rows"> - <script type="text/html" class="template"> - <div class="cart_item_image"> - <img src="{{image}}"> - </div> - <div class="cart_item_info"> - <span class="sku">{{sku}}</span> - <span class="title">{{title}}</span> - <span class="type">{{type}}</span> - <div class="meta"> - <div class="meta-size"><b>SIZE:</b> {{size}}</div> - <div class="meta-color"><b>COLOR:</b> {{color}}</div> - <div class="meta-quantity"><b>QUANTITY:</b> {{quantity}}</div> - </div> - </div> - <div class="cart_item_price"> - <span class="remove"></span> - <span class="price">{{price}}</span> - </div> - </script> - </div> - <div class="cart-summary"> - <div class="cart-summary-row"> - <span class="label">SUB TOTAL</span> - <span class="subtotal"></span> - </div> - <div class="cart-summary-row"> - <span class="label">ESTIMATED SHIPPING<br>& HANDLING</span> - <span class="shipping"></span> - </div> - <div class="cart-summary-row"> - <span class="label">TAX</span> - <span class="tax"></span> - </div> - <div class="cart-summary-row"> - <span class="label">TOTAL</span> - <span class="total"></span> - </div> - </div> - </div> - </div> - <div class="container-fill"> - <div class="container-message cart_empty"> - You have nothing in your cart. - </div> - </div> - </div> - </div> - </div> - - <div id="cart_shipping"> - <div class="scroll"> - <div class="form"> - <div class="dropdown-wrapper"> - <div class="dropdown-title add_edit">add / edit</div> - <div class="dropdown select_address"> - ADDRESS - </div> - </div> - <div class="address_list checkbox-container"> - <script type="text/html" class="template"> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input id="address-checkbox-{{id}}" type="radio" name="AddressId" value="{{id}}" {{checked}}> - <label for="address-checkbox-{{id}}"></label> - </div> - <label class="checkbox-caption" for="address-checkbox-{{id}}"> - {{name}}<br> - {{address}}, {{city}}, {{state}} {{zip}} - </label> - </div> - </script> - </div> - <div class="address"></div> - - <h3>SHIPPING METHOD</h3> - - <div class="checkbox-container"> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input id="express-shipping" type="radio" name="ShippingType" value="Express" checked required> - <label for="express-shipping"></label> - </div> - <label class="checkbox-caption" for="express-shipping"> - <b>COMPLIMENTARY EXPRESS</b><br> - (DELIVERY IN 2-4 WORKING DAYS) - </label> - </div> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input id="standard-shipping" type="radio" name="ShippingType" value="Standard" required> - <label for="standard-shipping"></label> - </div> - <label class="checkbox-caption" for="standard-shipping"> - <b>STANDARD SHIPPING</b><br> - (DELIVERY IN 5-8 WORKING DAYS) - </label> - </div> - </div> - - <div class="container-row"> - <div class="container-fill"> - <div class="container-message"> - <span class="msg"> - * Your personal and payment<br> - information will always remain private - </span> - </div> - </div> - </div> - - </div> - </div> - </div> - - <div id="cart_payment"> - <div class="scroll"> - <div class="form"> - - <div class="billing-container container"> - <div class="container-row"> - - <div class="checkbox-container"> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input id="same-as-shipping" type="checkbox" name="SameAsShipping" value="true"> - <label for="same-as-shipping"></label> - </div> - <label class="checkbox-caption" for="same-as-shipping"> - SAME AS SHIPPING ADDRESS - </label> - </div> - </div> - - <div class="billing_address_rapper"> - - <div class="address_dropdown dropdown-wrapper"> - <div class="dropdown-title add_edit">add / edit</div> - <div class="dropdown select_address"> - BILLING ADDRESS - </div> - </div> - <div class="address_list checkbox-container"> - <script type="text/html" class="address_row_template"> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input id="address-checkbox-{{id}}" type="radio" name="AddressId" value="{{id}}" {{checked}}> - <label for="address-checkbox-{{id}}"></label> - </div> - <label class="checkbox-caption" for="address-checkbox-{{id}}"> - {{name}}<br> - {{address}}, {{city}}, {{state}} {{zip}} - </label> - </div> - </script> - </div> - - <div class="address"></div> - - </div> - - <div class="cc_dropdown dropdown-wrapper"> - <div class="dropdown-title add_edit">add / edit</div> - <div class="dropdown select_address"> - PAYMENT METHOD - </div> - </div> - - <div class="cc_list checkbox-container"> - <script type="text/html" class="cc_template"> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input id="cc-checkbox-{{id}}" type="radio" name="CCId" value="{{id}}" {{checked}}> - <label for="cc-checkbox-{{id}}"></label> - </div> - <label class="checkbox-caption" for="cc-checkbox-{{id}}"> - {{number}}<br> - {{type}} {{exp}} - </label> - </div> - </script> - </div> - - <div class="cc"></div> - - <div class="cc_confirm"> - <h3>PLEASE ENTER YOUR SECURITY CODE TO CONFIRM</h3> - <input type="number" name="CvvConfirm" placeholder="SECURITY CODE" required> - </div> - </div> - - <div class="container-fill"> - <div class="container-message"> - <span class="msg"> - * Your personal and payment<br> - information will always remain private - </span> - </div> - </div> - </div> - <br><br><br><br> - - </div> - </div> - </div> - - <div id="cart_confirm"> - <div class="scroll"> - <h1>CONFIRM</h1> - - <div class="order_section"> - <h2>ORDER SUMMARY</h2> - - <div class="rows"> - <script type="text/html" class="template"> - <div class="cart_item_info"> - <span class="sku">{{sku}}</span> - <span class="title">{{title}}</span> - <span class="type">{{type}}</span> - <div class="meta"> - <div class="meta-size"><b>SIZE:</b> {{size}}</div> - <div class="meta-color"><b>COLOR:</b> {{color}}</div> - <div class="meta-quantity"><b>QUANTITY:</b> {{quantity}}</div> - </div> - </div> - <div class="cart_item_price"> - <span class="price">{{price}}</span> - </div> - </script> - </div> - <div class="cart-summary"> - <div class="cart-summary-row"> - <span class="label">SUB TOTAL</span> - <span class="subtotal"></span> - </div> - <div class="cart-summary-row"> - <span class="label">ESTIMATED SHIPPING<br>& HANDLING</span> - <span class="shipping"></span> - </div> - <div class="cart-summary-row"> - <span class="label">TAX</span> - <span class="tax"></span> - </div> - <div class="cart-summary-row"> - <span class="label">TOTAL</span> - <span class="total"></span> - </div> - </div> - </div> - - <div class="order_section"> - <h2>SHIP TO</h2> - - <div class="shipping_address"></div> - <div class="shipping_method"></div> - </div> - - <div class="order_section"> - <h2>BILL TO</h2> - - <div class="payment_name"></div> - <div class="payment_method"></div> - </div> - - </div> - </div> - - <div id="cart_thanks"> - <div class="copy"> - <b>THANK YOU</b> - <p> - Please check your inbox for your confirmation email. - </p> - </div> - </div> - - <div id="cart_error"> - <div class="copy"> - <b>WE'RE SORRY</b> - <p class="errrrrrrrrrrrrrrr"></p> - </div> - </div> - - </div> - - <div id="curtain"> - <div class="loader"></div> - </div> - - <div id="selector"> - <div class="options"> - <script type="text/html" class="template"> - <div data-id="{{id}}">{{label}}</div> - </script> - </div> - </div> - -</div> - -<script type="text/html" id="creditcard_template"> - <input type="number" name="Number" placeholder="CREDIT CARD NUMBER" required> - <div class="half-input"> - - <div class="select-wrapper"> - <span>EXPIRATION MONTH</span> - <select name="ExpirationMonth"> - <option value="NONE">EXPIRATION MONTH</option> - <option value="01">01</option> - <option value="02">02</option> - <option value="03">03</option> - <option value="04">04</option> - <option value="05">05</option> - <option value="06">06</option> - <option value="07">07</option> - <option value="08">08</option> - <option value="09">09</option> - <option value="10">10</option> - <option value="11">11</option> - <option value="12">12</option> - </select> - </div> - <div class="select-wrapper"> - <span>EXPIRATION YEAR</span> - <select name="ExpirationYear"> - <option value="NONE">EXPIRATION YEAR</option> - <option value="2016">2016</option> - <option value="2017">2017</option> - <option value="2018">2018</option> - <option value="2019">2019</option> - <option value="2020">2020</option> - <option value="2021">2021</option> - <option value="2022">2022</option> - <option value="2023">2023</option> - <option value="2024">2024</option> - <option value="2025">2025</option> - </select> - </div> - </div> - <input type="number" name="Cvv" placeholder="SECURITY CODE" required> -</script> - -<script type="text/html" id="address_template"> - <input type="text" name="Name" placeholder="First Name"> - <input type="text" name="Surname" placeholder="Last Name"> - <input type="text" name="Address1" placeholder="Address Line 1"> - <input type="text" name="Address2" placeholder="Address Line 2"> - <div class="half-input"> - <input type="text" name="City" placeholder="City"> - <div class="select-wrapper"> - <span>STATE</span> - <select name="Province"> - <option value="NONE" selected>State</option> - <option value="AL">Alabama</option> - <option value="AK">Alaska</option> - <option value="AZ">Arizona</option> - <option value="AR">Arkansas</option> - <option value="CA">California</option> - <option value="CO">Colorado</option> - <option value="CT">Connecticut</option> - <option value="DE">Delaware</option> - <option value="DC">District Of Columbia</option> - <option value="FL">Florida</option> - <option value="GA">Georgia</option> - <option value="HI">Hawaii</option> - <option value="ID">Idaho</option> - <option value="IL">Illinois</option> - <option value="IN">Indiana</option> - <option value="IA">Iowa</option> - <option value="KS">Kansas</option> - <option value="KY">Kentucky</option> - <option value="LA">Louisiana</option> - <option value="ME">Maine</option> - <option value="MD">Maryland</option> - <option value="MA">Massachusetts</option> - <option value="MI">Michigan</option> - <option value="MN">Minnesota</option> - <option value="MS">Mississippi</option> - <option value="MO">Missouri</option> - <option value="MT">Montana</option> - <option value="NE">Nebraska</option> - <option value="NV">Nevada</option> - <option value="NH">New Hampshire</option> - <option value="NJ">New Jersey</option> - <option value="NM">New Mexico</option> - <option value="NY">New York</option> - <option value="NC">North Carolina</option> - <option value="ND">North Dakota</option> - <option value="OH">Ohio</option> - <option value="OK">Oklahoma</option> - <option value="OR">Oregon</option> - <option value="PA">Pennsylvania</option> - <option value="RI">Rhode Island</option> - <option value="SC">South Carolina</option> - <option value="SD">South Dakota</option> - <option value="TN">Tennessee</option> - <option value="TX">Texas</option> - <option value="UT">Utah</option> - <option value="VT">Vermont</option> - <option value="VA">Virginia</option> - <option value="WA">Washington</option> - <option value="WV">West Virginia</option> - <option value="WI">Wisconsin</option> - <option value="WY">Wyoming</option> - <option disabled>_________________</option> - <option value="AB">Alberta</option> - <option value="BC">British Columbia</option> - <option value="MB">Manitoba</option> - <option value="NB">New Brunswick</option> - <option value="NL">Newfoundland and Labrador</option> - <option value="NS">Nova Scotia</option> - <option value="NT">Northwest Territories</option> - <option value="NU">Nunavut</option> - <option value="ON">Ontario</option> - <option value="PE">Prince Edward Island</option> - <option value="SK">Saskatchewan</option> - <option value="QC">Quebec</option> - <option value="YT">Yukon</option> - </select> - </div> - </div> - <div class="half-input"> - <input type="text" name="ZipCode" placeholder="ZIP" required> - <div class="country-wrapper-static"> - <span class="country-label">UNITED STATES</span> -<!-- - <div id="country-select"> - <input type="text" name="Country" placeholder="UNITED STATES" required> - </div> - --> - </div> - </div> - <input type="number" name="Phone" placeholder="PHONE NUMBER"> -<!-- - <div class="checkbox-container save_as_default"> - <div class="checkbox-row"> - <div class="checkbox-toggle"> - <input id="save_as_default_cart_shipping" type="checkbox" name="IsDefault" value="true"> - <label for="save_as_default_cart_shipping"></label> - </div> - <label class="checkbox-caption" for="save_as_default_cart_shipping"> - SAVE AS DEFAULT - </label> - </div> - </div> ---> - -</script> - -</body> -<script src="cordova.js"></script> -<script src="js/vendor/jquery-2.1.4.min.js"></script> -<script src="js/vendor/fastclick.js"></script> -<script src="js/vendor/iscroll.js"></script> -<script src="js/vendor/loader.js"></script> -<script src="js/vendor/lodash.min.js"></script> -<script src="js/vendor/moment.js"></script> -<script src="js/vendor/oktween.js"></script> -<script src="js/vendor/prefixfree.js"></script> -<script src="js/vendor/promise.js"></script> -<script src="js/vendor/flickity.pkgd.js"></script> -<script src="js/vendor/util.js"></script> -<script src="js/vendor/jquery.creditCardValidator.js"></script> - -<script src="js/sdk/_sdk.js"></script> -<script src="js/sdk/account.js"></script> -<script src="js/sdk/address.js"></script> -<script src="js/sdk/auth.js"></script> -<script src="js/sdk/cart.js"></script> -<script src="js/sdk/payment.js"></script> -<script src="js/sdk/product.js"></script> -<script src="js/sdk/shipping.js"></script> - -<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> -<script src="js/lib/view/Scrollable.js"></script> -<script src="js/lib/view/Serializable.js"></script> - -<script src="js/lib/cart/CartView.js"></script> -<script src="js/lib/cart/CartPayment.js"></script> -<script src="js/lib/cart/CartShipping.js"></script> -<script src="js/lib/cart/CartSummary.js"></script> -<script src="js/lib/cart/CartConfirm.js"></script> -<script src="js/lib/cart/CartThanks.js"></script> -<script src="js/lib/cart/CartError.js"></script> - -<script src="js/lib/nav/IntroView.js"></script> -<script src="js/lib/nav/CurtainView.js"></script> -<script src="js/lib/nav/HeaderView.js"></script> -<script src="js/lib/nav/FooterView.js"></script> -<script src="js/lib/nav/SearchView.js"></script> -<script src="js/lib/nav/AddressView.js"></script> -<script src="js/lib/nav/CreditCardView.js"></script> -<script src="js/lib/nav/NavView.js"></script> - -<script src="js/lib/auth/LoginView.js"></script> -<script src="js/lib/auth/LogoutView.js"></script> -<script src="js/lib/auth/SignupView.js"></script> - -<script src="js/lib/account/AccountView.js"></script> -<script src="js/lib/account/ProfileView.js"></script> -<script src="js/lib/account/PaymentView.js"></script> -<script src="js/lib/account/ShippingView.js"></script> -<script src="js/lib/account/SettingsView.js"></script> -<script src="js/lib/account/OrdersView.js"></script> - -<script src="js/lib/products/CollectionView.js"></script> -<script src="js/lib/products/filters/CategoryFilter.js"></script> -<script src="js/lib/products/filters/DepartmentFilter.js"></script> -<script src="js/lib/products/filters/SizeFilter.js"></script> -<script src="js/lib/products/ClosedStoreView.js"></script> -<script src="js/lib/products/ProductView.js"></script> -<script src="js/lib/products/GalleryView.js"></script> -<script src="js/lib/products/Selector.js"></script> - -<script src="js/lib/blogs/BlogView.js"></script> -<script src="js/lib/blogs/ArchiveView.js"></script> -<script src="js/lib/blogs/HubView.js"></script> -<script src="js/lib/blogs/PageView.js"></script> -<script src="js/lib/blogs/StoryView.js"></script> - -<script src="js/lib/_router.js"></script> - -<script src="js/index.js"></script> -</html> diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/index.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/index.js deleted file mode 100755 index a28faabf..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/index.js +++ /dev/null @@ -1,142 +0,0 @@ -var app = (function(){ - var app = {} - - app.init = function(){ - console.log("init") - - if (window.location.hostname === 'lvh.me' || window.location.hostname === 'stone.giraffe.life' || window.location.hostname === 'dev.stone.giraffe.life') { - console.log('launching in test mode') - sdk.init({ env: "test" }) - } - else { - sdk.init({ env: "production" }) - } - - app.bind() - app.build() - - app.iscroll_options = { - mouseWheel: true, - scrollbars: true, - } - - if (window.cordova) { - document.addEventListener('deviceready', app.ready, false) - } - else { - app.ready() - } - } - - app.bind = function(){ - document.addEventListener('touchmove', function(e){ e.preventDefault() }) - FastClick.attach(document.body) - } - - app.build = function(){ - app.blog = new BlogView () - app.archive = new ArchiveView () - app.hub = new HubView () - app.story = new StoryView () - app.cart = new CartView () - - app.intro = new IntroView () - app.header = new HeaderView () - app.footer = new FooterView () - app.curtain = new CurtainView () - app.nav = new NavView () - - app.account = new AccountView () - app.login = new LoginView () - app.logout = new LogoutView () - app.signup = new SignupView () - app.profile = new ProfileView () - app.payment = new PaymentView () - app.shipping = new ShippingView () - app.settings = new SettingsView () - app.orders = new OrdersView () - - app.terms = new PageView ({ page: "terms" }) - app.privacy = new PageView ({ page: "privacy" }) - app.returns = new PageView ({ page: "returns" }) - app.care = new PageView ({ page: "care" }) - - app.collection = new CollectionView () - app.product = new ProductView () - app.closed = new ClosedStoreView () - app.search = new SearchView () - - app.selector = new Selector () - } - - 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) - cordova.plugins.Keyboard.hideKeyboardAccessoryBar(false) - 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 { -// } - - 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) { - refresh_time = now - app.blog.refresh() - } - } - - app.online = function(){ - console.log(">> ONLINE") - } - app.offline = function(){ - console.log(">> OFFLINE") - } - - return app -})() - -app.init() diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/_router.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/_router.js deleted file mode 100755 index 19bd3247..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/_router.js +++ /dev/null @@ -1,110 +0,0 @@ -var SiteRouter = Router.extend({ - - el: 'body', - routeByHash: true, - - routes: { - '/': 'intro', - '/intro': 'intro', - '/hub': 'hub', - '/story': 'story', - '/archive': 'archive', - - '/store': 'collection', - '/store/closed': 'closed', - '/store/:code': 'product', - - '/account/login': 'login', - '/account/logout': 'logout', - '/account/signup': 'signup', - '/account/profile': 'profile', - '/account/payment': 'payment', - '/account/shipping': 'shipping', - '/account/orders': 'orders', - '/account/settings': 'settings', - - '/page/terms': 'terms', - '/page/privacy': 'privacy', - '/page/returns': 'returns', - '/page/care': 'care', - - '/search': 'search', - - '/cart': 'cart.summary', - '/cart/summary': 'cart.summary', - '/cart/payment': 'cart.payment', - '/cart/shipping': 'cart.shipping', - '/cart/confirm': 'cart.confirm', - '/cart/thanks': 'cart.thanks', - '/cart/error': 'cart.error', - }, - - initialize: function(){ - var fn - for (var route in this.routes) { - fn = this.routes[route] - if (! this[fn]) { - this[fn] = this.default_view(fn) - } - } - }, - - initial_route: null, - launch: function(){ - if (this.initial_route) { - this.parseRoute( this.initial_route ) - } - else { - this.route() - } - this.initial_route = null - - app.finished_launching() - }, - - go: function(url){ - if (app.view && app.view.hide) { - app.view.hide() - } - window.location.href = "#/" + url - this.parseRoute(url) - }, - - default_view: function(name){ - var fn = function(){ - console.log(name) - if (app.view != app.login && app.view != app.signin) { - app.last_view = app.view - } - if (app.view && app.view.hide) { - app.view.hide() - } - if (name.match(/\./)) { - var n = name.split(".") - console.log(name, n) - app.view = app[n[0]][n[1]] - } - else { - app.view = app[name] - } - - // window.FirebasePlugin && window.FirebasePlugin.setScreenName(name) - - app.header.set_back( !! app.view.back ) - app.view.show() - }.bind(this) - return fn - }, - - product: function(code){ - if (app.view && app.view.hide) { - app.view.hide() - } - app.view = app.product - app.header.set_back( true ) - app.product.load(code) - app.product.show() - }, - -}) - diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/AccountView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/AccountView.js deleted file mode 100755 index 80738be0..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/AccountView.js +++ /dev/null @@ -1,162 +0,0 @@ -var AccountView = View.extend({ - - initialize: function(){ - }, - - connect: function(cb){ - auth.init(this.ready.bind(this, cb)) - }, - - ready: function(cb){ - if (auth.logged_in()) { - this.logged_in(cb) - } - else { - this.logged_out(cb) - } - }, - - addresses: [], - addressLookup: {}, - ccs: [], - ccLookup: {}, - - listAddresses: function(opt){ - opt = opt || {} - sdk.address.list({ - success: function(data){ - 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), - }) - }, - - populateAddresses: function(data, cb){ - console.log("populate addresses:", data.AddressBook.addressBookItem) - - if (! data.AddressBook) { - console.log("no addresses") - cb && cb() - return - } - - this.addresses = data.AddressBook.addressBookItem - this.addressLookup = {} - data.AddressBook.addressBookItem.forEach(function(item){ - this.addressLookup[ item.Id ] = item - if (item.IsDefault) { - console.log("SHIPPING ADDRESS", item) - app.shipping.populate(item) - } - if (item.IsBillingDefault) { - console.log("BILLING ADDRESS") - app.payment.populate(item) - } - }.bind(this)) - - app.cart.shipping.populate() - app.cart.payment.populate() - - cb && cb() - }, - - listCreditCards: function(cb){ - sdk.payment.list_credit_cards({ - success: function(data){ - this.populateCreditCards(data, cb) - }.bind(this) - }) - }, - - populateCreditCards: function(data, cb){ - console.log("populate ccs:", data.CreditCards) - this.ccs = data.CreditCards - this.ccLookup = {} - if (! data.CreditCards || ! data.CreditCards.length) { - } - else { - data.CreditCards.forEach(function(cc){ - this.ccLookup[cc.Id] = cc - }.bind(this)) - app.payment.populate( data.CreditCards[0] ) - app.cart.payment.populate() - } - cb && cb() - }, - - logged_in: function(cb){ - this.listAddresses() - this.listCreditCards() - $("#nav .login").hide() - $("#nav .account, #nav .logout").show() - if (! auth.deferred_product && app.last_view) { - if (app.last_view != app.login && app.last_view != app.signin && app.last_view != app.logout) { - app.view && app.view.hide && app.view.hide() - app.view = app.last_view - app.view.show() - } - } - else { - cb && cb() - } - if ( ! auth.has_cart() ) { - app.curtain.show("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({ - success: function(){ - app.router.go("cart") - }, - error: function(){ - // TODO: cart might be invalid.. - console.log("CALLED LOGGED_IN, HAD DEFERRED PRODUCT") - }, - }) - } - else { - app.cart.load() - } - } - }, - - logged_out: function(cb){ - $("#nav .login").show() - $("#nav .account, #nav .logout").hide() - $("#nav").removeClass("account") - cb && cb() - }, - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/OrdersView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/OrdersView.js deleted file mode 100755 index b3ff3e7a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/OrdersView.js +++ /dev/null @@ -1,194 +0,0 @@ -var OrdersView = ScrollableView.extend({ - - el: "#orders", - - loaded: false, - - list_template: $("#orders .list_template").html(), - item_template: $("#orders .item_template").html(), - - events: { - "click .back": "back", - "click .item": "load_single", - }, - - initialize: function(){ - this.$list = this.$(".list") - this.$empty = this.$(".empty") - this.$single_order = this.$("#single_order") - - this.$rows = this.$(".rows") - this.$subtotal = this.$(".subtotal") - this.$shipping = this.$(".shipping") - this.$tax = this.$(".tax") - this.$total = this.$(".total") - - this.$shipping_address = this.$(".shipping_address") - this.$shipping_method = this.$(".shipping_method") - - this.scroller = new IScroll('#orders', app.iscroll_options) - }, - - 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" - this.deferScrollToTop() - this.el.className = "" - - if (this.loaded) { - this.populate() - } - else { - this.fetch() - } - }, - - orders: null, - orderLookup: {}, - - fetch: function(){ - this.$list.empty() - this.$empty.hide() - this.loader = new Loader(this.ready.bind(this)) - app.curtain.show("loading") - sdk.account.fetch_orders({ - success: function(data){ - this.loader.register("orders") - this.orders = data.OrderDetails - data.OrderDetails.forEach(function(row){ - this.loader.register(row.OrderNumber) - sdk.account.fetch_single_order({ - id: row.OrderNumber, - success: function(row_data){ - this.orderLookup[ row.OrderNumber ] = row_data.OrderFullDetails - this.loader.ready(row.OrderNumber) - }.bind(this), - error: function(){ - this.orderLookup[ row.OrderNumber ] = null - this.loader.ready(row.OrderNumber) - }.bind(this), - }) - }.bind(this)) - this.loader.ready("orders") - }.bind(this), - error: function(){ - console.log("error fetching orders") - }.bind(this), - }) - }, - - ready: function(){ - this.populate() - app.curtain.hide("loading") - }, - - populate: function(){ - this.$list.empty() - - if (! this.orders.length) { - this.$empty.show() - return - } - else { - this.$empty.hide() - } - this.orders.forEach(function(row){ - var order = this.orderLookup[ row.OrderNumber ] - if (! order) { return } - var t = this.list_template.replace(/{{date}}/g, moment(order['Date']).format("ddd MM/DD/YYYY").toUpperCase()) - .replace(/{{id}}/g, row.OrderNumber) - .replace(/{{total}}/g, as_cash( order.TotalAmount )) - var $t = $(t), $images = $t.find(".images") - order.Items.forEach(function(item){ - var img = new Image () - img.src = sdk.image(item['Code10'], "11_f") - $images.append(img) - }.bind(this)) - this.$list.append($t) - }.bind(this)) - - this.refreshScroller() - }, - - load_single: function(e){ - var id = $(e.currentTarget).data("id") - var order = this.orderLookup[ id ] - if (! order) { return } - - console.log(order) - - this.$rows.empty() - - order.Items.forEach(function(item){ - var $el = $("<div class='item'><img src='img/spinner.gif'></div>") - this.$rows.append($el) - var code_ten = item.Code10 - - var code = code_ten.substr(0, 8) - app.product.find(code, function(data, details){ - var descriptions = app.product.get_descriptions( details ) - - var name_partz = descriptions['ModelNames'].split(' ') - var num = name_partz.shift() - var title = name_partz.join(' ') - var type = title_case( descriptions['MicroCategory'] ) - - var color_name, size_name - - details.Item.ModelColors.some(function(color){ - if (color['Code10'] == code_ten) { - color_name = color['ColorDescription'] - return true - } - return false - }) - size_name = item.DefaultSize + " " + item.DefaultSizeClassFamily - - var t = this.item_template - .replace(/{{image}}/, sdk.image(item['Code10'], '11_f')) - .replace(/{{sku}}/, num) - .replace(/{{title}}/, title) - .replace(/{{type}}/, type) - .replace(/{{size}}/, size_name || "DEFAULT") - .replace(/{{color}}/, color_name || "DEFAULT") - .replace(/{{quantity}}/, 1) - .replace(/{{price}}/, as_cash(details.Item.Price.DiscountedPrice)) - $el.data("price", details.Item.Price.DiscountedPrice) - $el.html(t) - this.refreshScroller() - }.bind(this)) - }.bind(this)) - - var subtotal = order.ItemsTotalAmount - var shipping_cost = order.Delivery.Amount - var tax = order.SalesTaxAmount - var total = order.TotalToPay - - this.$subtotal.html( as_cash(subtotal) ) - this.$shipping.html( as_cash(shipping_cost) ) - this.$tax.html( as_cash(tax) ) - this.$total.html( as_cash(total) ) - - var street = order.Delivery.Address.replace(/\n$/,"").replace("\n","<br>") - var address = order.Delivery.Name + "<br>" + street + "<br>" + order.Delivery.City + " " + order.Delivery.ZipCode - this.$shipping_address.html(address) - this.$shipping_method.html(order.Delivery.Type + " - " + order.Delivery.Time) - - app.header.set_back(true) - this.$el.addClass("single") - }, - - back: function(){ - app.header.set_back(false) - this.el.className = "" - }, - -}) - diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/PaymentView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/PaymentView.js deleted file mode 100755 index 796ea188..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/PaymentView.js +++ /dev/null @@ -1,126 +0,0 @@ -var PaymentView = FormView.extend({ - - el: "#payment", - - action: sdk.payment.add_credit_card, - - events: { - }, - - test_data: { - "Name":"Name", - "Surname":"Surname", - "Address1":"address", - "Address2":"address2", - "City":"Ferrara", - "Province":"NY", - "HolderIsoCountry":"IT", - "CreditCardCountry": "US", - "ZipCode":"40200", - "Type":"Visa", - "Number":"4111111111111111", - "ExpirationMonth":"09", - "ExpirationYear":"2017", - "Cvv":"1233", - }, - - initialize: function(){ - this.$form = this.$(".form") - this.$msg = this.$(".msg") - this.address = new AddressView ({ parent: this, checkPhone: false }) - this.cc = new CreditCardView ({ parent: this }) - this.scroller = new IScroll('#payment', app.iscroll_options) - }, - - 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() - // this.preload() - }, - - populate: function(data){ - this.data = data || this.data - this.address.populate(data) - this.cc.populate(data) - }, - - finalize: function(data){ - if (this.cc.data && this.cc.data.Guid) { - sdk.payment.delete_credit_card({ - guid: this.cc.data.Guid, - success: function(){ console.log("deleted credit card") }, - error: function(){ console.log("error deleting credit card") }, - }) - } - - data.IsDefault = "true" // this.$isDefault.prop("checked") ? "true" : "false" - data.UserId = sdk.auth.user_id - data.HolderIsoCountry = "US" - data.CreditCardNumber = data.Number - data.IsPreferred = "true" - - console.log(data) - return data - }, - - success: function(data){ - app.curtain.show("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) - }, - - cancel: function(){ - app.router.go("intro") - }, - -}) - -/* - var new_card = { - "Name":"Name", - "Surname":"Surname", - "Address":"address", - "City":"Ferrara", - "Province":"FE", - "HolderIsoCountry":"IT", - "ZipCode":"40200", - "Type":"Visa", - "Number":"0000567890124285", - "ExpirationMonth":"02", - "ExpirationYear":"2017", - } - promise(sdk.payment.add_credit_card, { data: new_card }).then(function(data){ - last_guid = data['CreditCard']['Guid'] - assert(data.Header.StatusCode == 201) - assert(!! last_guid) - done() - }) - - promise(sdk.payment.list_credit_cards, { data: {} }).then(function(data){ - assert(data.Header.StatusCode == 201) - console.log(data) - done() - }) - - promise(sdk.payment.delete_credit_card, { guid: last_guid }).then(function(data){ - assert(data.Header.StatusCode == 200) - done() -*/
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/ProfileView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/ProfileView.js deleted file mode 100755 index 52ef8056..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/ProfileView.js +++ /dev/null @@ -1,115 +0,0 @@ -var ProfileView = FormView.extend({ - - el: "#profile", - - events: { - "click .privacy-msg": "privacy_link", - }, - - action: sdk.account.update, - - initialize: function(){ - this.$form = this.$(".form") - this.$msg = this.$(".msg") - this.scroller = new IScroll('#profile', app.iscroll_options) - }, - - 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/)) { - auth.user.BirthDay = auth.user.BirthDay.split("T")[0] - } - if (auth.user.name && ! auth.user.Name) { - auth.user.Name = auth.user.name - } - if (auth.user.surname && ! auth.user.Surname) { - auth.user.Surname = auth.user.surname - } - if (auth.user.email && ! auth.user.Email) { - auth.user.Email = auth.user.email - } - console.log(auth.user) - this.preload(auth.user) - this.deferScrollToTop() - }, - - validate_presence: { - "Name": "Please enter your first name.", - "Surname": "Please enter your last name.", - "Email": "Please enter a valid email address.", - }, - - validate_fields: function(data, errors){ - if (! data.Email.match("@")) { errors.push([ "Email", "Email address is not valid." ]) } - if (! data.CurrentPassword && (data.NewPassword || data.Email !== auth.user.Email)) { errors.push([ "CurrentPassword", "Please enter your current password." ]) } - if (data.CurrentPassword && ! data.NewPassword) { errors.push([ "NewPassword", "Please enter your new password." ]) } - if (data.NewPassword && data.NewPassword.length < 7) { errors.push([ "CurrentPassword", "New password must be 7 characters or more." ]) } - // if (data.Gender === "NONE") { errors.push([ "Gender", "Please supply your gender." ]) } - }, - - finalize: function(data){ - if (data.CurrentPassword && (data.NewPassword || data.Email !== auth.user.Email)) { - data.NewPassword = data.NewPassword || data.CurrentPassword - data.NewEmail = data.NewEmail || auth.user.Email - - sdk.account.update_mail_and_password({ - data: { - Password: data.CurrentPassword, - NewPassword: data.NewPassword || data.CurrentPassword, - Email: auth.user, - NewEmail: data.NewEmail || auth.user.Email, - }, - success: function(){ console.log("updated password") }, - error: function(){ console.log("error updating password") }, - }) - } - - var submissible_data = _.pick(data, "Name Surname BirthDay YooxLetter".split(" ")) - submissible_data.Gender = "U" -// submissible_data.idUser = auth.user_id -// submissible_data.AccessToken = auth.access_token -// submissible_data.Premium = "false" -// submissible_data.LanguageId = "" -// submissible_data.SiteCode = "STONEISLAND_US" -// submissible_data.FuriganaName = "" -// submissible_data.FuriganaSurname = "" -// submissible_data.UserPromocode = "" - submissible_data.BirthDay += "T00:00:00Z" - submissible_data.YooxLetter = this.$("[name=YooxLetter]").prop("checked") - submissible_data.DataProfiling = this.$("[name=DataProfiling]").prop("checked") - - console.log(data.DataProfiling, submissible_data.DataProfiling) - console.log(submissible_data) - - return submissible_data - }, - - privacy_link: function(){ - // rewrite app.privacy instance temporarily - app.privacy.back = function(){ - app.router.go("account/profile") - } - app.privacy.hide = function(){ - app.privacy.back = app.privacy.hide = null - } - app.router.go("page/privacy") - }, - - success: function(data){ - }, - - error: function(data){ - }, - - cancel: function(){ - app.router.go("intro") - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/SettingsView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/SettingsView.js deleted file mode 100755 index 90ace549..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/SettingsView.js +++ /dev/null @@ -1,45 +0,0 @@ -var SettingsView = FormView.extend({ - - el: "#settings", - - events: { - "change [name=store]": "changeStore", - "change [name=hub]": "changeHub", - }, - - initialize: function(){ - this.$form = this.$(".form") - this.$msg = this.$(".msg") - this.$store = this.$("[name=store]") - this.$hub = this.$("[name=hub]") - this.scroller = new IScroll('#settings', app.iscroll_options) - }, - - 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() - - this.$store.prop("checked", !! push.settings.store) - this.$hub.prop("checked", !! push.settings.hub) - // push.subscribe("store") - // push.subscribe("hub") - }, - - changeStore: function(){ - var state = app.settings.$store.prop("checked") - if (state) { push.subscribe("store") } - else { push.unsubscribe('store') } - }, - changeHub: function(){ - var state = app.settings.$hub.prop("checked") - if (state) { push.subscribe("hub") } - else { push.unsubscribe('hub') } - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/ShippingView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/ShippingView.js deleted file mode 100755 index 67a1cfec..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/account/ShippingView.js +++ /dev/null @@ -1,87 +0,0 @@ -var ShippingView = FormView.extend({ - - el: "#shipping", - - action: sdk.address.add, - - events: { - }, - - test_data: { - "Name":"name", - "Surname":"surname", - "Address":"address1\naddress2", - "IsDefault":false, - "IsBillingDefault":false, - "IsOwner":false, - "ZipCode":"88040", - "City":"City", - "Province":"NY", - "Phone":"1234567890", - "Mobile":"Mobile", - "Mail":"Mail", - "UserId": sdk.auth.user_id, - }, - - initialize: function(){ - this.$form = this.$(".form") - this.$msg = this.$(".msg") - this.address = new AddressView ({ parent: this }) - this.scroller = new IScroll('#shipping', app.iscroll_options) - }, - - 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" - this.deferScrollToTop() - }, - - populate: function(data){ - this.data = data || this.data - this.address.populate(data) - }, - - finalize: function(data){ - if (this.address.data && this.address.data.Id) { - sdk.address.destroy({ - id: this.address.data.Id, - success: function(){}, - error: function(){}, - }) - } - - data.IsDefault = "true" // this.$isDefault.prop("checked") ? "true" : "false" - data.UserId = sdk.auth.user_id - - console.log(data) - return data - }, - - success: function(data){ - app.curtain.show("loading") - app.account.listAddresses({ - success: function(){ - app.curtain.hide("loading") - }, - error: function(){ - app.curtain.hide("loading") - }, - }) - }, - - error: function(data){ - console.log(data) - }, - - cancel: function(){ - app.router.go("intro") - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/auth/LoginView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/auth/LoginView.js deleted file mode 100755 index aeb15d1d..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/auth/LoginView.js +++ /dev/null @@ -1,60 +0,0 @@ -var LoginView = FormView.extend({ - - el: "#login", - - action: sdk.account.login, - - events: { - "click .newuser": "new_user", - "click .forgotpassword": "forgot_password", - "submit form": "save", - }, - - initialize: function(){ - this.$form = this.$(".form") - this.$msg = this.$(".msg") - this.scroller = new IScroll('#login', app.iscroll_options) - }, - - show: function(){ - if (auth.logged_in()) { - app.router.go("intro") - return - } - var msg = "* Your personal and payment<br>information will always remain private" - app.footer.show("SUBMIT") - this.$("input").val("") - this.$msg.html(msg) - document.body.className = "login" - }, - - new_user: function(){ - app.router.go("account/signup") - }, - - forgot_password: function(){ - window.open("http://www.stoneisland.com/", '_system') - }, - - validate_presence: { - "Email": "Please enter a valid email address.", - "Password": "Please enter your password.", - }, - - success: function(data){ - console.log(data) - app.account.logged_in(function(){ - app.router.go("store") - }) - }, - - error: function(data){ - this.$msg.html("There was an error logging you in. Bad password?") - this.$msg.addClass('alert-notice') - }, - - cancel: function(){ - auth.deferred_product = null - }, - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/auth/LogoutView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/auth/LogoutView.js deleted file mode 100755 index 481dcb8d..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/auth/LogoutView.js +++ /dev/null @@ -1,16 +0,0 @@ -var LogoutView = View.extend({ - - el: "#logout", - - events: { - }, - - show: function(){ - document.body.className = "logout" - app.header.set_cart_count(0) - app.footer.hide() - auth.log_out() - app.account.logged_out() - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/auth/SignupView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/auth/SignupView.js deleted file mode 100755 index 220026c0..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/auth/SignupView.js +++ /dev/null @@ -1,121 +0,0 @@ -var SignupView = FormView.extend({ - - el: "#signup", - - action: sdk.account.signup, - last_data: null, - -/* - test_data: { - "Email": "testit.account" + Math.floor(Math.random() * 10000000) + "@yoox.com", - "Password": "TestPassword", - "Password2": "TestPassword", - "Gender": "U", - "Name": "TestName", - "Surname": "TestSurname", - "BirthDay": "1978-11-12", - "DataProfiling": true, - }, -*/ - - events: { - "click .privacy-msg": "privacy_link", - "submit form": "save", - }, - - initialize: function(){ - this.$form = this.$(".form") - this.$msg = this.$(".msg") - this.scroller = new IScroll('#signup', app.iscroll_options) - }, - - show: function(){ - if (auth.logged_in()) { - app.router.go("intro") - return - } - var msg = "* Your personal and payment<br>information will always remain private" - app.footer.show("SUBMIT") - this.$("input").val("") - this.$msg.html(msg) - document.body.className = "signup" - - this.preload() - this.deferScrollToTop() - }, - - validate_presence: { - "Name": "Please enter your first name.", - "Surname": "Please enter your last name.", - "Email": "Please enter a valid email address.", - "ConfirmEmail": "Please enter a valid email address.", - // "BirthDay": "Please enter your birthday.", - "Password": "Please enter your password.", - "Password2": "Please enter your password again.", - "DataProfiling": "You must agree to data profiling.", - }, - - validate_fields: function(data, errors){ - if (data.Password.length < 7) { errors.push([ "Password", "Password must be 7 characters or more." ]) } - if (data.Password !== data.Password2) { errors.push([ "Password2", "Passwords don't match." ]) } - if (! data.Email.match("@")) { errors.push([ "Email", "Email address is not valid." ]) } - if (data.Email.toLowerCase() !== data.ConfirmEmail.toLowerCase()) { errors.push([ "ConfirmEmail", "Email addresses don't match." ]) } - // if (data.Gender === "NONE") { errors.push([ "Gender", "Please supply your gender." ]) } - if (data.DataProfiling !== "true") { errors.push([ "DataProfiling", "You must consent to use this service." ]) } - data.YooxLetter = this.$("[name=YooxLetter]").prop("checked") - }, - - finalize: function(data){ - delete data.ConfirmEmail - - data.Gender = "U" - data.BirthDay += "T00:00:00Z" - - this.last_data = data - console.log(data) - return data - }, - - privacy_link: function(){ - // rewrite app.privacy instance temporarily - app.privacy.back = function(){ - app.router.go("account/signup") - } - app.privacy.hide = function(){ - app.privacy.back = app.privacy.hide = null - } - app.router.go("page/privacy") - }, - - success: function(data){ - console.log('success', data) - auth.user = auth.user || {} - auth.user.Name = this.last_data.Name - auth.user.Surname = this.last_data.Surname - auth.user.Email = this.last_data.Email - auth.user.BirthDay = this.last_data.BirthDay - app.account.logged_in(function(){ app.router.go("store") }) - }, - - error: function(data){ - try { - data = JSON.parse(data.responseText) - app.signup.show_errors([[ 'Name', data['Error']['Description'] ]]) - } - catch (e) { - 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 - } - } - }, - - cancel: function(){ - auth.deferred_product = null - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/ArchiveView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/ArchiveView.js deleted file mode 100755 index 12aaf7de..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/ArchiveView.js +++ /dev/null @@ -1,235 +0,0 @@ -var ArchiveView = ScrollableView.extend({ - - el: "#archive", - menu_template: $("#archive .menu .template").html(), - row_template: $("#archive .scroll .template").html(), - - events: { - "click .item": "pick", - "mousedown .row": "mousedown", - "touchstart .row": "touchstart", - "mousemove .row": "mousemove", - "touchmove .row": "touchmove", - "mouseup .row": "mouseup", - "touchend .row": "touchend", - }, - - initialize: function(){ - this.$menu_items = this.$(".menu .items") - this.$content = this.$(".content") - this.$loader = this.$(".loader") - this.scroller = new IScroll('#archive .scroll', app.iscroll_options) - this.$subtitle = this.$('.subtitle') - this.subtitle_html = this.$subtitle.html() - - }, - - back: function(){ - this.$el.addClass("menu") - app.header.set_back(false) - this.$subtitle.html( this.subtitle_html ) - }, - - pick: function(e){ - this.$el.removeClass("menu") - app.header.set_back(true) - var index = $(e.currentTarget).data("index") - this.$subtitle.html( $(e.currentTarget).text() ) - this.populateDecade(index) - this.deferScrollToTop() - }, - - show: function(){ - this.deferScrollToTop() - app.footer.hide() - this.back() - document.body.className = "archive" - if (! this.populated) { - this.populate( BACKUP_DB.archive ) - } - }, - - populate: function(data){ - if (this.loaded) { return } - this.loaded = true - this.data = data - this.$loader.hide() - this.$content.empty() - - // id title images[ uri label code caption ] - this.data.forEach(function(row, index){ - - var t = this.menu_template.replace(/{{title}}/, row.title) - var $t = $(t) - $t.data("title", row.title) - $t.data("index", index) - this.$menu_items.append($t) - }.bind(this)) - - this.back() - this.populateDecade(0, 3) - this.deferScrollToTop() - }, - - populateDecade: function(index, count){ - this.$content.empty() - - var loader = new Loader() - - var row = this.data[index] - - count = count || row.images.length - - row.images.forEach(function(cell, i){ - if (count && i > count) { return } - var $t = $("<div>") - $t.addClass("row").addClass("loading") - var t = this.row_template.replace(/{{image}}/, cell.uri) - .replace(/{{label}}/, cell.label) - .replace(/{{code}}/, cell.code) - .replace(/{{caption}}/, cell.caption) - $t.html(t) - $t.data("flipped", false) - this.$content.append($t) - - var item = $t[0] - var aa = this.build_aa_item( item ) - aa.q = 0 - this.render( aa, 0 ) - aa.flipped = true - this.fix_z_index( aa ) - - var $text = $t.find(".text") - if ( ($text.height() % 2) == 1) { - $text.css("margin-bottom", "1px") - } - - loader.preloadImage(cell.uri, function(){ - aa.flipped = false - this.fix_z_index( aa ) - $t.removeClass('loading') - }.bind(this)) - }.bind(this)) - - this.deferRefresh() - setTimeout(function(){ - this.deferScrollToTop() - }.bind(this), 100) - }, - -// ['transformProp'] = "translateZ(0) translateX(-50%) translateY(-50%) "; -// .image, .text - - touchstart: function(e){ - app.archive.row = e.currentTarget - app.archive.mousedown(e.originalEvent.touches[0]) - }, - touchmove: function(e){ - app.archive.mousemove(e.originalEvent.touches[0]) - }, - touchend: function(e){ - app.archive.mouseup() - }, - - row: null, - image: null, - text: null, - flipped: false, - q: 0, - - mousedown: function(e){ - var aa = app.archive.item = app.archive.build_aa_item( app.archive.row || e.currentTarget ) - aa.mouse_x = e.pageX - aa.mouse_y = e.pageY - }, - - build_aa_item: function(el){ - var aa = {} - aa.row = el - aa.flipped = $(aa.row).data('flipped') - aa.image = $(aa.row).find(".image")[0] - aa.text = $(aa.row).find(".text")[0] - aa.q = 0 - return aa - }, - - mousemove: function(e){ - if (! app.archive.item) return - aa = app.archive.item - var dx = ( aa.mouse_x - e.pageX ) / window.innerWidth - var dy = ( aa.mouse_y - e.pageY ) / window.innerWidth - - var gray, opacity, q - - dx = Math.abs(dx) - dx *= 2 - q = clamp( dx, 0, 1 ) - - this.render(aa, q) - - aa.q = q -/* - aa.row.style['transformProp'] = [ - "translateZ(0)", - "translateX(-50%)", - "translateY(-50%)", - "rotateY(" + dx + "deg)", - ].join(" ") -*/ - }, - - render: function(aa, q){ - if ( aa.flipped ) { - gray = Math.round( (1-q) * 100 ) - opacity = lerp(q, 0.2, 1) - text_opacity = lerp(q, 1, 0.3) - } - else { - gray = Math.round( q * 100 ) - opacity = lerp(q, 1, 0.2) - text_opacity = lerp(q, 0.3, 1) - } - aa.image.style.WebkitFilter = "grayscale(" + gray + "%)" - aa.image.style.opacity = opacity - aa.text.style.opacity = text_opacity - }, - - margin: 0.3, - - mouseup: function(e){ - aa = app.archive.item - app.archive.row = null - app.archive.item = null - var was_flipped = aa.flipped - var flipped = aa.flipped ? (aa.q < app.archive.margin) : (aa.q > app.archive.margin) - var dest = was_flipped == flipped ? 0 : 1 - $(aa.row).data('flipped', flipped) - - oktween.add({ - obj: {q: aa.q}, - to: {q: dest}, - duration: 200 * Math.abs(aa.q-dest), - update: function(o, dt){ - app.archive.render(aa, o.q) - }, - }) - - this.fix_z_index(aa) - }, - - fix_z_index: function (aa) { - if ( aa.flipped ) { - console.log(aa.q) - z = aa.q > app.archive.margin ? 2 : 1 - zz = aa.q > app.archive.margin ? 1 : 2 - } - else { - z = aa.q < app.archive.margin ? 2 : 1 - zz = aa.q < app.archive.margin ? 1 : 2 - } - aa.image.style.zIndex = z - aa.text.style.zIndex = zz - - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/BlogView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/BlogView.js deleted file mode 100755 index fd7b5212..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/BlogView.js +++ /dev/null @@ -1,104 +0,0 @@ -var BlogView = View.extend({ - - data: null, - loaded: false, - initialize: function(){ - this.loader = new Loader () - }, - - fetch: function(fn){ - $.ajax({ - method: "GET", - url: sdk.env === 'test' ? '/db.json' : sdk.cms() + '/db.json', - // url: "https://stone.giraffe.life/db.json", - success: function(data){ - this.success(data) - fn && fn() - }.bind(this), - cache: true, - }) - }, - - refresh: function(){ - this.loaded = false - this.fetch() - }, - - success: function(data){ - - if (this.loaded) return - - this.loaded = true - this.data = data = typeof data == "string" ? JSON.parse(data) : data - - // sdk.env = 'test' - - if (sdk.env === 'test') { - app.store = data.store[1] - } - else { - app.store = data.store[0] - } - - switch (app.store.DepartmentStoreStatus) { - case "open": - app.closed.storeIsClosed = false - break - case "closed": - app.closed.storeIsClosed = true - app.closed.storeClosedMessageOne = app.store.StoreClosedMessageOne - app.closed.storeClosedMessageTwo = app.store.StoreClosedMessageTwo - break - } - - if (app.closed.storeIsClosed && sdk.env !== 'test') { - app.closed.populate(app.store.ClosedStoreImages) - } - else { - app.departments = app.store.Departments - app.department_id = app.store.Departments[0].uri - $("#collections h1").toggleClass("single-dept", app.store.Departments.length == 1) - app.collection.setCollectionName( app.store.Departments[0].text ) - //// demo department for shoes with weird SizeTypeId - // app.department_id = "NKDrtSC" - if (sdk.env === 'test') { - app.department_id = window.location.search.substr(1) || app.department_id - console.log('using test department id', app.department_id) - // app.department_id = 'TSTSZS' - } - app.collection.loaded = false - app.collection.fetch() - } - - app.archive.populate(data.archive) - this.loader.preloadImage(data.hub[0].image[0].uri, function(img){ - app.hub.populate(data.hub) - }.bind(this)) - this.loader.preloadImage(data.story[0].image.uri, function(img){ - app.story.populate(data.story) - setTimeout(function(){ - this.loader.preloadImage(data.story[1].image.uri) - this.loader.preloadImage(data.story[2].image.uri) - }.bind(this), 2000) - }.bind(this)) - - data.page.forEach(function(page){ - app[page.tag].populate(page) - }) - - console.log(app.store.StoreStatus) - - app.product.fitLargeCodes = {} - if (app.store.FittingCodes.length) { - app.store.FittingCodes.split("\n").forEach(function(code){ - app.product.fitLargeCodes[code] = true - }) - } - - if (app.store.BackgroundIsGray === "true") { - app.collection.$el.addClass("gray") - app.product.gallery.$el.addClass("gray") - } - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/HubView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/HubView.js deleted file mode 100755 index 38a7eecf..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/HubView.js +++ /dev/null @@ -1,176 +0,0 @@ -var HubView = ScrollableView.extend({ - - el: "#hub", - template: $("#hub .template").html(), - - events: { - "click .content-share": "share", - "click .store": "store_link", - "click .gallery-left": "gallery_left", - "click .gallery-right": "gallery_right", - "click .play": "play_video", - }, - - initialize: function(){ - 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]) - 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] - // 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(" + 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 - 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) - - // 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(){ - app.router.go("store") - }, - play_video: function(e){ - var row = $(e.currentTarget).closest('.gallery-video-post').data("row") - window.open(row.link, '_system') - }, - - gallery_left: function(e){ - var id = $(e.currentTarget).closest(".hub_item").data('id') - this.galleries[id].previous() - }, - gallery_right: function(e){ - var id = $(e.currentTarget).closest(".hub_item").data('id') - this.galleries[id].next() - }, - - share: function(e){ - var title = $(e.currentTarget).parent().find(".title").text() - console.log("share", title) - window.plugins.socialsharing.share(title, null, null, "http://deeplink.me/www.stoneisland.com/hub" ) - }, - -}) - -var HubLoader = (function(){ - var queue, view, item, loader - var count = 0 - var HubLoader = {} - var loader - HubLoader.init = function(v){ - view = v - } - HubLoader.add = function(items){ - queue = items - this.load() - } - HubLoader.load = function(){ - item = queue.shift() - count++ - 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, true) - } - else { - HubLoader.build() - } - } - HubLoader.build = function(){ - view.append(item) - view.scroller.refresh() - setTimeout(HubLoader.load, count < 4 ? 50 : 5000) - } - return HubLoader -})() diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/PageView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/PageView.js deleted file mode 100755 index f5f8ab2e..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/PageView.js +++ /dev/null @@ -1,41 +0,0 @@ -var PageView = ScrollableView.extend({ - - events: { - "click a": "follow_link" - }, - - initialize: function(opt){ - this.page = opt.page - this.setElement("#" + opt.page) - this.$content = this.$(".content") - this.$loader = this.$(".loader") - this.scroller = new IScroll('#' + this.page, app.iscroll_options) - }, - - show: function(){ - this.deferScrollToTop() - app.footer.hide() - document.body.className = this.page - }, - - populate: function(data){ - this.$content.html(data.body.replace(/\n/g, "<br>")) - this.$content.find("a").each(function(){ - var href = $(this).attr("href") // .substr(1, "fuck".length-2) - if (href.indexOf("“")) { - href = href.substr(1, href.length-2) - $(this).attr("href", href) - } - $(this).attr("target", "_system") - }) - }, - - follow_link: function(e){ - e.stopPropagation() - e.preventDefault() - var href = $(e.currentTarget).attr("href") - console.log(href) - window.open(href, '_system') - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/StoryView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/StoryView.js deleted file mode 100755 index 5a7a56d1..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/blogs/StoryView.js +++ /dev/null @@ -1,76 +0,0 @@ -var StoryView = ScrollableView.extend({ - - loaded: false, - - el: "#story", - template: $("#story .template").html(), - - events: { - "click .links li": "pick", - }, - - initialize: function(){ - this.sections = {} - this.$img = this.$("img") - this.$content = this.$(".content") - this.$links = this.$(".links") - this.$loader = this.$(".loader") - this.loader = new Loader () - this.scroller = new IScroll('#story', app.iscroll_options) - }, - - show: function(){ - this.deferScrollToTop() - app.footer.hide() - document.body.className = "story" - if (! this.loaded) { - this.populate( BACKUP_DB.story ) - } - }, - - populate: function(data){ - if (this.loaded) { return } - this.loaded = true - this.data = data - this.$loader.hide() - this.$content.empty() - // id title image[uri caption] body - this.data.forEach(function(row){ - var t = this.template.replace(/{{id}}/, row.id) - .replace(/{{body}}/, row.body.replace(/\n/g, "<br>")) - var li = document.createElement("li") - li.dataset.id = row.id - li.innerHTML = row.title - this.sections[row.id] = row - this.$links.append(li) - this.$content.append(t) - }.bind(this)) - - this.set_active( this.data[0].id ) - }, - - pick: function(e){ - var id = e.currentTarget.dataset.id - this.set_active(id) - }, - - set_active: function(id){ - this.$(".active").removeClass("active") - - this.$links.find("[data-id=" + id + "]").addClass("active") - this.$content.find("[data-id=" + id + "]").addClass("active") - - var section = this.sections[id] - - 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() - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartConfirm.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartConfirm.js deleted file mode 100755 index a82509af..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartConfirm.js +++ /dev/null @@ -1,178 +0,0 @@ -var CartConfirm = FormView.extend({ - - el: "#cart_confirm", - - template: $("#cart_confirm .template").html(), - - events: { - }, - - initialize: function(opt){ - this.parent = opt.parent - this.$rows = this.$(".rows") - this.$subtotal = this.$(".subtotal") - this.$shipping = this.$(".shipping") - this.$tax = this.$(".tax") - this.$total = this.$(".total") - - this.$shipping_address = this.$(".shipping_address") - this.$shipping_method = this.$(".shipping_method") - - this.$payment_name = this.$(".payment_name") - this.$payment_method = this.$(".payment_method") - this.$payment_address = this.$(".payment_address") - - this.scroller = new IScroll('#cart_confirm', app.iscroll_options) - }, - - show: function(){ - document.body.className = "cart" - app.cart.el.className = "confirm" - app.footer.show("PLACE ORDER") - window.location.hash = "#/cart/confirm" - this.deferScrollToTop() - - app.view = this - app.curtain.show("loading") - promise(sdk.cart.get_status).then( this.populate.bind(this) ) - }, - - populate: function(data){ - console.log(data) - - data = data.Cart - - this.$rows.empty() - - data.Items.forEach(function(item){ - var $el = $("<div class='item'><img src='img/spinner.gif'></div>") - this.$rows.append($el) - var code_ten = item.Code10 - var size_id = item.Size - - var code = code_ten.substr(0, 8) - app.product.find(code, function(data, details){ - var descriptions = app.product.get_descriptions( details ) - - var name_partz = descriptions['ModelNames'].split(' ') - var num = name_partz.shift() - var title = name_partz.join(' ') - var type = title_case( descriptions['MicroCategory'] ) - - var color_name, size_name - - details.Item.ModelColors.some(function(color){ - if (color['Code10'] == code_ten) { - color_name = color['ColorDescription'] - return true - } - return false - }) - - details.Item.ModelSizes.some(function(size){ - if (size['SizeId'] == size_id) { - // console.log(size) - size_name = size['Default']['Text'] - size_name = SIZE_LOOKUP[ size_name ] || size_name - if (! size_name && ! size['Default']['Labeled']) { - size_name = size['Default']['Text'] + " " + size['Default']['ClassFamily'] - } - - return true - } - return false - }) - -// size_name = item.DefaultSize + " " + item.DefaultSizeClassFamily - - var t = this.template - .replace(/{{image}}/, sdk.image(item['Code10'], '11_f')) - .replace(/{{sku}}/, num) - .replace(/{{title}}/, title) - .replace(/{{type}}/, type) - .replace(/{{size}}/, size_name || "DEFAULT") - .replace(/{{color}}/, color_name || "DEFAULT") - .replace(/{{quantity}}/, 1) - .replace(/{{price}}/, as_cash(details.Item.Price.DiscountedPrice)) - $el.data("price", details.Item.Price.DiscountedPrice) - $el.html(t) - this.refreshScroller() - }.bind(this)) - }.bind(this)) - - var subtotal = data.Totals.TotalWithoutPromotions - var shipping_cost = data.DeliveryMethod.Selected.Amount.Total - var tax = data.Totals.TotalSalesTax - var total = data.Totals.TotalToPay - - this.$subtotal.html( as_cash(subtotal) ) - this.$shipping.html( as_cash(shipping_cost) ) - this.$tax.html( as_cash(tax) ) - this.$total.html( as_cash(total) ) - - var street = data.Receiver.StreetWithNumber.replace(/\n$/,"").replace("\n", ", ") - var address = data.Receiver.Name.toUpperCase() + " " + data.Receiver.Surname.toUpperCase() + "<br>" + street + ", " - address += data.Receiver.City + ", " + data.Receiver.Region + " " + data.Receiver.PostalCode - - this.$shipping_address.html(address) - this.$shipping_method.html(data.DeliveryMethod.Selected.Type == 1 ? "* STANDARD SHIPPING" : "* EXPRESS SHIPPING") - - var cc = data.Payment.CreditCard - var cc_street = cc.HolderAddress.replace(/\n$/,"").replace("\n", ", ") - var cc_type = cc.Type == "AmericanExpress" ? "American Express" : cc.Type - - this.$payment_name.html( cc.HolderName.toUpperCase() + " " + cc.HolderSurname.toUpperCase() ) - this.$payment_method.html( cc_type.toUpperCase() + " XXXX-XXXX-XXXX-" + cc.Last4 ) - - app.curtain.hide("loading") - }, - - 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"}} - // {"Header":{"StatusCode":409,"Description":"304 NotModified"},"Error":{"Description":"FinalizationError:\"The reciever validation fails."}} - // {"Header":{"StatusCode":440,"Description":"304 NotModified"},"Error":{"Description":"GenericApiError:CartFinalizationNotYetCompleted"}} - // {"Header":{"StatusCode":441,"Description":"304 NotModified"},"Error":{"Description":"GenericApiError:EmptyCreditCard"}} - switch (data.StatusCode) { - case 403: // cart already closed - auth.clear_cart(auth.create_cart) - app.router.go('thanks') - break - case 409: // finalization error - this.finalization_error(data) - break - case 440: // genericapierror (credit card error!) - case 441: // genericapierror (credit card empty) - app.router.go('cart/payment') - app.cart.payment.show_errors([["Number","There was a problem with your credit card."]]) - break - } - }.bind(this)) - }, - - finalization_error: function(data){ - if (data['Error']['Description'].match(/receiver validation fails/)) { - app.router.go('cart/shipping') - app.cart.payment.show_errors([["Number","There was a problem with your credit card."]]) - } - else if (data['Error']['Description'].match(/cart cannot be empty/)) { - app.router.go('cart/summary') - } - else if (data['Error']['Description'].match(/Item has been removed/)) { - app.router.go('cart/error') - app.cart.error.show_error("We're sorry, but one or more items was out of stock. Please check your cart and try again.") - } - }, - - cancel: function(){ - app.router.go('cart/payment') - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartError.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartError.js deleted file mode 100755 index f9a1963e..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartError.js +++ /dev/null @@ -1,28 +0,0 @@ -var CartError = View.extend({ - - el: "#cart_error", - - events: { - }, - - initialize: function(opt){ - this.parent = opt.parent - this.$error = this.$(".errrrrrrrrrrrrrrr") - }, - - show: function(){ - document.body.className = "cart" - app.cart.el.className = "error" - app.footer.show("< BACK TO CART") - app.footer.hide() - }, - - show_error: function(msg){ - this.$error.html(msg) - }, - - ok: function(){ - app.router.go("cart/summary") - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartPayment.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartPayment.js deleted file mode 100755 index 31c371a5..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartPayment.js +++ /dev/null @@ -1,188 +0,0 @@ -var CartPayment = FormView.extend({ - - el: "#cart_payment", - - address_template: $("#cart_payment .address_row_template").html(), - cc_template: $("#cart_payment .cc_template").html(), - - action: sdk.cart.set_credit_card, - - address_list_mode: false, - cc_list_mode: false, - data: {}, - - events: { - "change [name=SameAsShipping]": "toggle_shipping", - "click .address_dropdown": "toggle_address", - "click .cc_dropdown": "toggle_cc", - }, - - initialize: function(opt){ - this.parent = opt.parent - this.$form = this.$(".form") - this.$msg = this.$(".msg") - this.$same_as_shipping = this.$("[name=SameAsShipping]") - this.$billing_address_rapper = this.$(".billing_address_rapper") - this.$address_list = this.$(".address_list") - this.$address_form = this.$(".address") - this.$address_dropdown = this.$(".address_dropdown") - this.$cc_list = this.$(".cc_list") - this.$cc_form = this.$(".cc") - this.$cc_dropdown = this.$(".cc_dropdown") - this.$cc_confirm = this.$(".cc_confirm") - - this.address = new AddressView ({ parent: this, checkPhone: false }) - this.cc = new CreditCardView ({ parent: this }) - this.scroller = new IScroll('#cart_payment', app.iscroll_options) - this.address.disabled = true - this.cc.disabled = true - }, - - show: function(){ - document.body.className = "cart" - app.cart.el.className = "payment" - app.footer.show("CONFIRM >") - window.location.hash = "#/cart/payment" - - app.view = this - this.populate() - this.deferScrollToTop() - }, - - toggle_shipping: function(){ - setTimeout(function(){ - var state = this.$same_as_shipping.prop("checked") - this.$billing_address_rapper.toggle( ! state ) - this.address.disabled = state - }.bind(this)) - }, - - toggle_address: function(state){ - if (! app.account.ccs.length) { - state = false - } - // this.$address_dropdown.toggle( !! app.account.ccs.length ) - - this.address_list_mode = typeof state == "boolean" ? state : ! this.list_mode - this.address.disabled = this.address_list_mode - this.$address_form.toggle(! this.address_list_mode) - this.$address_list.toggle(this.address_list_mode) - }, - - toggle_cc: function(state){ - if (! app.account.ccs.length) { - state = false - } - // this.$cc_dropdown.toggle( !! app.account.ccs.length ) - - this.cc_list_mode = typeof state == "boolean" ? state : ! this.cc_list_mode - this.cc.disabled = this.cc_list_mode - this.$cc_form.toggle(! this.cc_list_mode) - this.$cc_list.toggle(this.cc_list_mode) - this.$cc_confirm.toggle(this.cc_list_mode) - }, - - populate: function(){ - this.$(".save_as_default").show() - this.$address_list.empty() - this.$cc_list.empty() - this.toggle_address( !! app.account.ccs.length ) - this.toggle_cc( !! app.account.ccs.length ) - - app.account.ccs.forEach(function(cc){ - var address_t = this.address_template.replace(/{{id}}/g, cc.Id) - .replace(/{{checked}}/g, cc.IsDefault ? "checked" : "") - .replace(/{{name}}/g, (cc.Name + " " + cc.Surname).toUpperCase()) - .replace(/{{address}}/g, cc.Address.replace(/\n$/,"").replace("\n", ", ")) - .replace(/{{city}}/g, cc.City) - .replace(/{{state}}/g, cc.Province) - .replace(/{{zip}}/g, cc.ZipCode) - - var cc_t = this.cc_template.replace(/{{id}}/g, cc.Id) - .replace(/{{checked}}/g, cc.IsDefault ? "checked" : "") - .replace(/{{number}}/g, cc['Number']) - .replace(/{{type}}/g, cc.Type.toUpperCase()) - .replace(/{{exp}}/g, cc.ExpirationMonth + "/" + cc.ExpirationYear) - - this.$address_list.append(address_t) - this.$cc_list.append(cc_t) - }.bind(this)) - }, - - finalize: function(data){ - var shipping_info = {}, address_data, address_id, cc_info = {}, cc_data, cc_id - var shipping_type = $("[name=ShippingType]").filter(function(){ return $(this).prop("checked") }).val() - - if (this.$same_as_shipping.prop("checked")) { - address_data = app.cart.shipping.data - } - else if (this.address_list_mode) { - address_id = this.$("[name=AddressId]").filter(function(){ return $(this).prop("checked") }).val() - address_data = app.account.addressLookup[ address_id ] - } - else { - address_data = data - } - - if (this.cc_list_mode) { - cc_id = this.$("[name=CCId]").filter(function(){ return $(this).prop("checked") }).val() - cc_data = app.account.ccLookup[ cc_id ] - - var card_on_file = { - "guid": cc_data.Guid, - "cvv": this.$("[name=CvvConfirm]"), - } - - app.curtain.show("loading") - promise(sdk.cart.use_stored_credit_card, { data: card_on_file }).then(function(data){ - app.curtain.hide("loading") - 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 - } - else { - cc_data = data - } - - var credit_info = { - "HolderName": address_data.Name, - "HolderSurname": address_data.Surname, - "HolderAddress": address_data.Address || address_data.StreetWithNumber, - "HolderCity": address_data.City, - "HolderProvince": address_data.Province, - "HolderZip": address_data.PostalCode || address_data.ZipCode, - "HolderISOCountry": CANADIAN_LOOKUP[ address_data.Province ] ? "CA" : "US", - "HolderEmail": auth.user.Email, - "CardNumber": cc_data['Number'], - "Type": cc_data.Type, - "ExpirationMonth": cc_data.ExpirationMonth, - "ExpirationYear": cc_data.ExpirationYear.substr(2,3), - "Cvv": cc_data.Cvv, - } - - console.log( credit_info ) - - return credit_info - }, - - success: function(){ - app.router.go('cart/confirm') - }, - - 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."]]) - }, - - cancel: function(){ - app.router.go('cart/shipping') - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartShipping.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartShipping.js deleted file mode 100755 index 536b5161..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartShipping.js +++ /dev/null @@ -1,137 +0,0 @@ -var CartShipping = FormView.extend({ - - el: "#cart_shipping", - - action: sdk.cart.set_shipping_address, - - list_mode: true, - data: {}, - - template: $("#cart_shipping .template").html(), - - events: { - "click .dropdown-wrapper": "toggle_dropdown", - }, - - initialize: function(opt){ - this.parent = opt.parent - this.$form = this.$(".form") - this.$dropdown_wrapper = this.$(".dropdown-wrapper") - this.$address_list = this.$(".address_list") - this.$address_form = this.$(".address") - this.$msg = this.$(".msg") - this.address = new AddressView ({ parent: this }) - this.scroller = new IScroll('#cart_shipping', app.iscroll_options) - this.address.disabled = true - }, - - show: function(){ - document.body.className = "cart" - app.cart.el.className = "shipping" - app.footer.show("PAYMENT >") - window.location.hash = "#/cart/shipping" - app.view = this - this.populate() - this.deferScrollToTop() - }, - - populate: function(){ - // id checked name address city state zip - this.$(".save_as_default").show() - this.$address_list.empty() - if (! app.account.addresses.length) { - this.toggle_dropdown(false) - return - } - app.account.addresses.forEach(function(address){ - var t = this.template.replace(/{{id}}/g, address.Id) - .replace(/{{checked}}/g, address.IsDefault ? "checked" : "") - .replace(/{{name}}/g, (address.Name + " " + address.Surname).toUpperCase()) - .replace(/{{address}}/g, address.Address.replace(/\n$/,"").replace("\n", ", ")) - .replace(/{{city}}/g, address.City) - .replace(/{{state}}/g, address.Province) - .replace(/{{zip}}/g, address.ZipCode) - this.$address_list.append(t) - }.bind(this)) - }, - - load_form: function(cart_data){ - var data = cart_data.Cart.Receiver - var addy = data.StreetWithNumber.split("\n") - data.Address1 = addy[0] || "" - data.Address2 = addy[1] || "" - data.ZipCode = data.PostalCode - data.Province = data.Region - this.load_data(data) - - this.data = data - if (cart_data.Cart.DeliveryMethod && cart_data.Cart.DeliveryMethod.Selected && cart_data.Cart.DeliveryMethod.Type) { - $("#standard-shipping").prop("checked", cart_data.Cart.DeliveryMethod.Type == 1) - $("#express-shipping").prop("checked", cart_data.Cart.DeliveryMethod.Type == 2) - } - }, - - toggle_dropdown: function(state){ - if (! app.account.addresses.length) { - state = false - } - this.list_mode = typeof state == "boolean" ? state : ! this.list_mode - this.$dropdown_wrapper.toggle( !! app.account.addresses.length ) - this.address.disabled = this.list_mode - this.$address_form.toggle(! this.list_mode) - this.$address_list.toggle(this.list_mode) - }, - - // sdk.cart.set_shipping_address - // sdk.shipping.get_delivery_types - // sdk.shipping.set_delivery_type - - shipping_types: { - Standard: 1, - Express: 2, - }, - - finalize: function(data){ - var shipping_info = {}, address_data, address_id - var shipping_type = $("[name=ShippingType]").filter(function(){ return $(this).prop("checked") }).val() - - sdk.shipping.set_delivery_type({ - id: this.shipping_types[shipping_type], - success: function(data){ console.log("set shipping type", data) }, - error: function(data){ console.log("didnt set shipping type", data) }, - }) - - if (this.list_mode) { - address_id = this.$("[name=AddressId]").filter(function(){ return $(this).prop("checked") }).val() - address_data = app.account.addressLookup[ address_id ] - } - else { - address_data = data - } - - shipping_info.Name = address_data.Name - shipping_info.Surname = address_data.Surname - shipping_info.Email = auth.user.Email - shipping_info.Phone = address_data.Phone - shipping_info.Mobile = address_data.Phone - shipping_info.StreetWithNumber = address_data.Address - shipping_info.PostalCode = address_data.ZipCode - shipping_info.City = address_data.City - shipping_info.Province = address_data.Province - shipping_info.Region = address_data.Province - shipping_info.CountryCode = CANADIAN_LOOKUP[ address_data.Province ] ? "CA" : "US" - - this.data = shipping_info - - return shipping_info - }, - - success: function(){ - app.router.go('cart/payment') - }, - - cancel: function(){ - app.router.go('cart/summary') - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartSummary.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartSummary.js deleted file mode 100755 index 9b5da7b7..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartSummary.js +++ /dev/null @@ -1,212 +0,0 @@ -var CartSummary = ScrollableView.extend({ - - el: "#cart_summary", - - template: $("#cart_summary .template").html(), - - events: { - "click .remove": "remove_item", - }, - - data: null, - - initialize: function(opt){ - this.parent = opt.parent - this.$loader = this.$(".loader") - this.$cart_body = this.$(".cart_body") - this.$cart_empty = this.$(".cart_empty") - this.scroller = new IScroll('#cart_summary', app.iscroll_options) - - this.$rows = this.$(".rows") - this.$subtotal = this.$(".subtotal") - this.$shipping = this.$(".shipping") - this.$tax = this.$(".tax") - this.$total = this.$(".total") - }, - - show: function(){ - document.body.className = "cart" - app.cart.el.className = "summary" - window.location.hash = "#/cart/summary" - app.view = this - if (auth.has_cart()) { - this.load() - } - else { - this.empty() - } - }, - - load: function(){ - this.el.className = "loading" - app.footer.show("SHIPPING >") - app.curtain.show("loading") - sdk.cart.get_status({ - success: this.populate.bind(this), - error: this.empty.bind(this), - }) - }, - - populate: function(data){ - this.data = data - - console.log("CART", data) - - if (! data.Cart.Items || data.Cart.Items.length == 0) { - return this.empty() - } - - this.parent.$steps.show() - this.updateCounts() - - this.$rows.empty() - - data.Cart.Items.forEach(function(item){ - var code_ten = item['Code10'] - var code = code_ten.substr(0, 8) - var size_id = item['Size'] - - var $el = $("<div>").addClass("cart_item_row") - $el.html("<img src='img/spinner.gif'>") - $el.data({ - code: code_ten, - size: size_id, - }) - this.$rows.append($el) - app.product.find(code, function(data, details){ - // console.log(data, details) - - var descriptions = app.product.get_descriptions( details ) - // console.log(descriptions) - - var name_partz = descriptions['ModelNames'].split(' ') - var num = name_partz.shift() - var title = name_partz.join(' ') - var type = title_case( descriptions['MicroCategory'] ) - - var color_name, size_name - // console.log(code) - details.Item.ModelColors.some(function(color){ - if (color['Code10'] == code_ten) { - color_name = color['ColorDescription'] - // console.log(color) - return true - } - return false - }) - details.Item.ModelSizes.some(function(size){ - if (size['SizeId'] == size_id) { - // console.log(size) - size_name = size['Default']['Text'] - size_name = SIZE_LOOKUP[ size_name ] || size_name - if (! size_name && ! size['Default']['Labeled']) { - size_name = size['Default']['Text'] + " " + size['Default']['ClassFamily'] - } - - return true - } - return false - }) - - var t = this.template - .replace(/{{image}}/, sdk.image(item['Code10'], '11_f')) - .replace(/{{sku}}/, num) - .replace(/{{title}}/, title) - .replace(/{{type}}/, type) - .replace(/{{size}}/, size_name) - .replace(/{{color}}/, color_name) - .replace(/{{quantity}}/, 1) - .replace(/{{price}}/, as_cash(details.Item.Price.DiscountedPrice)) - $el.html(t) - this.refreshScroller() - }.bind(this)) - }.bind(this)) - - if (data.Cart.Receiver && data.Cart.Receiver.City) { - app.cart.shipping.load_form( data ) - } - - this.updateTotals() - - this.el.className = "full" - this.refreshScroller() - app.curtain.hide("loading") - }, - - updateCounts: function(){ - app.header.set_cart_count( this.data.Cart.Items.length ) - this.parent.setHeaderCount( this.data.Cart.Items.length ) - }, - - updateTotals: function(){ - var subtotal = this.data.Cart.Totals.TotalWithoutPromotions - var shipping_cost = this.data.Cart.DeliveryMethod.Selected.Amount.Total - var tax = this.data.Cart.Totals.TotalSalesTax - var total = this.data.Cart.Totals.TotalToPay - - this.$subtotal.html( as_cash(subtotal) ) - this.$shipping.html( as_cash(shipping_cost) ) - this.$tax.html( as_cash(tax) ) - this.$total.html( as_cash(total) ) - }, - - empty: function(){ - app.footer.hide() - app.header.set_cart_count(0) - this.parent.setHeaderCount( 0 ) - this.parent.$itemcount.html("0 ITEMS") - this.el.className = "empty" - this.parent.$steps.hide() - app.curtain.hide("loading") - }, - - save: function(){ - app.router.go('cart/shipping') - }, - - cancel: function(){ - app.router.go('intro') - }, - - 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) - - this.data.Cart.Totals.TotalWithoutPromotions -= data.price - this.data.Cart.Totals.TotalToPay -= data.price - this.data.Cart.Items = this.data.Cart.Items.filter(function(item){ - return ( item['Code10'] !== data.code || item['Size'] !== data.size) - }) - - this.updateTotals() - this.updateCounts() - $el.remove() - this.refreshScroller() - - if (this.data.Cart.Items.length == 0) { - this.empty() - } - - app.curtain.show("loading") - console.log("loading") - sdk.cart.delete_item({ - data: { - Code10: data.code, - Size: data.size, - }, - success: function(){ - console.log("success") - app.curtain.hide("loading") - }, - error: function(){ - app.curtain.hide("loading") - }, - }) - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartThanks.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartThanks.js deleted file mode 100755 index 03a45d4d..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartThanks.js +++ /dev/null @@ -1,28 +0,0 @@ -var CartThanks = View.extend({ - - el: "#cart_thanks", - - events: { - }, - - initialize: function(opt){ - this.parent = opt.parent - }, - - show: function(){ - document.body.className = "cart" - app.cart.el.className = "thanks" - app.header.set_cart_count(0) - app.footer.show("< BACK TO COLLECTION") - app.footer.hide() - - app.orders.loaded = false - - sdk.auth.clear_cart() - }, - - ok: function(){ - app.router.go("store") - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartView.js deleted file mode 100755 index 6ed8238f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/cart/CartView.js +++ /dev/null @@ -1,72 +0,0 @@ -var CartView = View.extend({ - - el: "#cart", - - events: { - "click .summary_step": "show_summary", - "click .shipping_step": "show_shipping", - "click .payment_step": "show_payment", - }, - - initialize: function(){ - this.summary = new CartSummary ({ parent: this }) - this.payment = new CartPayment ({ parent: this }) - this.shipping = new CartShipping ({ parent: this }) - this.confirm = new CartConfirm ({ parent: this }) - this.thanks = new CartThanks ({ parent: this }) - this.error = new CartError ({ parent: this }) - - this.$steps = this.$(".steps") - this.$full_msg = this.$(".full_msg") - this.$empty_msg = this.$(".empty_msg") - this.$itemcount = this.$(".itemcount") - }, - - load: function(){ - sdk.cart.get_status({ - success: function(data){ - this.summary.data = data - this.summary.updateCounts() - }.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() - }, - - show_summary: function(){ - this.summary.show() - }, - - show_shipping: function(){ - this.shipping.show() - }, - - show_payment: function(){ - this.payment.show() - }, - - setHeaderCount: function(n){ - if (n) { - this.$itemcount.html(pluralize(n, "ITEM", "S")) - this.$full_msg.show() - this.$empty_msg.hide() - } - else { - this.$full_msg.hide() - this.$empty_msg.show() - } - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/backup_db.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/backup_db.js deleted file mode 100755 index dce8835a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/backup_db.js +++ /dev/null @@ -1,405 +0,0 @@ -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": "loading", - "date": "Tue, 12 Jan 2016 12:00:00 GMT", - "title": "STONE ISLAND", - "subtitle": "", - "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.", - "link": "", - "store": "true", - "image": [ - { - "uri": "https://ltho.s3.amazonaws.com/1ee6abef-0677-41a6-91eb-029303995073.png", - "caption": "" - }, - ], - "__index": 1, - "dateCreated": "Tue, 12 Jan 2016 15:55:24 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/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/deeplink.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/deeplink.js deleted file mode 100755 index 7667cfcd..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/deeplink.js +++ /dev/null @@ -1,5 +0,0 @@ -function handleOpenURL (url) { - console.log("DEEP LINKING DETECTED", url) - url = url.replace("stoneisland:/", "") - app.router.parseRoute( url ) -}
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/geo.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/geo.js deleted file mode 100755 index 22899141..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/geo.js +++ /dev/null @@ -1,71 +0,0 @@ -var geo = (function(){ - var geo = {} - - var polling = false, fetching = false, poll_timeout = null - - geo.fetch = function(){ - fetching = true - navigator.geolocation.getCurrentPosition(geo.success, geo.error, {timeout: 15000}) - } - - 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, "E", "W" ) - $(".latlng").html( lat_str + " " + lng_str ) - geo.done() - } - - geo.error = function(error){ - $(".latlng").html( "+40° 58' 90.9\" N 74° 04' 46.3\" W" ) - geo.done() - } - - geo.done = function(){ - fetching = false - if (polling) { - clearTimeout( poll_timeout ) - poll_timeout = setTimeout(geo.fetch, 15000) - } - } - - geo.start_polling = function(){ - polling = true - if (! fetching) { - geo.fetch() - } - } - - geo.stop_polling = function(){ - polling = false - clearTimeout(poll_timeout) - } - - function as_degrees (n, pos, neg) { - var s = "" - var sig = n >= 0 ? pos : neg - - n = Math.abs(n) - s += Math.floor(n) + "° " - - n %= 1 - n *= 60 - nn = Math.floor(n) - if (nn < 10) nn = "0" + nn - s += nn + "' " - - n %= 1 - n *= 60 - nn = Math.floor(n) - if (nn < 10) nn = "0" + nn - s += nn - - n %= 1 - n *= 10 - nn = Math.floor(n) - s += "." + nn + '\" ' + sig - - return s - } - - return geo -})()
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/push.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/push.js deleted file mode 100755 index 29d2938f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/etc/push.js +++ /dev/null @@ -1,149 +0,0 @@ -var push = (function(){ - var push = { settings: {}, disabled: false } - var pushPlugin - push.init = function(){ - if (! ('device' in window) || (device.platform || "").toLowerCase() !== "ios") { - console.log("push disabled") - push.disabled = true - return - } - - pushPlugin = PushNotification.init({ - ios: { - alert: true, - badge: true, - sound: false, - clearBadge: true, - }, - }) - - console.log("push init") - - PushNotification.hasPermission(push.did_initialize) - pushPlugin.on('registration', push.got_registration) - pushPlugin.on('notification', push.got_push_notification) - } - push.did_initialize = function(data) { - // console.log(data) - if (! data.isEnabled) { - console.log("push did not initialize") - return - } - console.log("push did initialize") - var hub_status = localStorage.getItem("yoox.push_hub") - var store_status = localStorage.getItem("yoox.push_store") - - push.settings.requested = localStorage.getItem("yoox.push_requested") == "true" - push.settings.hub = hub_status == "true" - push.settings.store = store_status == "true" - - if (! hub_status || hub_status == "true") { - push.subscribe("hub") - } - if (! store_status || store_status == "true") { - push.subscribe("store") - } - } - push.got_registration = function(data){ - var registrationId = data.registrationId - var oldRegistrationId = localStorage.getItem("yoox.registrationId") - // console.log(registrationId, oldRegistrationId) - - if (registrationId !== oldRegistrationId || ! push.settings.requested) { - localStorage.setItem("yoox.registrationId", registrationId) - push.subscribe("hub", function(){ - push.subscribe("store") - }) - } - } - push.subscribe = function(channel, cb){ - if (push.disabled) return - push.settings[channel] = true - localStorage.setItem("yoox.push_" + channel, "true") - var data = { - registrationId: localStorage.getItem("yoox.registrationId"), - channel: channel, - platform: device.platform, - } - pushPlugin.subscribe(channel, function(){ - console.log("subscribed to", channel) - }) - $.ajax({ - method: "POST", - url: push.url('add'), - data: data, - contentType: 'application/x-www-form-urlencoded; charset=UTF-8', - success: function(){ - console.log("subscribed to", channel) - cb && cb() - }, - error: push.error, - }) - } - push.unsubscribe = function(channel, cb){ - if (push.disabled) return - push.settings[channel] = false - localStorage.setItem("yoox.push_" + channel, "false") - var data = { - registrationId: localStorage.getItem("yoox.registrationId"), - channel: channel, - platform: device.platform, - } - $.ajax({ - method: "POST", - url: push.url('remove'), - data: data, - contentType: 'application/x-www-form-urlencoded; charset=UTF-8', - success: function(){ - console.log("unsubscribed from", channel) - cb && cb() - }, - error: push.error, - }) - } - push.url = function(key){ - return sdk.cms() + '/_services/push/' + key - } - push.got_push_notification = function(push_obj) { - // console.log('We received this push notification: ' + JSON.stringify(push_obj)); - - app.blog.refresh() - - push_obj.additionalData = push_obj.additionalData || {} - - var is_hub = true - - try { - is_hub = JSON.stringify(push_obj || {}).match(/hub/i) - } - catch (e) { - } - - if (is_hub) { - app.intro.$alert.show().html("[ HUB UPDATED ]") - } - else if (! push_obj.additionalData.url) { - auth.clear_cart() - app.intro.$alert.show().html("[ STORE UPDATED ]") - } - - if (push_obj.additionalData.foreground === false) { - // TODO: route the user to the uri in push_obj - pushPlugin.finish(function(){}, function(){}) - - if (push_obj.additionalData.url) { - app.router.go(push_obj.additionalData.url) - } - } - else if (is_hub) { - app.router.go("hub") - } - else { - app.router.go("intro") - } - } - push.error = function(e){ - console.log("push error") - } - return push -})()
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/AddressView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/AddressView.js deleted file mode 100755 index 4a05c4b6..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/AddressView.js +++ /dev/null @@ -1,272 +0,0 @@ - -var AddressView = SerializableView.extend({ - - template: $("#address_template").html(), - - disabled: false, - - events: { - "change [name=Province]": 'update_country', - "focus [name]": 'scroll_up_to_phone', - }, - - initialize: function(opt){ - this.parent = opt.parent - this.checkPhone = 'checkPhone' in opt ? opt.checkPhone : true - this.setElement( this.parent.$(".address") ) - this.$el.html(this.template) - }, - - populate: function(data){ - this.data = data - var address = data.Address.split("\n") - data.Address1 = address[0] - data.Address2 = address[1] - this.$(".address input").val("") - this.load_data(data) - this.update_country() - }, - - validate_presence: { - "Name": "Please enter your first name.", - "Surname": "Please enter your last name.", - "Address1": "Please enter your street address.", - "City": "Please enter your city.", - "ZipCode": "Please enter your zip code.", - }, - - validate_fields: function(data, errors){ - if (this.disabled) { return } - if (this.checkPhone && ! data.Phone) { errors.push([ "Phone", "Please enter your phone number." ]) } - if (this.checkPhone && data.Phone && data.Phone.replace(/[^0-9]/g, "").length < 10) { errors.push([ "Phone", "Phone numbers must be at least 10 digits." ]) } - if (! data.Province || data.Province == "NONE") { errors.push([ "Province", "Please choose your state." ]) } - data.Address = data.Address1 + "\n" + data.Address2 - data.UserId = auth.user_id - delete data.Address1 - delete data.Address2 - }, - - update_country: function(){ - var state = this.$("[name=Province]").val() - console.log(state) - if (CANADIAN_LOOKUP[state]) { - this.$(".country-label").html("CANADA") - } - else { - this.$(".country-label").html("UNITED STATES") - } - }, - - scroll_up_to_phone: function(e){ - app.view.scroller && app.view.scroller.scrollTo(0, -$(e.currentTarget).position().top) - }, - -}) - -var CANADIAN_PROVINCES = "AB BC MB NB NL NS NT NU ON PE SK QC YT".split(" ") -var CANADIAN_LOOKUP = {} -CANADIAN_PROVINCES.forEach(function(k){ CANADIAN_LOOKUP[k] = true }) - -var COUNTRIES = [ - ['Country Name', 'NONE'], - ['United States', 'US'], - ['Abkhazia', 'GE'], - ['Afghanistan', 'AF'], - ['Albania', 'AL'], - ['Algeria', 'DZ'], - ['Andorra', 'AD'], - ['Angola', 'AO'], - ['Antigua and Barbuda', 'AG'], - ['Argentina', 'AR'], - ['Armenia', 'AM'], - ['Australia', 'AU'], - ['Austria', 'AT'], - ['Azerbaijan', 'AZ'], - ['Bahamas', 'BS'], - ['Bahrain', 'BH'], - ['Bangladesh', 'BD'], - ['Barbados', 'BB'], - ['Belarus', 'BY'], - ['Belgium', 'BE'], - ['Belize', 'BZ'], - ['Benin', 'BJ'], - ['Bhutan', 'BT'], - ['Bolivia', 'BO'], - ['Bosnia and Herzegovina', 'BA'], - ['Botswana', 'BW'], - ['Brazil', 'BR'], - ['Brunei', 'BN'], - ['Bulgaria', 'BG'], - ['Burkina Faso', 'BF'], - ['Burundi', 'BI'], - ['Cambodia', 'KH'], - ['Cameroon', 'CM'], - ['Canada', 'CA'], - ['Cape Verde', 'CV'], - ['Central African Republic', 'CF'], - ['Chad', 'TD'], - ['Chile', 'CL'], - ['China', 'CN'], - ['Colombia', 'CO'], - ['Comoros', 'KM'], - ['Congo', 'CD'], - ['Congo-Brazzaville', 'CG'], - ['Costa Rica', 'CR'], - ['Cote d\'Ivoire (Ivory Coast)', 'CI'], - ['Croatia', 'HR'], - ['Cuba', 'CU'], - ['Cyprus', 'CY'], - ['Czech Republic', 'CZ'], - ['Denmark', 'DK'], - ['Djibouti', 'DJ'], - ['Dominica', 'DM'], - ['Dominican Republic', 'DO'], - ['Ecuador', 'EC'], - ['Egypt', 'EG'], - ['El Salvador', 'SV'], - ['Equatorial Guinea', 'GQ'], - ['Eritrea', 'ER'], - ['Estonia', 'EE'], - ['Ethiopia', 'ET'], - ['Fiji', 'FJ'], - ['Finland', 'FI'], - ['France', 'FR'], - ['Gabon', 'GA'], - ['Gambia', '220'], - ['Georgia', 'GE'], - ['Germany', 'DE'], - ['Ghana', 'GH'], - ['Greece', 'GR'], - ['Grenada', 'GD'], - ['Guatemala', 'GT'], - ['Guinea', 'GN'], - ['Guinea-Bissau', 'GW'], - ['Guyana', 'GY'], - ['Haiti', 'HT'], - ['Honduras', 'HN'], - ['Hungary', 'HU'], - ['Iceland', 'IS'], - ['India', 'IN'], - ['Indonesia', 'ID'], - ['Iran', 'IR'], - ['Iraq', 'IQ'], - ['Ireland', 'IE'], - ['Israel', 'IL'], - ['Italy', 'IT'], - ['Jamaica', 'JM'], - ['Japan', 'JP'], - ['Jordan', 'JO'], - ['Kazakhstan', 'KZ'], - ['Kenya', 'KE'], - ['Kiribati', 'KI'], - ['Kuwait', 'KW'], - ['Kyrgyzstan', 'KG'], - ['Laos', 'LA'], - ['Latvia', 'LV'], - ['Lebanon', 'LB'], - ['Lesotho', 'LS'], - ['Liberia', 'LR'], - ['Libya', 'LY'], - ['Liechtenstein', 'LI'], - ['Lithuania', 'LT'], - ['Luxembourg', 'LU'], - ['Macedonia', 'MK'], - ['Madagascar', 'MG'], - ['Malawi', 'MW'], - ['Malaysia', 'MY'], - ['Maldives', 'MV'], - ['Mali', 'ML'], - ['Malta', 'MT'], - ['Marshall Islands', 'MH'], - ['Mauritania', 'MR'], - ['Mauritius', 'MU'], - ['Mexico', 'MX'], - ['Micronesia', 'FM'], - ['Moldova', 'MD'], - ['Monaco', 'MC'], - ['Mongolia', 'MN'], - ['Montenegro', 'ME'], - ['Morocco', 'MA'], - ['Mozambique', 'MZ'], - ['Myanmar', 'MM'], - ['Nagorno-Karabakh', 'AZ'], - ['Namibia', 'NA'], - ['Nauru', 'NR'], - ['Nepal', 'NP'], - ['Netherlands', 'NL'], - ['New Zealand', 'NZ'], - ['Nicaragua', 'NI'], - ['Niger', 'NE'], - ['Nigeria', 'NG'], - ['North Korea', 'KP'], - ['Northern Cyprus', 'CY'], - ['Norway', 'NO'], - ['Oman', 'OM'], - ['Pakistan', 'PK'], - ['Palau', 'PW'], - ['Panama', 'PA'], - ['Papua New Guinea', 'PG'], - ['Paraguay', 'PY'], - ['Peru', 'PE'], - ['Philippines', 'PH'], - ['Poland', 'PL'], - ['Portugal', 'PT'], - ['Qatar', 'QA'], - ['Romania', 'RO'], - ['Russia', 'RU'], - ['Rwanda', 'RW'], - ['Saint Kitts and Nevis', 'KN'], - ['Saint Lucia', 'LC'], - ['Saint Vincent and the Grenadines', 'VC'], - ['Samoa', 'WS'], - ['San Marino', 'SM'], - ['Sao Tome and Principe', 'ST'], - ['Saudi Arabia', 'SA'], - ['Senegal', 'SN'], - ['Serbia', 'RS'], - ['Seychelles', 'SC'], - ['Sierra Leone', 'SL'], - ['Singapore', 'SG'], - ['Slovakia', 'SK'], - ['Slovenia', 'SI'], - ['Solomon Islands', 'SB'], - ['Somalia', 'SO'], - ['Somaliland', 'SO'], - ['South Africa', 'Rand'], - ['South Korea', 'KR'], - ['South Ossetia', 'GE'], - ['Spain', 'ES'], - ['Sri Lanka', 'LK'], - ['Sudan', 'SD'], - ['Suriname', 'SR'], - ['Swaziland', 'SZ'], - ['Sweden', 'SE'], - ['Switzerland', 'CH'], - ['Syria', 'SY'], - ['Taiwan', 'TW'], - ['Tajikistan', 'TJ'], - ['Tanzania', 'TZ'], - ['Thailand', 'TH'], - ['Timor-Leste', 'TL'], - ['Togo', 'TG'], - ['Tonga', 'TO'], - ['Transnistria', 'MD'], - ['Trinidad and Tobago', 'TT'], - ['Tunisia', 'TN'], - ['Turkey', 'TR'], - ['Turkmenistan', 'TM'], - ['Tuvalu', 'TV'], - ['Uganda', 'UG'], - ['Ukraine', 'UA'], - ['United Arab Emirates', 'AE'], - ['United Kingdom', 'GB'], - ['Uruguay', 'UY'], - ['Uzbekistan', 'UZ'], - ['Vanuatu', 'VU'], - ['Vatican City', 'VA'], - ['Venezuela', 'VE'], - ['Vietnam', 'VN'], - ['Yemen', 'YE'], - ['Zambia', 'ZM'], - ['Zimbabwe', 'ZW'], -] diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/CreditCardView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/CreditCardView.js deleted file mode 100755 index 63784618..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/CreditCardView.js +++ /dev/null @@ -1,61 +0,0 @@ - -var CreditCardView = SerializableView.extend({ - - template: $("#creditcard_template").html(), - - cardOptions: { - accept: ['visa', 'mastercard', 'amex', 'jcb'], - }, - - events: { - }, - - initialize: function(opt){ - this.parent = opt.parent - this.setElement( this.parent.$(".cc") ) - this.$el.html(this.template) - - this.$number = this.$("[name=Number]") - this.$number.validateCreditCard(this.updateCard.bind(this), this.cardOptions) - }, - - populate: function(data){ - this.data = data - data.Number = "XXXX XXXX XXXX " + data.Number - this.$number.attr("type", "text") - this.parent.$(".cc input").val("") - this.$(".cc input").val("") - this.load_data(data) - }, - - updateCard: function(card){ - // console.log(card) - // card.card_type.name - // card.card_type.valid - }, - - validate_presence: { - 'Number': 'Please enter your credit card number.', - 'Cvv': 'Please enter your security code.', - }, - - validate_fields: function(data, errors){ - if (this.disabled) { return } - var card = this.$number.validateCreditCard(this.cardOptions) - if (! card.valid) { errors.push([ "Number", "Your card number is invalid." ]) } - if (! data.ExpirationMonth || data.ExpirationMonth == "NONE") { errors.push([ "ExpirationMonth", "Please enter the expiration month." ]) } - if (! data.ExpirationYear || data.ExpirationYear == "NONE") { errors.push([ "ExpirationYear", "Please select the expiration month." ]) } - data.UserId = auth.user_id - if (card.valid) { - data.Type = YOOX_CREDIT_CARD_NAME_LOOKUP[ card.card_type.name ] - } - }, - -}) - -var YOOX_CREDIT_CARD_NAME_LOOKUP = { - "visa": "Visa", - "mastercard": "Mastercard", - "amex": "AmericanExpress", - "jcb": "JCB", -} diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/CurtainView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/CurtainView.js deleted file mode 100755 index d444fd60..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/CurtainView.js +++ /dev/null @@ -1,39 +0,0 @@ -var CurtainView = View.extend({ - - el: "#curtain", - - events: { - "click": "click", - }, - - initialize: function(){ - }, - - klass: null, - show: function(klass){ - this.$el.addClass("visible") - if (klass) { - this.klass = klass - this.$el.addClass(klass) - } - }, - - hide: function(k){ - this.$el.removeClass("visible") - if (this.klass) { - setTimeout( function(){ - this.$el.removeClass(this.klass) - }.bind(this), 200 ) - } - }, - - click: function(){ - if (document.body.classList.contains("nav")) { - app.nav.hide() - } - if (app.selector.visible) { - app.selector.hide() - } - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/FooterView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/FooterView.js deleted file mode 100755 index 8641668f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/FooterView.js +++ /dev/null @@ -1,41 +0,0 @@ -var FooterView = View.extend({ - - el: "#footer", - - events: { - "click .ok": "ok", - "click .cancel": "cancel", - }, - - initialize: function(){ - this.$ok = this.$(".ok") - this.$cancel = this.$(".cancel") - this.hide() - }, - - show: function(ok, cancel){ - if (cancel) { - this.$ok.removeClass("wide") - this.$cancel.show().html(cancel) - } - else { - this.$ok.addClass("wide") - this.$cancel.hide() - } - this.$ok.html(ok) - this.$el.show() - }, - - hide: function(){ - this.$el.hide() - }, - - ok: function(){ - (app.view.save || app.view.ok).bind(app.view)() - }, - - cancel: function(){ - app.view.cancel ? app.view.cancel() : app.intro.show() - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/HeaderView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/HeaderView.js deleted file mode 100755 index 0961a5e8..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/HeaderView.js +++ /dev/null @@ -1,57 +0,0 @@ -var HeaderView = View.extend({ - - el: "#header", - - events: { - "click .burger": "nav", - "click .logo": "logo", - "click .cart_rapper": "cart", - }, - - initialize: function(){ - this.$burger = this.$(".burger") - this.$cart = this.$(".cart") - this.$cart_count = this.$(".cart_count") - }, - - back_state: false, - set_back: function(state){ - this.back_state = state - if (state) { - this.$burger[0].className = "burger ion-ios-arrow-left" - } - else { - this.$burger[0].className = "burger ion-android-menu" - } - }, - - nav: function(){ - if (this.back_state) { - app.view.back() - } - else { - app.nav.show() - } - }, - - logo: function(){ - app.router.go("intro") - }, - - cart: function(){ - app.router.go("cart") - }, - - count: 0, - set_cart_count: function(n){ - this.count = n - this.$cart_count.html(n || "0") - }, - increment_cart_count: function(){ - this.$cart_count.html( ++this.count ) - }, - decrement_cart_count: function(){ - this.$cart_count.html( --this.count ) - }, - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/IntroView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/IntroView.js deleted file mode 100755 index c075619a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/IntroView.js +++ /dev/null @@ -1,64 +0,0 @@ -var IntroView = View.extend({ - - el: "#intro", - - events: { - "click .store": "store", - "click .hub": "hub", - "click .story": "story", - "click .archive": "archive", - }, - - initialize: function(){ - this.$alert = this.$(".alert") - this.compass = this.$("#compass").get(0) - this.orient = this.deviceorientation.bind(this) - this.$alert.hide() - }, - - show: function(){ - document.body.className = "intro" - window.addEventListener("deviceorientation", this.orient) - app.footer.hide() - this.orient({ alpha: 0 }) - }, - - hide: function(){ - window.removeEventListener("deviceorientation", this.orient) - this.$alert.hide() - }, - - deviceorientation: function(e){ - var heading - if ('webkitCompassHeading' in e) { - heading = e.webkitCompassHeading || 0 - } - else { - heading = e.alpha || 0 - } - heading = - heading - this.compass.style[transformProp] = "translateZ(0) translateX(-50%) translateY(-50%) rotate(" + heading + "deg)" - }, - - store: function(e){ - e.preventDefault() - e.stopPropagation() - app.router.go("store") - }, - hub: function(e){ - e.preventDefault() - e.stopPropagation() - app.router.go("hub") - }, - story: function(e){ - e.preventDefault() - e.stopPropagation() - app.router.go("story") - }, - archive: function(e){ - e.preventDefault() - e.stopPropagation() - app.router.go("archive") - }, - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/NavView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/NavView.js deleted file mode 100755 index cfb39ff6..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/NavView.js +++ /dev/null @@ -1,162 +0,0 @@ -var NavView = View.extend({ - - el: "#nav", - - events: { - "click .logo": "intro", - - "click .store": "store", - "click .hub": "hub", - "click .story": "story", - "click .archive": "archive", - - "click .login": "login", - "click .logout": "logout", - "click .account": "account", - "click .faq": "faq", - "click .search": "search", - - "click .main": "back", - "click .account_back": "back", - "click .profile": "profile", - "click .payment": "payment", - "click .shipping": "shipping", - "click .settings": "settings", - "click .orders": "orders", - "click .return_link": "return_link", - - "click .faq_back": "back", - "click .privacy": "privacy", - "click .returns": "returns", - "click .terms": "terms", - "click .care": "care", - - "click .fb": "fb", - "click .insta": "insta", - "click .tw": "tw", - "click .yt": "yt", - }, - - initialize: function(){ - }, - - show: function(klass){ - $("body").addClass("nav") - app.curtain.show("dark") - if (klass) { - setTimeout(function(){ - this.addClass(klass) - }.bind(this), 500) - } - }, - - hide: function(){ - $("body").removeClass("nav") - app.curtain.hide("dark") - }, - - intro: function(){ - this.hide() - app.router.go("intro") - }, - store: function(){ - this.hide() - app.router.go("store") - }, - hub: function(){ - this.hide() - app.router.go("hub") - }, - story: function(){ - this.hide() - app.router.go("story") - }, - archive: function(){ - this.hide() - app.router.go("archive") - }, - - login: function(){ - this.hide() - auth.last_view = app.view - app.router.go("account/login") - }, - logout: function(){ - this.hide() - auth.last_view = app.view - app.router.go("account/logout") - }, - account: function(){ - this.el.className = "account" - }, - - back: function(){ - this.el.className = "" - }, - - profile: function(){ - this.hide() - app.router.go("account/profile") - }, - payment: function(){ - this.hide() - app.router.go("account/payment") - }, - shipping: function(){ - this.hide() - app.router.go("account/shipping") - }, - orders: function(){ - this.hide() - app.router.go("account/orders") - }, - settings: function(){ - this.hide() - app.router.go("account/settings") - }, - return_link: function(){ - window.open("http://www.stoneisland.com/yTos/Plugins/AreaLocalizer/Redirectarea?area=ProductExchange&controllerName=SearchOrder&actionName=Index", '_system') - }, - - - faq: function(){ - this.el.className = "faq" - }, - privacy: function(){ - this.hide() - app.router.go("page/privacy") - }, - returns: function(){ - this.hide() - app.router.go("page/returns") - }, - terms: function(){ - this.hide() - app.router.go("page/terms") - }, - care: function(e){ - e.preventDefault() - window.open("http://www.stoneisland.com/system/web/custom/hp/email.jsp", '_system') - }, - - - search: function(){ - this.hide() - app.router.go("search") - }, - - - fb: function(){ - window.open(is_ios ? "facebook://profile/231623463406" : "https://www.facebook.com/StoneIsland", '_system') - }, - insta: function(){ - window.open("https://instagram.com/stoneisland_official", '_system') - }, - tw: function(){ - window.open("https://twitter.com/stoneisland", '_system') - }, - yt: function(){ - window.open("https://www.youtube.com/user/StoneIslandOfficial", '_system') - }, - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/SearchView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/SearchView.js deleted file mode 100755 index b477d72f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/nav/SearchView.js +++ /dev/null @@ -1,16 +0,0 @@ -var SearchView = View.extend({ - - el: "#search", - - events: { - }, - - show: function(){ - app.footer.show("SEARCH") - document.body.className = "search" - }, - - save: function(){ - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/ClosedStoreView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/ClosedStoreView.js deleted file mode 100755 index 97b46006..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/ClosedStoreView.js +++ /dev/null @@ -1,75 +0,0 @@ -var ClosedStoreView = View.extend({ - - el: "#closed", - - storeIsClosed: false, - - events: { - "click .website_link": "website_link", - }, - - delay: 8000, - - timeout: -1, - images: null, - images_loaded: {}, - - initialize: function(){ - this.loader = new Loader () - }, - - show: function(){ - this.setMessage(app.closed.storeClosedMessageOne, app.closed.storeClosedMessageTwo) - this.showElement() - }, - - showElement: function(){ - document.body.className = "closed" - this.animate() - app.footer.hide() - }, - - 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 h4").hide() - } - }, - - hide: function(){ - clearTimeout(this.timeout) - }, - - animate: function(){ - this.timeout = setTimeout(this.animate.bind(this), this.delay) - this.next() - }, - - next: function(){ - if (! this.images) return - var url = choice(this.images) - - if (this.images_loaded[url]) { - this.el.style.backgroundImage = 'url(' + url + ')' - } - else { - this.loader.preloadImage(url, function(img){ - this.el.style.backgroundImage = 'url(' + url + ')' - this.images_loaded[url] = true - }.bind(this)) - } - }, - - populate: function(data){ - this.images = data.map(function(img){ return img.uri }) - this.next() - }, - - website_link: function(){ - window.open("http://www.stoneisland.com/", '_system') - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/CollectionView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/CollectionView.js deleted file mode 100755 index 7c73d66f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/CollectionView.js +++ /dev/null @@ -1,246 +0,0 @@ - -var CollectionView = ScrollableView.extend({ - - el: "#collection", - template: $("#collection .template").html(), - loaded: false, - data: null, - filtered_items: null, - items: {}, - - events: { - "touchstart .item": "touchstart", - "touchmove .item": "touchmove", - "touchend .item": "touchend", - "mousedown .item": "touchstart", - "mousemove .item": "touchmove", - "mouseup .item": "touchend", - "touchstart h1": "showDepartmentSelector", - }, - - initialize: function(){ - this.$title = this.$("h1") - this.$content = this.$(".content") - this.$loader = this.$(".loader") - this.scroller = new IScroll('#collection', app.iscroll_options) - this.departmentFilterView = new DepartmentFilter ({ parent: this }) - this.sizeFilterView = new SizeFilter ({ parent: this }) - }, - - show: function(){ - 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 (sdk.env === 'test' && this.data.SearchResponseFull.Results.Items.length < 4) { -// var items = this.data.SearchResponseFull.Results.Items -// items = items.concat(items).concat(items).concat(items) -// items = items.concat(items).concat(items).concat(items) -// this.data.SearchResponseFull.Results.Items = items -// } - - if (this.data && this.data.SearchResponseFull.Results.Items.length < 4) { - app.footer.hide() - } - if (app.store.FilterBy !== "none") { - if (app.store.FilterBy === "category") { - app.footer.show("FILTER") - } - else { - app.footer.show("FILTER BY " + app.store.FilterBy.toUpperCase()) - } - } - document.body.className = "collection" - if (this.loaded) { - console.log("collection this loaded") - return this.populate(this.data) - } - else { - this.fetch() - } - }, - - // called when footer is tapped - filter by (x) - save: function(){ - switch (app.store.FilterBy) { - case 'none': - this.departmentFilterView.filter() - break - case 'size': - this.sizeFilterView.filter() - break - } - }, - - fetch: function(){ - console.log("collection fetch") - if (this.loaded) { - console.log("collection loaded") - return - } - this.$loader.show() - console.log("fetching", app.department_id) - sdk.product.collection({ - department_id: app.department_id, - success: this.populate.bind(this) - }) - }, - - refresh: function(){ - this.loaded = false - this.fetch() - }, - - populate: function(data){ - if (this.loaded && ! data) { - console.log("populate 1") - data = this.data - } - else { - console.log("populate 2") - this.data = data - this.loaded = false - // console.log(data) - } - console.log(">>>>>>>> YES ") - if (! this.loaded) { - console.log("populate 3", data.SearchResponseFull.Results.Items.length) - this.loaded = true - this.$loader.hide() - this.$content.empty() - // DefaultCode10 -// 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 ) - - var items = this.filtered_items || data.SearchResponseFull.Results.Items - if (app.store.GroupBy === 'size') { - this.groupBySize( items, is_single_product ) - } - else { - this.appendItems( items, is_single_product ) - } - // this.restoreScroll() - // this.deferScrollToTop() - } - this.afterFetchCallback && this.afterFetchCallback() - this.deferRefresh() - this.restoreScroll() - }, - - groupBySize: function(items, is_single_product){ - var groups = {} - items.forEach(function(item){ - if (! item.Sizes.length) return - var size = item.Sizes[0] - var id = size['Text'] - if ( ! (id in groups) ) { - groups[id] = { - label: SIZE_LOOKUP[ id ], - items: [], - } - } - groups[id].items.push( item ) - }.bind(this)) - - Object.keys(groups).sort(function(a,b){ - var ao = SIZE_ORDER.indexOf( a ) - var bo = SIZE_ORDER.indexOf( b ) - return ao - bo - }).forEach(function(id){ - var size = groups[id] - var $el = $("<div>") - $el.addClass("product-group") - $el.html( size.label ) - this.$content.append($el) - this.appendItems( size.items, is_single_product ) - }.bind(this)) - }, - - appendItems: function(items, is_single_product){ - items.forEach(function(item){ - this.append(item, is_single_product) - }.bind(this)) - }, - - append: function(item, is_single_product){ - this.items[ item['Code8'] ] = item - var t = this.template.replace(/{{image}}/, sdk.image(item['DefaultCode10'], is_single_product ? '13_f' : '11_f')) - .replace(/{{code8}}/, item['Code8']) - var $t = $(t) - if (app.store.ShowProductNameOnCollectionPage) { - var $title = $("<span>") - $title.addClass("product-title") - $title.html( item['ModelNames'] ) - $t.append($title) - } - this.$content.append($t) - }, - - pick: function(e){ - var code = $(e.currentTarget).data("code") - var data = this.items[code] - this.saveScroll() - app.product.load(code, data) - }, - - collectionName: "STONE ISLAND", - setCollectionName: function(name){ - this.collectionName = name - this.$title.html(this.collectionName) - }, - - // filter by department - showDepartmentSelector: function(){ - if (this.$("h1").hasClass("single-dept")) { - this.departmentFilterView.filter() - } - }, - - firstTouch: { x: 0, y: 0, id: "" }, - lastTouch: { x: 0, y: 0, id: "" }, - touchstart: function(e){ - var p = e.originalEvent.touches ? e.originalEvent.touches[0] : e.originalEvent - this.firstTouch.x = this.lastTouch.x = p.pageX - this.firstTouch.y = this.lastTouch.y = p.pageY - this.firstTouch.id = e.currentTarget.dataset.id - }, - touchmove: function(e){ - var p = e.originalEvent.touches ? e.originalEvent.touches[0] : e.originalEvent - this.lastTouch.x = p.pageX - this.lastTouch.y = p.pageY - this.lastTouch.id = e.currentTarget.dataset.id - }, - touchend: function(e){ - var first = app.collection.firstTouch - var last = app.collection.lastTouch - var distance = Math.sqrt( Math.pow(first.x - last.x, 2) + Math.pow(first.y - last.y, 2) ) - if (distance < 20) { - this.pick(e) - } - }, - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/GalleryView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/GalleryView.js deleted file mode 100755 index 1428aca9..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/GalleryView.js +++ /dev/null @@ -1,65 +0,0 @@ -var GalleryView = View.extend({ - - el: "#gallery", - template: $("#gallery .template").html(), - - events: { -// "click .left": "prev", -// "click .right": "next", -// "touchstart .gallery": "touchstart", -// "touchmove .gallery": "touchmove", -// "touchend .gallery": "touchend", - }, - - initialize: function(){ - this.$(".template").remove() - }, - - reset: function(){ - this.gallery && this.gallery.destroy() - this.$el.empty() - }, - - populate: function(code, image_ids){ - var valid_styles = {} - image_ids.forEach(function(id){ - if (id.indexOf("_") == -1) return - var partz = id.split("_") - var size = parseInt(partz[0]), style = partz[1] - if (size > 13) return; - if (! valid_styles[style] || valid_styles[style] < size) { - valid_styles[style] = size - } - }) - Object.keys(valid_styles).sort(sort_image_styles).forEach(function(style){ - var id = valid_styles[style] + "_" + style - var t = this.template.replace(/{{image}}/, sdk.image(code, id)) - this.$el.append(t) - }.bind(this)) - - this.gallery = new Flickity( "#gallery", { - selector: '.item', - cellAlign: 'center', - autoPlay: false, - freeScroll: false, - wrapAround: true, - imagesLoaded: true, - prevNextButtons: false, - pageDots: false, - contain: true, - draggable: true, - }) - }, - - touchstart: function(e){ - }, - touchmove: function(e){ - }, - touchend: function(e){ - }, - -}) - -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(b)) - (YOOX_IMAGE_STYLE_ORDER.indexOf(a)) }
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/ProductView.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/ProductView.js deleted file mode 100755 index 6972b436..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/ProductView.js +++ /dev/null @@ -1,497 +0,0 @@ - -var ProductView = ScrollableView.extend({ - - el: "#product", - - events: { - "click .fit": "scroll_to_bottom", - "click .size": "select_size", - "click .color": "select_color", - "click .share": "share", - "click .gallery-left": "gallery_left", - "click .gallery-right": "gallery_right", - }, - - initialize: function(){ - this.gallery = new GalleryView () - this.scroller = new IScroll('#product', app.iscroll_options) - - this.$productHeader = this.$(".product-header") - this.$title = this.$(".title") - this.$type = this.$(".type") - this.$price = this.$(".price") - this.$size = this.$(".size") - this.$share = this.$(".share") - this.$color = this.$(".color") - this.$body = this.$(".body") - this.$fit = this.$(".fit") - this.$sizing = this.$(".sizing") - this.$style = this.$(".style") - }, - - show: function(){ - this.showFooter() - document.body.className = "product" - }, - hide: function(){ - }, - - showFooter: function(){ - if (this.not_available) { - app.footer.show("SOLD OUT") - } - else { - app.footer.show("ADD TO CART", "BUY NOW") - } - }, - - item: null, - details: null, - size: null, - color: null, - code: null, - is_onesize: false, - fitLargeCodes: {}, - - sizes: null, - colors: null, - - cache: {}, - - gallery_left: function(){ - app.product.gallery.gallery.previous() - }, - gallery_right: function(){ - app.product.gallery.gallery.next() - }, - - find: function(code, cb){ - data = app.collection.items[code] || {} - if (code in this.cache) { - return cb(data, this.cache[code]) - } - sdk.product.item({ - code: code - }).done(function(details){ - this.cache[code] = details - cb(data, details) - }.bind(this)) - }, - - load: function(code, data){ - this.gallery.reset() - this.show() - if (app.view && app.view.hide) { - app.view.hide() - } - app.view = this - app.header.set_back(true) - - if (! app.collection.loaded) { - this.el.className = "loading" - app.collection.afterFetchCallback = this.load.bind(this, code, data) - app.collection.fetch() - return - } - else { - app.collection.afterFetchCallback = null - } - window.location.href = "#/store/" + code - - if (data) { - app.collection.items[code] = data - } - - this.el.className = "loading" - this.find(code, this.populate.bind(this)) - }, - - populate: function(data, details){ - this.el.className = "" - - console.log(data, details) - - var descriptions = this.get_descriptions(details) - - var title = data['ModelNames'] - var type = title_case( data['MicroCategory'] ) - var price = "$" + data['DiscountedPrice'] + ".00" - var details_description = descriptions['Details'] || "" - var editorial = descriptions['EditorialDescription'] || "" - var body = details_description + " " + editorial - // 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 - - this.is_onesize = !! this.sizes[1] - - this.$size.show().html(size_label) - if (color_label) { - this.$color.html(color_label) - } - else { - this.$color.hide() - } - } - - // console.log(color, color_label, size, size_label) - - this.item = data - this.details = details['Item'] - this.code = data['DefaultCode10'] - - console.log( data['DefaultCode10'] ) - - this.$title.html(title) - this.$type.html(type) - this.$price.html(price) - this.$body.html(body) - - // window.FirebasePlugin && window.FirebasePlugin.setScreenName('product:' + code) - - this.$productHeader.toggleClass("wide", title.length > 48) - - var fits_large = !! this.fitLargeCodes[this.code] - app.product.$fit.toggle( fits_large ) - app.product.$sizing.toggle( fits_large ) - - this.showFooter() - - this.deferScrollToTop() - }, - - get_descriptions: function (details){ - var descriptions = {} - details['Item']['Descriptions'].forEach(function(pair){ - descriptions[pair.Key] = pair.Value - }) - return descriptions - }, - find_sizes_for_color: function(color_id){ - return Object.keys( this.colors[color_id].sizes ).sort(function(a,b){ - var ao = SIZE_ORDER[ a.label ], bo = SIZE_ORDER[ b.label ] - return ao<bo?-1:ao==bo?0:1 - }) - }, - find_colors_for_size: function(size_id){ - return Object.keys( this.sizes[size_id].colors ) - }, - - populate_selectors: function(data, details){ - var sizes = {}, colors = {}, size_lookup = {}, default_color - - var modelColors = details['Item']['ModelColors'] || [] - console.log('colors:', modelColors.length || "none") - - if (! modelColors.length) { - this.not_available = true - return - } - else { - this.not_available = false - } - - modelColors.forEach(function(color, index){ - if (! default_color || color['Code10'] == data['DefaultCode10']) { - default_color = color['ColorId'] - } - colors[ color['ColorId'] ] = { - id: color['Code10'], - code: color['Code10'], - label: color['ColorDescription'].toUpperCase(), - sizes: {}, - } - }) - - details['Item']['ModelSizes'].forEach(function(size){ - var label = "" - if (details['Item']['SizeTypeId'] == 412) { // shoes - label = size['Default']['Text'] + " " + size['Default']['ClassFamily'] - console.log("shoes?", label) - } - else { // everything else - label = SIZE_LOOKUP[ size['Default']['Text'] ] - } - if (! label) { - label = size['Default']['Text'] - if (size['Default']['Labeled']) { - label += " " + size['Default']['ClassFamily'] - } - } - console.log(size) - size_lookup[ label ] = size['SizeId'] - console.log( label ) - sizes[ size['SizeId'] ] = { - id: label, - label: label.toUpperCase(), - value: size['SizeId'], - colors: {}, - } - }) - details['Item']['ModelColorSize'].forEach(function(cs){ - colors[ cs['IdColor'] ].sizes[ cs['IdSize'] ] = true - sizes[ cs['IdSize'] ].colors[ cs['IdColor'] ] = true - }) - - this.sizes = sizes - this.colors = colors - return default_color - }, - - select_size: function(){ - if (this.not_available) { return } - if (this.is_onesize) { return this.select_color() } - if (this.item['Sizes'].length == 0) { return } - var sizes = Object.keys(this.sizes).map(function(key){ - return this.sizes[key] - }.bind(this)) - - app.selector.select("style", sizes, function(size){ - console.log(size) - this.size = size.value - this.$size.html(size.label) - }.bind(this)) - }, - - select_color: function(){ - if (this.not_available) { return } - if (this.item['Colors'].length == 0) { return } - var colors = Object.keys(this.colors).map(function(key){ - return this.colors[key] - }.bind(this)) - app.selector.select("style", colors, function(color){ - this.code = color.code - this.$color.html(color.label) - this.gallery.populate( color.code, this.details['ImageTypes'] ) - this.gallery_right() - }.bind(this)) - }, - - // ADD TO CART - save: function(){ - if (this.not_available) { return } - this.add_to_cart({ route: false }) - }, - // BUY NOW - cancel: function(){ - if (this.not_available) { return } - this.add_to_cart({ route: true }) - }, - - add_to_cart: function(opt){ - 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({ - 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("account/login") - auth.deferred_product = deferred_product - app.last_view = app.cart - }, - }) - } - else { - app.curtain.show("loading") - 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 - }, - }) - } - }, - - back: function(){ - app.router.go('store') - }, - - scroll_to_bottom: function(){ - }, - - share: function(){ - window.plugins.socialsharing.share( this.item['ModelNames'], null, null, "http://deeplink.me/www.stoneisland.com/store/" + this.code) - }, - -}) - -var SIZE_LOOKUP = { - "XS": "X-SMALL", - "S": "SMALL", - "M": "MEDIUM", - "L": "LARGE", - "XL": "X-LARGE", - "XXL": "XX-LARGE", - "3XL": "3X-LARGE", - "OneSize": "ONESIZE", -} - -var SIZE_ORDER = "XS S M L XL XXL 3XL".split(" ") - -/* -{ - "Code8": "41504876", - "BrandName": "STONE ISLAND", - "DefaultCode10": "41504876MA", - "MicroCategory": "Jacket", - "MacroCategory": "COATS & JACKETS", - "FullPrice": 728, - "DiscountedPrice": 437, - "PriceListId": 155702498, - "ModelNames": "41764 FLOWING CAMO WATRO", - "Sizes": [ - { - "Id": 4, - "Text": "S", - "ClassFamily": "INT", - "Labeled": true - }, - { - "Id": 6, - "Text": "L", - "ClassFamily": "INT", - "Labeled": true - }, - { - "Id": 7, - "Text": "XL", - "ClassFamily": "INT", - "Labeled": true - }, - { - "Id": 8, - "Text": "XXL", - "ClassFamily": "INT", - "Labeled": true - } - ], - "Colors": [ - { - "Id": 3152, - "Code10": { - "Id": 6769575, - "Value": "41504876MA" - }, - "Description": "Green", - "MacroColorId": 3152, - "Rgb": "3C941F" - } - ], - "SizeTypeId": 928, - "HasFlipSide": false, - "SeasonOfSale": "PE15", - "SalesLineId": "126", - "SalesLine": "18_STONE ISLAND", - "MarketId": 19, - "Criteria": { - "Sizes": [ - "3", - "5", - "6", - "7" - ], - "Looks": [], - "Styles": [], - "WashTypes": [], - "WashStories": [], - "WashCodes": [], - "Waists": [], - "Fabrics": [], - "ColorTypes": [], - "ModelNames": [], - "Material": [] - }, - "NoveltyPoints": 0, - "C10Attributes": [ - { - "Key": "MFC", - "Value": "621541764CC-6215-64V0050", - "C10": "41504876MA" - } - ], - "MacroCategoryId": 224, - "MicroCategoryId": 1319 -}, - -DESCRIPTIONS: - -Age: "Adult" -Appliqué: "Logo detail" -ColoreFoto_ID: "3140" -Composition: "100% Cotton" -CustomsInvoiceDescr: "Woven" -Design: "Solid color" -EditorialDescription: "20081 DATA DRIP PIN<br>Short sleeve T-Shirt in cotton jersey. Garment dyed.<br>Stone Island Compass logo print on the front, made up of a series of numbers." -ItemDescription: "Logo detail<br>Jersey<br>Round collar<br>Solid color<br>" -KeywordDescription: "Logo detail Jersey Round collar Solid color Jersey Woven not made of fur " -Kind of fabric: "Woven" -MFC: "631520081CC-6315-81V0060" -MacroCategory: "POLO SHIRTS & T-SHIRTS" -MadeIn: "Made In Turkmenistan" -MadeInIsoCode: "TN" -MainMaterial: "Cotton" -Material Description: "Jersey" -MicroCategory: "Short sleeve t-shirt" -MicroCategoryPlural: "Short sleeve t-shirts" -ModelFabric: "631520081CC-6315-81" -ModelNames: "20081 DATA DRIP PIN" -Neckline: "Claudine or round collar" - -*/ diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/Selector.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/Selector.js deleted file mode 100755 index 9c1109f6..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/Selector.js +++ /dev/null @@ -1,70 +0,0 @@ -var Selector = View.extend({ - - el: "#selector", - template: $("#selector .template").html(), - - events: { - "click .close": "hide", - "touchstart .options div": "pick", - }, - - initialize: function(){ - this.$options = this.$(".options") - }, - - lookup: null, - callback: null, - select: function(origin, options, callback){ - this.lookup = {} - this.callback = callback || function(item){ console.log(item) } - this.$options.empty() - options.forEach(function(opt){ - this.lookup[String(opt.id)] = opt - var t = this.template.replace(/{{id}}/, opt.id) - .replace(/{{label}}/, opt.label) - this.$options.append(t) - }.bind(this)) - 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(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; - selectorHeight = null; - }, - - hide: function(){ - this.lookup = this.callback = null - this.$el.hide() - app.curtain.hide() - this.visible = false - }, - - pick: function(e){ - e.preventDefault() - e.stopPropagation() - var $option = $(e.currentTarget) - var id = String($option.data("id")) - var selection = this.lookup[id] - this.callback( selection ) - this.hide() - }, - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/filters/CategoryFilter.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/filters/CategoryFilter.js deleted file mode 100755 index 53f9a59b..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/filters/CategoryFilter.js +++ /dev/null @@ -1,40 +0,0 @@ -var CategoryFilter = View.extend({ - - initialize: function(opt){ - this.parent = opt.parent - }, - - filter: function(){ - var cats = this.parent.data.SearchResponseFull.Refinements.Filters.Categories.map(function(cat){ - return { - id: cat.Id, - label: cat.Value - } - }) - if (this.last_choice) { - cats.push({ - id: "__remove_filter", - label: "REMOVE FILTER", - }) - } - app.selector.select("wide", cats, this.pick.bind(this)) - }, - - last_choice: null, - - pick: function(choice){ - this.parent.$content.empty() - if (choice.id == "__remove_filter") { - this.last_choice = null - this.parent.data.SearchResponseFull.Results.Items.forEach(this.parent.append.bind(this.parent)) - } - else { - this.last_choice = choice - this.parent.data.SearchResponseFull.Results.Items.filter(function(item){ - return item.MacroCategory == choice.label - }).forEach(this.parent.append.bind(this.parent)) - } - this.parent.deferScrollToTop() - }, - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/filters/DepartmentFilter.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/filters/DepartmentFilter.js deleted file mode 100644 index 7d5ccf3d..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/filters/DepartmentFilter.js +++ /dev/null @@ -1,30 +0,0 @@ -var DepartmentFilter = View.extend({ - - initialize: function(opt){ - this.parent = opt.parent - }, - - filter: function(){ - var deps = app.departments.map(function(dep){ - return { - id: dep.uri, - label: dep.text, - } - }) - app.selector.select("wide", deps, this.pick.bind(this)) - }, - - last_choice: null, - - pick: function(choice){ - this.parent.$content.empty() - this.last_choice = choice - app.department_id = choice.id - app.collection.loaded = false - app.collection.fetch() - app.footer.hide() - app.collection.setCollectionName(choice.label) - this.parent.deferScrollToTop() - }, - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/filters/SizeFilter.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/filters/SizeFilter.js deleted file mode 100644 index d0231021..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/products/filters/SizeFilter.js +++ /dev/null @@ -1,60 +0,0 @@ -var SizeFilter = View.extend({ - - initialize: function(opt){ - this.parent = opt.parent - }, - - filter: function(){ - var seen_sizes = {} - var sizes = [] - this.parent.data.SearchResponseFull.Results.Items.forEach(function(item){ - item.Sizes.forEach(function(size){ - if (size.Id in seen_sizes) { - return - } - seen_sizes[size.Id] = true - sizes.push(size) - }) - }) - sizes.sort(function(a,b){ - return a.Id - b.Id - }) - - var cats = sizes.map(function(cat){ - return { - id: cat.Id, - label: cat.Text, - } - }) - if (this.last_choice) { - cats.push({ - id: "__remove_filter", - label: "REMOVE FILTER", - }) - } - app.selector.select("wide", cats, this.pick.bind(this)) - }, - - last_choice: null, - - pick: function(choice){ - this.parent.$content.empty() - if (choice.id == "__remove_filter") { - this.last_choice = null - this.parent.filtered_items = null - this.parent.data.SearchResponseFull.Results.Items.forEach(this.parent.append.bind(this.parent)) - } - else { - this.last_choice = choice - console.log("filtering for size", choice.id) - var items = this.parent.data.SearchResponseFull.Results.Items.filter(function(item){ - console.log(item.Sizes.map(function(s){ return s })) - return item.Sizes.some(function(size){ return size.Id == choice.id }) - }) - this.parent.filtered_items = items - items.forEach(this.parent.append.bind(this.parent)) - } - this.parent.deferScrollToTop() - }, - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/Router.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/Router.js deleted file mode 100755 index a8ec331f..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/Router.js +++ /dev/null @@ -1,75 +0,0 @@ -var Router = View.extend({ - - routeByHash: false, - - go: function(url){ - this.parseRoute(url) - }, - - route: function(){ - var path = this.routeByHash ? window.location.hash.substr(0) : window.location.pathname - path = path || "/" - this.originalPath = path - this.parseRoute(path) - }, - - parseRoute: function(pathname){ - - pathname = pathname.replace(/^#/, "") - - if (pathname[0] !== "/") { pathname = "/" + pathname } - - var routes = this.routes, - path = pathname.split("/"); - - for (var i = 0; i < path.length; i++) { - if (! path[i].length) { - path[i] = null - } - } - - if (pathname in routes) { - this[this.routes[pathname]]() - return - } - - if (path[path.length-1] == null) { - path.pop() - } - - for (var route in routes) { - var routePath = route.split("/") - if (routePath[1] == path[1]) { - if (routePath[2] && routePath[2].indexOf(":") !== -1 && path[2] && (path[3] === routePath[3]) ) { - this[this.routes[route]](path[2]) - return - } - else if (routePath[2] == path[2]) { - if (routePath[3] && path[3]) { - if (routePath[3].indexOf(":") !== -1) { - this[this.routes[route]](path[3]) - return - } - else if (routePath[3] == path[3]) { - this[this.routes[route]]() - return - } - } - else if (! routePath[3] && ! path[3]) { - this[this.routes[route]]() - return - } - } - else if (! routePath[2] && (! path[2].length || ! path[2])) { - this[this.routes[route]]() - return - } - } - } - - if (is_mobile) { - window.location.href = "/" - } - } - -}) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/Scrollable.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/Scrollable.js deleted file mode 100755 index 7f90929a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/Scrollable.js +++ /dev/null @@ -1,44 +0,0 @@ -var ScrollableView = View.extend({ - - events: { - "load img": "deferRefresh", - }, - - deferScrollToTop: function(){ - this.scrollPosition = 0 - setTimeout(this.scrollToTop.bind(this), 0) - }, - - scrollPosition: 0, - - resetScroll: function(){ - this.scrollPosition = 0 - }, - - saveScroll: function(){ - this.scrollPosition = this.scroller.y - }, - - restoreScroll: function(){ - setTimeout(function(){ - this.scroller.scrollTo(0, this.scrollPosition) - }.bind(this), 0) - }, - - refreshScroller: function(){ - this.scroller.refresh() - clearTimeout( this.scrollerRefreshTimeout ) - }, - - scrollerRefreshTimeout: null, - deferRefresh: function(){ - clearTimeout( this.scrollerRefreshTimeout ) - this.scrollerRefreshTimeout = setTimeout(this.refreshScroller.bind(this)) - }, - - scrollToTop: function(){ - this.scroller.refresh() - this.scroller.scrollTo(0, 0) - }, - -})
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/Serializable.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/Serializable.js deleted file mode 100755 index fa4eba02..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/Serializable.js +++ /dev/null @@ -1,169 +0,0 @@ -var SerializableView = View.extend({ - - events: { - "change select": "update_select", - "change [type=date]": "update_date", - "focus input": "focus_input", - "click .date-wrapper": "focus_date", - "submit form": "save", - }, - - preload: function(data){ - if (! data && sdk.env == "production") { return } - data = data || this.test_data - if (! data) { return } - this.load_data(data) - }, - - load_data: function(data){ - Object.keys(data).forEach(function(key){ - var value = data[key] - var $el = this.$("[name=" + key + "]") - - if ($el.attr("type") == "checkbox") { - $el.prop("checked", value) - } - if ($el.attr("type") == "date") { - $el.val( value ) - this.update_date({ currentTarget: $el }) - } - else if ($el.prop("tagName") == "SELECT") { - $el.val( value ) - this.update_select({ currentTarget: $el }) - } - else { - $el.val( value ) - } - }.bind(this)) - }, - - serialize: function(){ - var fields = {} - this.$("input[name], select[name], textarea[name]").each( function(){ - if (this.type == "checkbox") { - if ($(this).prop("checked")) { - fields[this.name] = this.value - } - } - else { - fields[this.name] = this.value - } - }) - return fields - }, - - deserialize: function(data){ - this.$("input[name], textarea[name]").val("") - Object.keys(data).forEach(function(k){ - this.$("[" + k + "]").val(data[k]) - }) - }, - - focus_input: function(e){ - $(e.currentTarget).removeClass("error_hilite") - }, - - focus_date: function(e){ - $(e.currentTarget).find("input").focus() - }, - - update_select: function(e){ - var $target = $(e.currentTarget), value = $target.val() - var label = $target.find("option").filter(function(){ return this.value === value }).html() - $target.parent().addClass("picked") - $target.parent().find("span").html(label) - }, - - update_date: function(e){ - var $target = $(e.currentTarget), value = $target.val() - var label = moment(value).format("MM/DD/YYYY") - $target.parent().addClass("picked") - $target.parent().find("span").html(label) - }, - - validate: function(data, errors){ - var data = data || this.serialize() - var errors = errors || [] - var presence_msgs = this.validate_presence || {} - if (! this.disabled) { - Object.keys(presence_msgs).forEach(function(k){ - if (! data[k]) errors.push( [ k, presence_msgs[k] ] ) - }) - } - this.validate_fields && this.validate_fields(data, errors) - this.cc && this.cc.validate(data, errors) - this.address && this.address.validate(data, errors) - return { errors: errors, data: data } - }, - - show_errors: function(errors){ - console.log("showing errors") - console.log(errors) - var msgs = [] - errors.forEach(function(e, i){ - if (i > 0) { return } - this.$("[name=" + e[0] + "]").addClass('error_hilite') - msgs.push(e[1]) - }.bind(this)) - this.$msg.html(msgs.join("<br>")) - this.$msg.addClass('alert-notice') - }, - - hide_errors: function(){ - this.$msg.removeClass('alert-notice') - this.$msg.html("") - }, - - finalize: function(data){ - return data - }, - - save: function(e){ - e && e.preventDefault() - - var valid = this.validate() - if (valid.errors.length) { - this.show_errors(valid.errors) - return - } - else { - this.hide_errors() - cordova.plugins.Keyboard.close() - } - - var finalized_data = this.finalize(valid.data) - this.submit( finalized_data ) - }, - - submit: function(data){ - if (! data) { - return - } - app.curtain.show("loading") - this.action({ - data: data, - success: function(data){ - app.curtain.hide("loading") - this.success(data) - }.bind(this), - error: function(data){ - app.curtain.hide("loading") - console.log("api error") - this.error(data) - }.bind(this), - }) - }, - - success: function(data){ - console.log("SUCCESS") - console.log(data) - }, - - error: function(data){ - console.log("FAIL") - console.log(data) - }, - -}) - -var FormView = View.extend(SerializableView.prototype).extend(ScrollableView.prototype) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/View.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/View.js deleted file mode 100755 index 2401df0d..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/lib/view/View.js +++ /dev/null @@ -1,147 +0,0 @@ -var View = (function($, _){ - - var View = function(options) { - this._id = _.uniqueId('view') - this.type = "view" - options || (options = {}); - _.extend(this, _.pick(options, viewOptions)) - this._ensureElement() - this.initialize.apply(this, arguments) - this.delegateEvents() - } - - var delegateEventSplitter = /^(\S+)\s*(.*)$/; - - var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']; - - _.extend(View.prototype, { - - // The default `tagName` of a View's element is `"div"`. - tagName: 'div', - - $: function(selector) { - return this.$el.find(selector); - }, - - initialize: function(){}, - - setElement: function(element, delegate) { - if (this.$el) this.undelegateEvents(); - this.$el = element instanceof $ ? element : $(element); - this.el = this.$el[0]; - if (delegate !== false) this.delegateEvents(); - return this; - }, - - // Set callbacks, where `this.events` is a hash of - // - // *{"event selector": "callback"}* - // - // { - // 'mousedown .title': 'edit', - // 'click .button': 'save', - // 'click .open': function(e) { ... } - // } - // - // pairs. Callbacks will be bound to the view, with `this` set properly. - // Uses event delegation for efficiency. - // Omitting the selector binds the event to `this.el`. - // This only works for delegate-able events: not `focus`, `blur`, and - // not `change`, `submit`, and `reset` in Internet Explorer. - delegateEvents: function(events) { - if (!(events || (events = _.result(this, 'events')))) return this; - this.undelegateEvents(); - for (var key in events) { - var method = events[key]; - if (!_.isFunction(method)) method = this[events[key]]; - if (!method) continue; - - var match = key.match(delegateEventSplitter); - var eventName = match[1], selector = match[2]; - method = _.bind(method, this); - if (is_mobile) { - if (eventName === 'mouseenter' || eventName === 'mouseleave') { - continue - } - if (is_android && eventName === 'click') { - eventName = 'touchstart' - } - } - eventName += '.delegateEvents' + this._id; - if (selector === '') { - this.$el.on(eventName, method); - } else { - this.$el.on(eventName, selector, method); - } - } - return this; - }, - - // Clears all callbacks previously bound to the view with `delegateEvents`. - undelegateEvents: function() { - this.$el.off('.delegateEvents' + this._id); - return this; - }, - - // Ensure that the View has a DOM element to render into. - // If `this.el` is a string, pass it through `$()`, take the first - // matching element, and re-assign it to `el`. Otherwise, create - // an element from the `id`, `className` and `tagName` properties. - _ensureElement: function() { - this.setElement(_.result(this, 'el'), false); - }, - - preventDefault: function(e){ - e && e.preventDefault() - }, - - stopPropagation: function(e){ - e && e.stopPropagation() - }, - - }); - - - var extend = function(protoProps, staticProps) { - var staticProps = staticProps || {} - var parent = this; - var child; - var childEvents = {}; - - // The constructor function for the new subclass is either defined by you - // (the "constructor" property in your `extend` definition), or defaulted - // by us to simply call the parent's constructor. - if (protoProps && _.has(protoProps, 'constructor')) { - child = protoProps.constructor; - } else { - child = function(){ return parent.apply(this, arguments); }; - } - - // Extend events so we can subclass views - _.extend(childEvents, parent.prototype.events, protoProps.events) - - // Add static properties to the constructor function, if supplied. - _.extend(child, parent, staticProps); - - // Set the prototype chain to inherit from `parent`, without calling - // `parent`'s constructor function. - var Surrogate = function(){ this.constructor = child; }; - Surrogate.prototype = parent.prototype; - child.prototype = new Surrogate; - - // Add prototype properties (instance properties) to the subclass, - // if supplied. - if (protoProps) _.extend(child.prototype, protoProps); - - // Set a convenience property in case the parent's prototype is needed - // later. - child.prototype.__super__ = parent.prototype; - child.prototype.events = childEvents - - return child; - }; - - View.extend = extend; - - return View; -})(jQuery, _) diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/_sdk.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/_sdk.js deleted file mode 100755 index 7b4966a5..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/_sdk.js +++ /dev/null @@ -1,43 +0,0 @@ -var sdk = (function(){ - var sdk = {} - - sdk.env = "development" - - var endpoint = "https://secure.api.yoox.biz/" - // var endpoint = "http://api.yoox.biz/" - - sdk.init = function(opt){ - switch (sdk.env = opt.env || "development") { - case 'test': - endpoint = window.location.origin + "/" - break - default: - case 'development': - endpoint = "/" - break - case 'production': - endpoint = "https://secure.api.yoox.biz/" - break - } - } - - sdk.path = function(api, path){ - return endpoint + api + "/STONEISLAND_US/" + path - } - - sdk.image = function(code, size){ - return "https://cdn.yoox.biz/" + code.substr(0,2) + "/" + code + "_" + size + ".jpg" - } - - sdk.cms = function(){ - return "https://stone.giraffe.life" - // return "https://staging.stone.giraffe.life" - } - - $.ajaxSetup({ - // possibly: application/json; charset=utf-8" - contentType: "application/json", - }) - - return sdk -})()
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/account.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/account.js deleted file mode 100755 index 3eb3f3bd..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/account.js +++ /dev/null @@ -1,133 +0,0 @@ -sdk.account = (function(){ - - var user_id, access_token - - // https://gist.github.com/fanfare/d18498e7fa25acbd4486 - var account = {} - account.signup = function(opt){ - return $.ajax({ - method: "POST", - url: sdk.path("Account.API/1.5", "users.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-api-key": auth.apikey, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - user_id = data['UserAccount']['UserId'] - access_token = data['UserAccount']['AccessToken'] - - auth.set_user(user_id, access_token) - - opt.success(data) - }, - error: opt.error, - }) - } - - account.login = function(opt){ - return $.ajax({ - method: "POST", - url: sdk.path("Account.API/1.5", "authfull.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - auth.user = data['UserFull'] - user_id = data['UserFull']['idUser'] - access_token = data['UserFull']['AccessToken'] - - auth.set_user(user_id, access_token) - - opt.success(data) - }, - error: opt.error, - }) - } - - account.checkin = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + ".json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: "{}", - success: function(data){ - auth.user = data.User - opt.success(data) - }, - error: opt.error, - }) - } - - account.update = function(opt){ - return $.ajax({ - method: "PUT", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + ".json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - opt.success(data) - }, - error: opt.error, - }) - } - - account.update_mail_and_password = function(opt){ - return $.ajax({ - method: "PUT", - url: sdk.path("Account.API/1.5", "auth/" + auth.user_id + ".json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - opt.success(data) - }, - error: opt.error, - }) - } - - account.fetch_orders = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/orders.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - opt.success(data) - }, - error: opt.error, - }) - } - - account.fetch_single_order = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/orders/" + opt.id + ".json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - opt.success(data) - }, - error: opt.error, - }) - } - - return account - -})() diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/address.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/address.js deleted file mode 100755 index 1256df54..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/address.js +++ /dev/null @@ -1,78 +0,0 @@ -sdk.address = (function(){ - var address = {} - - address.list = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/addressBook.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: opt.data, - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - complete: function(data){ - console.log("really weird") - console.log(data) - } - }) - } - - address.add = function(opt){ - return $.ajax({ - method: "POST", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/addressBook/item.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - address.update = function(opt){ - return $.ajax({ - method: "PUT", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/addressBook/item.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - address.destroy = function(opt){ - return $.ajax({ - method: "DELETE", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/" + opt.id + "/addressBook.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - return address - -})()
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/auth.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/auth.js deleted file mode 100755 index bcfb2d3a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/auth.js +++ /dev/null @@ -1,152 +0,0 @@ -/* - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - "x-yoox-device": auth.device, - "x-yoox-api-key": auth.apikey, - }, -*/ - -var auth = sdk.auth = (function(){ - var auth = {} - - auth.appname = is_iphone ? "native-iphone-stoneisland/1.0.0" : "native-android-stoneisland/1.0.0" - auth.apikey = "U2FsdGVkX18fThqg9bF0/ZgE9Jg948hn8O9EXli4B2729nAESCQaexv//M5+7+za" - auth.device = "smartphone" - - auth.access_token = "" - auth.user_id = -1 - - auth.next_view = null - auth.deferred_product = null - - // ios: integrate keychain api - // android: cordova.file.externalRootDirectory api - - auth.init = function(fn){ - console.log("AUTH INIT") - auth.get_user(function(){ - if (auth.logged_in()) { - sdk.account.checkin({ - success: function(data){ - fn && fn( auth.logged_in() ) - }, - error: function(){ - auth.log_out() - fn && fn( false ) - // - }, - }) - auth.get_cart() - } - else { - fn && fn( auth.logged_in() ) - } - }) - } - - auth.set_user = function(user_id, access_token, cb){ - auth.access_token = access_token - auth.user_id = user_id - - localStorage.setItem("yoox.access_token", access_token) - localStorage.setItem("yoox.user_id", user_id) - - window.FirebasePlugin && window.FirebasePlugin.setUserId(user_id) - - cb && cb() - } - auth.get_user = function(cb){ - auth.access_token = localStorage.getItem("yoox.access_token") || "" - auth.user_id = localStorage.getItem("yoox.user_id") || -1 - cb && cb() - } - auth.clear_user = function(cb){ - auth.access_token = "" - auth.user_id = -1 - localStorage.removeItem("yoox.access_token") - localStorage.removeItem("yoox.user_id") - - cb && cb() - } - - auth.set_cart = function(cart_id, cart_token, cb){ - localStorage.setItem("yoox.cart_token", cart_token) - localStorage.setItem("yoox.cart_id", cart_id) - cb && cb() - } - auth.get_cart = function(cb){ - sdk.cart.token = localStorage.getItem("yoox.cart_token") || "" - sdk.cart.id = localStorage.getItem("yoox.cart_id") || -1 - cb && cb() - } - auth.clear_cart = function(cb){ - sdk.cart.token = "" - sdk.cart.id = -1 - localStorage.removeItem("yoox.cart_token") - localStorage.removeItem("yoox.cart_id") - cb && 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(){ - 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(opt){ - opt = opt || {} - // auth.deferred_product - if (! auth.deferred_product) { - 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") - app.header.increment_cart_count() - opt.success && opt.success() - }, - error: function(data){ - console.log("ERROR ADDING ITEM") - opt.error && opt.error() - }, - }) - auth.deferred_product = null - } - - auth.log_out = function(){ - auth.clear_user() - auth.clear_cart() - } - auth.logged_in = function(){ - return (auth.user_id && auth.user_id !== -1 && auth.user_id !== "undefined") - } - auth.has_cart = function(){ - return (sdk.cart.id && sdk.cart.id !== -1 && sdk.cart.id !== "undefined") - } - - return auth -})()
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/cart.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/cart.js deleted file mode 100755 index 3ff2e1d2..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/cart.js +++ /dev/null @@ -1,248 +0,0 @@ -sdk.cart = (function(){ - var cart = {} - - cart.id = "" - cart.token = "" - - // https://gist.github.com/fanfare/9a50c524aea417d0bf3e - cart.initialize = function(opt){ - return $.ajax({ - method: "POST", - url: sdk.path("Cart.API/1.6", "carts.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-device": auth.device, - }, - data: "{}", - // data: opt.data, - success: function(data){ - cart.id = data["CartSession"]["CartId"] - cart.token = data["CartSession"]["CartToken"] - auth.set_cart( cart.id, cart.token ) - opt.success(data) - }, - error: opt.error, - }) - } - - cart.set_user = function(opt){ - return $.ajax({ - method: "PUT", - url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/user.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - }, - data: JSON.stringify({ - "UserId": auth.user_id, - "UserToken": auth.access_token, - }), - success: function(data){ - opt.success(data) - }, - error: opt.error, - }) - } - - // Code10, Size, Section - cart.add_item = function(opt){ - return $.ajax({ - method: "POST", - url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/items.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - cart.delete_item = function(opt){ - return $.ajax({ - method: "DELETE", - url: sdk.path("Cart.API/1.6", "carts/" + cart.id + - "/items/" + opt.data.Code10 + - "/" + opt.data.Size + ".json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - }, - data: "{}", - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - cart.get_status = function(opt){ - if (! cart.id) { - return opt.error({ error: "no cart" }) - } - return $.ajax({ - method: "GET", - url: sdk.path("Cart.API/1.6", "carts/" + cart.id + ".json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - "x-yoox-device": auth.device, - }, - success: function(data){ - if (data['Error']) { - opt.error && opt.error(data) - } - else { - opt.success(data) - } - }, - error: opt.error, - }) - } - - cart.set_shipping_address = function(opt){ - return $.ajax({ - method: "PUT", - url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/receiver.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - }, - data: JSON.stringify(opt.data), - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - // NB: Payment type may simply be 1 (credit card) - cart.set_payment_type = function(opt){ - return $.ajax({ - method: "PUT", - url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/paymentType.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - cart.get_card_types = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Cart.API/1.6", "cardTypes.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - }, - data: "", - success: function(data){ - opt.success(data) - }, - error: opt.error, - }) - } - - // use with full CC data if not storing it in wallet - cart.set_credit_card = function(opt){ - return $.ajax({ - method: "PUT", - url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/creditCard.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - // use with a stored GUID - // NB: if "verification number" is 1, use CVV/CID/CVC security code - // if "verification number" is 2, use "Issue Number" - cart.use_stored_credit_card = function(opt){ - var data = { - "Guid": opt.data.guid, - "UserId": auth.user_id, - "AccessToken": auth.access_token, - } - if (opt.data.cvv) { - data["Cvv"] = opt.data.cvv - } - if (opt.data.issue) { - data["Issue"] = opt.data.issue - } - return $.ajax({ - method: "PUT", - url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/userCreditCard.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - }, - data: JSON.stringify(data), - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - cart.secure_finalize = function(opt){ - return $.ajax({ - method: "POST", - url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/secureFinalizer.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - "x-yoox-device": auth.device, - }, - data: JSON.stringify( opt.data || {} ), - success: function(data){ - console.log(data) - // order number is: - // "Info": "2905Y07FA13020" - opt.success(data) - }, - error: opt.error, - }) - } - - cart.finalize = function(opt){ - return $.ajax({ - method: "POST", - url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/finalizer.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": cart.token, - }, - data: JSON.stringify( opt.data || {} ), - success: function(data){ - console.log(data) - // order number is: - // "Info": "2905Y07FA13020" - opt.success(data) - }, - error: opt.error, - }) - } - - return cart -})()
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/payment.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/payment.js deleted file mode 100755 index 283fee92..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/payment.js +++ /dev/null @@ -1,72 +0,0 @@ -sdk.payment = (function(){ - var payment = {} - - payment.add_credit_card = function(opt){ - return $.ajax({ - method: "POST", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/cards.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: JSON.stringify( opt.data ), - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - payment.list_credit_cards = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/cards.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: opt.data, - success: function(data){ - opt.success(data) - }, - error: opt.error, - }) - } - - payment.delete_credit_card = function(opt){ - return $.ajax({ - method: "DELETE", - url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/cards/" + opt.guid + ".json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-account-token": auth.access_token, - }, - data: "{}", - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - payment.get_payment_types = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Cart.API/1.6", "availablePaymentTypes.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-device": auth.device, - }, - data: opt.data, - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - return payment -})()
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/product.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/product.js deleted file mode 100755 index 671d1fea..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/product.js +++ /dev/null @@ -1,68 +0,0 @@ -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.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, - error: opt.error, - }) - } - - // https://gist.github.com/fanfare/2d25d1b36944188948ff - product.item = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Item.API/1.0", "item/" + opt.code + ".json"), - success: opt.success, - error: opt.error, - }) - } - - product.search = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Search.API/1.2", "search.json"), - data: { format: "full", gallery: opt.gallery_id || default_gallery, textSearch: opt.query, productsPerPage: 100 }, - success: opt.success, - error: opt.error, - }) - } - - return product -})()
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/shipping.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/shipping.js deleted file mode 100755 index 28a0db76..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/sdk/shipping.js +++ /dev/null @@ -1,85 +0,0 @@ -sdk.shipping = (function() { - var shipping = {} - - - // https://gist.github.com/fanfare/edb524128461b573d833 - - // BOX TYPE - - shipping.get_box_types = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Cart.API/1.6", "carts/" + sdk.cart.id + "/availableBoxTypes.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": sdk.cart.token, - }, - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - shipping.set_box_type = function(opt){ - return $.ajax({ - method: "PUT", - url: sdk.path("Cart.API/1.6", "carts/" + sdk.cart.id + "/boxType.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": sdk.cart.token, - }, - data: JSON.stringify({ - "Type": opt.type, - }), - success: function(data){ - // console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - - // DELIVERY TYPES - - // The response is different than described in the API reference.. - // https://gist.github.com/fanfare/15dfbca6a16ae6bed503 - - shipping.get_delivery_types = function(opt){ - return $.ajax({ - method: "GET", - url: sdk.path("Cart.API/1.6", "carts/" + sdk.cart.id + "/availableDeliveryTypes.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": sdk.cart.token, - }, - success: function(data){ - opt.success(data) - }, - error: opt.error, - }) - } - - shipping.set_delivery_type = function(opt){ - return $.ajax({ - method: "PUT", - url: sdk.path("Cart.API/1.6", "carts/" + sdk.cart.id + "/deliveryType.json"), - headers: { - "x-yoox-appname": auth.appname, - "x-yoox-cart-token": sdk.cart.token, - }, - data: JSON.stringify({ - "Id": opt.id, - }), - success: function(data){ - //console.log(data) - opt.success(data) - }, - error: opt.error, - }) - } - - return shipping -})() diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/fastclick.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/fastclick.js deleted file mode 100755 index 9c746c2b..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/fastclick.js +++ /dev/null @@ -1,790 +0,0 @@ -/** - * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs. - * - * @version 1.0.1 - * @codingstandard ftlabs-jsv2 - * @copyright The Financial Times Limited [All Rights Reserved] - * @license MIT License (see LICENSE.txt) - */ - -/*jslint browser:true, node:true*/ -/*global define, Event, Node*/ - - -/** - * Instantiate fast-clicking listeners on the specified layer. - * - * @constructor - * @param {Element} layer The layer to listen on - * @param {Object} options The options to override the defaults - */ -function FastClick(layer, options) { - 'use strict'; - var oldOnClick; - - options = options || {}; - - /** - * Whether a click is currently being tracked. - * - * @type boolean - */ - this.trackingClick = false; - - - /** - * Timestamp for when click tracking started. - * - * @type number - */ - this.trackingClickStart = 0; - - - /** - * The element being tracked for a click. - * - * @type EventTarget - */ - this.targetElement = null; - - - /** - * X-coordinate of touch start event. - * - * @type number - */ - this.touchStartX = 0; - - - /** - * Y-coordinate of touch start event. - * - * @type number - */ - this.touchStartY = 0; - - - /** - * ID of the last touch, retrieved from Touch.identifier. - * - * @type number - */ - this.lastTouchIdentifier = 0; - - - /** - * Touchmove boundary, beyond which a click will be cancelled. - * - * @type number - */ - this.touchBoundary = options.touchBoundary || 10; - - - /** - * The FastClick layer. - * - * @type Element - */ - this.layer = layer; - - /** - * The minimum time between tap(touchstart and touchend) events - * - * @type number - */ - this.tapDelay = options.tapDelay || 200; - - if (FastClick.notNeeded(layer)) { - return; - } - - // Some old versions of Android don't have Function.prototype.bind - function bind(method, context) { - return function() { return method.apply(context, arguments); }; - } - - - var methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel']; - var context = this; - for (var i = 0, l = methods.length; i < l; i++) { - context[methods[i]] = bind(context[methods[i]], context); - } - - // Set up event handlers as required - if (deviceIsAndroid) { - layer.addEventListener('mouseover', this.onMouse, true); - layer.addEventListener('mousedown', this.onMouse, true); - layer.addEventListener('mouseup', this.onMouse, true); - } - - layer.addEventListener('click', this.onClick, true); - layer.addEventListener('touchstart', this.onTouchStart, false); - layer.addEventListener('touchmove', this.onTouchMove, false); - layer.addEventListener('touchend', this.onTouchEnd, false); - layer.addEventListener('touchcancel', this.onTouchCancel, false); - - // Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) - // which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick - // layer when they are cancelled. - if (!Event.prototype.stopImmediatePropagation) { - layer.removeEventListener = function(type, callback, capture) { - var rmv = Node.prototype.removeEventListener; - if (type === 'click') { - rmv.call(layer, type, callback.hijacked || callback, capture); - } else { - rmv.call(layer, type, callback, capture); - } - }; - - layer.addEventListener = function(type, callback, capture) { - var adv = Node.prototype.addEventListener; - if (type === 'click') { - adv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) { - if (!event.propagationStopped) { - callback(event); - } - }), capture); - } else { - adv.call(layer, type, callback, capture); - } - }; - } - - // If a handler is already declared in the element's onclick attribute, it will be fired before - // FastClick's onClick handler. Fix this by pulling out the user-defined handler function and - // adding it as listener. - if (typeof layer.onclick === 'function') { - - // Android browser on at least 3.2 requires a new reference to the function in layer.onclick - // - the old one won't work if passed to addEventListener directly. - oldOnClick = layer.onclick; - layer.addEventListener('click', function(event) { - oldOnClick(event); - }, false); - layer.onclick = null; - } -} - - -/** - * Android requires exceptions. - * - * @type boolean - */ -var deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0; - - -/** - * iOS requires exceptions. - * - * @type boolean - */ -var deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent); - - -/** - * iOS 4 requires an exception for select elements. - * - * @type boolean - */ -var deviceIsIOS4 = deviceIsIOS && (/OS 4_\d(_\d)?/).test(navigator.userAgent); - - -/** - * iOS 6.0(+?) requires the target element to be manually derived - * - * @type boolean - */ -var deviceIsIOSWithBadTarget = deviceIsIOS && (/OS ([6-9]|\d{2})_\d/).test(navigator.userAgent); - - -/** - * Determine whether a given element requires a native click. - * - * @param {EventTarget|Element} target Target DOM element - * @returns {boolean} Returns true if the element needs a native click - */ -FastClick.prototype.needsClick = function(target) { - 'use strict'; - switch (target.nodeName.toLowerCase()) { - - // Don't send a synthetic click to disabled inputs (issue #62) - case 'button': - case 'select': - case 'textarea': - if (target.disabled) { - return true; - } - - break; - case 'input': - - // File inputs need real clicks on iOS 6 due to a browser bug (issue #68) - if ((deviceIsIOS && target.type === 'file') || target.disabled) { - return true; - } - - break; - case 'label': - case 'video': - return true; - } - - return (/\bneedsclick\b/).test(target.className); -}; - - -/** - * Determine whether a given element requires a call to focus to simulate click into element. - * - * @param {EventTarget|Element} target Target DOM element - * @returns {boolean} Returns true if the element requires a call to focus to simulate native click. - */ -FastClick.prototype.needsFocus = function(target) { - 'use strict'; - switch (target.nodeName.toLowerCase()) { - case 'textarea': - return true; - case 'select': - return !deviceIsAndroid; - case 'input': - switch (target.type) { - case 'button': - case 'checkbox': - case 'file': - case 'image': - case 'radio': - case 'submit': - return false; - } - - // No point in attempting to focus disabled inputs - return !target.disabled && !target.readOnly; - default: - return (/\bneedsfocus\b/).test(target.className); - } -}; - - -/** - * Send a click event to the specified element. - * - * @param {EventTarget|Element} targetElement - * @param {Event} event - */ -FastClick.prototype.sendClick = function(targetElement, event) { - 'use strict'; - var clickEvent, touch; - - // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24) - if (document.activeElement && document.activeElement !== targetElement) { - document.activeElement.blur(); - } - - touch = event.changedTouches[0]; - - // Synthesise a click event, with an extra attribute so it can be tracked - clickEvent = document.createEvent('MouseEvents'); - clickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null); - clickEvent.forwardedTouchEvent = true; - targetElement.dispatchEvent(clickEvent); -}; - -FastClick.prototype.determineEventType = function(targetElement) { - 'use strict'; - - //Issue #159: Android Chrome Select Box does not open with a synthetic click event - if (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') { - return 'mousedown'; - } - - return 'click'; -}; - - -/** - * @param {EventTarget|Element} targetElement - */ -FastClick.prototype.focus = function(targetElement) { - 'use strict'; - var length; - - // Issue #160: on iOS 7, some input elements (e.g. date datetime) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724. - if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time') { - length = targetElement.value.length; - targetElement.setSelectionRange(length, length); - } else { - targetElement.focus(); - } -}; - - -/** - * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it. - * - * @param {EventTarget|Element} targetElement - */ -FastClick.prototype.updateScrollParent = function(targetElement) { - 'use strict'; - var scrollParent, parentElement; - - scrollParent = targetElement.fastClickScrollParent; - - // Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the - // target element was moved to another parent. - if (!scrollParent || !scrollParent.contains(targetElement)) { - parentElement = targetElement; - do { - if (parentElement.scrollHeight > parentElement.offsetHeight) { - scrollParent = parentElement; - targetElement.fastClickScrollParent = parentElement; - break; - } - - parentElement = parentElement.parentElement; - } while (parentElement); - } - - // Always update the scroll top tracker if possible. - if (scrollParent) { - scrollParent.fastClickLastScrollTop = scrollParent.scrollTop; - } -}; - - -/** - * @param {EventTarget} targetElement - * @returns {Element|EventTarget} - */ -FastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) { - 'use strict'; - - // On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node. - if (eventTarget.nodeType === Node.TEXT_NODE) { - return eventTarget.parentNode; - } - - return eventTarget; -}; - - -/** - * On touch start, record the position and scroll offset. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onTouchStart = function(event) { - 'use strict'; - var targetElement, touch, selection; - - // Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111). - if (event.targetTouches.length > 1) { - return true; - } - - targetElement = this.getTargetElementFromEventTarget(event.target); - touch = event.targetTouches[0]; - - if (deviceIsIOS) { - - // Only trusted events will deselect text on iOS (issue #49) - selection = window.getSelection(); - if (selection.rangeCount && !selection.isCollapsed) { - return true; - } - - if (!deviceIsIOS4) { - - // Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23): - // when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched - // with the same identifier as the touch event that previously triggered the click that triggered the alert. - // Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an - // immediately preceeding touch event (issue #52), so this fix is unavailable on that platform. - if (touch.identifier === this.lastTouchIdentifier) { - event.preventDefault(); - return false; - } - - this.lastTouchIdentifier = touch.identifier; - - // If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and: - // 1) the user does a fling scroll on the scrollable layer - // 2) the user stops the fling scroll with another tap - // then the event.target of the last 'touchend' event will be the element that was under the user's finger - // when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check - // is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42). - this.updateScrollParent(targetElement); - } - } - - this.trackingClick = true; - this.trackingClickStart = event.timeStamp; - this.targetElement = targetElement; - - this.touchStartX = touch.pageX; - this.touchStartY = touch.pageY; - - // Prevent phantom clicks on fast double-tap (issue #36) - if ((event.timeStamp - this.lastClickTime) < this.tapDelay) { - event.preventDefault(); - } - - return true; -}; - - -/** - * Based on a touchmove event object, check whether the touch has moved past a boundary since it started. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.touchHasMoved = function(event) { - 'use strict'; - var touch = event.changedTouches[0], boundary = this.touchBoundary; - - if (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) { - return true; - } - - return false; -}; - - -/** - * Update the last position. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onTouchMove = function(event) { - 'use strict'; - if (!this.trackingClick) { - return true; - } - - // If the touch has moved, cancel the click tracking - if (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) { - this.trackingClick = false; - this.targetElement = null; - } - - return true; -}; - - -/** - * Attempt to find the labelled control for the given label element. - * - * @param {EventTarget|HTMLLabelElement} labelElement - * @returns {Element|null} - */ -FastClick.prototype.findControl = function(labelElement) { - 'use strict'; - - // Fast path for newer browsers supporting the HTML5 control attribute - if (labelElement.control !== undefined) { - return labelElement.control; - } - - // All browsers under test that support touch events also support the HTML5 htmlFor attribute - if (labelElement.htmlFor) { - return document.getElementById(labelElement.htmlFor); - } - - // If no for attribute exists, attempt to retrieve the first labellable descendant element - // the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label - return labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea'); -}; - - -/** - * On touch end, determine whether to send a click event at once. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onTouchEnd = function(event) { - 'use strict'; - var forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement; - - if (!this.trackingClick) { - return true; - } - - // Prevent phantom clicks on fast double-tap (issue #36) - if ((event.timeStamp - this.lastClickTime) < this.tapDelay) { - this.cancelNextClick = true; - return true; - } - - // Reset to prevent wrong click cancel on input (issue #156). - this.cancelNextClick = false; - - this.lastClickTime = event.timeStamp; - - trackingClickStart = this.trackingClickStart; - this.trackingClick = false; - this.trackingClickStart = 0; - - // On some iOS devices, the targetElement supplied with the event is invalid if the layer - // is performing a transition or scroll, and has to be re-detected manually. Note that - // for this to function correctly, it must be called *after* the event target is checked! - // See issue #57; also filed as rdar://13048589 . - if (deviceIsIOSWithBadTarget) { - touch = event.changedTouches[0]; - - // In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null - targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement; - targetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent; - } - - targetTagName = targetElement.tagName.toLowerCase(); - if (targetTagName === 'label') { - forElement = this.findControl(targetElement); - if (forElement) { - this.focus(targetElement); - if (deviceIsAndroid) { - return false; - } - - targetElement = forElement; - } - } else if (this.needsFocus(targetElement)) { - - // Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through. - // Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37). - if ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) { - this.targetElement = null; - return false; - } - - this.focus(targetElement); - this.sendClick(targetElement, event); - - // Select elements need the event to go through on iOS 4, otherwise the selector menu won't open. - // Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others) - if (!deviceIsIOS || targetTagName !== 'select') { - this.targetElement = null; - event.preventDefault(); - } - - return false; - } - - if (deviceIsIOS && !deviceIsIOS4) { - - // Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled - // and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42). - scrollParent = targetElement.fastClickScrollParent; - if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) { - return true; - } - } - - // Prevent the actual click from going though - unless the target node is marked as requiring - // real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted. - if (!this.needsClick(targetElement)) { - event.preventDefault(); - this.sendClick(targetElement, event); - } - - return false; -}; - - -/** - * On touch cancel, stop tracking the click. - * - * @returns {void} - */ -FastClick.prototype.onTouchCancel = function() { - 'use strict'; - this.trackingClick = false; - this.targetElement = null; -}; - - -/** - * Determine mouse events which should be permitted. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onMouse = function(event) { - 'use strict'; - - // If a target element was never set (because a touch event was never fired) allow the event - if (!this.targetElement) { - return true; - } - - if (event.forwardedTouchEvent) { - return true; - } - - // Programmatically generated events targeting a specific element should be permitted - if (!event.cancelable) { - return true; - } - - // Derive and check the target element to see whether the mouse event needs to be permitted; - // unless explicitly enabled, prevent non-touch click events from triggering actions, - // to prevent ghost/doubleclicks. - if (!this.needsClick(this.targetElement) || this.cancelNextClick) { - - // Prevent any user-added listeners declared on FastClick element from being fired. - if (event.stopImmediatePropagation) { - event.stopImmediatePropagation(); - } else { - - // Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) - event.propagationStopped = true; - } - - // Cancel the event - event.stopPropagation(); - event.preventDefault(); - - return false; - } - - // If the mouse event is permitted, return true for the action to go through. - return true; -}; - - -/** - * On actual clicks, determine whether this is a touch-generated click, a click action occurring - * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or - * an actual click which should be permitted. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onClick = function(event) { - 'use strict'; - var permitted; - - // It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early. - if (this.trackingClick) { - this.targetElement = null; - this.trackingClick = false; - return true; - } - - // Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target. - if (event.target.type === 'submit' && event.detail === 0) { - return true; - } - - permitted = this.onMouse(event); - - // Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through. - if (!permitted) { - this.targetElement = null; - } - - // If clicks are permitted, return true for the action to go through. - return permitted; -}; - - -/** - * Remove all FastClick's event listeners. - * - * @returns {void} - */ -FastClick.prototype.destroy = function() { - 'use strict'; - var layer = this.layer; - - if (deviceIsAndroid) { - layer.removeEventListener('mouseover', this.onMouse, true); - layer.removeEventListener('mousedown', this.onMouse, true); - layer.removeEventListener('mouseup', this.onMouse, true); - } - - layer.removeEventListener('click', this.onClick, true); - layer.removeEventListener('touchstart', this.onTouchStart, false); - layer.removeEventListener('touchmove', this.onTouchMove, false); - layer.removeEventListener('touchend', this.onTouchEnd, false); - layer.removeEventListener('touchcancel', this.onTouchCancel, false); -}; - - -/** - * Check whether FastClick is needed. - * - * @param {Element} layer The layer to listen on - */ -FastClick.notNeeded = function(layer) { - 'use strict'; - var metaViewport; - var chromeVersion; - - // Devices that don't support touch don't need FastClick - if (typeof window.ontouchstart === 'undefined') { - return true; - } - - // Chrome version - zero for other browsers - chromeVersion = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1]; - - if (chromeVersion) { - - if (deviceIsAndroid) { - metaViewport = document.querySelector('meta[name=viewport]'); - - if (metaViewport) { - // Chrome on Android with user-scalable="no" doesn't need FastClick (issue #89) - if (metaViewport.content.indexOf('user-scalable=no') !== -1) { - return true; - } - // Chrome 32 and above with width=device-width or less don't need FastClick - if (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) { - return true; - } - } - - // Chrome desktop doesn't need FastClick (issue #15) - } else { - return true; - } - } - - // IE10 with -ms-touch-action: none, which disables double-tap-to-zoom (issue #97) - if (layer.style.msTouchAction === 'none') { - return true; - } - - return false; -}; - - -/** - * Factory method for creating a FastClick object - * - * @param {Element} layer The layer to listen on - * @param {Object} options The options to override the defaults - */ -FastClick.attach = function(layer, options) { - 'use strict'; - return new FastClick(layer, options); -}; - - -if (typeof define !== 'undefined' && define.amd) { - - // AMD. Register as an anonymous module. - define(function() { - 'use strict'; - return FastClick; - }); -} else if (typeof module !== 'undefined' && module.exports) { - module.exports = FastClick.attach; - module.exports.FastClick = FastClick; -} else { - window.FastClick = FastClick; -} diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/flickity.pkgd.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/flickity.pkgd.js deleted file mode 100755 index 0471fa5b..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/flickity.pkgd.js +++ /dev/null @@ -1,5090 +0,0 @@ -/*! - * Flickity PACKAGED v1.0.1 - * Touch, responsive, flickable galleries - * - * Licensed GPLv3 for open source use - * or Flickity Commercial License for commercial use - * - * http://flickity.metafizzy.co - * Copyright 2015 Metafizzy - */ - -/** - * Bridget makes jQuery widgets - * v1.1.0 - * MIT license - */ - -( function( window ) { - - - -// -------------------------- utils -------------------------- // - -var slice = Array.prototype.slice; - -function noop() {} - -// -------------------------- definition -------------------------- // - -function defineBridget( $ ) { - -// bail if no jQuery -if ( !$ ) { - return; -} - -// -------------------------- addOptionMethod -------------------------- // - -/** - * adds option method -> $().plugin('option', {...}) - * @param {Function} PluginClass - constructor class - */ -function addOptionMethod( PluginClass ) { - // don't overwrite original option method - if ( PluginClass.prototype.option ) { - return; - } - - // option setter - PluginClass.prototype.option = function( opts ) { - // bail out if not an object - if ( !$.isPlainObject( opts ) ){ - return; - } - this.options = $.extend( true, this.options, opts ); - }; -} - -// -------------------------- plugin bridge -------------------------- // - -// helper function for logging errors -// $.error breaks jQuery chaining -var logError = typeof console === 'undefined' ? noop : - function( message ) { - console.error( message ); - }; - -/** - * jQuery plugin bridge, access methods like $elem.plugin('method') - * @param {String} namespace - plugin name - * @param {Function} PluginClass - constructor class - */ -function bridge( namespace, PluginClass ) { - // add to jQuery fn namespace - $.fn[ namespace ] = function( options ) { - if ( typeof options === 'string' ) { - // call plugin method when first argument is a string - // get arguments for method - var args = slice.call( arguments, 1 ); - - for ( var i=0, len = this.length; i < len; i++ ) { - var elem = this[i]; - var instance = $.data( elem, namespace ); - if ( !instance ) { - logError( "cannot call methods on " + namespace + " prior to initialization; " + - "attempted to call '" + options + "'" ); - continue; - } - if ( !$.isFunction( instance[options] ) || options.charAt(0) === '_' ) { - logError( "no such method '" + options + "' for " + namespace + " instance" ); - continue; - } - - // trigger method with arguments - var returnValue = instance[ options ].apply( instance, args ); - - // break look and return first value if provided - if ( returnValue !== undefined ) { - return returnValue; - } - } - // return this if no return value - return this; - } else { - return this.each( function() { - var instance = $.data( this, namespace ); - if ( instance ) { - // apply options & init - instance.option( options ); - instance._init(); - } else { - // initialize new instance - instance = new PluginClass( this, options ); - $.data( this, namespace, instance ); - } - }); - } - }; - -} - -// -------------------------- bridget -------------------------- // - -/** - * converts a Prototypical class into a proper jQuery plugin - * the class must have a ._init method - * @param {String} namespace - plugin name, used in $().pluginName - * @param {Function} PluginClass - constructor class - */ -$.bridget = function( namespace, PluginClass ) { - addOptionMethod( PluginClass ); - bridge( namespace, PluginClass ); -}; - -return $.bridget; - -} - -// transport -if ( typeof define === 'function' && define.amd ) { - // AMD - define( 'jquery-bridget/jquery.bridget',[ 'jquery' ], defineBridget ); -} else if ( typeof exports === 'object' ) { - defineBridget( require('jquery') ); -} else { - // get jquery from browser global - defineBridget( window.jQuery ); -} - -})( window ); - -/*! - * classie v1.0.1 - * class helper functions - * from bonzo https://github.com/ded/bonzo - * MIT license - * - * classie.has( elem, 'my-class' ) -> true/false - * classie.add( elem, 'my-new-class' ) - * classie.remove( elem, 'my-unwanted-class' ) - * classie.toggle( elem, 'my-class' ) - */ - -/*jshint browser: true, strict: true, undef: true, unused: true */ -/*global define: false, module: false */ - -( function( window ) { - - - -// class helper functions from bonzo https://github.com/ded/bonzo - -function classReg( className ) { - return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); -} - -// classList support for class management -// altho to be fair, the api sucks because it won't accept multiple classes at once -var hasClass, addClass, removeClass; - -if ( 'classList' in document.documentElement ) { - hasClass = function( elem, c ) { - return elem.classList.contains( c ); - }; - addClass = function( elem, c ) { - elem.classList.add( c ); - }; - removeClass = function( elem, c ) { - elem.classList.remove( c ); - }; -} -else { - hasClass = function( elem, c ) { - return classReg( c ).test( elem.className ); - }; - addClass = function( elem, c ) { - if ( !hasClass( elem, c ) ) { - elem.className = elem.className + ' ' + c; - } - }; - removeClass = function( elem, c ) { - elem.className = elem.className.replace( classReg( c ), ' ' ); - }; -} - -function toggleClass( elem, c ) { - var fn = hasClass( elem, c ) ? removeClass : addClass; - fn( elem, c ); -} - -var classie = { - // full names - hasClass: hasClass, - addClass: addClass, - removeClass: removeClass, - toggleClass: toggleClass, - // short names - has: hasClass, - add: addClass, - remove: removeClass, - toggle: toggleClass -}; - -// transport -if ( typeof define === 'function' && define.amd ) { - // AMD - define( 'classie/classie',classie ); -} else if ( typeof exports === 'object' ) { - // CommonJS - module.exports = classie; -} else { - // browser global - window.classie = classie; -} - -})( window ); - -/*! - * EventEmitter v4.2.11 - git.io/ee - * Unlicense - http://unlicense.org/ - * Oliver Caldwell - http://oli.me.uk/ - * @preserve - */ - -;(function () { - - - /** - * Class for managing events. - * Can be extended to provide event functionality in other classes. - * - * @class EventEmitter Manages event registering and emitting. - */ - function EventEmitter() {} - - // Shortcuts to improve speed and size - var proto = EventEmitter.prototype; - var exports = this; - var originalGlobalValue = exports.EventEmitter; - - /** - * Finds the index of the listener for the event in its storage array. - * - * @param {Function[]} listeners Array of listeners to search through. - * @param {Function} listener Method to look for. - * @return {Number} Index of the specified listener, -1 if not found - * @api private - */ - function indexOfListener(listeners, listener) { - var i = listeners.length; - while (i--) { - if (listeners[i].listener === listener) { - return i; - } - } - - return -1; - } - - /** - * Alias a method while keeping the context correct, to allow for overwriting of target method. - * - * @param {String} name The name of the target method. - * @return {Function} The aliased method - * @api private - */ - function alias(name) { - return function aliasClosure() { - return this[name].apply(this, arguments); - }; - } - - /** - * Returns the listener array for the specified event. - * Will initialise the event object and listener arrays if required. - * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them. - * Each property in the object response is an array of listener functions. - * - * @param {String|RegExp} evt Name of the event to return the listeners from. - * @return {Function[]|Object} All listener functions for the event. - */ - proto.getListeners = function getListeners(evt) { - var events = this._getEvents(); - var response; - var key; - - // Return a concatenated array of all matching events if - // the selector is a regular expression. - if (evt instanceof RegExp) { - response = {}; - for (key in events) { - if (events.hasOwnProperty(key) && evt.test(key)) { - response[key] = events[key]; - } - } - } - else { - response = events[evt] || (events[evt] = []); - } - - return response; - }; - - /** - * Takes a list of listener objects and flattens it into a list of listener functions. - * - * @param {Object[]} listeners Raw listener objects. - * @return {Function[]} Just the listener functions. - */ - proto.flattenListeners = function flattenListeners(listeners) { - var flatListeners = []; - var i; - - for (i = 0; i < listeners.length; i += 1) { - flatListeners.push(listeners[i].listener); - } - - return flatListeners; - }; - - /** - * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful. - * - * @param {String|RegExp} evt Name of the event to return the listeners from. - * @return {Object} All listener functions for an event in an object. - */ - proto.getListenersAsObject = function getListenersAsObject(evt) { - var listeners = this.getListeners(evt); - var response; - - if (listeners instanceof Array) { - response = {}; - response[evt] = listeners; - } - - return response || listeners; - }; - - /** - * Adds a listener function to the specified event. - * The listener will not be added if it is a duplicate. - * If the listener returns true then it will be removed after it is called. - * If you pass a regular expression as the event name then the listener will be added to all events that match it. - * - * @param {String|RegExp} evt Name of the event to attach the listener to. - * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.addListener = function addListener(evt, listener) { - var listeners = this.getListenersAsObject(evt); - var listenerIsWrapped = typeof listener === 'object'; - var key; - - for (key in listeners) { - if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) { - listeners[key].push(listenerIsWrapped ? listener : { - listener: listener, - once: false - }); - } - } - - return this; - }; - - /** - * Alias of addListener - */ - proto.on = alias('addListener'); - - /** - * Semi-alias of addListener. It will add a listener that will be - * automatically removed after its first execution. - * - * @param {String|RegExp} evt Name of the event to attach the listener to. - * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.addOnceListener = function addOnceListener(evt, listener) { - return this.addListener(evt, { - listener: listener, - once: true - }); - }; - - /** - * Alias of addOnceListener. - */ - proto.once = alias('addOnceListener'); - - /** - * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad. - * You need to tell it what event names should be matched by a regex. - * - * @param {String} evt Name of the event to create. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.defineEvent = function defineEvent(evt) { - this.getListeners(evt); - return this; - }; - - /** - * Uses defineEvent to define multiple events. - * - * @param {String[]} evts An array of event names to define. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.defineEvents = function defineEvents(evts) { - for (var i = 0; i < evts.length; i += 1) { - this.defineEvent(evts[i]); - } - return this; - }; - - /** - * Removes a listener function from the specified event. - * When passed a regular expression as the event name, it will remove the listener from all events that match it. - * - * @param {String|RegExp} evt Name of the event to remove the listener from. - * @param {Function} listener Method to remove from the event. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.removeListener = function removeListener(evt, listener) { - var listeners = this.getListenersAsObject(evt); - var index; - var key; - - for (key in listeners) { - if (listeners.hasOwnProperty(key)) { - index = indexOfListener(listeners[key], listener); - - if (index !== -1) { - listeners[key].splice(index, 1); - } - } - } - - return this; - }; - - /** - * Alias of removeListener - */ - proto.off = alias('removeListener'); - - /** - * Adds listeners in bulk using the manipulateListeners method. - * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added. - * You can also pass it a regular expression to add the array of listeners to all events that match it. - * Yeah, this function does quite a bit. That's probably a bad thing. - * - * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once. - * @param {Function[]} [listeners] An optional array of listener functions to add. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.addListeners = function addListeners(evt, listeners) { - // Pass through to manipulateListeners - return this.manipulateListeners(false, evt, listeners); - }; - - /** - * Removes listeners in bulk using the manipulateListeners method. - * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. - * You can also pass it an event name and an array of listeners to be removed. - * You can also pass it a regular expression to remove the listeners from all events that match it. - * - * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once. - * @param {Function[]} [listeners] An optional array of listener functions to remove. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.removeListeners = function removeListeners(evt, listeners) { - // Pass through to manipulateListeners - return this.manipulateListeners(true, evt, listeners); - }; - - /** - * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level. - * The first argument will determine if the listeners are removed (true) or added (false). - * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. - * You can also pass it an event name and an array of listeners to be added/removed. - * You can also pass it a regular expression to manipulate the listeners of all events that match it. - * - * @param {Boolean} remove True if you want to remove listeners, false if you want to add. - * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once. - * @param {Function[]} [listeners] An optional array of listener functions to add/remove. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) { - var i; - var value; - var single = remove ? this.removeListener : this.addListener; - var multiple = remove ? this.removeListeners : this.addListeners; - - // If evt is an object then pass each of its properties to this method - if (typeof evt === 'object' && !(evt instanceof RegExp)) { - for (i in evt) { - if (evt.hasOwnProperty(i) && (value = evt[i])) { - // Pass the single listener straight through to the singular method - if (typeof value === 'function') { - single.call(this, i, value); - } - else { - // Otherwise pass back to the multiple function - multiple.call(this, i, value); - } - } - } - } - else { - // So evt must be a string - // And listeners must be an array of listeners - // Loop over it and pass each one to the multiple method - i = listeners.length; - while (i--) { - single.call(this, evt, listeners[i]); - } - } - - return this; - }; - - /** - * Removes all listeners from a specified event. - * If you do not specify an event then all listeners will be removed. - * That means every event will be emptied. - * You can also pass a regex to remove all events that match it. - * - * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.removeEvent = function removeEvent(evt) { - var type = typeof evt; - var events = this._getEvents(); - var key; - - // Remove different things depending on the state of evt - if (type === 'string') { - // Remove all listeners for the specified event - delete events[evt]; - } - else if (evt instanceof RegExp) { - // Remove all events matching the regex. - for (key in events) { - if (events.hasOwnProperty(key) && evt.test(key)) { - delete events[key]; - } - } - } - else { - // Remove all listeners in all events - delete this._events; - } - - return this; - }; - - /** - * Alias of removeEvent. - * - * Added to mirror the node API. - */ - proto.removeAllListeners = alias('removeEvent'); - - /** - * Emits an event of your choice. - * When emitted, every listener attached to that event will be executed. - * If you pass the optional argument array then those arguments will be passed to every listener upon execution. - * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately. - * So they will not arrive within the array on the other side, they will be separate. - * You can also pass a regular expression to emit to all events that match it. - * - * @param {String|RegExp} evt Name of the event to emit and execute listeners for. - * @param {Array} [args] Optional array of arguments to be passed to each listener. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.emitEvent = function emitEvent(evt, args) { - var listeners = this.getListenersAsObject(evt); - var listener; - var i; - var key; - var response; - - for (key in listeners) { - if (listeners.hasOwnProperty(key)) { - i = listeners[key].length; - - while (i--) { - // If the listener returns true then it shall be removed from the event - // The function is executed either with a basic call or an apply if there is an args array - listener = listeners[key][i]; - - if (listener.once === true) { - this.removeListener(evt, listener.listener); - } - - response = listener.listener.apply(this, args || []); - - if (response === this._getOnceReturnValue()) { - this.removeListener(evt, listener.listener); - } - } - } - } - - return this; - }; - - /** - * Alias of emitEvent - */ - proto.trigger = alias('emitEvent'); - - /** - * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on. - * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it. - * - * @param {String|RegExp} evt Name of the event to emit and execute listeners for. - * @param {...*} Optional additional arguments to be passed to each listener. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.emit = function emit(evt) { - var args = Array.prototype.slice.call(arguments, 1); - return this.emitEvent(evt, args); - }; - - /** - * Sets the current value to check against when executing listeners. If a - * listeners return value matches the one set here then it will be removed - * after execution. This value defaults to true. - * - * @param {*} value The new value to check for when executing listeners. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.setOnceReturnValue = function setOnceReturnValue(value) { - this._onceReturnValue = value; - return this; - }; - - /** - * Fetches the current value to check against when executing listeners. If - * the listeners return value matches this one then it should be removed - * automatically. It will return true by default. - * - * @return {*|Boolean} The current value to check for or the default, true. - * @api private - */ - proto._getOnceReturnValue = function _getOnceReturnValue() { - if (this.hasOwnProperty('_onceReturnValue')) { - return this._onceReturnValue; - } - else { - return true; - } - }; - - /** - * Fetches the events object and creates one if required. - * - * @return {Object} The events storage object. - * @api private - */ - proto._getEvents = function _getEvents() { - return this._events || (this._events = {}); - }; - - /** - * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version. - * - * @return {Function} Non conflicting EventEmitter class. - */ - EventEmitter.noConflict = function noConflict() { - exports.EventEmitter = originalGlobalValue; - return EventEmitter; - }; - - // Expose the class either via AMD, CommonJS or the global object - if (typeof define === 'function' && define.amd) { - define('eventEmitter/EventEmitter',[],function () { - return EventEmitter; - }); - } - else if (typeof module === 'object' && module.exports){ - module.exports = EventEmitter; - } - else { - exports.EventEmitter = EventEmitter; - } -}.call(this)); - -/*! - * eventie v1.0.6 - * event binding helper - * eventie.bind( elem, 'click', myFn ) - * eventie.unbind( elem, 'click', myFn ) - * MIT license - */ - -/*jshint browser: true, undef: true, unused: true */ -/*global define: false, module: false */ - -( function( window ) { - - - -var docElem = document.documentElement; - -var bind = function() {}; - -function getIEEvent( obj ) { - var event = window.event; - // add event.target - event.target = event.target || event.srcElement || obj; - return event; -} - -if ( docElem.addEventListener ) { - bind = function( obj, type, fn ) { - obj.addEventListener( type, fn, false ); - }; -} else if ( docElem.attachEvent ) { - bind = function( obj, type, fn ) { - obj[ type + fn ] = fn.handleEvent ? - function() { - var event = getIEEvent( obj ); - fn.handleEvent.call( fn, event ); - } : - function() { - var event = getIEEvent( obj ); - fn.call( obj, event ); - }; - obj.attachEvent( "on" + type, obj[ type + fn ] ); - }; -} - -var unbind = function() {}; - -if ( docElem.removeEventListener ) { - unbind = function( obj, type, fn ) { - obj.removeEventListener( type, fn, false ); - }; -} else if ( docElem.detachEvent ) { - unbind = function( obj, type, fn ) { - obj.detachEvent( "on" + type, obj[ type + fn ] ); - try { - delete obj[ type + fn ]; - } catch ( err ) { - // can't delete window object properties - obj[ type + fn ] = undefined; - } - }; -} - -var eventie = { - bind: bind, - unbind: unbind -}; - -// ----- module definition ----- // - -if ( typeof define === 'function' && define.amd ) { - // AMD - define( 'eventie/eventie',eventie ); -} else if ( typeof exports === 'object' ) { - // CommonJS - module.exports = eventie; -} else { - // browser global - window.eventie = eventie; -} - -})( window ); - -/*! - * getStyleProperty v1.0.4 - * original by kangax - * http://perfectionkills.com/feature-testing-css-properties/ - * MIT license - */ - -/*jshint browser: true, strict: true, undef: true */ -/*global define: false, exports: false, module: false */ - -( function( window ) { - - - -var prefixes = 'Webkit Moz ms Ms O'.split(' '); -var docElemStyle = document.documentElement.style; - -function getStyleProperty( propName ) { - if ( !propName ) { - return; - } - - // test standard property first - if ( typeof docElemStyle[ propName ] === 'string' ) { - return propName; - } - - // capitalize - propName = propName.charAt(0).toUpperCase() + propName.slice(1); - - // test vendor specific properties - var prefixed; - for ( var i=0, len = prefixes.length; i < len; i++ ) { - prefixed = prefixes[i] + propName; - if ( typeof docElemStyle[ prefixed ] === 'string' ) { - return prefixed; - } - } -} - -// transport -if ( typeof define === 'function' && define.amd ) { - // AMD - define( 'get-style-property/get-style-property',[],function() { - return getStyleProperty; - }); -} else if ( typeof exports === 'object' ) { - // CommonJS for Component - module.exports = getStyleProperty; -} else { - // browser global - window.getStyleProperty = getStyleProperty; -} - -})( window ); - -/*! - * getSize v1.2.2 - * measure size of elements - * MIT license - */ - -/*jshint browser: true, strict: true, undef: true, unused: true */ -/*global define: false, exports: false, require: false, module: false, console: false */ - -( function( window, undefined ) { - - - -// -------------------------- helpers -------------------------- // - -// get a number from a string, not a percentage -function getStyleSize( value ) { - var num = parseFloat( value ); - // not a percent like '100%', and a number - var isValid = value.indexOf('%') === -1 && !isNaN( num ); - return isValid && num; -} - -function noop() {} - -var logError = typeof console === 'undefined' ? noop : - function( message ) { - console.error( message ); - }; - -// -------------------------- measurements -------------------------- // - -var measurements = [ - 'paddingLeft', - 'paddingRight', - 'paddingTop', - 'paddingBottom', - 'marginLeft', - 'marginRight', - 'marginTop', - 'marginBottom', - 'borderLeftWidth', - 'borderRightWidth', - 'borderTopWidth', - 'borderBottomWidth' -]; - -function getZeroSize() { - var size = { - width: 0, - height: 0, - innerWidth: 0, - innerHeight: 0, - outerWidth: 0, - outerHeight: 0 - }; - for ( var i=0, len = measurements.length; i < len; i++ ) { - var measurement = measurements[i]; - size[ measurement ] = 0; - } - return size; -} - - - -function defineGetSize( getStyleProperty ) { - -// -------------------------- setup -------------------------- // - -var isSetup = false; - -var getStyle, boxSizingProp, isBoxSizeOuter; - -/** - * setup vars and functions - * do it on initial getSize(), rather than on script load - * For Firefox bug https://bugzilla.mozilla.org/show_bug.cgi?id=548397 - */ -function setup() { - // setup once - if ( isSetup ) { - return; - } - isSetup = true; - - var getComputedStyle = window.getComputedStyle; - getStyle = ( function() { - var getStyleFn = getComputedStyle ? - function( elem ) { - return getComputedStyle( elem, null ); - } : - function( elem ) { - return elem.currentStyle; - }; - - return function getStyle( elem ) { - var style = getStyleFn( elem ); - if ( !style ) { - logError( 'Style returned ' + style + - '. Are you running this code in a hidden iframe on Firefox? ' + - 'See http://bit.ly/getsizebug1' ); - } - return style; - }; - })(); - - // -------------------------- box sizing -------------------------- // - - boxSizingProp = getStyleProperty('boxSizing'); - - /** - * WebKit measures the outer-width on style.width on border-box elems - * IE & Firefox measures the inner-width - */ - if ( boxSizingProp ) { - var div = document.createElement('div'); - div.style.width = '200px'; - div.style.padding = '1px 2px 3px 4px'; - div.style.borderStyle = 'solid'; - div.style.borderWidth = '1px 2px 3px 4px'; - div.style[ boxSizingProp ] = 'border-box'; - - var body = document.body || document.documentElement; - body.appendChild( div ); - var style = getStyle( div ); - - isBoxSizeOuter = getStyleSize( style.width ) === 200; - body.removeChild( div ); - } - -} - -// -------------------------- getSize -------------------------- // - -function getSize( elem ) { - setup(); - - // use querySeletor if elem is string - if ( typeof elem === 'string' ) { - elem = document.querySelector( elem ); - } - - // do not proceed on non-objects - if ( !elem || typeof elem !== 'object' || !elem.nodeType ) { - return; - } - - var style = getStyle( elem ); - - // if hidden, everything is 0 - if ( style.display === 'none' ) { - return getZeroSize(); - } - - var size = {}; - size.width = elem.offsetWidth; - size.height = elem.offsetHeight; - - var isBorderBox = size.isBorderBox = !!( boxSizingProp && - style[ boxSizingProp ] && style[ boxSizingProp ] === 'border-box' ); - - // get all measurements - for ( var i=0, len = measurements.length; i < len; i++ ) { - var measurement = measurements[i]; - var value = style[ measurement ]; - value = mungeNonPixel( elem, value ); - var num = parseFloat( value ); - // any 'auto', 'medium' value will be 0 - size[ measurement ] = !isNaN( num ) ? num : 0; - } - - var paddingWidth = size.paddingLeft + size.paddingRight; - var paddingHeight = size.paddingTop + size.paddingBottom; - var marginWidth = size.marginLeft + size.marginRight; - var marginHeight = size.marginTop + size.marginBottom; - var borderWidth = size.borderLeftWidth + size.borderRightWidth; - var borderHeight = size.borderTopWidth + size.borderBottomWidth; - - var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter; - - // overwrite width and height if we can get it from style - var styleWidth = getStyleSize( style.width ); - if ( styleWidth !== false ) { - size.width = styleWidth + - // add padding and border unless it's already including it - ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth ); - } - - var styleHeight = getStyleSize( style.height ); - if ( styleHeight !== false ) { - size.height = styleHeight + - // add padding and border unless it's already including it - ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight ); - } - - size.innerWidth = size.width - ( paddingWidth + borderWidth ); - size.innerHeight = size.height - ( paddingHeight + borderHeight ); - - size.outerWidth = size.width + marginWidth; - size.outerHeight = size.height + marginHeight; - - return size; -} - -// IE8 returns percent values, not pixels -// taken from jQuery's curCSS -function mungeNonPixel( elem, value ) { - // IE8 and has percent value - if ( window.getComputedStyle || value.indexOf('%') === -1 ) { - return value; - } - var style = elem.style; - // Remember the original values - var left = style.left; - var rs = elem.runtimeStyle; - var rsLeft = rs && rs.left; - - // Put in the new values to get a computed value out - if ( rsLeft ) { - rs.left = elem.currentStyle.left; - } - style.left = value; - value = style.pixelLeft; - - // Revert the changed values - style.left = left; - if ( rsLeft ) { - rs.left = rsLeft; - } - - return value; -} - -return getSize; - -} - -// transport -if ( typeof define === 'function' && define.amd ) { - // AMD for RequireJS - define( 'get-size/get-size',[ 'get-style-property/get-style-property' ], defineGetSize ); -} else if ( typeof exports === 'object' ) { - // CommonJS for Component - module.exports = defineGetSize( require('desandro-get-style-property') ); -} else { - // browser global - window.getSize = defineGetSize( window.getStyleProperty ); -} - -})( window ); - -/*! - * docReady v1.0.4 - * Cross browser DOMContentLoaded event emitter - * MIT license - */ - -/*jshint browser: true, strict: true, undef: true, unused: true*/ -/*global define: false, require: false, module: false */ - -( function( window ) { - - - -var document = window.document; -// collection of functions to be triggered on ready -var queue = []; - -function docReady( fn ) { - // throw out non-functions - if ( typeof fn !== 'function' ) { - return; - } - - if ( docReady.isReady ) { - // ready now, hit it - fn(); - } else { - // queue function when ready - queue.push( fn ); - } -} - -docReady.isReady = false; - -// triggered on various doc ready events -function onReady( event ) { - // bail if already triggered or IE8 document is not ready just yet - var isIE8NotReady = event.type === 'readystatechange' && document.readyState !== 'complete'; - if ( docReady.isReady || isIE8NotReady ) { - return; - } - - trigger(); -} - -function trigger() { - docReady.isReady = true; - // process queue - for ( var i=0, len = queue.length; i < len; i++ ) { - var fn = queue[i]; - fn(); - } -} - -function defineDocReady( eventie ) { - // trigger ready if page is ready - if ( document.readyState === 'complete' ) { - trigger(); - } else { - // listen for events - eventie.bind( document, 'DOMContentLoaded', onReady ); - eventie.bind( document, 'readystatechange', onReady ); - eventie.bind( window, 'load', onReady ); - } - - return docReady; -} - -// transport -if ( typeof define === 'function' && define.amd ) { - // AMD - define( 'doc-ready/doc-ready',[ 'eventie/eventie' ], defineDocReady ); -} else if ( typeof exports === 'object' ) { - module.exports = defineDocReady( require('eventie') ); -} else { - // browser global - window.docReady = defineDocReady( window.eventie ); -} - -})( window ); - -/** - * matchesSelector v1.0.3 - * matchesSelector( element, '.selector' ) - * MIT license - */ - -/*jshint browser: true, strict: true, undef: true, unused: true */ -/*global define: false, module: false */ - -( function( ElemProto ) { - - - - var matchesMethod = ( function() { - // check for the standard method name first - if ( ElemProto.matches ) { - return 'matches'; - } - // check un-prefixed - if ( ElemProto.matchesSelector ) { - return 'matchesSelector'; - } - // check vendor prefixes - var prefixes = [ 'webkit', 'moz', 'ms', 'o' ]; - - for ( var i=0, len = prefixes.length; i < len; i++ ) { - var prefix = prefixes[i]; - var method = prefix + 'MatchesSelector'; - if ( ElemProto[ method ] ) { - return method; - } - } - })(); - - // ----- match ----- // - - function match( elem, selector ) { - return elem[ matchesMethod ]( selector ); - } - - // ----- appendToFragment ----- // - - function checkParent( elem ) { - // not needed if already has parent - if ( elem.parentNode ) { - return; - } - var fragment = document.createDocumentFragment(); - fragment.appendChild( elem ); - } - - // ----- query ----- // - - // fall back to using QSA - // thx @jonathantneal https://gist.github.com/3062955 - function query( elem, selector ) { - // append to fragment if no parent - checkParent( elem ); - - // match elem with all selected elems of parent - var elems = elem.parentNode.querySelectorAll( selector ); - for ( var i=0, len = elems.length; i < len; i++ ) { - // return true if match - if ( elems[i] === elem ) { - return true; - } - } - // otherwise return false - return false; - } - - // ----- matchChild ----- // - - function matchChild( elem, selector ) { - checkParent( elem ); - return match( elem, selector ); - } - - // ----- matchesSelector ----- // - - var matchesSelector; - - if ( matchesMethod ) { - // IE9 supports matchesSelector, but doesn't work on orphaned elems - // check for that - var div = document.createElement('div'); - var supportsOrphans = match( div, 'div' ); - matchesSelector = supportsOrphans ? match : matchChild; - } else { - matchesSelector = query; - } - - // transport - if ( typeof define === 'function' && define.amd ) { - // AMD - define( 'matches-selector/matches-selector',[],function() { - return matchesSelector; - }); - } else if ( typeof exports === 'object' ) { - module.exports = matchesSelector; - } - else { - // browser global - window.matchesSelector = matchesSelector; - } - -})( Element.prototype ); - -/** - * Fizzy UI utils v1.0.1 - * MIT license - */ - -/*jshint browser: true, undef: true, unused: true, strict: true */ - -( function( window, factory ) { - /*global define: false, module: false, require: false */ - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'fizzy-ui-utils/utils',[ - 'doc-ready/doc-ready', - 'matches-selector/matches-selector' - ], function( docReady, matchesSelector ) { - return factory( window, docReady, matchesSelector ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('doc-ready'), - require('desandro-matches-selector') - ); - } else { - // browser global - window.fizzyUIUtils = factory( - window, - window.docReady, - window.matchesSelector - ); - } - -}( window, function factory( window, docReady, matchesSelector ) { - - - -var utils = {}; - -// ----- extend ----- // - -// extends objects -utils.extend = function( a, b ) { - for ( var prop in b ) { - a[ prop ] = b[ prop ]; - } - return a; -}; - -// ----- modulo ----- // - -utils.modulo = function( num, div ) { - return ( ( num % div ) + div ) % div; -}; - -// ----- isArray ----- // - -var objToString = Object.prototype.toString; -utils.isArray = function( obj ) { - return objToString.call( obj ) == '[object Array]'; -}; - -// ----- makeArray ----- // - -// turn element or nodeList into an array -utils.makeArray = function( obj ) { - var ary = []; - if ( utils.isArray( obj ) ) { - // use object if already an array - ary = obj; - } else if ( obj && typeof obj.length == 'number' ) { - // convert nodeList to array - for ( var i=0, len = obj.length; i < len; i++ ) { - ary.push( obj[i] ); - } - } else { - // array of single index - ary.push( obj ); - } - return ary; -}; - -// ----- indexOf ----- // - -// index of helper cause IE8 -utils.indexOf = Array.prototype.indexOf ? function( ary, obj ) { - return ary.indexOf( obj ); - } : function( ary, obj ) { - for ( var i=0, len = ary.length; i < len; i++ ) { - if ( ary[i] === obj ) { - return i; - } - } - return -1; - }; - -// ----- removeFrom ----- // - -utils.removeFrom = function( ary, obj ) { - var index = utils.indexOf( ary, obj ); - if ( index != -1 ) { - ary.splice( index, 1 ); - } -}; - -// ----- isElement ----- // - -// http://stackoverflow.com/a/384380/182183 -utils.isElement = ( typeof HTMLElement == 'function' || typeof HTMLElement == 'object' ) ? - function isElementDOM2( obj ) { - return obj instanceof HTMLElement; - } : - function isElementQuirky( obj ) { - return obj && typeof obj == 'object' && - obj.nodeType == 1 && typeof obj.nodeName == 'string'; - }; - -// ----- setText ----- // - -utils.setText = ( function() { - var setTextProperty; - function setText( elem, text ) { - // only check setTextProperty once - setTextProperty = setTextProperty || ( document.documentElement.textContent !== undefined ? 'textContent' : 'innerText' ); - elem[ setTextProperty ] = text; - } - return setText; -})(); - -// ----- getParent ----- // - -utils.getParent = function( elem, selector ) { - while ( elem != document.body ) { - elem = elem.parentNode; - if ( matchesSelector( elem, selector ) ) { - return elem; - } - } -}; - -// ----- getQueryElement ----- // - -// use element as selector string -utils.getQueryElement = function( elem ) { - if ( typeof elem == 'string' ) { - return document.querySelector( elem ); - } - return elem; -}; - -// ----- handleEvent ----- // - -// enable .ontype to trigger from .addEventListener( elem, 'type' ) -utils.handleEvent = function( event ) { - var method = 'on' + event.type; - if ( this[ method ] ) { - this[ method ]( event ); - } -}; - -// ----- filterFindElements ----- // - -utils.filterFindElements = function( elems, selector ) { - // make array of elems - elems = utils.makeArray( elems ); - var ffElems = []; - - for ( var i=0, len = elems.length; i < len; i++ ) { - var elem = elems[i]; - // check that elem is an actual element - if ( !utils.isElement( elem ) ) { - continue; - } - // filter & find items if we have a selector - if ( selector ) { - // filter siblings - if ( matchesSelector( elem, selector ) ) { - ffElems.push( elem ); - } - // find children - var childElems = elem.querySelectorAll( selector ); - // concat childElems to filterFound array - for ( var j=0, jLen = childElems.length; j < jLen; j++ ) { - ffElems.push( childElems[j] ); - } - } else { - ffElems.push( elem ); - } - } - - return ffElems; -}; - -// ----- debounceMethod ----- // - -utils.debounceMethod = function( _class, methodName, threshold ) { - // original method - var method = _class.prototype[ methodName ]; - var timeoutName = methodName + 'Timeout'; - - _class.prototype[ methodName ] = function() { - var timeout = this[ timeoutName ]; - if ( timeout ) { - clearTimeout( timeout ); - } - var args = arguments; - - var _this = this; - this[ timeoutName ] = setTimeout( function() { - method.apply( _this, args ); - delete _this[ timeoutName ]; - }, threshold || 100 ); - }; -}; - -// ----- htmlInit ----- // - -// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/ -utils.toDashed = function( str ) { - return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) { - return $1 + '-' + $2; - }).toLowerCase(); -}; - -var console = window.console; -/** - * allow user to initialize classes via .js-namespace class - * htmlInit( Widget, 'widgetName' ) - * options are parsed from data-namespace-option attribute - */ -utils.htmlInit = function( WidgetClass, namespace ) { - docReady( function() { - var dashedNamespace = utils.toDashed( namespace ); - var elems = document.querySelectorAll( '.js-' + dashedNamespace ); - var dataAttr = 'data-' + dashedNamespace + '-options'; - - for ( var i=0, len = elems.length; i < len; i++ ) { - var elem = elems[i]; - var attr = elem.getAttribute( dataAttr ); - var options; - try { - options = attr && JSON.parse( attr ); - } catch ( error ) { - // log error, do not initialize - if ( console ) { - console.error( 'Error parsing ' + dataAttr + ' on ' + - elem.nodeName.toLowerCase() + ( elem.id ? '#' + elem.id : '' ) + ': ' + - error ); - } - continue; - } - // initialize - var instance = new WidgetClass( elem, options ); - // make available via $().data('layoutname') - var jQuery = window.jQuery; - if ( jQuery ) { - jQuery.data( elem, namespace, instance ); - } - } - }); -}; - -// ----- ----- // - -return utils; - -})); - -( function( window, factory ) { - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'flickity/js/cell',[ - 'get-size/get-size' - ], function( getSize ) { - return factory( window, getSize ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('get-size') - ); - } else { - // browser global - window.Flickity = window.Flickity || {}; - window.Flickity.Cell = factory( - window, - window.getSize - ); - } - -}( window, function factory( window, getSize ) { - - - -function Cell( elem, parent ) { - this.element = elem; - this.parent = parent; - - this.create(); -} - -var isIE8 = 'attachEvent' in window; - -Cell.prototype.create = function() { - this.element.style.position = 'absolute'; - // IE8 prevent child from changing focus http://stackoverflow.com/a/17525223/182183 - if ( isIE8 ) { - this.element.setAttribute( 'unselectable', 'on' ); - } - this.x = 0; - this.shift = 0; -}; - -Cell.prototype.destroy = function() { - // reset style - this.element.style.position = ''; - var side = this.parent.originSide; - this.element.style[ side ] = ''; -}; - -Cell.prototype.getSize = function() { - this.size = getSize( this.element ); -}; - -Cell.prototype.setPosition = function( x ) { - this.x = x; - this.setDefaultTarget(); - this.renderPosition( x ); -}; - -Cell.prototype.setDefaultTarget = function() { - var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight'; - this.target = this.x + this.size[ marginProperty ] + - this.size.width * this.parent.cellAlign; -}; - -Cell.prototype.renderPosition = function( x ) { - // render position of cell with in slider - var side = this.parent.originSide; - this.element.style[ side ] = this.parent.getPositionValue( x ); -}; - -/** - * @param {Integer} factor - 0, 1, or -1 -**/ -Cell.prototype.wrapShift = function( shift ) { - this.shift = shift; - this.renderPosition( this.x + this.parent.slideableWidth * shift ); -}; - -Cell.prototype.remove = function() { - this.element.parentNode.removeChild( this.element ); -}; - -return Cell; - -})); - -( function( window, factory ) { - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'flickity/js/animate',[ - 'get-style-property/get-style-property', - 'fizzy-ui-utils/utils' - ], function( getStyleProperty, utils ) { - return factory( window, getStyleProperty, utils ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('desandro-get-style-property'), - require('fizzy-ui-utils') - ); - } else { - // browser global - window.Flickity = window.Flickity || {}; - window.Flickity.animatePrototype = factory( - window, - window.getStyleProperty, - window.fizzyUIUtils - ); - } - -}( window, function factory( window, getStyleProperty, utils ) { - - - -// -------------------------- requestAnimationFrame -------------------------- // - -// https://gist.github.com/1866474 - -var lastTime = 0; -var prefixes = 'webkit moz ms o'.split(' '); -// get unprefixed rAF and cAF, if present -var requestAnimationFrame = window.requestAnimationFrame; -var cancelAnimationFrame = window.cancelAnimationFrame; -// loop through vendor prefixes and get prefixed rAF and cAF -var prefix; -for( var i = 0; i < prefixes.length; i++ ) { - if ( requestAnimationFrame && cancelAnimationFrame ) { - break; - } - prefix = prefixes[i]; - requestAnimationFrame = requestAnimationFrame || window[ prefix + 'RequestAnimationFrame' ]; - cancelAnimationFrame = cancelAnimationFrame || window[ prefix + 'CancelAnimationFrame' ] || - window[ prefix + 'CancelRequestAnimationFrame' ]; -} - -// fallback to setTimeout and clearTimeout if either request/cancel is not supported -if ( !requestAnimationFrame || !cancelAnimationFrame ) { - requestAnimationFrame = function( callback ) { - var currTime = new Date().getTime(); - var timeToCall = Math.max( 0, 16 - ( currTime - lastTime ) ); - var id = window.setTimeout( function() { - callback( currTime + timeToCall ); - }, timeToCall ); - lastTime = currTime + timeToCall; - return id; - }; - - cancelAnimationFrame = function( id ) { - window.clearTimeout( id ); - }; -} - -// -------------------------- animate -------------------------- // - -var proto = {}; - -proto.startAnimation = function() { - if ( this.isAnimating ) { - return; - } - - this.isAnimating = true; - this.restingFrames = 0; - this.animate(); -}; - -proto.animate = function() { - this.applySelectedAttraction(); - - var previousX = this.x; - - this.integratePhysics(); - this.positionSlider(); - this.settle( previousX ); - // animate next frame - if ( this.isAnimating ) { - var _this = this; - requestAnimationFrame( function animateFrame() { - _this.animate(); - }); - } - - /** / - // log animation frame rate - var now = new Date(); - if ( this.then ) { - console.log( ~~( 1000 / (now-this.then)) + 'fps' ) - } - this.then = now; - /**/ -}; - - -var transformProperty = getStyleProperty('transform'); -var is3d = !!getStyleProperty('perspective'); - -proto.positionSlider = function() { - var x = this.x; - // wrap position around - if ( this.options.wrapAround && this.cells.length > 1 ) { - x = utils.modulo( x, this.slideableWidth ); - x = x - this.slideableWidth; - this.shiftWrapCells( x ); - } - - x = x + this.cursorPosition; - - // reverse if right-to-left and using transform - x = this.options.rightToLeft && transformProperty ? -x : x; - - var value = this.getPositionValue( x ); - - if ( transformProperty ) { - // use 3D tranforms for hardware acceleration on iOS - // but use 2D when settled, for better font-rendering - this.slider.style[ transformProperty ] = is3d && this.isAnimating ? - 'translate3d(' + value + ',0,0)' : 'translateX(' + value + ')'; - } else { - this.slider.style[ this.originSide ] = value; - } -}; - -proto.positionSliderAtSelected = function() { - if ( !this.cells.length ) { - return; - } - var selectedCell = this.cells[ this.selectedIndex ]; - this.x = -selectedCell.target; - this.positionSlider(); -}; - -proto.getPositionValue = function( position ) { - if ( this.options.percentPosition ) { - // percent position, round to 2 digits, like 12.34% - return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%'; - } else { - // pixel positioning - return Math.round( position ) + 'px'; - } -}; - -proto.settle = function( previousX ) { - // keep track of frames where x hasn't moved - if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) { - this.restingFrames++; - } - // stop animating if resting for 3 or more frames - if ( this.restingFrames > 2 ) { - this.isAnimating = false; - delete this.isFreeScrolling; - // render position with translateX when settled - if ( is3d ) { - this.positionSlider(); - } - this.dispatchEvent('settle'); - } -}; - -proto.shiftWrapCells = function( x ) { - // shift before cells - var beforeGap = this.cursorPosition + x; - this._shiftCells( this.beforeShiftCells, beforeGap, -1 ); - // shift after cells - var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition ); - this._shiftCells( this.afterShiftCells, afterGap, 1 ); -}; - -proto._shiftCells = function( cells, gap, shift ) { - for ( var i=0, len = cells.length; i < len; i++ ) { - var cell = cells[i]; - var cellShift = gap > 0 ? shift : 0; - cell.wrapShift( cellShift ); - gap -= cell.size.outerWidth; - } -}; - -proto._unshiftCells = function( cells ) { - if ( !cells || !cells.length ) { - return; - } - for ( var i=0, len = cells.length; i < len; i++ ) { - cells[i].wrapShift( 0 ); - } -}; - -// -------------------------- physics -------------------------- // - -proto.integratePhysics = function() { - this.velocity += this.accel; - this.x += this.velocity; - this.velocity *= this.getFrictionFactor(); - // reset acceleration - this.accel = 0; -}; - -proto.applyForce = function( force ) { - this.accel += force; -}; - -proto.getFrictionFactor = function() { - return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ]; -}; - - -proto.getRestingPosition = function() { - // my thanks to Steven Wittens, who simplified this math greatly - return this.x + this.velocity / ( 1 - this.getFrictionFactor() ); -}; - - -proto.applySelectedAttraction = function() { - // do not attract if pointer down or no cells - var len = this.cells.length; - if ( this.isPointerDown || this.isFreeScrolling || !len ) { - return; - } - var cell = this.cells[ this.selectedIndex ]; - var wrap = this.options.wrapAround && len > 1 ? - this.slideableWidth * Math.floor( this.selectedIndex / len ) : 0; - var distance = ( cell.target + wrap ) * -1 - this.x; - var force = distance * this.options.selectedAttraction; - this.applyForce( force ); -}; - -return proto; - -})); - -/*! - * Flickity v1.0.1 - * Touch, responsive, flickable galleries - * - * Licensed GPLv3 for open source use - * or Flickity Commercial License for commercial use - * - * http://flickity.metafizzy.co - * Copyright 2015 Metafizzy - */ - -( function( window, factory ) { - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'flickity/js/flickity',[ - 'classie/classie', - 'eventEmitter/EventEmitter', - 'eventie/eventie', - 'get-size/get-size', - 'fizzy-ui-utils/utils', - './cell', - './animate' - ], function( classie, EventEmitter, eventie, getSize, utils, Cell, animatePrototype ) { - return factory( window, classie, EventEmitter, eventie, getSize, utils, Cell, animatePrototype ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('desandro-classie'), - require('wolfy87-eventemitter'), - require('eventie'), - require('get-size'), - require('fizzy-ui-utils'), - require('./cell'), - require('./animate') - ); - } else { - // browser global - var _Flickity = window.Flickity; - - window.Flickity = factory( - window, - window.classie, - window.EventEmitter, - window.eventie, - window.getSize, - window.fizzyUIUtils, - _Flickity.Cell, - _Flickity.animatePrototype - ); - } - -}( window, function factory( window, classie, EventEmitter, eventie, getSize, - utils, Cell, animatePrototype ) { - - - -// vars -var jQuery = window.jQuery; -var getComputedStyle = window.getComputedStyle; -var console = window.console; - -function moveElements( elems, toElem ) { - elems = utils.makeArray( elems ); - while ( elems.length ) { - toElem.appendChild( elems.shift() ); - } -} - -// -------------------------- Flickity -------------------------- // - -// globally unique identifiers -var GUID = 0; -// internal store of all Flickity intances -var instances = {}; - -function Flickity( element, options ) { - var queryElement = utils.getQueryElement( element ); - if ( !queryElement ) { - if ( console ) { - console.error( 'Bad element for Flickity: ' + ( queryElement || element ) ); - } - return; - } - this.element = queryElement; - // add jQuery - if ( jQuery ) { - this.$element = jQuery( this.element ); - } - // options - this.options = utils.extend( {}, this.constructor.defaults ); - this.option( options ); - - // kick things off - this._create(); -} - -Flickity.defaults = { - accessibility: true, - cellAlign: 'center', - // cellSelector: undefined, - // contain: false, - freeScrollFriction: 0.075, // friction when free-scrolling - friction: 0.28, // friction when selecting - // initialIndex: 0, - percentPosition: true, - resize: true, - selectedAttraction: 0.025, - setGallerySize: true - // watchCSS: false, - // wrapAround: false -}; - -// hash of methods triggered on _create() -Flickity.createMethods = []; - -// inherit EventEmitter -utils.extend( Flickity.prototype, EventEmitter.prototype ); - -Flickity.prototype._create = function() { - // add id for Flickity.data - var id = this.guid = ++GUID; - this.element.flickityGUID = id; // expando - instances[ id ] = this; // associate via id - // initial properties - this.selectedIndex = this.options.initialIndex || 0; - // how many frames slider has been in same position - this.restingFrames = 0; - // initial physics properties - this.x = 0; - this.velocity = 0; - this.accel = 0; - this.originSide = this.options.rightToLeft ? 'right' : 'left'; - // create viewport & slider - this.viewport = document.createElement('div'); - this.viewport.className = 'flickity-viewport'; - Flickity.setUnselectable( this.viewport ); - this._createSlider(); - - if ( this.options.resize || this.options.watchCSS ) { - eventie.bind( window, 'resize', this ); - this.isResizeBound = true; - } - - for ( var i=0, len = Flickity.createMethods.length; i < len; i++ ) { - var method = Flickity.createMethods[i]; - this[ method ](); - } - - if ( this.options.watchCSS ) { - this.watchCSS(); - } else { - this.activate(); - } - -}; - -/** - * set options - * @param {Object} opts - */ -Flickity.prototype.option = function( opts ) { - utils.extend( this.options, opts ); -}; - -Flickity.prototype.activate = function() { - if ( this.isActive ) { - return; - } - this.isActive = true; - classie.add( this.element, 'flickity-enabled' ); - if ( this.options.rightToLeft ) { - classie.add( this.element, 'flickity-rtl' ); - } - - // move initial cell elements so they can be loaded as cells - var cellElems = this._filterFindCellElements( this.element.children ); - moveElements( cellElems, this.slider ); - this.viewport.appendChild( this.slider ); - this.element.appendChild( this.viewport ); - - this.getSize(); - // get cells from children - this.reloadCells(); - - if ( this.options.accessibility ) { - // allow element to focusable - this.element.tabIndex = 0; - // listen for key presses - eventie.bind( this.element, 'keydown', this ); - } - - this.emit('activate'); - - this.positionSliderAtSelected(); - this.select( this.selectedIndex ); -}; - -// slider positions the cells -Flickity.prototype._createSlider = function() { - // slider element does all the positioning - var slider = document.createElement('div'); - slider.className = 'flickity-slider'; - slider.style[ this.originSide ] = 0; - this.slider = slider; -}; - -Flickity.prototype._filterFindCellElements = function( elems ) { - return utils.filterFindElements( elems, this.options.cellSelector ); -}; - -// goes through all children -Flickity.prototype.reloadCells = function() { - // collection of item elements - this.cells = this._makeCells( this.slider.children ); - this.positionCells(); - this._getWrapShiftCells(); - this.setGallerySize(); -}; - -/** - * turn elements into Flickity.Cells - * @param {Array or NodeList or HTMLElement} elems - * @returns {Array} items - collection of new Flickity Cells - */ -Flickity.prototype._makeCells = function( elems ) { - var cellElems = this._filterFindCellElements( elems ); - - // create new Flickity for collection - var cells = []; - for ( var i=0, len = cellElems.length; i < len; i++ ) { - var elem = cellElems[i]; - var cell = new Cell( elem, this ); - cells.push( cell ); - } - - return cells; -}; - -Flickity.prototype.getLastCell = function() { - return this.cells[ this.cells.length - 1 ]; -}; - -// positions all cells -Flickity.prototype.positionCells = function() { - // size all cells - this._sizeCells( this.cells ); - // position all cells - this._positionCells( 0 ); -}; - -/** - * position certain cells - * @param {Integer} index - which cell to start with - */ -Flickity.prototype._positionCells = function( index ) { - // also measure maxCellHeight - // start 0 if positioning all cells - this.maxCellHeight = index ? this.maxCellHeight || 0 : 0; - var cellX = 0; - // get cellX - if ( index > 0 ) { - var startCell = this.cells[ index - 1 ]; - cellX = startCell.x + startCell.size.outerWidth; - } - var cell; - for ( var len = this.cells.length, i=index; i < len; i++ ) { - cell = this.cells[i]; - cell.setPosition( cellX ); - cellX += cell.size.outerWidth; - this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight ); - } - // keep track of cellX for wrap-around - this.slideableWidth = cellX; - // contain cell target - this._containCells(); -}; - -/** - * cell.getSize() on multiple cells - * @param {Array} cells - */ -Flickity.prototype._sizeCells = function( cells ) { - for ( var i=0, len = cells.length; i < len; i++ ) { - var cell = cells[i]; - cell.getSize(); - } -}; - -// alias _init for jQuery plugin .flickity() -Flickity.prototype._init = -Flickity.prototype.reposition = function() { - this.positionCells(); - this.positionSliderAtSelected(); -}; - -Flickity.prototype.getSize = function() { - this.size = getSize( this.element ); - this.setCellAlign(); - this.cursorPosition = this.size.innerWidth * this.cellAlign; -}; - -var cellAlignShorthands = { - // cell align, then based on origin side - center: { - left: 0.5, - right: 0.5 - }, - left: { - left: 0, - right: 1 - }, - right: { - right: 0, - left: 1 - } -}; - -Flickity.prototype.setCellAlign = function() { - var shorthand = cellAlignShorthands[ this.options.cellAlign ]; - this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign; -}; - -Flickity.prototype.setGallerySize = function() { - if ( this.options.setGallerySize ) { - this.viewport.style.height = this.maxCellHeight + 'px'; - } -}; - -Flickity.prototype._getWrapShiftCells = function() { - // only for wrap-around - if ( !this.options.wrapAround ) { - return; - } - // unshift previous cells - this._unshiftCells( this.beforeShiftCells ); - this._unshiftCells( this.afterShiftCells ); - // get before cells - // initial gap - var gapX = this.cursorPosition; - var cellIndex = this.cells.length - 1; - this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 ); - // get after cells - // ending gap between last cell and end of gallery viewport - gapX = this.size.innerWidth - this.cursorPosition; - // start cloning at first cell, working forwards - this.afterShiftCells = this._getGapCells( gapX, 0, 1 ); -}; - -Flickity.prototype._getGapCells = function( gapX, cellIndex, increment ) { - // keep adding cells until the cover the initial gap - var cells = []; - while ( gapX > 0 ) { - var cell = this.cells[ cellIndex ]; - if ( !cell ) { - break; - } - cells.push( cell ); - cellIndex += increment; - gapX -= cell.size.outerWidth; - } - return cells; -}; - -// ----- contain ----- // - -// contain cell targets so no excess sliding -Flickity.prototype._containCells = function() { - if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) { - return; - } - var startMargin = this.options.rightToLeft ? 'marginRight' : 'marginLeft'; - var endMargin = this.options.rightToLeft ? 'marginLeft' : 'marginRight'; - var firstCellStartMargin = this.cells[0].size[ startMargin ]; - var lastCell = this.getLastCell(); - var contentWidth = this.slideableWidth - lastCell.size[ endMargin ]; - var endLimit = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign ); - // content is less than gallery size - var isContentSmaller = contentWidth < this.size.innerWidth; - // contain each cell target - for ( var i=0, len = this.cells.length; i < len; i++ ) { - var cell = this.cells[i]; - // reset default target - cell.setDefaultTarget(); - if ( isContentSmaller ) { - // all cells fit inside gallery - cell.target = contentWidth * this.cellAlign; - } else { - // contain to bounds - cell.target = Math.max( cell.target, this.cursorPosition + firstCellStartMargin ); - cell.target = Math.min( cell.target, endLimit ); - } - } -}; - -// ----- ----- // - -/** - * emits events via eventEmitter and jQuery events - * @param {String} type - name of event - * @param {Event} event - original event - * @param {Array} args - extra arguments - */ -Flickity.prototype.dispatchEvent = function( type, event, args ) { - var emitArgs = [ event ].concat( args ); - this.emitEvent( type, emitArgs ); - - if ( jQuery && this.$element ) { - if ( event ) { - // create jQuery event - var $event = jQuery.Event( event ); - $event.type = type; - this.$element.trigger( $event, args ); - } else { - // just trigger with type if no event available - this.$element.trigger( type, args ); - } - } -}; - -// -------------------------- select -------------------------- // - -/** - * @param {Integer} index - index of the cell - * @param {Boolean} isWrap - will wrap-around to last/first if at the end - */ -Flickity.prototype.select = function( index, isWrap ) { - if ( !this.isActive ) { - return; - } - // wrap position so slider is within normal area - var len = this.cells.length; - if ( this.options.wrapAround && len > 1 ) { - if ( index < 0 ) { - this.x -= this.slideableWidth; - } else if ( index >= len ) { - this.x += this.slideableWidth; - } - } - - if ( this.options.wrapAround || isWrap ) { - index = utils.modulo( index, len ); - } - - if ( this.cells[ index ] ) { - this.selectedIndex = index; - this.setSelectedCell(); - this.startAnimation(); - this.dispatchEvent('cellSelect'); - } -}; - -Flickity.prototype.previous = function( isWrap ) { - this.select( this.selectedIndex - 1, isWrap ); -}; - -Flickity.prototype.next = function( isWrap ) { - this.select( this.selectedIndex + 1, isWrap ); -}; - -Flickity.prototype.setSelectedCell = function() { - this._removeSelectedCellClass(); - this.selectedCell = this.cells[ this.selectedIndex ]; - this.selectedElement = this.selectedCell.element; - classie.add( this.selectedElement, 'is-selected' ); -}; - -Flickity.prototype._removeSelectedCellClass = function() { - if ( this.selectedCell ) { - classie.remove( this.selectedCell.element, 'is-selected' ); - } -}; - -// -------------------------- get cells -------------------------- // - -/** - * get Flickity.Cell, given an Element - * @param {Element} elem - * @returns {Flickity.Cell} item - */ -Flickity.prototype.getCell = function( elem ) { - // loop through cells to get the one that matches - for ( var i=0, len = this.cells.length; i < len; i++ ) { - var cell = this.cells[i]; - if ( cell.element == elem ) { - return cell; - } - } -}; - -/** - * get collection of Flickity.Cells, given Elements - * @param {Element, Array, NodeList} elems - * @returns {Array} cells - Flickity.Cells - */ -Flickity.prototype.getCells = function( elems ) { - elems = utils.makeArray( elems ); - var cells = []; - for ( var i=0, len = elems.length; i < len; i++ ) { - var elem = elems[i]; - var cell = this.getCell( elem ); - if ( cell ) { - cells.push( cell ); - } - } - return cells; -}; - -/** - * get cell elements - * @returns {Array} cellElems - */ -Flickity.prototype.getCellElements = function() { - var cellElems = []; - for ( var i=0, len = this.cells.length; i < len; i++ ) { - cellElems.push( this.cells[i].element ); - } - return cellElems; -}; - -/** - * get parent cell from an element - * @param {Element} elem - * @returns {Flickit.Cell} cell - */ -Flickity.prototype.getParentCell = function( elem ) { - // first check if elem is cell - var cell = this.getCell( elem ); - if ( cell ) { - return cell; - } - // try to get parent cell elem - elem = utils.getParent( elem, '.flickity-slider > *' ); - return this.getCell( elem ); -}; - -// -------------------------- events -------------------------- // - -Flickity.prototype.uiChange = function() { - this.emit('uiChange'); -}; - -Flickity.prototype.childUIPointerDown = function( event ) { - this.emitEvent( 'childUIPointerDown', [ event ] ); -}; - -// ----- resize ----- // - -Flickity.prototype.onresize = function() { - this.watchCSS(); - this.resize(); -}; - -utils.debounceMethod( Flickity, 'onresize', 150 ); - -Flickity.prototype.resize = function() { - if ( !this.isActive ) { - return; - } - this.getSize(); - // wrap values - if ( this.options.wrapAround ) { - this.x = utils.modulo( this.x, this.slideableWidth ); - } - this.positionCells(); - this._getWrapShiftCells(); - this.setGallerySize(); - this.positionSliderAtSelected(); -}; - -var supportsConditionalCSS = Flickity.supportsConditionalCSS = ( function() { - var supports; - return function checkSupport() { - if ( supports !== undefined ) { - return supports; - } - if ( !getComputedStyle ) { - supports = false; - return; - } - // style body's :after and check that - var style = document.createElement('style'); - var cssText = document.createTextNode('body:after { content: "foo"; display: none; }'); - style.appendChild( cssText ); - document.head.appendChild( style ); - var afterContent = getComputedStyle( document.body, ':after' ).content; - // check if able to get :after content - supports = afterContent.indexOf('foo') != -1; - document.head.removeChild( style ); - return supports; - }; -})(); - -// watches the :after property, activates/deactivates -Flickity.prototype.watchCSS = function() { - var watchOption = this.options.watchCSS; - if ( !watchOption ) { - return; - } - var supports = supportsConditionalCSS(); - if ( !supports ) { - // activate if watch option is fallbackOn - var method = watchOption == 'fallbackOn' ? 'activate' : 'deactivate'; - this[ method ](); - return; - } - - var afterContent = getComputedStyle( this.element, ':after' ).content; - // activate if :after { content: 'flickity' } - if ( afterContent.indexOf('flickity') != -1 ) { - this.activate(); - } else { - this.deactivate(); - } -}; - -// ----- keydown ----- // - -// go previous/next if left/right keys pressed -Flickity.prototype.onkeydown = function( event ) { - // only work if element is in focus - if ( !this.options.accessibility || - ( document.activeElement && document.activeElement != this.element ) ) { - return; - } - - if ( event.keyCode == 37 ) { - // go left - var leftMethod = this.options.rightToLeft ? 'next' : 'previous'; - this.uiChange(); - this[ leftMethod ](); - } else if ( event.keyCode == 39 ) { - // go right - var rightMethod = this.options.rightToLeft ? 'previous' : 'next'; - this.uiChange(); - this[ rightMethod ](); - } -}; - -// -------------------------- destroy -------------------------- // - -// deactivate all Flickity functionality, but keep stuff available -Flickity.prototype.deactivate = function() { - if ( !this.isActive ) { - return; - } - classie.remove( this.element, 'flickity-enabled' ); - classie.remove( this.element, 'flickity-rtl' ); - // destroy cells - for ( var i=0, len = this.cells.length; i < len; i++ ) { - var cell = this.cells[i]; - cell.destroy(); - } - this._removeSelectedCellClass(); - this.element.removeChild( this.viewport ); - // move child elements back into element - moveElements( this.slider.children, this.element ); - if ( this.options.accessibility ) { - this.element.removeAttribute('tabIndex'); - eventie.unbind( this.element, 'keydown', this ); - } - // set flags - this.isActive = false; - this.emit('deactivate'); -}; - -Flickity.prototype.destroy = function() { - this.deactivate(); - if ( this.isResizeBound ) { - eventie.unbind( window, 'resize', this ); - } - this.emit('destroy'); - if ( jQuery && this.$element ) { - jQuery.removeData( this.element, 'flickity' ); - } - delete this.element.flickityGUID; - delete instances[ this.guid ]; -}; - -// -------------------------- prototype -------------------------- // - -utils.extend( Flickity.prototype, animatePrototype ); - -// -------------------------- extras -------------------------- // - -// quick check for IE8 -var isIE8 = 'attachEvent' in window; - -Flickity.setUnselectable = function( elem ) { - if ( !isIE8 ) { - return; - } - // IE8 prevent child from changing focus http://stackoverflow.com/a/17525223/182183 - elem.setAttribute( 'unselectable', 'on' ); -}; - -/** - * get Flickity instance from element - * @param {Element} elem - * @returns {Flickity} - */ -Flickity.data = function( elem ) { - elem = utils.getQueryElement( elem ); - var id = elem && elem.flickityGUID; - return id && instances[ id ]; -}; - -utils.htmlInit( Flickity, 'flickity' ); - -if ( jQuery && jQuery.bridget ) { - jQuery.bridget( 'flickity', Flickity ); -} - -Flickity.Cell = Cell; - -return Flickity; - -})); - -/*! - * Unipointer v1.1.0 - * base class for doing one thing with pointer event - * MIT license - */ - -/*jshint browser: true, undef: true, unused: true, strict: true */ -/*global define: false, module: false, require: false */ - -( function( window, factory ) { - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'unipointer/unipointer',[ - 'eventEmitter/EventEmitter', - 'eventie/eventie' - ], function( EventEmitter, eventie ) { - return factory( window, EventEmitter, eventie ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('wolfy87-eventemitter'), - require('eventie') - ); - } else { - // browser global - window.Unipointer = factory( - window, - window.EventEmitter, - window.eventie - ); - } - -}( window, function factory( window, EventEmitter, eventie ) { - - - -function noop() {} - -function Unipointer() {} - -// inherit EventEmitter -Unipointer.prototype = new EventEmitter(); - -Unipointer.prototype.bindStartEvent = function( elem ) { - this._bindStartEvent( elem, true ); -}; - -Unipointer.prototype.unbindStartEvent = function( elem ) { - this._bindStartEvent( elem, false ); -}; - -/** - * works as unbinder, as you can ._bindStart( false ) to unbind - * @param {Boolean} isBind - will unbind if falsey - */ -Unipointer.prototype._bindStartEvent = function( elem, isBind ) { - // munge isBind, default to true - isBind = isBind === undefined ? true : !!isBind; - var bindMethod = isBind ? 'bind' : 'unbind'; - - if ( window.navigator.pointerEnabled ) { - // W3C Pointer Events, IE11. See https://coderwall.com/p/mfreca - eventie[ bindMethod ]( elem, 'pointerdown', this ); - } else if ( window.navigator.msPointerEnabled ) { - // IE10 Pointer Events - eventie[ bindMethod ]( elem, 'MSPointerDown', this ); - } else { - // listen for both, for devices like Chrome Pixel - eventie[ bindMethod ]( elem, 'mousedown', this ); - eventie[ bindMethod ]( elem, 'touchstart', this ); - } -}; - -// trigger handler methods for events -Unipointer.prototype.handleEvent = function( event ) { - var method = 'on' + event.type; - if ( this[ method ] ) { - this[ method ]( event ); - } -}; - -// returns the touch that we're keeping track of -Unipointer.prototype.getTouch = function( touches ) { - for ( var i=0, len = touches.length; i < len; i++ ) { - var touch = touches[i]; - if ( touch.identifier == this.pointerIdentifier ) { - return touch; - } - } -}; - -// ----- start event ----- // - -Unipointer.prototype.onmousedown = function( event ) { - // dismiss clicks from right or middle buttons - var button = event.button; - if ( button && ( button !== 0 && button !== 1 ) ) { - return; - } - this._pointerDown( event, event ); -}; - -Unipointer.prototype.ontouchstart = function( event ) { - this._pointerDown( event, event.changedTouches[0] ); -}; - -Unipointer.prototype.onMSPointerDown = -Unipointer.prototype.onpointerdown = function( event ) { - this._pointerDown( event, event ); -}; - -/** - * pointer start - * @param {Event} event - * @param {Event or Touch} pointer - */ -Unipointer.prototype._pointerDown = function( event, pointer ) { - // dismiss other pointers - if ( this.isPointerDown ) { - return; - } - - this.isPointerDown = true; - // save pointer identifier to match up touch events - this.pointerIdentifier = pointer.pointerId !== undefined ? - // pointerId for pointer events, touch.indentifier for touch events - pointer.pointerId : pointer.identifier; - - this.pointerDown( event, pointer ); -}; - -Unipointer.prototype.pointerDown = function( event, pointer ) { - this._bindPostStartEvents( event ); - this.emitEvent( 'pointerDown', [ event, pointer ] ); -}; - -// hash of events to be bound after start event -var postStartEvents = { - mousedown: [ 'mousemove', 'mouseup' ], - touchstart: [ 'touchmove', 'touchend', 'touchcancel' ], - pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ], - MSPointerDown: [ 'MSPointerMove', 'MSPointerUp', 'MSPointerCancel' ] -}; - -Unipointer.prototype._bindPostStartEvents = function( event ) { - if ( !event ) { - return; - } - // get proper events to match start event - var events = postStartEvents[ event.type ]; - // IE8 needs to be bound to document - var node = event.preventDefault ? window : document; - // bind events to node - for ( var i=0, len = events.length; i < len; i++ ) { - var evnt = events[i]; - eventie.bind( node, evnt, this ); - } - // save these arguments - this._boundPointerEvents = { - events: events, - node: node - }; -}; - -Unipointer.prototype._unbindPostStartEvents = function() { - var args = this._boundPointerEvents; - // IE8 can trigger dragEnd twice, check for _boundEvents - if ( !args || !args.events ) { - return; - } - - for ( var i=0, len = args.events.length; i < len; i++ ) { - var event = args.events[i]; - eventie.unbind( args.node, event, this ); - } - delete this._boundPointerEvents; -}; - -// ----- move event ----- // - -Unipointer.prototype.onmousemove = function( event ) { - this._pointerMove( event, event ); -}; - -Unipointer.prototype.onMSPointerMove = -Unipointer.prototype.onpointermove = function( event ) { - if ( event.pointerId == this.pointerIdentifier ) { - this._pointerMove( event, event ); - } -}; - -Unipointer.prototype.ontouchmove = function( event ) { - var touch = this.getTouch( event.changedTouches ); - if ( touch ) { - this._pointerMove( event, touch ); - } -}; - -/** - * pointer move - * @param {Event} event - * @param {Event or Touch} pointer - * @private - */ -Unipointer.prototype._pointerMove = function( event, pointer ) { - this.pointerMove( event, pointer ); -}; - -// public -Unipointer.prototype.pointerMove = function( event, pointer ) { - this.emitEvent( 'pointerMove', [ event, pointer ] ); -}; - -// ----- end event ----- // - - -Unipointer.prototype.onmouseup = function( event ) { - this._pointerUp( event, event ); -}; - -Unipointer.prototype.onMSPointerUp = -Unipointer.prototype.onpointerup = function( event ) { - if ( event.pointerId == this.pointerIdentifier ) { - this._pointerUp( event, event ); - } -}; - -Unipointer.prototype.ontouchend = function( event ) { - var touch = this.getTouch( event.changedTouches ); - if ( touch ) { - this._pointerUp( event, touch ); - } -}; - -/** - * pointer up - * @param {Event} event - * @param {Event or Touch} pointer - * @private - */ -Unipointer.prototype._pointerUp = function( event, pointer ) { - this._pointerDone(); - this.pointerUp( event, pointer ); -}; - -// public -Unipointer.prototype.pointerUp = function( event, pointer ) { - this.emitEvent( 'pointerUp', [ event, pointer ] ); -}; - -// ----- pointer done ----- // - -// triggered on pointer up & pointer cancel -Unipointer.prototype._pointerDone = function() { - // reset properties - this.isPointerDown = false; - delete this.pointerIdentifier; - // remove events - this._unbindPostStartEvents(); - this.pointerDone(); -}; - -Unipointer.prototype.pointerDone = noop; - -// ----- pointer cancel ----- // - -Unipointer.prototype.onMSPointerCancel = -Unipointer.prototype.onpointercancel = function( event ) { - if ( event.pointerId == this.pointerIdentifier ) { - this._pointerCancel( event, event ); - } -}; - -Unipointer.prototype.ontouchcancel = function( event ) { - var touch = this.getTouch( event.changedTouches ); - if ( touch ) { - this._pointerCancel( event, touch ); - } -}; - -/** - * pointer cancel - * @param {Event} event - * @param {Event or Touch} pointer - * @private - */ -Unipointer.prototype._pointerCancel = function( event, pointer ) { - this._pointerDone(); - this.pointerCancel( event, pointer ); -}; - -// public -Unipointer.prototype.pointerCancel = function( event, pointer ) { - this.emitEvent( 'pointerCancel', [ event, pointer ] ); -}; - -// ----- ----- // - -// utility function for getting x/y cooridinates from event, because IE8 -Unipointer.getPointerPoint = function( pointer ) { - return { - x: pointer.pageX !== undefined ? pointer.pageX : pointer.clientX, - y: pointer.pageY !== undefined ? pointer.pageY : pointer.clientY - }; -}; - -// ----- ----- // - -return Unipointer; - -})); - -/*! - * Unidragger v1.1.3 - * Draggable base class - * MIT license - */ - -/*jshint browser: true, unused: true, undef: true, strict: true */ - -( function( window, factory ) { - /*global define: false, module: false, require: false */ - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'unidragger/unidragger',[ - 'eventie/eventie', - 'unipointer/unipointer' - ], function( eventie, Unipointer ) { - return factory( window, eventie, Unipointer ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('eventie'), - require('unipointer') - ); - } else { - // browser global - window.Unidragger = factory( - window, - window.eventie, - window.Unipointer - ); - } - -}( window, function factory( window, eventie, Unipointer ) { - - - -// ----- ----- // - -function noop() {} - -// handle IE8 prevent default -function preventDefaultEvent( event ) { - if ( event.preventDefault ) { - event.preventDefault(); - } else { - event.returnValue = false; - } -} - -// -------------------------- Unidragger -------------------------- // - -function Unidragger() {} - -// inherit Unipointer & EventEmitter -Unidragger.prototype = new Unipointer(); - -// ----- bind start ----- // - -Unidragger.prototype.bindHandles = function() { - this._bindHandles( true ); -}; - -Unidragger.prototype.unbindHandles = function() { - this._bindHandles( false ); -}; - -var navigator = window.navigator; -/** - * works as unbinder, as you can .bindHandles( false ) to unbind - * @param {Boolean} isBind - will unbind if falsey - */ -Unidragger.prototype._bindHandles = function( isBind ) { - // munge isBind, default to true - isBind = isBind === undefined ? true : !!isBind; - // extra bind logic - var binderExtra; - if ( navigator.pointerEnabled ) { - binderExtra = function( handle ) { - // disable scrolling on the element - handle.style.touchAction = isBind ? 'none' : ''; - }; - } else if ( navigator.msPointerEnabled ) { - binderExtra = function( handle ) { - // disable scrolling on the element - handle.style.msTouchAction = isBind ? 'none' : ''; - }; - } else { - binderExtra = function() { - // TODO re-enable img.ondragstart when unbinding - if ( isBind ) { - disableImgOndragstart( handle ); - } - }; - } - // bind each handle - var bindMethod = isBind ? 'bind' : 'unbind'; - for ( var i=0, len = this.handles.length; i < len; i++ ) { - var handle = this.handles[i]; - this._bindStartEvent( handle, isBind ); - binderExtra( handle ); - eventie[ bindMethod ]( handle, 'click', this ); - } -}; - -// remove default dragging interaction on all images in IE8 -// IE8 does its own drag thing on images, which messes stuff up - -function noDragStart() { - return false; -} - -// TODO replace this with a IE8 test -var isIE8 = 'attachEvent' in document.documentElement; - -// IE8 only -var disableImgOndragstart = !isIE8 ? noop : function( handle ) { - - if ( handle.nodeName == 'IMG' ) { - handle.ondragstart = noDragStart; - } - - var images = handle.querySelectorAll('img'); - for ( var i=0, len = images.length; i < len; i++ ) { - var img = images[i]; - img.ondragstart = noDragStart; - } -}; - -// ----- start event ----- // - -/** - * pointer start - * @param {Event} event - * @param {Event or Touch} pointer - */ -Unidragger.prototype.pointerDown = function( event, pointer ) { - this._dragPointerDown( event, pointer ); - // kludge to blur focused inputs in dragger - var focused = document.activeElement; - if ( focused && focused.blur ) { - focused.blur(); - } - // bind move and end events - this._bindPostStartEvents( event ); - this.emitEvent( 'pointerDown', [ event, pointer ] ); -}; - -// base pointer down logic -Unidragger.prototype._dragPointerDown = function( event, pointer ) { - // track to see when dragging starts - this.pointerDownPoint = Unipointer.getPointerPoint( pointer ); - - // prevent default, unless touchstart or <select> - var isTouchstart = event.type == 'touchstart'; - var targetNodeName = event.target.nodeName; - if ( !isTouchstart && targetNodeName != 'SELECT' ) { - preventDefaultEvent( event ); - } -}; - -// ----- move event ----- // - -/** - * drag move - * @param {Event} event - * @param {Event or Touch} pointer - */ -Unidragger.prototype.pointerMove = function( event, pointer ) { - var moveVector = this._dragPointerMove( event, pointer ); - this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] ); - this._dragMove( event, pointer, moveVector ); -}; - -// base pointer move logic -Unidragger.prototype._dragPointerMove = function( event, pointer ) { - var movePoint = Unipointer.getPointerPoint( pointer ); - var moveVector = { - x: movePoint.x - this.pointerDownPoint.x, - y: movePoint.y - this.pointerDownPoint.y - }; - // start drag if pointer has moved far enough to start drag - if ( !this.isDragging && this.hasDragStarted( moveVector ) ) { - this._dragStart( event, pointer ); - } - return moveVector; -}; - -// condition if pointer has moved far enough to start drag -Unidragger.prototype.hasDragStarted = function( moveVector ) { - return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3; -}; - - -// ----- end event ----- // - -/** - * pointer up - * @param {Event} event - * @param {Event or Touch} pointer - */ -Unidragger.prototype.pointerUp = function( event, pointer ) { - this.emitEvent( 'pointerUp', [ event, pointer ] ); - this._dragPointerUp( event, pointer ); -}; - -Unidragger.prototype._dragPointerUp = function( event, pointer ) { - if ( this.isDragging ) { - this._dragEnd( event, pointer ); - } else { - // pointer didn't move enough for drag to start - this._staticClick( event, pointer ); - } -}; - -// -------------------------- drag -------------------------- // - -// dragStart -Unidragger.prototype._dragStart = function( event, pointer ) { - this.isDragging = true; - this.dragStartPoint = Unidragger.getPointerPoint( pointer ); - // prevent clicks - this.isPreventingClicks = true; - - this.dragStart( event, pointer ); -}; - -Unidragger.prototype.dragStart = function( event, pointer ) { - this.emitEvent( 'dragStart', [ event, pointer ] ); -}; - -// dragMove -Unidragger.prototype._dragMove = function( event, pointer, moveVector ) { - // do not drag if not dragging yet - if ( !this.isDragging ) { - return; - } - - this.dragMove( event, pointer, moveVector ); -}; - -Unidragger.prototype.dragMove = function( event, pointer, moveVector ) { - preventDefaultEvent( event ); - this.emitEvent( 'dragMove', [ event, pointer, moveVector ] ); -}; - -// dragEnd -Unidragger.prototype._dragEnd = function( event, pointer ) { - // set flags - this.isDragging = false; - // re-enable clicking async - var _this = this; - setTimeout( function() { - delete _this.isPreventingClicks; - }); - - this.dragEnd( event, pointer ); -}; - -Unidragger.prototype.dragEnd = function( event, pointer ) { - this.emitEvent( 'dragEnd', [ event, pointer ] ); -}; - -// ----- onclick ----- // - -// handle all clicks and prevent clicks when dragging -Unidragger.prototype.onclick = function( event ) { - if ( this.isPreventingClicks ) { - preventDefaultEvent( event ); - } -}; - -// ----- staticClick ----- // - -// triggered after pointer down & up with no/tiny movement -Unidragger.prototype._staticClick = function( event, pointer ) { - // allow click in <input>s and <textarea>s - var nodeName = event.target.nodeName; - if ( nodeName == 'INPUT' || nodeName == 'TEXTAREA' ) { - event.target.focus(); - } - this.staticClick( event, pointer ); -}; - -Unidragger.prototype.staticClick = function( event, pointer ) { - this.emitEvent( 'staticClick', [ event, pointer ] ); -}; - -// ----- ----- // - -Unidragger.getPointerPoint = function( pointer ) { - return { - x: pointer.pageX !== undefined ? pointer.pageX : pointer.clientX, - y: pointer.pageY !== undefined ? pointer.pageY : pointer.clientY - }; -}; - -// ----- ----- // - -Unidragger.getPointerPoint = Unipointer.getPointerPoint; - -return Unidragger; - -})); - -( function( window, factory ) { - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'flickity/js/drag',[ - 'classie/classie', - 'eventie/eventie', - './flickity', - 'unidragger/unidragger', - 'fizzy-ui-utils/utils' - ], function( classie, eventie, Flickity, Unidragger, utils ) { - return factory( window, classie, eventie, Flickity, Unidragger, utils ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('desandro-classie'), - require('eventie'), - require('./flickity'), - require('unidragger'), - require('fizzy-ui-utils') - ); - } else { - // browser global - window.Flickity = window.Flickity || {}; - window.Flickity.dragPrototype = factory( - window, - window.classie, - window.eventie, - window.Flickity, - window.Unidragger, - window.fizzyUIUtils - ); - } - -}( window, function factory( window, classie, eventie, Flickity, Unidragger, utils ) { - - - -// handle IE8 prevent default -function preventDefaultEvent( event ) { - if ( event.preventDefault ) { - event.preventDefault(); - } else { - event.returnValue = false; - } -} - -// ----- defaults ----- // - -utils.extend( Flickity.defaults, { - draggable: true, - touchVerticalScroll: true -}); - -// ----- create ----- // - -Flickity.createMethods.push('_createDrag'); - -// -------------------------- drag prototype -------------------------- // - -var proto = {}; -utils.extend( proto, Unidragger.prototype ); - -// -------------------------- -------------------------- // - -proto._createDrag = function() { - this.on( 'activate', this.bindDrag ); - this.on( 'uiChange', this._uiChangeDrag ); - this.on( 'childUIPointerDown', this._childUIPointerDownDrag ); - this.on( 'deactivate', this.unbindDrag ); -}; - -proto.bindDrag = function() { - if ( !this.options.draggable || this.isDragBound ) { - return; - } - classie.add( this.element, 'is-draggable' ); - this.handles = [ this.viewport ]; - this.bindHandles(); - this.isDragBound = true; -}; - -proto.unbindDrag = function() { - if ( !this.isDragBound ) { - return; - } - classie.remove( this.element, 'is-draggable' ); - this.unbindHandles(); - delete this.isDragBound; -}; - -proto._uiChangeDrag = function() { - delete this.isFreeScrolling; -}; - -proto._childUIPointerDownDrag = function( event ) { - preventDefaultEvent( event ); - this.pointerDownFocus( event ); -}; - -// -------------------------- pointer events -------------------------- // - -proto.pointerDown = function( event, pointer ) { - this._dragPointerDown( event, pointer ); - - // kludge to blur focused inputs in dragger - var focused = document.activeElement; - if ( focused && focused.blur && focused != this.element && - // do not blur body for IE9 & 10, #117 - focused != document.body ) { - focused.blur(); - } - this.pointerDownFocus( event ); - // stop if it was moving - this.velocity = 0; - classie.add( this.viewport, 'is-pointer-down' ); - // bind move and end events - this._bindPostStartEvents( event ); - this.dispatchEvent( 'pointerDown', event, [ pointer ] ); -}; - -var touchStartEvents = { - touchstart: true, - MSPointerDown: true -}; - -var focusNodes = { - INPUT: true, - SELECT: true -}; - -proto.pointerDownFocus = function( event ) { - // focus element, if not touch, and its not an input or select - if ( this.options.accessibility && !touchStartEvents[ event.type ] && - !focusNodes[ event.target.nodeName ] ) { - this.element.focus(); - } -}; - -// ----- move ----- // - -proto.pointerMove = function( event, pointer ) { - var moveVector = this._dragPointerMove( event, pointer ); - this.touchVerticalScrollMove( event, pointer, moveVector ); - this._dragMove( event, pointer, moveVector ); - this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] ); -}; - -proto.hasDragStarted = function( moveVector ) { - return !this.isTouchScrolling && Math.abs( moveVector.x ) > 3; -}; - -// ----- up ----- // - -proto.pointerUp = function( event, pointer ) { - delete this.isTouchScrolling; - classie.remove( this.viewport, 'is-pointer-down' ); - this.dispatchEvent( 'pointerUp', event, [ pointer ] ); - this._dragPointerUp( event, pointer ); -}; - -// -------------------------- vertical scroll -------------------------- // - -var touchScrollEvents = { - // move events - // mousemove: true, - touchmove: true, - MSPointerMove: true -}; - -// position of pointer, relative to window -function getPointerWindowY( pointer ) { - var pointerPoint = Unidragger.getPointerPoint( pointer ); - return pointerPoint.y - window.pageYOffset; -} - -proto.touchVerticalScrollMove = function( event, pointer, moveVector ) { - // do not scroll if already dragging, if disabled - var touchVerticalScroll = this.options.touchVerticalScroll; - // if touchVerticalScroll is 'withDrag', allow scrolling and dragging - var canNotScroll = touchVerticalScroll == 'withDrag' ? !touchVerticalScroll : - this.isDragging || !touchVerticalScroll; - if ( canNotScroll || !touchScrollEvents[ event.type ] ) { - return; - } - // don't start vertical scrolling until pointer has moved 10 pixels in a direction - if ( !this.isTouchScrolling && Math.abs( moveVector.y ) > 10 ) { - // start touch vertical scrolling - // scroll & pointerY when started - this.startScrollY = window.pageYOffset; - this.pointerWindowStartY = getPointerWindowY( pointer ); - // start scroll animation - this.isTouchScrolling = true; - } -}; - -// -------------------------- dragging -------------------------- // - -proto.dragStart = function( event, pointer ) { - this.dragStartPosition = this.x; - this.startAnimation(); - this.dispatchEvent( 'dragStart', event, [ pointer ] ); -}; - -proto.dragMove = function( event, pointer, moveVector ) { - preventDefaultEvent( event ); - - this.previousDragX = this.x; - - var movedX = moveVector.x; - // reverse if right-to-left - var direction = this.options.rightToLeft ? -1 : 1; - this.x = this.dragStartPosition + movedX * direction; - - if ( !this.options.wrapAround && this.cells.length ) { - // slow drag - var originBound = Math.max( -this.cells[0].target, this.dragStartPosition); - this.x = this.x > originBound ? ( this.x - originBound ) * 0.5 + originBound : this.x; - var endBound = Math.min( -this.getLastCell().target, this.dragStartPosition ); - this.x = this.x < endBound ? ( this.x - endBound ) * 0.5 + endBound : this.x; - } - - this.previousDragMoveTime = this.dragMoveTime; - this.dragMoveTime = new Date(); - this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] ); -}; - -proto.dragEnd = function( event, pointer ) { - this.dragEndFlick(); - if ( this.options.freeScroll ) { - this.isFreeScrolling = true; - } - // set selectedIndex based on where flick will end up - var index = this.dragEndRestingSelect(); - - if ( this.options.freeScroll && !this.options.wrapAround ) { - // if free-scroll & not wrap around - // do not free-scroll if going outside of bounding cells - // so bounding cells can attract slider, and keep it in bounds - var restingX = this.getRestingPosition(); - this.isFreeScrolling = -restingX > this.cells[0].target && - -restingX < this.getLastCell().target; - } else if ( !this.options.freeScroll && index == this.selectedIndex ) { - // boost selection if selected index has not changed - index += this.dragEndBoostSelect(); - } - // apply selection - // TODO refactor this, selecting here feels weird - this.select( index ); - this.dispatchEvent( 'dragEnd', event, [ pointer ] ); -}; - -// apply velocity after dragging -proto.dragEndFlick = function() { - if ( !isFinite( this.previousDragX ) ) { - return; - } - // set slider velocity - var timeDelta = this.dragMoveTime - this.previousDragMoveTime; - // prevent divide by 0, if dragMove & dragEnd happened at same time - if ( timeDelta ) { - // 60 frames per second, ideally - // TODO, velocity should be in pixels per millisecond - // currently in pixels per frame - timeDelta /= 1000 / 60; - var xDelta = this.x - this.previousDragX; - this.velocity = xDelta / timeDelta; - } - // reset - delete this.previousDragX; -}; - -proto.dragEndRestingSelect = function() { - var restingX = this.getRestingPosition(); - // how far away from selected cell - var distance = Math.abs( this.getCellDistance( -restingX, this.selectedIndex ) ); - // get closet resting going up and going down - var positiveResting = this._getClosestResting( restingX, distance, 1 ); - var negativeResting = this._getClosestResting( restingX, distance, -1 ); - // use closer resting for wrap-around - var index = positiveResting.distance < negativeResting.distance ? - positiveResting.index : negativeResting.index; - // for contain, force boost if delta is not greater than 1 - if ( this.options.contain && !this.options.wrapAround ) { - index = Math.abs( index - this.selectedIndex ) <= 1 ? this.selectedIndex : index; - } - return index; -}; - -/** - * given resting X and distance to selected cell - * get the distance and index of the closest cell - * @param {Number} restingX - estimated post-flick resting position - * @param {Number} distance - distance to selected cell - * @param {Integer} increment - +1 or -1, going up or down - * @returns {Object} - { distance: {Number}, index: {Integer} } - */ -proto._getClosestResting = function( restingX, distance, increment ) { - var index = this.selectedIndex; - var minDistance = Infinity; - var condition = this.options.contain && !this.options.wrapAround ? - // if contain, keep going if distance is equal to minDistance - function( d, md ) { return d <= md; } : function( d, md ) { return d < md; }; - while ( condition( distance, minDistance ) ) { - // measure distance to next cell - index += increment; - minDistance = distance; - distance = this.getCellDistance( -restingX, index ); - if ( distance === null ) { - break; - } - distance = Math.abs( distance ); - } - return { - distance: minDistance, - // selected was previous index - index: index - increment - }; -}; - -/** - * measure distance between x and a cell target - * @param {Number} x - * @param {Integer} index - cell index - */ -proto.getCellDistance = function( x, index ) { - var len = this.cells.length; - // wrap around if at least 2 cells - var isWrapAround = this.options.wrapAround && len > 1; - var cellIndex = isWrapAround ? utils.modulo( index, len ) : index; - var cell = this.cells[ cellIndex ]; - if ( !cell ) { - return null; - } - // add distance for wrap-around cells - var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0; - return x - ( cell.target + wrap ); -}; - -proto.dragEndBoostSelect = function() { - var distance = this.getCellDistance( -this.x, this.selectedIndex ); - if ( distance > 0 && this.velocity < -1 ) { - // if moving towards the right, and positive velocity, and the next attractor - return 1; - } else if ( distance < 0 && this.velocity > 1 ) { - // if moving towards the left, and negative velocity, and previous attractor - return -1; - } - return 0; -}; - -// ----- staticClick ----- // - -proto.staticClick = function( event, pointer ) { - // get clickedCell, if cell was clicked - var clickedCell = this.getParentCell( event.target ); - var cellElem = clickedCell && clickedCell.element; - var cellIndex = clickedCell && utils.indexOf( this.cells, clickedCell ); - this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] ); -}; - -// ----- ----- // - -utils.extend( Flickity.prototype, proto ); - -// ----- ----- // - -return Flickity; - -})); - -/*! - * Tap listener v1.1.0 - * listens to taps - * MIT license - */ - -/*jshint browser: true, unused: true, undef: true, strict: true */ - -( function( window, factory ) { - /*global define: false, module: false, require: false */ - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'tap-listener/tap-listener',[ - 'unipointer/unipointer' - ], function( Unipointer ) { - return factory( window, Unipointer ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('unipointer') - ); - } else { - // browser global - window.TapListener = factory( - window, - window.Unipointer - ); - } - -}( window, function factory( window, Unipointer ) { - - - -// -------------------------- TapListener -------------------------- // - -function TapListener( elem ) { - this.bindTap( elem ); -} - -// inherit Unipointer & EventEmitter -TapListener.prototype = new Unipointer(); - -/** - * bind tap event to element - * @param {Element} elem - */ -TapListener.prototype.bindTap = function( elem ) { - if ( !elem ) { - return; - } - this.unbindTap(); - this.tapElement = elem; - this._bindStartEvent( elem, true ); -}; - -TapListener.prototype.unbindTap = function() { - if ( !this.tapElement ) { - return; - } - this._bindStartEvent( this.tapElement, true ); - delete this.tapElement; -}; - -var isPageOffset = window.pageYOffset !== undefined; -/** - * pointer up - * @param {Event} event - * @param {Event or Touch} pointer - */ -TapListener.prototype.pointerUp = function( event, pointer ) { - var pointerPoint = Unipointer.getPointerPoint( pointer ); - var boundingRect = this.tapElement.getBoundingClientRect(); - // standard or IE8 scroll positions - var scrollX = isPageOffset ? window.pageXOffset : document.body.scrollLeft; - var scrollY = isPageOffset ? window.pageYOffset : document.body.scrollTop; - // calculate if pointer is inside tapElement - var isInside = pointerPoint.x >= boundingRect.left + scrollX && - pointerPoint.x <= boundingRect.right + scrollX && - pointerPoint.y >= boundingRect.top + scrollY && - pointerPoint.y <= boundingRect.bottom + scrollY; - // trigger callback if pointer is inside element - if ( isInside ) { - this.emitEvent( 'tap', [ event, pointer ] ); - } -}; - -TapListener.prototype.destroy = function() { - this.pointerDone(); - this.unbindTap(); -}; - -// ----- ----- // - -return TapListener; - -})); - -// -------------------------- prev/next button -------------------------- // - -( function( window, factory ) { - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'flickity/js/prev-next-button',[ - 'eventie/eventie', - './flickity', - 'tap-listener/tap-listener', - 'fizzy-ui-utils/utils' - ], function( eventie, Flickity, TapListener, utils ) { - return factory( window, eventie, Flickity, TapListener, utils ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('eventie'), - require('./flickity'), - require('tap-listener'), - require('fizzy-ui-utils') - ); - } else { - // browser global - window.Flickity = window.Flickity || {}; - window.Flickity.PrevNextButton = factory( - window, - window.eventie, - window.Flickity, - window.TapListener, - window.fizzyUIUtils - ); - } - -}( window, function factory( window, eventie, Flickity, TapListener, utils ) { - - - -// ----- inline SVG support ----- // - -var svgURI = 'http://www.w3.org/2000/svg'; - -// only check on demand, not on script load -var supportsInlineSVG = ( function() { - var supports; - function checkSupport() { - if ( supports !== undefined ) { - return supports; - } - var div = document.createElement('div'); - div.innerHTML = '<svg/>'; - supports = ( div.firstChild && div.firstChild.namespaceURI ) == svgURI; - return supports; - } - return checkSupport; -})(); - -// -------------------------- PrevNextButton -------------------------- // - -function PrevNextButton( direction, parent ) { - this.direction = direction; - this.parent = parent; - this._create(); -} - -PrevNextButton.prototype = new TapListener(); - -PrevNextButton.prototype._create = function() { - // properties - this.isEnabled = true; - this.isPrevious = this.direction == -1; - var leftDirection = this.parent.options.rightToLeft ? 1 : -1; - this.isLeft = this.direction == leftDirection; - - var element = this.element = document.createElement('button'); - element.className = 'flickity-prev-next-button'; - element.className += this.isPrevious ? ' previous' : ' next'; - // prevent button from submitting form http://stackoverflow.com/a/10836076/182183 - element.setAttribute( 'type', 'button' ); - Flickity.setUnselectable( element ); - // create arrow - if ( supportsInlineSVG() ) { - var svg = this.createSVG(); - element.appendChild( svg ); - } else { - // SVG not supported, set button text - this.setArrowText(); - element.className += ' no-svg'; - } - // update on select - var _this = this; - this.onCellSelect = function() { - _this.update(); - }; - this.parent.on( 'cellSelect', this.onCellSelect ); - // tap - this.on( 'tap', this.onTap ); - // pointerDown - this.on( 'pointerDown', function onPointerDown( button, event ) { - _this.parent.childUIPointerDown( event ); - }); -}; - -PrevNextButton.prototype.activate = function() { - this.update(); - this.bindTap( this.element ); - // click events from keyboard - eventie.bind( this.element, 'click', this ); - // add to DOM - this.parent.element.appendChild( this.element ); -}; - -PrevNextButton.prototype.deactivate = function() { - // remove from DOM - this.parent.element.removeChild( this.element ); - // do regular TapListener destroy - TapListener.prototype.destroy.call( this ); - // click events from keyboard - eventie.unbind( this.element, 'click', this ); -}; - -PrevNextButton.prototype.createSVG = function() { - var svg = document.createElementNS( svgURI, 'svg'); - svg.setAttribute( 'viewBox', '0 0 100 100' ); - var path = document.createElementNS( svgURI, 'path'); - path.setAttribute( 'd', 'M 50,0 L 60,10 L 20,50 L 60,90 L 50,100 L 0,50 Z' ); - path.setAttribute( 'class', 'arrow' ); - // adjust arrow - var arrowTransform = this.isLeft ? 'translate(15,0)' : - 'translate(85,100) rotate(180)'; - path.setAttribute( 'transform', arrowTransform ); - svg.appendChild( path ); - return svg; -}; - -PrevNextButton.prototype.setArrowText = function() { - var parentOptions = this.parent.options; - var arrowText = this.isLeft ? parentOptions.leftArrowText : parentOptions.rightArrowText; - utils.setText( this.element, arrowText ); -}; - -PrevNextButton.prototype.onTap = function() { - if ( !this.isEnabled ) { - return; - } - this.parent.uiChange(); - var method = this.isPrevious ? 'previous' : 'next'; - this.parent[ method ](); -}; - -PrevNextButton.prototype.handleEvent = utils.handleEvent; - -PrevNextButton.prototype.onclick = function() { - // only allow clicks from keyboard - var focused = document.activeElement; - if ( focused && focused == this.element ) { - this.onTap(); - } -}; - -// ----- ----- // - -PrevNextButton.prototype.enable = function() { - if ( this.isEnabled ) { - return; - } - this.element.disabled = false; - this.isEnabled = true; -}; - -PrevNextButton.prototype.disable = function() { - if ( !this.isEnabled ) { - return; - } - this.element.disabled = true; - this.isEnabled = false; -}; - -PrevNextButton.prototype.update = function() { - // index of first or last cell, if previous or next - var cells = this.parent.cells; - // enable is wrapAround and at least 2 cells - if ( this.parent.options.wrapAround && cells.length > 1 ) { - this.enable(); - return; - } - var lastIndex = cells.length ? cells.length - 1 : 0; - var boundIndex = this.isPrevious ? 0 : lastIndex; - var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable'; - this[ method ](); -}; - -PrevNextButton.prototype.destroy = function() { - this.deactivate(); -}; - -// -------------------------- Flickity prototype -------------------------- // - -utils.extend( Flickity.defaults, { - prevNextButtons: true, - leftArrowText: '‹', - rightArrowText: '›' -}); - -Flickity.createMethods.push('_createPrevNextButtons'); - -Flickity.prototype._createPrevNextButtons = function() { - if ( !this.options.prevNextButtons ) { - return; - } - - this.prevButton = new PrevNextButton( -1, this ); - this.nextButton = new PrevNextButton( 1, this ); - - this.on( 'activate', this.activatePrevNextButtons ); -}; - -Flickity.prototype.activatePrevNextButtons = function() { - this.prevButton.activate(); - this.nextButton.activate(); - this.on( 'deactivate', this.deactivatePrevNextButtons ); -}; - -Flickity.prototype.deactivatePrevNextButtons = function() { - this.prevButton.deactivate(); - this.nextButton.deactivate(); - this.off( 'deactivate', this.deactivatePrevNextButtons ); -}; - -// -------------------------- -------------------------- // - -Flickity.PrevNextButton = PrevNextButton; - -return PrevNextButton; - -})); - -( function( window, factory ) { - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'flickity/js/page-dots',[ - 'eventie/eventie', - './flickity', - 'tap-listener/tap-listener', - 'fizzy-ui-utils/utils' - ], function( eventie, Flickity, TapListener, utils ) { - return factory( window, eventie, Flickity, TapListener, utils ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('eventie'), - require('./flickity'), - require('tap-listener'), - require('fizzy-ui-utils') - ); - } else { - // browser global - window.Flickity = window.Flickity || {}; - window.Flickity.PageDots = factory( - window, - window.eventie, - window.Flickity, - window.TapListener, - window.fizzyUIUtils - ); - } - -}( window, function factory( window, eventie, Flickity, TapListener, utils ) { - -// -------------------------- PageDots -------------------------- // - - - -function PageDots( parent ) { - this.parent = parent; - this._create(); -} - -PageDots.prototype = new TapListener(); - -PageDots.prototype._create = function() { - // create holder element - this.holder = document.createElement('ol'); - this.holder.className = 'flickity-page-dots'; - Flickity.setUnselectable( this.holder ); - // create dots, array of elements - this.dots = []; - // update on select - var _this = this; - this.onCellSelect = function() { - _this.updateSelected(); - }; - this.parent.on( 'cellSelect', this.onCellSelect ); - // tap - this.on( 'tap', this.onTap ); - // pointerDown - this.on( 'pointerDown', function onPointerDown( button, event ) { - _this.parent.childUIPointerDown( event ); - }); -}; - -PageDots.prototype.activate = function() { - this.setDots(); - this.updateSelected(); - this.bindTap( this.holder ); - // add to DOM - this.parent.element.appendChild( this.holder ); -}; - -PageDots.prototype.deactivate = function() { - // remove from DOM - this.parent.element.removeChild( this.holder ); - TapListener.prototype.destroy.call( this ); -}; - -PageDots.prototype.setDots = function() { - // get difference between number of cells and number of dots - var delta = this.parent.cells.length - this.dots.length; - if ( delta > 0 ) { - this.addDots( delta ); - } else if ( delta < 0 ) { - this.removeDots( -delta ); - } -}; - -PageDots.prototype.addDots = function( count ) { - var fragment = document.createDocumentFragment(); - var newDots = []; - while ( count ) { - var dot = document.createElement('li'); - dot.className = 'dot'; - fragment.appendChild( dot ); - newDots.push( dot ); - count--; - } - this.holder.appendChild( fragment ); - this.dots = this.dots.concat( newDots ); -}; - -PageDots.prototype.removeDots = function( count ) { - // remove from this.dots collection - var removeDots = this.dots.splice( this.dots.length - count, count ); - // remove from DOM - for ( var i=0, len = removeDots.length; i < len; i++ ) { - var dot = removeDots[i]; - this.holder.removeChild( dot ); - } -}; - -PageDots.prototype.updateSelected = function() { - // remove selected class on previous - if ( this.selectedDot ) { - this.selectedDot.className = 'dot'; - } - // don't proceed if no dots - if ( !this.dots.length ) { - return; - } - this.selectedDot = this.dots[ this.parent.selectedIndex ]; - this.selectedDot.className = 'dot is-selected'; -}; - -PageDots.prototype.onTap = function( event ) { - var target = event.target; - // only care about dot clicks - if ( target.nodeName != 'LI' ) { - return; - } - - this.parent.uiChange(); - var index = utils.indexOf( this.dots, target ); - this.parent.select( index ); -}; - -PageDots.prototype.destroy = function() { - this.deactivate(); -}; - -Flickity.PageDots = PageDots; - -// -------------------------- Flickity -------------------------- // - -utils.extend( Flickity.defaults, { - pageDots: true -}); - -Flickity.createMethods.push('_createPageDots'); - -Flickity.prototype._createPageDots = function() { - if ( !this.options.pageDots ) { - return; - } - this.pageDots = new PageDots( this ); - this.on( 'activate', this.activatePageDots ); - this.on( 'cellAddedRemoved', this.onCellAddedRemovedPageDots ); - this.on( 'deactivate', this.deactivatePageDots ); -}; - -Flickity.prototype.activatePageDots = function() { - this.pageDots.activate(); -}; - -Flickity.prototype.onCellAddedRemovedPageDots = function() { - this.pageDots.setDots(); -}; - -Flickity.prototype.deactivatePageDots = function() { - this.pageDots.deactivate(); -}; - -// ----- ----- // - -Flickity.PageDots = PageDots; - -return PageDots; - -})); - -( function( window, factory ) { - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'flickity/js/player',[ - 'eventEmitter/EventEmitter', - 'eventie/eventie', - './flickity' - ], function( EventEmitter, eventie, Flickity ) { - return factory( EventEmitter, eventie, Flickity ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - require('wolfy87-eventemitter'), - require('eventie'), - require('./flickity') - ); - } else { - // browser global - window.Flickity = window.Flickity || {}; - window.Flickity.Player = factory( - window.EventEmitter, - window.eventie, - window.Flickity - ); - } - -}( window, function factory( EventEmitter, eventie, Flickity ) { - - - -// -------------------------- Page Visibility -------------------------- // -// https://developer.mozilla.org/en-US/docs/Web/Guide/User_experience/Using_the_Page_Visibility_API - -var hiddenProperty, visibilityEvent; -if ( 'hidden' in document ) { - hiddenProperty = 'hidden'; - visibilityEvent = 'visibilitychange'; -} else if ( 'webkitHidden' in document ) { - hiddenProperty = 'webkitHidden'; - visibilityEvent = 'webkitvisibilitychange'; -} - -// -------------------------- Player -------------------------- // - -function Player( parent ) { - this.isPlaying = false; - this.parent = parent; - // visibility change event handler - if ( visibilityEvent ) { - var _this = this; - this.onVisibilityChange = function() { - _this.visibilityChange(); - }; - } -} - -Player.prototype = new EventEmitter(); - -// start play -Player.prototype.play = function() { - this.isPlaying = true; - // playing kills pauses - delete this.isPaused; - // listen to visibility change - if ( visibilityEvent ) { - document.addEventListener( visibilityEvent, this.onVisibilityChange, false ); - } - // start ticking - this.tick(); -}; - -Player.prototype.tick = function() { - // do not tick if paused or not playing - if ( !this.isPlaying || this.isPaused ) { - return; - } - // keep track of when .tick() - this.tickTime = new Date(); - var time = this.parent.options.autoPlay; - // default to 3 seconds - time = typeof time == 'number' ? time : 3000; - var _this = this; - this.timeout = setTimeout( function() { - _this.parent.next( true ); - _this.tick(); - }, time ); -}; - -Player.prototype.stop = function() { - this.isPlaying = false; - // stopping kills pauses - delete this.isPaused; - this.clear(); - // remove visibility change event - if ( visibilityEvent ) { - document.removeEventListener( visibilityEvent, this.onVisibilityChange, false ); - } -}; - -Player.prototype.clear = function() { - clearTimeout( this.timeout ); -}; - -Player.prototype.pause = function() { - if ( this.isPlaying ) { - this.isPaused = true; - this.clear(); - } -}; - -Player.prototype.unpause = function() { - // re-start play if in unpaused state - if ( this.isPaused ) { - this.play(); - } -}; - -// pause if page visibility is hidden, unpause if visible -Player.prototype.visibilityChange = function() { - var isHidden = document[ hiddenProperty ]; - this[ isHidden ? 'pause' : 'unpause' ](); -}; - -// -------------------------- Flickity -------------------------- // - -// utils.extend( Flickity.defaults, { -// autoPlay: false -// }); - -Flickity.createMethods.push('_createPlayer'); - -Flickity.prototype._createPlayer = function() { - this.player = new Player( this ); - - this.on( 'activate', this.activatePlayer ); - this.on( 'uiChange', this.stopPlayer ); - this.on( 'pointerDown', this.stopPlayer ); - this.on( 'deactivate', this.deactivatePlayer ); -}; - -Flickity.prototype.activatePlayer = function() { - if ( !this.options.autoPlay ) { - return; - } - this.player.play(); - eventie.bind( this.element, 'mouseenter', this ); - this.isMouseenterBound = true; -}; - -Flickity.prototype.stopPlayer = function() { - this.player.stop(); -}; - -Flickity.prototype.deactivatePlayer = function() { - this.player.stop(); - if ( this.isMouseenterBound ) { - eventie.unbind( this.element, 'mouseenter', this ); - delete this.isMouseenterBound; - } -}; - -// ----- mouseenter/leave ----- // - -// pause auto-play on hover -Flickity.prototype.onmouseenter = function() { - this.player.pause(); - eventie.bind( this.element, 'mouseleave', this ); -}; - -// resume auto-play on hover off -Flickity.prototype.onmouseleave = function() { - this.player.unpause(); - eventie.unbind( this.element, 'mouseleave', this ); -}; - -// ----- ----- // - -Flickity.Player = Player; - -return Player; - -})); - -( function( window, factory ) { - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'flickity/js/add-remove-cell',[ - './flickity', - 'fizzy-ui-utils/utils' - ], function( Flickity, utils ) { - return factory( window, Flickity, utils ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('./flickity'), - require('fizzy-ui-utils') - ); - } else { - // browser global - window.Flickity = window.Flickity || {}; - window.Flickity = factory( - window, - window.Flickity, - window.fizzyUIUtils - ); - } - -}( window, function factory( window, Flickity, utils ) { - - - -// append cells to a document fragment -function getCellsFragment( cells ) { - var fragment = document.createDocumentFragment(); - for ( var i=0, len = cells.length; i < len; i++ ) { - var cell = cells[i]; - fragment.appendChild( cell.element ); - } - return fragment; -} - -// -------------------------- add/remove cell prototype -------------------------- // - -/** - * Insert, prepend, or append cells - * @param {Element, Array, NodeList} elems - * @param {Integer} index - */ -Flickity.prototype.insert = function( elems, index ) { - var cells = this._makeCells( elems ); - if ( !cells || !cells.length ) { - return; - } - var len = this.cells.length; - // default to append - index = index === undefined ? len : index; - // add cells with document fragment - var fragment = getCellsFragment( cells ); - // append to slider - var isAppend = index == len; - if ( isAppend ) { - this.slider.appendChild( fragment ); - } else { - var insertCellElement = this.cells[ index ].element; - this.slider.insertBefore( fragment, insertCellElement ); - } - // add to this.cells - if ( index === 0 ) { - // prepend, add to start - this.cells = cells.concat( this.cells ); - } else if ( isAppend ) { - // append, add to end - this.cells = this.cells.concat( cells ); - } else { - // insert in this.cells - var endCells = this.cells.splice( index, len - index ); - this.cells = this.cells.concat( cells ).concat( endCells ); - } - - this._sizeCells( cells ); - - var selectedIndexDelta = index > this.selectedIndex ? 0 : cells.length; - this._cellAddedRemoved( index, selectedIndexDelta ); -}; - -Flickity.prototype.append = function( elems ) { - this.insert( elems, this.cells.length ); -}; - -Flickity.prototype.prepend = function( elems ) { - this.insert( elems, 0 ); -}; - -/** - * Remove cells - * @param {Element, Array, NodeList} elems - */ -Flickity.prototype.remove = function( elems ) { - var cells = this.getCells( elems ); - var selectedIndexDelta = 0; - var i, len, cell; - // calculate selectedIndexDelta, easier if done in seperate loop - for ( i=0, len = cells.length; i < len; i++ ) { - cell = cells[i]; - var wasBefore = utils.indexOf( this.cells, cell ) < this.selectedIndex; - selectedIndexDelta -= wasBefore ? 1 : 0; - } - - for ( i=0, len = cells.length; i < len; i++ ) { - cell = cells[i]; - cell.remove(); - // remove item from collection - utils.removeFrom( this.cells, cell ); - } - - if ( cells.length ) { - // update stuff - this._cellAddedRemoved( 0, selectedIndexDelta ); - } -}; - -// updates when cells are added or removed -Flickity.prototype._cellAddedRemoved = function( changedCellIndex, selectedIndexDelta ) { - selectedIndexDelta = selectedIndexDelta || 0; - this.selectedIndex += selectedIndexDelta; - this.selectedIndex = Math.max( 0, Math.min( this.cells.length - 1, this.selectedIndex ) ); - - this.emitEvent( 'cellAddedRemoved', [ changedCellIndex, selectedIndexDelta ] ); - this.cellChange( changedCellIndex ); -}; - -/** - * logic to be run after a cell's size changes - * @param {Element} elem - cell's element - */ -Flickity.prototype.cellSizeChange = function( elem ) { - var cell = this.getCell( elem ); - if ( !cell ) { - return; - } - cell.getSize(); - - var index = utils.indexOf( this.cells, cell ); - this.cellChange( index ); -}; - -/** - * logic any time a cell is changed: added, removed, or size changed - * @param {Integer} changedCellIndex - index of the changed cell, optional - */ -Flickity.prototype.cellChange = function( changedCellIndex ) { - // TODO maybe always size all cells unless isSkippingSizing - // size all cells if necessary - // if ( !isSkippingSizing ) { - // this._sizeCells( this.cells ); - // } - - changedCellIndex = changedCellIndex || 0; - - this._positionCells( changedCellIndex ); - this._getWrapShiftCells(); - this.setGallerySize(); - // position slider - if ( this.options.freeScroll ) { - this.positionSlider(); - } else { - this.positionSliderAtSelected(); - this.select( this.selectedIndex ); - } -}; - -// ----- ----- // - -return Flickity; - -})); - -/** - * Flickity index - * used for AMD and CommonJS exports - */ - -( function( window, factory ) { - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'flickity/js/index',[ - './flickity', - './drag', - './prev-next-button', - './page-dots', - './player', - './add-remove-cell' - ], factory ); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - require('./flickity'), - require('./drag'), - require('./prev-next-button'), - require('./page-dots'), - require('./player'), - require('./add-remove-cell') - ); - } - -})( window, function factory( Flickity ) { - /*jshint strict: false*/ - return Flickity; -}); - -/*! - * Flickity asNavFor v1.0.1 - * enable asNavFor for Flickity - */ - -/*jshint browser: true, undef: true, unused: true, strict: true*/ - -( function( window, factory ) { - /*global define: false, module: false, require: false */ - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'flickity-as-nav-for/as-nav-for',[ - 'classie/classie', - 'flickity/js/index', - 'fizzy-ui-utils/utils' - ], function( classie, Flickity, utils ) { - return factory( window, classie, Flickity, utils ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('desandro-classie'), - require('flickity'), - require('fizzy-ui-utils') - ); - } else { - // browser global - window.Flickity = factory( - window, - window.classie, - window.Flickity, - window.fizzyUIUtils - ); - } - -}( window, function factory( window, classie, Flickity, utils ) { - - - -// -------------------------- asNavFor prototype -------------------------- // - -// Flickity.defaults.asNavFor = null; - -Flickity.createMethods.push('_createAsNavFor'); - -Flickity.prototype._createAsNavFor = function() { - this.on( 'activate', this.activateAsNavFor ); - this.on( 'deactivate', this.deactivateAsNavFor ); - this.on( 'destroy', this.destroyAsNavFor ); - - var asNavForOption = this.options.asNavFor; - if ( !asNavForOption ) { - return; - } - // HACK do async, give time for other flickity to be initalized - var _this = this; - setTimeout( function initNavCompanion() { - _this.setNavCompanion( asNavForOption ); - }); -}; - -Flickity.prototype.setNavCompanion = function( elem ) { - elem = utils.getQueryElement( elem ); - var companion = Flickity.data( elem ); - // stop if no companion or companion is self - if ( !companion || companion == this ) { - return; - } - - this.navCompanion = companion; - // companion select - var _this = this; - this.onNavCompanionSelect = function() { - _this.navCompanionSelect(); - }; - companion.on( 'cellSelect', this.onNavCompanionSelect ); - // click - this.on( 'staticClick', this.onNavStaticClick ); - - this.navCompanionSelect(); -}; - -Flickity.prototype.navCompanionSelect = function() { - if ( !this.navCompanion ) { - return; - } - var index = this.navCompanion.selectedIndex; - this.select( index ); - // set nav selected class - this.removeNavSelectedElement(); - // stop if companion has more cells than this one - if ( this.selectedIndex != index ) { - return; - } - this.navSelectedElement = this.cells[ index ].element; - classie.add( this.navSelectedElement, 'is-nav-selected' ); -}; - -Flickity.prototype.activateAsNavFor = function() { - this.navCompanionSelect(); -}; - -Flickity.prototype.removeNavSelectedElement = function() { - if ( !this.navSelectedElement ) { - return; - } - classie.remove( this.navSelectedElement, 'is-nav-selected' ); - delete this.navSelectedElement; -}; - -Flickity.prototype.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) { - if ( typeof cellIndex == 'number' ) { - this.navCompanion.select( cellIndex ); - } -}; - -Flickity.prototype.deactivateAsNavFor = function() { - this.removeNavSelectedElement(); -}; - -Flickity.prototype.destroyAsNavFor = function() { - if ( !this.navCompanion ) { - return; - } - this.navCompanion.off( 'cellSelect', this.onNavCompanionSelect ); - this.off( 'staticClick', this.onNavStaticClick ); - delete this.navCompanion; -}; - -// ----- ----- // - -return Flickity; - -})); - -/*! - * imagesLoaded v3.1.8 - * JavaScript is all like "You images are done yet or what?" - * MIT License - */ - -( function( window, factory ) { - // universal module definition - - /*global define: false, module: false, require: false */ - - if ( typeof define === 'function' && define.amd ) { - // AMD - define( 'imagesloaded/imagesloaded',[ - 'eventEmitter/EventEmitter', - 'eventie/eventie' - ], function( EventEmitter, eventie ) { - return factory( window, EventEmitter, eventie ); - }); - } else if ( typeof exports === 'object' ) { - // CommonJS - module.exports = factory( - window, - require('wolfy87-eventemitter'), - require('eventie') - ); - } else { - // browser global - window.imagesLoaded = factory( - window, - window.EventEmitter, - window.eventie - ); - } - -})( window, - -// -------------------------- factory -------------------------- // - -function factory( window, EventEmitter, eventie ) { - - - -var $ = window.jQuery; -var console = window.console; -var hasConsole = typeof console !== 'undefined'; - -// -------------------------- helpers -------------------------- // - -// extend objects -function extend( a, b ) { - for ( var prop in b ) { - a[ prop ] = b[ prop ]; - } - return a; -} - -var objToString = Object.prototype.toString; -function isArray( obj ) { - return objToString.call( obj ) === '[object Array]'; -} - -// turn element or nodeList into an array -function makeArray( obj ) { - var ary = []; - if ( isArray( obj ) ) { - // use object if already an array - ary = obj; - } else if ( typeof obj.length === 'number' ) { - // convert nodeList to array - for ( var i=0, len = obj.length; i < len; i++ ) { - ary.push( obj[i] ); - } - } else { - // array of single index - ary.push( obj ); - } - return ary; -} - - // -------------------------- imagesLoaded -------------------------- // - - /** - * @param {Array, Element, NodeList, String} elem - * @param {Object or Function} options - if function, use as callback - * @param {Function} onAlways - callback function - */ - function ImagesLoaded( elem, options, onAlways ) { - // coerce ImagesLoaded() without new, to be new ImagesLoaded() - if ( !( this instanceof ImagesLoaded ) ) { - return new ImagesLoaded( elem, options ); - } - // use elem as selector string - if ( typeof elem === 'string' ) { - elem = document.querySelectorAll( elem ); - } - - this.elements = makeArray( elem ); - this.options = extend( {}, this.options ); - - if ( typeof options === 'function' ) { - onAlways = options; - } else { - extend( this.options, options ); - } - - if ( onAlways ) { - this.on( 'always', onAlways ); - } - - this.getImages(); - - if ( $ ) { - // add jQuery Deferred object - this.jqDeferred = new $.Deferred(); - } - - // HACK check async to allow time to bind listeners - var _this = this; - setTimeout( function() { - _this.check(); - }); - } - - ImagesLoaded.prototype = new EventEmitter(); - - ImagesLoaded.prototype.options = {}; - - ImagesLoaded.prototype.getImages = function() { - this.images = []; - - // filter & find items if we have an item selector - for ( var i=0, len = this.elements.length; i < len; i++ ) { - var elem = this.elements[i]; - // filter siblings - if ( elem.nodeName === 'IMG' ) { - this.addImage( elem ); - } - // find children - // no non-element nodes, #143 - var nodeType = elem.nodeType; - if ( !nodeType || !( nodeType === 1 || nodeType === 9 || nodeType === 11 ) ) { - continue; - } - var childElems = elem.querySelectorAll('img'); - // concat childElems to filterFound array - for ( var j=0, jLen = childElems.length; j < jLen; j++ ) { - var img = childElems[j]; - this.addImage( img ); - } - } - }; - - /** - * @param {Image} img - */ - ImagesLoaded.prototype.addImage = function( img ) { - var loadingImage = new LoadingImage( img ); - this.images.push( loadingImage ); - }; - - ImagesLoaded.prototype.check = function() { - var _this = this; - var checkedCount = 0; - var length = this.images.length; - this.hasAnyBroken = false; - // complete if no images - if ( !length ) { - this.complete(); - return; - } - - function onConfirm( image, message ) { - if ( _this.options.debug && hasConsole ) { - console.log( 'confirm', image, message ); - } - - _this.progress( image ); - checkedCount++; - if ( checkedCount === length ) { - _this.complete(); - } - return true; // bind once - } - - for ( var i=0; i < length; i++ ) { - var loadingImage = this.images[i]; - loadingImage.on( 'confirm', onConfirm ); - loadingImage.check(); - } - }; - - ImagesLoaded.prototype.progress = function( image ) { - this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded; - // HACK - Chrome triggers event before object properties have changed. #83 - var _this = this; - setTimeout( function() { - _this.emit( 'progress', _this, image ); - if ( _this.jqDeferred && _this.jqDeferred.notify ) { - _this.jqDeferred.notify( _this, image ); - } - }); - }; - - ImagesLoaded.prototype.complete = function() { - var eventName = this.hasAnyBroken ? 'fail' : 'done'; - this.isComplete = true; - var _this = this; - // HACK - another setTimeout so that confirm happens after progress - setTimeout( function() { - _this.emit( eventName, _this ); - _this.emit( 'always', _this ); - if ( _this.jqDeferred ) { - var jqMethod = _this.hasAnyBroken ? 'reject' : 'resolve'; - _this.jqDeferred[ jqMethod ]( _this ); - } - }); - }; - - // -------------------------- jquery -------------------------- // - - if ( $ ) { - $.fn.imagesLoaded = function( options, callback ) { - var instance = new ImagesLoaded( this, options, callback ); - return instance.jqDeferred.promise( $(this) ); - }; - } - - - // -------------------------- -------------------------- // - - function LoadingImage( img ) { - this.img = img; - } - - LoadingImage.prototype = new EventEmitter(); - - LoadingImage.prototype.check = function() { - // first check cached any previous images that have same src - var resource = cache[ this.img.src ] || new Resource( this.img.src ); - if ( resource.isConfirmed ) { - this.confirm( resource.isLoaded, 'cached was confirmed' ); - return; - } - - // If complete is true and browser supports natural sizes, - // try to check for image status manually. - if ( this.img.complete && this.img.naturalWidth !== undefined ) { - // report based on naturalWidth - this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' ); - return; - } - - // If none of the checks above matched, simulate loading on detached element. - var _this = this; - resource.on( 'confirm', function( resrc, message ) { - _this.confirm( resrc.isLoaded, message ); - return true; - }); - - resource.check(); - }; - - LoadingImage.prototype.confirm = function( isLoaded, message ) { - this.isLoaded = isLoaded; - this.emit( 'confirm', this, message ); - }; - - // -------------------------- Resource -------------------------- // - - // Resource checks each src, only once - // separate class from LoadingImage to prevent memory leaks. See #115 - - var cache = {}; - - function Resource( src ) { - this.src = src; - // add to cache - cache[ src ] = this; - } - - Resource.prototype = new EventEmitter(); - - Resource.prototype.check = function() { - // only trigger checking once - if ( this.isChecked ) { - return; - } - // simulate loading on detached element - var proxyImage = new Image(); - eventie.bind( proxyImage, 'load', this ); - eventie.bind( proxyImage, 'error', this ); - proxyImage.src = this.src; - // set flag - this.isChecked = true; - }; - - // ----- events ----- // - - // trigger specified handler for event type - Resource.prototype.handleEvent = function( event ) { - var method = 'on' + event.type; - if ( this[ method ] ) { - this[ method ]( event ); - } - }; - - Resource.prototype.onload = function( event ) { - this.confirm( true, 'onload' ); - this.unbindProxyEvents( event ); - }; - - Resource.prototype.onerror = function( event ) { - this.confirm( false, 'onerror' ); - this.unbindProxyEvents( event ); - }; - - // ----- confirm ----- // - - Resource.prototype.confirm = function( isLoaded, message ) { - this.isConfirmed = true; - this.isLoaded = isLoaded; - this.emit( 'confirm', this, message ); - }; - - Resource.prototype.unbindProxyEvents = function( event ) { - eventie.unbind( event.target, 'load', this ); - eventie.unbind( event.target, 'error', this ); - }; - - // ----- ----- // - - return ImagesLoaded; - -}); - -/*! - * Flickity imagesLoaded v1.0.0 - * enables imagesLoaded option for Flickity - */ - -/*jshint browser: true, strict: true, undef: true, unused: true */ - -( function( window, factory ) { - /*global define: false, module: false, require: false */ - - // universal module definition - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( [ - 'flickity/js/index', - 'imagesloaded/imagesloaded' - ], function( Flickity, imagesLoaded ) { - return factory( window, Flickity, imagesLoaded ); - }); - } else if ( typeof exports == 'object' ) { - // CommonJS - module.exports = factory( - window, - require('flickity'), - require('imagesloaded') - ); - } else { - // browser global - window.Flickity = factory( - window, - window.Flickity, - window.imagesLoaded - ); - } - -}( window, function factory( window, Flickity, imagesLoaded ) { - - -Flickity.createMethods.push('_createImagesLoaded'); - -Flickity.prototype._createImagesLoaded = function() { - this.on( 'activate', this.imagesLoaded ); -}; - -Flickity.prototype.imagesLoaded = function() { - if ( !this.options.imagesLoaded ) { - return; - } - var _this = this; - function onImagesLoadedProgress( instance, image ) { - var cell = _this.getParentCell( image.img ); - _this.cellSizeChange( cell && cell.element ); - } - this.loader = imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress ); -}; - -return Flickity; - -})); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/iscroll.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/iscroll.js deleted file mode 100755 index 8bd2b8da..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/iscroll.js +++ /dev/null @@ -1,2011 +0,0 @@ -/*! iScroll v5.1.3 ~ (c) 2008-2014 Matteo Spinelli ~ http://cubiq.org/license */ -(function (window, document, Math) { -var rAF = window.requestAnimationFrame || - window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame || - window.msRequestAnimationFrame || - function (callback) { window.setTimeout(callback, 1000 / 60); }; - -var utils = (function () { - var me = {}; - - var _elementStyle = document.createElement('div').style; - var _vendor = (function () { - var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'], - transform, - i = 0, - l = vendors.length; - - for ( ; i < l; i++ ) { - transform = vendors[i] + 'ransform'; - if ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1); - } - - return false; - })(); - - function _prefixStyle (style) { - if ( _vendor === false ) return false; - if ( _vendor === '' ) return style; - return _vendor + style.charAt(0).toUpperCase() + style.substr(1); - } - - me.getTime = Date.now || function getTime () { return new Date().getTime(); }; - - me.extend = function (target, obj) { - for ( var i in obj ) { - target[i] = obj[i]; - } - }; - - me.addEvent = function (el, type, fn, capture) { - el.addEventListener(type, fn, !!capture); - }; - - me.removeEvent = function (el, type, fn, capture) { - el.removeEventListener(type, fn, !!capture); - }; - - me.prefixPointerEvent = function (pointerEvent) { - return window.MSPointerEvent ? - 'MSPointer' + pointerEvent.charAt(9).toUpperCase() + pointerEvent.substr(10): - pointerEvent; - }; - - me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) { - var distance = current - start, - speed = Math.abs(distance) / time, - destination, - duration; - - deceleration = deceleration === undefined ? 0.0006 : deceleration; - - destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 ); - duration = speed / deceleration; - - if ( destination < lowerMargin ) { - destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin; - distance = Math.abs(destination - current); - duration = distance / speed; - } else if ( destination > 0 ) { - destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0; - distance = Math.abs(current) + destination; - duration = distance / speed; - } - - return { - destination: Math.round(destination), - duration: duration - }; - }; - - var _transform = _prefixStyle('transform'); - - me.extend(me, { - hasTransform: _transform !== false, - hasPerspective: _prefixStyle('perspective') in _elementStyle, - hasTouch: 'ontouchstart' in window, - hasPointer: window.PointerEvent || window.MSPointerEvent, // IE10 is prefixed - hasTransition: _prefixStyle('transition') in _elementStyle - }); - - // This should find all Android browsers lower than build 535.19 (both stock browser and webview) - me.isBadAndroid = /Android /.test(window.navigator.appVersion) && !(/Chrome\/\d/.test(window.navigator.appVersion)); - - me.extend(me.style = {}, { - transform: _transform, - transitionTimingFunction: _prefixStyle('transitionTimingFunction'), - transitionDuration: _prefixStyle('transitionDuration'), - transitionDelay: _prefixStyle('transitionDelay'), - transformOrigin: _prefixStyle('transformOrigin') - }); - - me.hasClass = function (e, c) { - var re = new RegExp("(^|\\s)" + c + "(\\s|$)"); - return re.test(e.className); - }; - - me.addClass = function (e, c) { - if ( me.hasClass(e, c) ) { - return; - } - - var newclass = e.className.split(' '); - newclass.push(c); - e.className = newclass.join(' '); - }; - - me.removeClass = function (e, c) { - if ( !me.hasClass(e, c) ) { - return; - } - - var re = new RegExp("(^|\\s)" + c + "(\\s|$)", 'g'); - e.className = e.className.replace(re, ' '); - }; - - me.offset = function (el) { - var left = -el.offsetLeft, - top = -el.offsetTop; - - // jshint -W084 - while (el = el.offsetParent) { - left -= el.offsetLeft; - top -= el.offsetTop; - } - // jshint +W084 - - return { - left: left, - top: top - }; - }; - - me.preventDefaultException = function (el, exceptions) { - for ( var i in exceptions ) { - if ( exceptions[i].test(el[i]) ) { - return true; - } - } - - return false; - }; - - me.extend(me.eventType = {}, { - touchstart: 1, - touchmove: 1, - touchend: 1, - - mousedown: 2, - mousemove: 2, - mouseup: 2, - - pointerdown: 3, - pointermove: 3, - pointerup: 3, - - MSPointerDown: 3, - MSPointerMove: 3, - MSPointerUp: 3 - }); - - me.extend(me.ease = {}, { - quadratic: { - style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)', - fn: function (k) { - return k * ( 2 - k ); - } - }, - circular: { - style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', // Not properly "circular" but this looks better, it should be (0.075, 0.82, 0.165, 1) - fn: function (k) { - return Math.sqrt( 1 - ( --k * k ) ); - } - }, - back: { - style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)', - fn: function (k) { - var b = 4; - return ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1; - } - }, - bounce: { - style: '', - fn: function (k) { - if ( ( k /= 1 ) < ( 1 / 2.75 ) ) { - return 7.5625 * k * k; - } else if ( k < ( 2 / 2.75 ) ) { - return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75; - } else if ( k < ( 2.5 / 2.75 ) ) { - return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375; - } else { - return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375; - } - } - }, - elastic: { - style: '', - fn: function (k) { - var f = 0.22, - e = 0.4; - - if ( k === 0 ) { return 0; } - if ( k == 1 ) { return 1; } - - return ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 ); - } - } - }); - - me.tap = function (e, eventName) { - var ev = document.createEvent('Event'); - ev.initEvent(eventName, true, true); - ev.pageX = e.pageX; - ev.pageY = e.pageY; - e.target.dispatchEvent(ev); - }; - - me.click = function (e) { - var target = e.target, - ev; - - if ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) { - ev = document.createEvent('MouseEvents'); - ev.initMouseEvent('click', true, true, e.view, 1, - target.screenX, target.screenY, target.clientX, target.clientY, - e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, - 0, null); - - ev._constructed = true; - target.dispatchEvent(ev); - } - }; - - return me; -})(); - -function IScroll (el, options) { - this.wrapper = typeof el == 'string' ? document.querySelector(el) : el; - this.scroller = this.wrapper.children[0]; - this.scrollerStyle = this.scroller.style; // cache style for better performance - - this.options = { - - resizeScrollbars: true, - - mouseWheelSpeed: 20, - - snapThreshold: 0.334, - -// INSERT POINT: OPTIONS - - startX: 0, - startY: 0, - scrollY: true, - directionLockThreshold: 5, - momentum: true, - - bounce: true, - bounceTime: 600, - bounceEasing: '', - - preventDefault: true, - preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ }, - - HWCompositing: true, - useTransition: true, - useTransform: true - }; - - for ( var i in options ) { - this.options[i] = options[i]; - } - - // Normalize options - this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : ''; - - this.options.useTransition = utils.hasTransition && this.options.useTransition; - this.options.useTransform = utils.hasTransform && this.options.useTransform; - - this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough; - this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault; - - // If you want eventPassthrough I have to lock one of the axes - this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY; - this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX; - - // With eventPassthrough we also need lockDirection mechanism - this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough; - this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold; - - this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing; - - this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling; - - if ( this.options.tap === true ) { - this.options.tap = 'tap'; - } - - if ( this.options.shrinkScrollbars == 'scale' ) { - this.options.useTransition = false; - } - - this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1; - -// INSERT POINT: NORMALIZATION - - // Some defaults - this.x = 0; - this.y = 0; - this.directionX = 0; - this.directionY = 0; - this._events = {}; - -// INSERT POINT: DEFAULTS - - this._init(); - this.refresh(); - - this.scrollTo(this.options.startX, this.options.startY); - this.enable(); -} - -IScroll.prototype = { - version: '5.1.3', - - _init: function () { - this._initEvents(); - - if ( this.options.scrollbars || this.options.indicators ) { - this._initIndicators(); - } - - if ( this.options.mouseWheel ) { - this._initWheel(); - } - - if ( this.options.snap ) { - this._initSnap(); - } - - if ( this.options.keyBindings ) { - this._initKeys(); - } - -// INSERT POINT: _init - - }, - - destroy: function () { - this._initEvents(true); - - this._execEvent('destroy'); - }, - - _transitionEnd: function (e) { - if ( e.target != this.scroller || !this.isInTransition ) { - return; - } - - this._transitionTime(); - if ( !this.resetPosition(this.options.bounceTime) ) { - this.isInTransition = false; - this._execEvent('scrollEnd'); - } - }, - - _start: function (e) { - // React to left mouse button only - if ( utils.eventType[e.type] != 1 ) { - if ( e.button !== 0 ) { - return; - } - } - - if ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) { - return; - } - - if ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) { - e.preventDefault(); - } - - var point = e.touches ? e.touches[0] : e, - pos; - - this.initiated = utils.eventType[e.type]; - this.moved = false; - this.distX = 0; - this.distY = 0; - this.directionX = 0; - this.directionY = 0; - this.directionLocked = 0; - - this._transitionTime(); - - this.startTime = utils.getTime(); - - if ( this.options.useTransition && this.isInTransition ) { - this.isInTransition = false; - pos = this.getComputedPosition(); - this._translate(Math.round(pos.x), Math.round(pos.y)); - this._execEvent('scrollEnd'); - } else if ( !this.options.useTransition && this.isAnimating ) { - this.isAnimating = false; - this._execEvent('scrollEnd'); - } - - this.startX = this.x; - this.startY = this.y; - this.absStartX = this.x; - this.absStartY = this.y; - this.pointX = point.pageX; - this.pointY = point.pageY; - - this._execEvent('beforeScrollStart'); - }, - - _move: function (e) { - if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) { - return; - } - - if ( this.options.preventDefault ) { // increases performance on Android? TODO: check! - e.preventDefault(); - } - - var point = e.touches ? e.touches[0] : e, - deltaX = point.pageX - this.pointX, - deltaY = point.pageY - this.pointY, - timestamp = utils.getTime(), - newX, newY, - absDistX, absDistY; - - this.pointX = point.pageX; - this.pointY = point.pageY; - - this.distX += deltaX; - this.distY += deltaY; - absDistX = Math.abs(this.distX); - absDistY = Math.abs(this.distY); - - // We need to move at least 10 pixels for the scrolling to initiate - if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) { - return; - } - - // If you are scrolling in one direction lock the other - if ( !this.directionLocked && !this.options.freeScroll ) { - if ( absDistX > absDistY + this.options.directionLockThreshold ) { - this.directionLocked = 'h'; // lock horizontally - } else if ( absDistY >= absDistX + this.options.directionLockThreshold ) { - this.directionLocked = 'v'; // lock vertically - } else { - this.directionLocked = 'n'; // no lock - } - } - - if ( this.directionLocked == 'h' ) { - if ( this.options.eventPassthrough == 'vertical' ) { - e.preventDefault(); - } else if ( this.options.eventPassthrough == 'horizontal' ) { - this.initiated = false; - return; - } - - deltaY = 0; - } else if ( this.directionLocked == 'v' ) { - if ( this.options.eventPassthrough == 'horizontal' ) { - e.preventDefault(); - } else if ( this.options.eventPassthrough == 'vertical' ) { - this.initiated = false; - return; - } - - deltaX = 0; - } - - deltaX = this.hasHorizontalScroll ? deltaX : 0; - deltaY = this.hasVerticalScroll ? deltaY : 0; - - newX = this.x + deltaX; - newY = this.y + deltaY; - - // Slow down if outside of the boundaries - if ( newX > 0 || newX < this.maxScrollX ) { - newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX; - } - if ( newY > 0 || newY < this.maxScrollY ) { - newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY; - } - - this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0; - this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0; - - if ( !this.moved ) { - this._execEvent('scrollStart'); - } - - this.moved = true; - - this._translate(newX, newY); - -/* REPLACE START: _move */ - - if ( timestamp - this.startTime > 300 ) { - this.startTime = timestamp; - this.startX = this.x; - this.startY = this.y; - } - -/* REPLACE END: _move */ - - }, - - _end: function (e) { - if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) { - return; - } - - if ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) { - e.preventDefault(); - } - - var point = e.changedTouches ? e.changedTouches[0] : e, - momentumX, - momentumY, - duration = utils.getTime() - this.startTime, - newX = Math.round(this.x), - newY = Math.round(this.y), - distanceX = Math.abs(newX - this.startX), - distanceY = Math.abs(newY - this.startY), - time = 0, - easing = ''; - - this.isInTransition = 0; - this.initiated = 0; - this.endTime = utils.getTime(); - - // reset if we are outside of the boundaries - if ( this.resetPosition(this.options.bounceTime) ) { - return; - } - - this.scrollTo(newX, newY); // ensures that the last position is rounded - - // we scrolled less than 10 pixels - if ( !this.moved ) { - if ( this.options.tap ) { - utils.tap(e, this.options.tap); - } - - if ( this.options.click ) { - utils.click(e); - } - - this._execEvent('scrollCancel'); - return; - } - - if ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) { - this._execEvent('flick'); - return; - } - - // start momentum animation if needed - if ( this.options.momentum && duration < 300 ) { - momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 }; - momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 }; - newX = momentumX.destination; - newY = momentumY.destination; - time = Math.max(momentumX.duration, momentumY.duration); - this.isInTransition = 1; - } - - - if ( this.options.snap ) { - var snap = this._nearestSnap(newX, newY); - this.currentPage = snap; - time = this.options.snapSpeed || Math.max( - Math.max( - Math.min(Math.abs(newX - snap.x), 1000), - Math.min(Math.abs(newY - snap.y), 1000) - ), 300); - newX = snap.x; - newY = snap.y; - - this.directionX = 0; - this.directionY = 0; - easing = this.options.bounceEasing; - } - -// INSERT POINT: _end - - if ( newX != this.x || newY != this.y ) { - // change easing function when scroller goes out of the boundaries - if ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) { - easing = utils.ease.quadratic; - } - - this.scrollTo(newX, newY, time, easing); - return; - } - - this._execEvent('scrollEnd'); - }, - - _resize: function () { - var that = this; - - clearTimeout(this.resizeTimeout); - - this.resizeTimeout = setTimeout(function () { - that.refresh(); - }, this.options.resizePolling); - }, - - resetPosition: function (time) { - var x = this.x, - y = this.y; - - time = time || 0; - - if ( !this.hasHorizontalScroll || this.x > 0 ) { - x = 0; - } else if ( this.x < this.maxScrollX ) { - x = this.maxScrollX; - } - - if ( !this.hasVerticalScroll || this.y > 0 ) { - y = 0; - } else if ( this.y < this.maxScrollY ) { - y = this.maxScrollY; - } - - if ( x == this.x && y == this.y ) { - return false; - } - - this.scrollTo(x, y, time, this.options.bounceEasing); - - return true; - }, - - disable: function () { - this.enabled = false; - }, - - enable: function () { - this.enabled = true; - }, - - refresh: function () { - var rf = this.wrapper.offsetHeight; // Force reflow - - this.wrapperWidth = this.wrapper.clientWidth; - this.wrapperHeight = this.wrapper.clientHeight; - -/* REPLACE START: refresh */ - - this.scrollerWidth = this.scroller.offsetWidth; - this.scrollerHeight = this.scroller.offsetHeight; - - this.maxScrollX = this.wrapperWidth - this.scrollerWidth; - this.maxScrollY = this.wrapperHeight - this.scrollerHeight; - -/* REPLACE END: refresh */ - - this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0; - this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0; - - if ( !this.hasHorizontalScroll ) { - this.maxScrollX = 0; - this.scrollerWidth = this.wrapperWidth; - } - - if ( !this.hasVerticalScroll ) { - this.maxScrollY = 0; - this.scrollerHeight = this.wrapperHeight; - } - - this.endTime = 0; - this.directionX = 0; - this.directionY = 0; - - this.wrapperOffset = utils.offset(this.wrapper); - - this._execEvent('refresh'); - - this.resetPosition(); - -// INSERT POINT: _refresh - - }, - - on: function (type, fn) { - if ( !this._events[type] ) { - this._events[type] = []; - } - - this._events[type].push(fn); - }, - - off: function (type, fn) { - if ( !this._events[type] ) { - return; - } - - var index = this._events[type].indexOf(fn); - - if ( index > -1 ) { - this._events[type].splice(index, 1); - } - }, - - _execEvent: function (type) { - if ( !this._events[type] ) { - return; - } - - var i = 0, - l = this._events[type].length; - - if ( !l ) { - return; - } - - for ( ; i < l; i++ ) { - this._events[type][i].apply(this, [].slice.call(arguments, 1)); - } - }, - - scrollBy: function (x, y, time, easing) { - x = this.x + x; - y = this.y + y; - time = time || 0; - - this.scrollTo(x, y, time, easing); - }, - - scrollTo: function (x, y, time, easing) { - easing = easing || utils.ease.circular; - - this.isInTransition = this.options.useTransition && time > 0; - - if ( !time || (this.options.useTransition && easing.style) ) { - this._transitionTimingFunction(easing.style); - this._transitionTime(time); - this._translate(x, y); - } else { - this._animate(x, y, time, easing.fn); - } - }, - - scrollToElement: function (el, time, offsetX, offsetY, easing) { - el = el.nodeType ? el : this.scroller.querySelector(el); - - if ( !el ) { - return; - } - - var pos = utils.offset(el); - - pos.left -= this.wrapperOffset.left; - pos.top -= this.wrapperOffset.top; - - // if offsetX/Y are true we center the element to the screen - if ( offsetX === true ) { - offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2); - } - if ( offsetY === true ) { - offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2); - } - - pos.left -= offsetX || 0; - pos.top -= offsetY || 0; - - pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left; - pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top; - - time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time; - - this.scrollTo(pos.left, pos.top, time, easing); - }, - - _transitionTime: function (time) { - time = time || 0; - - this.scrollerStyle[utils.style.transitionDuration] = time + 'ms'; - - if ( !time && utils.isBadAndroid ) { - this.scrollerStyle[utils.style.transitionDuration] = '0.001s'; - } - - - if ( this.indicators ) { - for ( var i = this.indicators.length; i--; ) { - this.indicators[i].transitionTime(time); - } - } - - -// INSERT POINT: _transitionTime - - }, - - _transitionTimingFunction: function (easing) { - this.scrollerStyle[utils.style.transitionTimingFunction] = easing; - - - if ( this.indicators ) { - for ( var i = this.indicators.length; i--; ) { - this.indicators[i].transitionTimingFunction(easing); - } - } - - -// INSERT POINT: _transitionTimingFunction - - }, - - _translate: function (x, y) { - if ( this.options.useTransform ) { - -/* REPLACE START: _translate */ - - this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ; - -/* REPLACE END: _translate */ - - } else { - x = Math.round(x); - y = Math.round(y); - this.scrollerStyle.left = x + 'px'; - this.scrollerStyle.top = y + 'px'; - } - - this.x = x; - this.y = y; - - - if ( this.indicators ) { - for ( var i = this.indicators.length; i--; ) { - this.indicators[i].updatePosition(); - } - } - - -// INSERT POINT: _translate - - }, - - _initEvents: function (remove) { - var eventType = remove ? utils.removeEvent : utils.addEvent, - target = this.options.bindToWrapper ? this.wrapper : window; - - eventType(window, 'orientationchange', this); - eventType(window, 'resize', this); - - if ( this.options.click ) { - eventType(this.wrapper, 'click', this, true); - } - - if ( !this.options.disableMouse ) { - eventType(this.wrapper, 'mousedown', this); - eventType(target, 'mousemove', this); - eventType(target, 'mousecancel', this); - eventType(target, 'mouseup', this); - } - - if ( utils.hasPointer && !this.options.disablePointer ) { - eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this); - eventType(target, utils.prefixPointerEvent('pointermove'), this); - eventType(target, utils.prefixPointerEvent('pointercancel'), this); - eventType(target, utils.prefixPointerEvent('pointerup'), this); - } - - if ( utils.hasTouch && !this.options.disableTouch ) { - eventType(this.wrapper, 'touchstart', this); - eventType(target, 'touchmove', this); - eventType(target, 'touchcancel', this); - eventType(target, 'touchend', this); - } - - eventType(this.scroller, 'transitionend', this); - eventType(this.scroller, 'webkitTransitionEnd', this); - eventType(this.scroller, 'oTransitionEnd', this); - eventType(this.scroller, 'MSTransitionEnd', this); - }, - - getComputedPosition: function () { - var matrix = window.getComputedStyle(this.scroller, null), - x, y; - - if ( this.options.useTransform ) { - matrix = matrix[utils.style.transform].split(')')[0].split(', '); - x = +(matrix[12] || matrix[4]); - y = +(matrix[13] || matrix[5]); - } else { - x = +matrix.left.replace(/[^-\d.]/g, ''); - y = +matrix.top.replace(/[^-\d.]/g, ''); - } - - return { x: x, y: y }; - }, - - _initIndicators: function () { - var interactive = this.options.interactiveScrollbars, - customStyle = typeof this.options.scrollbars != 'string', - indicators = [], - indicator; - - var that = this; - - this.indicators = []; - - if ( this.options.scrollbars ) { - // Vertical scrollbar - if ( this.options.scrollY ) { - indicator = { - el: createDefaultScrollbar('v', interactive, this.options.scrollbars), - interactive: interactive, - defaultScrollbars: true, - customStyle: customStyle, - resize: this.options.resizeScrollbars, - shrink: this.options.shrinkScrollbars, - fade: this.options.fadeScrollbars, - listenX: false - }; - - this.wrapper.appendChild(indicator.el); - indicators.push(indicator); - } - - // Horizontal scrollbar - if ( this.options.scrollX ) { - indicator = { - el: createDefaultScrollbar('h', interactive, this.options.scrollbars), - interactive: interactive, - defaultScrollbars: true, - customStyle: customStyle, - resize: this.options.resizeScrollbars, - shrink: this.options.shrinkScrollbars, - fade: this.options.fadeScrollbars, - listenY: false - }; - - this.wrapper.appendChild(indicator.el); - indicators.push(indicator); - } - } - - if ( this.options.indicators ) { - // TODO: check concat compatibility - indicators = indicators.concat(this.options.indicators); - } - - for ( var i = indicators.length; i--; ) { - this.indicators.push( new Indicator(this, indicators[i]) ); - } - - // TODO: check if we can use array.map (wide compatibility and performance issues) - function _indicatorsMap (fn) { - for ( var i = that.indicators.length; i--; ) { - fn.call(that.indicators[i]); - } - } - - if ( this.options.fadeScrollbars ) { - this.on('scrollEnd', function () { - _indicatorsMap(function () { - this.fade(); - }); - }); - - this.on('scrollCancel', function () { - _indicatorsMap(function () { - this.fade(); - }); - }); - - this.on('scrollStart', function () { - _indicatorsMap(function () { - this.fade(1); - }); - }); - - this.on('beforeScrollStart', function () { - _indicatorsMap(function () { - this.fade(1, true); - }); - }); - } - - - this.on('refresh', function () { - _indicatorsMap(function () { - this.refresh(); - }); - }); - - this.on('destroy', function () { - _indicatorsMap(function () { - this.destroy(); - }); - - delete this.indicators; - }); - }, - - _initWheel: function () { - utils.addEvent(this.wrapper, 'wheel', this); - utils.addEvent(this.wrapper, 'mousewheel', this); - utils.addEvent(this.wrapper, 'DOMMouseScroll', this); - - this.on('destroy', function () { - utils.removeEvent(this.wrapper, 'wheel', this); - utils.removeEvent(this.wrapper, 'mousewheel', this); - utils.removeEvent(this.wrapper, 'DOMMouseScroll', this); - }); - }, - - _wheel: function (e) { - if ( !this.enabled ) { - return; - } - - e.preventDefault(); - e.stopPropagation(); - - var wheelDeltaX, wheelDeltaY, - newX, newY, - that = this; - - if ( this.wheelTimeout === undefined ) { - that._execEvent('scrollStart'); - } - - // Execute the scrollEnd event after 400ms the wheel stopped scrolling - clearTimeout(this.wheelTimeout); - this.wheelTimeout = setTimeout(function () { - that._execEvent('scrollEnd'); - that.wheelTimeout = undefined; - }, 400); - - if ( 'deltaX' in e ) { - if (e.deltaMode === 1) { - wheelDeltaX = -e.deltaX * this.options.mouseWheelSpeed; - wheelDeltaY = -e.deltaY * this.options.mouseWheelSpeed; - } else { - wheelDeltaX = -e.deltaX; - wheelDeltaY = -e.deltaY; - } - } else if ( 'wheelDeltaX' in e ) { - wheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed; - wheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed; - } else if ( 'wheelDelta' in e ) { - wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed; - } else if ( 'detail' in e ) { - wheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed; - } else { - return; - } - - wheelDeltaX *= this.options.invertWheelDirection; - wheelDeltaY *= this.options.invertWheelDirection; - - if ( !this.hasVerticalScroll ) { - wheelDeltaX = wheelDeltaY; - wheelDeltaY = 0; - } - - if ( this.options.snap ) { - newX = this.currentPage.pageX; - newY = this.currentPage.pageY; - - if ( wheelDeltaX > 0 ) { - newX--; - } else if ( wheelDeltaX < 0 ) { - newX++; - } - - if ( wheelDeltaY > 0 ) { - newY--; - } else if ( wheelDeltaY < 0 ) { - newY++; - } - - this.goToPage(newX, newY); - - return; - } - - newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0); - newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0); - - if ( newX > 0 ) { - newX = 0; - } else if ( newX < this.maxScrollX ) { - newX = this.maxScrollX; - } - - if ( newY > 0 ) { - newY = 0; - } else if ( newY < this.maxScrollY ) { - newY = this.maxScrollY; - } - - this.scrollTo(newX, newY, 0); - -// INSERT POINT: _wheel - }, - - _initSnap: function () { - this.currentPage = {}; - - if ( typeof this.options.snap == 'string' ) { - this.options.snap = this.scroller.querySelectorAll(this.options.snap); - } - - this.on('refresh', function () { - var i = 0, l, - m = 0, n, - cx, cy, - x = 0, y, - stepX = this.options.snapStepX || this.wrapperWidth, - stepY = this.options.snapStepY || this.wrapperHeight, - el; - - this.pages = []; - - if ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) { - return; - } - - if ( this.options.snap === true ) { - cx = Math.round( stepX / 2 ); - cy = Math.round( stepY / 2 ); - - while ( x > -this.scrollerWidth ) { - this.pages[i] = []; - l = 0; - y = 0; - - while ( y > -this.scrollerHeight ) { - this.pages[i][l] = { - x: Math.max(x, this.maxScrollX), - y: Math.max(y, this.maxScrollY), - width: stepX, - height: stepY, - cx: x - cx, - cy: y - cy - }; - - y -= stepY; - l++; - } - - x -= stepX; - i++; - } - } else { - el = this.options.snap; - l = el.length; - n = -1; - - for ( ; i < l; i++ ) { - if ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) { - m = 0; - n++; - } - - if ( !this.pages[m] ) { - this.pages[m] = []; - } - - x = Math.max(-el[i].offsetLeft, this.maxScrollX); - y = Math.max(-el[i].offsetTop, this.maxScrollY); - cx = x - Math.round(el[i].offsetWidth / 2); - cy = y - Math.round(el[i].offsetHeight / 2); - - this.pages[m][n] = { - x: x, - y: y, - width: el[i].offsetWidth, - height: el[i].offsetHeight, - cx: cx, - cy: cy - }; - - if ( x > this.maxScrollX ) { - m++; - } - } - } - - this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0); - - // Update snap threshold if needed - if ( this.options.snapThreshold % 1 === 0 ) { - this.snapThresholdX = this.options.snapThreshold; - this.snapThresholdY = this.options.snapThreshold; - } else { - this.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold); - this.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold); - } - }); - - this.on('flick', function () { - var time = this.options.snapSpeed || Math.max( - Math.max( - Math.min(Math.abs(this.x - this.startX), 1000), - Math.min(Math.abs(this.y - this.startY), 1000) - ), 300); - - this.goToPage( - this.currentPage.pageX + this.directionX, - this.currentPage.pageY + this.directionY, - time - ); - }); - }, - - _nearestSnap: function (x, y) { - if ( !this.pages.length ) { - return { x: 0, y: 0, pageX: 0, pageY: 0 }; - } - - var i = 0, - l = this.pages.length, - m = 0; - - // Check if we exceeded the snap threshold - if ( Math.abs(x - this.absStartX) < this.snapThresholdX && - Math.abs(y - this.absStartY) < this.snapThresholdY ) { - return this.currentPage; - } - - if ( x > 0 ) { - x = 0; - } else if ( x < this.maxScrollX ) { - x = this.maxScrollX; - } - - if ( y > 0 ) { - y = 0; - } else if ( y < this.maxScrollY ) { - y = this.maxScrollY; - } - - for ( ; i < l; i++ ) { - if ( x >= this.pages[i][0].cx ) { - x = this.pages[i][0].x; - break; - } - } - - l = this.pages[i].length; - - for ( ; m < l; m++ ) { - if ( y >= this.pages[0][m].cy ) { - y = this.pages[0][m].y; - break; - } - } - - if ( i == this.currentPage.pageX ) { - i += this.directionX; - - if ( i < 0 ) { - i = 0; - } else if ( i >= this.pages.length ) { - i = this.pages.length - 1; - } - - x = this.pages[i][0].x; - } - - if ( m == this.currentPage.pageY ) { - m += this.directionY; - - if ( m < 0 ) { - m = 0; - } else if ( m >= this.pages[0].length ) { - m = this.pages[0].length - 1; - } - - y = this.pages[0][m].y; - } - - return { - x: x, - y: y, - pageX: i, - pageY: m - }; - }, - - goToPage: function (x, y, time, easing) { - easing = easing || this.options.bounceEasing; - - if ( x >= this.pages.length ) { - x = this.pages.length - 1; - } else if ( x < 0 ) { - x = 0; - } - - if ( y >= this.pages[x].length ) { - y = this.pages[x].length - 1; - } else if ( y < 0 ) { - y = 0; - } - - var posX = this.pages[x][y].x, - posY = this.pages[x][y].y; - - time = time === undefined ? this.options.snapSpeed || Math.max( - Math.max( - Math.min(Math.abs(posX - this.x), 1000), - Math.min(Math.abs(posY - this.y), 1000) - ), 300) : time; - - this.currentPage = { - x: posX, - y: posY, - pageX: x, - pageY: y - }; - - this.scrollTo(posX, posY, time, easing); - }, - - next: function (time, easing) { - var x = this.currentPage.pageX, - y = this.currentPage.pageY; - - x++; - - if ( x >= this.pages.length && this.hasVerticalScroll ) { - x = 0; - y++; - } - - this.goToPage(x, y, time, easing); - }, - - prev: function (time, easing) { - var x = this.currentPage.pageX, - y = this.currentPage.pageY; - - x--; - - if ( x < 0 && this.hasVerticalScroll ) { - x = 0; - y--; - } - - this.goToPage(x, y, time, easing); - }, - - _initKeys: function (e) { - // default key bindings - var keys = { - pageUp: 33, - pageDown: 34, - end: 35, - home: 36, - left: 37, - up: 38, - right: 39, - down: 40 - }; - var i; - - // if you give me characters I give you keycode - if ( typeof this.options.keyBindings == 'object' ) { - for ( i in this.options.keyBindings ) { - if ( typeof this.options.keyBindings[i] == 'string' ) { - this.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0); - } - } - } else { - this.options.keyBindings = {}; - } - - for ( i in keys ) { - this.options.keyBindings[i] = this.options.keyBindings[i] || keys[i]; - } - - utils.addEvent(window, 'keydown', this); - - this.on('destroy', function () { - utils.removeEvent(window, 'keydown', this); - }); - }, - - _key: function (e) { - if ( !this.enabled ) { - return; - } - - var snap = this.options.snap, // we are using this alot, better to cache it - newX = snap ? this.currentPage.pageX : this.x, - newY = snap ? this.currentPage.pageY : this.y, - now = utils.getTime(), - prevTime = this.keyTime || 0, - acceleration = 0.250, - pos; - - if ( this.options.useTransition && this.isInTransition ) { - pos = this.getComputedPosition(); - - this._translate(Math.round(pos.x), Math.round(pos.y)); - this.isInTransition = false; - } - - this.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0; - - switch ( e.keyCode ) { - case this.options.keyBindings.pageUp: - if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) { - newX += snap ? 1 : this.wrapperWidth; - } else { - newY += snap ? 1 : this.wrapperHeight; - } - break; - case this.options.keyBindings.pageDown: - if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) { - newX -= snap ? 1 : this.wrapperWidth; - } else { - newY -= snap ? 1 : this.wrapperHeight; - } - break; - case this.options.keyBindings.end: - newX = snap ? this.pages.length-1 : this.maxScrollX; - newY = snap ? this.pages[0].length-1 : this.maxScrollY; - break; - case this.options.keyBindings.home: - newX = 0; - newY = 0; - break; - case this.options.keyBindings.left: - newX += snap ? -1 : 5 + this.keyAcceleration>>0; - break; - case this.options.keyBindings.up: - newY += snap ? 1 : 5 + this.keyAcceleration>>0; - break; - case this.options.keyBindings.right: - newX -= snap ? -1 : 5 + this.keyAcceleration>>0; - break; - case this.options.keyBindings.down: - newY -= snap ? 1 : 5 + this.keyAcceleration>>0; - break; - default: - return; - } - - if ( snap ) { - this.goToPage(newX, newY); - return; - } - - if ( newX > 0 ) { - newX = 0; - this.keyAcceleration = 0; - } else if ( newX < this.maxScrollX ) { - newX = this.maxScrollX; - this.keyAcceleration = 0; - } - - if ( newY > 0 ) { - newY = 0; - this.keyAcceleration = 0; - } else if ( newY < this.maxScrollY ) { - newY = this.maxScrollY; - this.keyAcceleration = 0; - } - - this.scrollTo(newX, newY, 0); - - this.keyTime = now; - }, - - _animate: function (destX, destY, duration, easingFn) { - var that = this, - startX = this.x, - startY = this.y, - startTime = utils.getTime(), - destTime = startTime + duration; - - function step () { - var now = utils.getTime(), - newX, newY, - easing; - - if ( now >= destTime ) { - that.isAnimating = false; - that._translate(destX, destY); - - if ( !that.resetPosition(that.options.bounceTime) ) { - that._execEvent('scrollEnd'); - } - - return; - } - - now = ( now - startTime ) / duration; - easing = easingFn(now); - newX = ( destX - startX ) * easing + startX; - newY = ( destY - startY ) * easing + startY; - that._translate(newX, newY); - - if ( that.isAnimating ) { - rAF(step); - } - } - - this.isAnimating = true; - step(); - }, - handleEvent: function (e) { - switch ( e.type ) { - case 'touchstart': - case 'pointerdown': - case 'MSPointerDown': - case 'mousedown': - this._start(e); - break; - case 'touchmove': - case 'pointermove': - case 'MSPointerMove': - case 'mousemove': - this._move(e); - break; - case 'touchend': - case 'pointerup': - case 'MSPointerUp': - case 'mouseup': - case 'touchcancel': - case 'pointercancel': - case 'MSPointerCancel': - case 'mousecancel': - this._end(e); - break; - case 'orientationchange': - case 'resize': - this._resize(); - break; - case 'transitionend': - case 'webkitTransitionEnd': - case 'oTransitionEnd': - case 'MSTransitionEnd': - this._transitionEnd(e); - break; - case 'wheel': - case 'DOMMouseScroll': - case 'mousewheel': - this._wheel(e); - break; - case 'keydown': - this._key(e); - break; - case 'click': - if ( !e._constructed ) { - e.preventDefault(); - e.stopPropagation(); - } - break; - } - } -}; -function createDefaultScrollbar (direction, interactive, type) { - var scrollbar = document.createElement('div'), - indicator = document.createElement('div'); - - if ( type === true ) { - scrollbar.style.cssText = 'position:absolute;z-index:9999'; - indicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px'; - } - - indicator.className = 'iScrollIndicator'; - - if ( direction == 'h' ) { - if ( type === true ) { - scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0'; - indicator.style.height = '100%'; - } - scrollbar.className = 'iScrollHorizontalScrollbar'; - } else { - if ( type === true ) { - scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px'; - indicator.style.width = '100%'; - } - scrollbar.className = 'iScrollVerticalScrollbar'; - } - - scrollbar.style.cssText += ';overflow:hidden'; - - if ( !interactive ) { - scrollbar.style.pointerEvents = 'none'; - } - - scrollbar.appendChild(indicator); - - return scrollbar; -} - -function Indicator (scroller, options) { - this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el; - this.wrapperStyle = this.wrapper.style; - this.indicator = this.wrapper.children[0]; - this.indicatorStyle = this.indicator.style; - this.scroller = scroller; - - this.options = { - listenX: true, - listenY: true, - interactive: false, - resize: true, - defaultScrollbars: false, - shrink: false, - fade: false, - speedRatioX: 0, - speedRatioY: 0 - }; - - for ( var i in options ) { - this.options[i] = options[i]; - } - - this.sizeRatioX = 1; - this.sizeRatioY = 1; - this.maxPosX = 0; - this.maxPosY = 0; - - if ( this.options.interactive ) { - if ( !this.options.disableTouch ) { - utils.addEvent(this.indicator, 'touchstart', this); - utils.addEvent(window, 'touchend', this); - } - if ( !this.options.disablePointer ) { - utils.addEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this); - utils.addEvent(window, utils.prefixPointerEvent('pointerup'), this); - } - if ( !this.options.disableMouse ) { - utils.addEvent(this.indicator, 'mousedown', this); - utils.addEvent(window, 'mouseup', this); - } - } - - if ( this.options.fade ) { - this.wrapperStyle[utils.style.transform] = this.scroller.translateZ; - this.wrapperStyle[utils.style.transitionDuration] = utils.isBadAndroid ? '0.001s' : '0ms'; - this.wrapperStyle.opacity = '0'; - } -} - -Indicator.prototype = { - handleEvent: function (e) { - switch ( e.type ) { - case 'touchstart': - case 'pointerdown': - case 'MSPointerDown': - case 'mousedown': - this._start(e); - break; - case 'touchmove': - case 'pointermove': - case 'MSPointerMove': - case 'mousemove': - this._move(e); - break; - case 'touchend': - case 'pointerup': - case 'MSPointerUp': - case 'mouseup': - case 'touchcancel': - case 'pointercancel': - case 'MSPointerCancel': - case 'mousecancel': - this._end(e); - break; - } - }, - - destroy: function () { - if ( this.options.interactive ) { - utils.removeEvent(this.indicator, 'touchstart', this); - utils.removeEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this); - utils.removeEvent(this.indicator, 'mousedown', this); - - utils.removeEvent(window, 'touchmove', this); - utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this); - utils.removeEvent(window, 'mousemove', this); - - utils.removeEvent(window, 'touchend', this); - utils.removeEvent(window, utils.prefixPointerEvent('pointerup'), this); - utils.removeEvent(window, 'mouseup', this); - } - - if ( this.options.defaultScrollbars ) { - this.wrapper.parentNode.removeChild(this.wrapper); - } - }, - - _start: function (e) { - var point = e.touches ? e.touches[0] : e; - - e.preventDefault(); - e.stopPropagation(); - - this.transitionTime(); - - this.initiated = true; - this.moved = false; - this.lastPointX = point.pageX; - this.lastPointY = point.pageY; - - this.startTime = utils.getTime(); - - if ( !this.options.disableTouch ) { - utils.addEvent(window, 'touchmove', this); - } - if ( !this.options.disablePointer ) { - utils.addEvent(window, utils.prefixPointerEvent('pointermove'), this); - } - if ( !this.options.disableMouse ) { - utils.addEvent(window, 'mousemove', this); - } - - this.scroller._execEvent('beforeScrollStart'); - }, - - _move: function (e) { - var point = e.touches ? e.touches[0] : e, - deltaX, deltaY, - newX, newY, - timestamp = utils.getTime(); - - if ( !this.moved ) { - this.scroller._execEvent('scrollStart'); - } - - this.moved = true; - - deltaX = point.pageX - this.lastPointX; - this.lastPointX = point.pageX; - - deltaY = point.pageY - this.lastPointY; - this.lastPointY = point.pageY; - - newX = this.x + deltaX; - newY = this.y + deltaY; - - this._pos(newX, newY); - -// INSERT POINT: indicator._move - - e.preventDefault(); - e.stopPropagation(); - }, - - _end: function (e) { - if ( !this.initiated ) { - return; - } - - this.initiated = false; - - e.preventDefault(); - e.stopPropagation(); - - utils.removeEvent(window, 'touchmove', this); - utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this); - utils.removeEvent(window, 'mousemove', this); - - if ( this.scroller.options.snap ) { - var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y); - - var time = this.options.snapSpeed || Math.max( - Math.max( - Math.min(Math.abs(this.scroller.x - snap.x), 1000), - Math.min(Math.abs(this.scroller.y - snap.y), 1000) - ), 300); - - if ( this.scroller.x != snap.x || this.scroller.y != snap.y ) { - this.scroller.directionX = 0; - this.scroller.directionY = 0; - this.scroller.currentPage = snap; - this.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing); - } - } - - if ( this.moved ) { - this.scroller._execEvent('scrollEnd'); - } - }, - - transitionTime: function (time) { - time = time || 0; - this.indicatorStyle[utils.style.transitionDuration] = time + 'ms'; - - if ( !time && utils.isBadAndroid ) { - this.indicatorStyle[utils.style.transitionDuration] = '0.001s'; - } - }, - - transitionTimingFunction: function (easing) { - this.indicatorStyle[utils.style.transitionTimingFunction] = easing; - }, - - refresh: function () { - this.transitionTime(); - - if ( this.options.listenX && !this.options.listenY ) { - this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none'; - } else if ( this.options.listenY && !this.options.listenX ) { - this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none'; - } else { - this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none'; - } - - if ( this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ) { - utils.addClass(this.wrapper, 'iScrollBothScrollbars'); - utils.removeClass(this.wrapper, 'iScrollLoneScrollbar'); - - if ( this.options.defaultScrollbars && this.options.customStyle ) { - if ( this.options.listenX ) { - this.wrapper.style.right = '8px'; - } else { - this.wrapper.style.bottom = '8px'; - } - } - } else { - utils.removeClass(this.wrapper, 'iScrollBothScrollbars'); - utils.addClass(this.wrapper, 'iScrollLoneScrollbar'); - - if ( this.options.defaultScrollbars && this.options.customStyle ) { - if ( this.options.listenX ) { - this.wrapper.style.right = '2px'; - } else { - this.wrapper.style.bottom = '2px'; - } - } - } - - var r = this.wrapper.offsetHeight; // force refresh - - if ( this.options.listenX ) { - this.wrapperWidth = this.wrapper.clientWidth; - if ( this.options.resize ) { - this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8); - this.indicatorStyle.width = this.indicatorWidth + 'px'; - } else { - this.indicatorWidth = this.indicator.clientWidth; - } - - this.maxPosX = this.wrapperWidth - this.indicatorWidth; - - if ( this.options.shrink == 'clip' ) { - this.minBoundaryX = -this.indicatorWidth + 8; - this.maxBoundaryX = this.wrapperWidth - 8; - } else { - this.minBoundaryX = 0; - this.maxBoundaryX = this.maxPosX; - } - - this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX)); - } - - if ( this.options.listenY ) { - this.wrapperHeight = this.wrapper.clientHeight; - if ( this.options.resize ) { - this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8); - this.indicatorStyle.height = this.indicatorHeight + 'px'; - } else { - this.indicatorHeight = this.indicator.clientHeight; - } - - this.maxPosY = this.wrapperHeight - this.indicatorHeight; - - if ( this.options.shrink == 'clip' ) { - this.minBoundaryY = -this.indicatorHeight + 8; - this.maxBoundaryY = this.wrapperHeight - 8; - } else { - this.minBoundaryY = 0; - this.maxBoundaryY = this.maxPosY; - } - - this.maxPosY = this.wrapperHeight - this.indicatorHeight; - this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY)); - } - - this.updatePosition(); - }, - - updatePosition: function () { - var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0, - y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0; - - if ( !this.options.ignoreBoundaries ) { - if ( x < this.minBoundaryX ) { - if ( this.options.shrink == 'scale' ) { - this.width = Math.max(this.indicatorWidth + x, 8); - this.indicatorStyle.width = this.width + 'px'; - } - x = this.minBoundaryX; - } else if ( x > this.maxBoundaryX ) { - if ( this.options.shrink == 'scale' ) { - this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8); - this.indicatorStyle.width = this.width + 'px'; - x = this.maxPosX + this.indicatorWidth - this.width; - } else { - x = this.maxBoundaryX; - } - } else if ( this.options.shrink == 'scale' && this.width != this.indicatorWidth ) { - this.width = this.indicatorWidth; - this.indicatorStyle.width = this.width + 'px'; - } - - if ( y < this.minBoundaryY ) { - if ( this.options.shrink == 'scale' ) { - this.height = Math.max(this.indicatorHeight + y * 3, 8); - this.indicatorStyle.height = this.height + 'px'; - } - y = this.minBoundaryY; - } else if ( y > this.maxBoundaryY ) { - if ( this.options.shrink == 'scale' ) { - this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8); - this.indicatorStyle.height = this.height + 'px'; - y = this.maxPosY + this.indicatorHeight - this.height; - } else { - y = this.maxBoundaryY; - } - } else if ( this.options.shrink == 'scale' && this.height != this.indicatorHeight ) { - this.height = this.indicatorHeight; - this.indicatorStyle.height = this.height + 'px'; - } - } - - this.x = x; - this.y = y; - - if ( this.scroller.options.useTransform ) { - this.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ; - } else { - this.indicatorStyle.left = x + 'px'; - this.indicatorStyle.top = y + 'px'; - } - }, - - _pos: function (x, y) { - if ( x < 0 ) { - x = 0; - } else if ( x > this.maxPosX ) { - x = this.maxPosX; - } - - if ( y < 0 ) { - y = 0; - } else if ( y > this.maxPosY ) { - y = this.maxPosY; - } - - x = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x; - y = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y; - - this.scroller.scrollTo(x, y); - }, - - fade: function (val, hold) { - if ( hold && !this.visible ) { - return; - } - - clearTimeout(this.fadeTimeout); - this.fadeTimeout = null; - - var time = val ? 250 : 500, - delay = val ? 0 : 300; - - val = val ? '1' : '0'; - - this.wrapperStyle[utils.style.transitionDuration] = time + 'ms'; - - this.fadeTimeout = setTimeout((function (val) { - this.wrapperStyle.opacity = val; - this.visible = +val; - }).bind(this, val), delay); - } -}; - -IScroll.utils = utils; - -if ( typeof module != 'undefined' && module.exports ) { - module.exports = IScroll; -} else { - window.IScroll = IScroll; -} - -})(window, document, Math);
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/jquery-2.1.4.min.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/jquery-2.1.4.min.js deleted file mode 100755 index 49990d6e..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/jquery-2.1.4.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.1.4 | (c) 2005, 2015 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.4",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)+1>=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="length"in a&&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"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=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)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(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||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(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 H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(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 pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(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 p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),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))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),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===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(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?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.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 ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.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},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.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=ga.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=ga.selectors={cacheLength:50,createPseudo:ia,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(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===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]||ga.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]&&ga.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(ca,da).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("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.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.replace(Q," ")+" ").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()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(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),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).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:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(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]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.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?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(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 ta(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 ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(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 wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(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?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(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 wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(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]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.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(ca,da),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(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(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+K.uid++}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 aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ia={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,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(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 ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(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 oa(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 pa(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=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(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(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$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=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.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=ja(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=ja(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(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(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(oa(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&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(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(oa(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&&ea.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(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}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 qa,ra={};function sa(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 ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qa[0].contentDocument,b.write(),b.close(),c=sa(a,b),qa.detach()),ra[a]=c),c}var ua=/^margin/,va=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wa=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xa(a,b,c){var d,e,f,g,h=a.style;return c=c||wa(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),va.test(g)&&ua.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 ya(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),f.removeChild(c),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 za=/^(none|table(?!-c[ea]).+)/,Aa=new RegExp("^("+Q+")(.*)$","i"),Ba=new RegExp("^([+-])=("+Q+")","i"),Ca={position:"absolute",visibility:"hidden",display:"block"},Da={letterSpacing:"0",fontWeight:"400"},Ea=["Webkit","O","Moz","ms"];function Fa(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Ea.length;while(e--)if(b=Ea[e]+c,b in a)return b;return d}function Ga(a,b,c){var d=Aa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Ha(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 Ia(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wa(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xa(a,b,f),(0>e||null==e)&&(e=a.style[b]),va.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Ha(a,b,c||(g?"border":"content"),d,f)+"px"}function Ja(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",ta(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=xa(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]=Fa(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=Ba.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]=Fa(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xa(a,b,d)),"normal"===e&&b in Da&&(e=Da[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?za.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Ca,function(){return Ia(a,b,d)}):Ia(a,b,d):void 0},set:function(a,c,d){var e=d&&wa(a);return Ga(a,c,d?Ha(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=ya(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xa,[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}},ua.test(a)||(n.cssHooks[a+b].set=Ga)}),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=wa(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 Ja(this,!0)},hide:function(){return Ja(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 Ka(a,b,c,d,e){return new Ka.prototype.init(a,b,c,d,e)}n.Tween=Ka,Ka.prototype={constructor:Ka,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=Ka.propHooks[this.prop];return a&&a.get?a.get(this):Ka.propHooks._default.get(this)},run:function(a){var b,c=Ka.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=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):Ka.propHooks._default.set(this),this}},Ka.prototype.init.prototype=Ka.prototype,Ka.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}}},Ka.propHooks.scrollTop=Ka.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=Ka.prototype.init,n.fx.step={};var La,Ma,Na=/^(?:toggle|show|hide)$/,Oa=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pa=/queueHooks$/,Qa=[Va],Ra={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Oa.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Oa.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 Sa(){return setTimeout(function(){La=void 0}),La=n.now()}function Ta(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 Ua(a,b,c){for(var d,e=(Ra[b]||[]).concat(Ra["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Va(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")||ta(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],Na.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?ta(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=Ua(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 Wa(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 Xa(a,b,c){var d,e,f=0,g=Qa.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=La||Sa(),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:La||Sa(),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(Wa(k,j.opts.specialEasing);g>f;f++)if(d=Qa[f].call(j,a,k,j.opts))return d;return n.map(k,Ua,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(Xa,{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],Ra[c]=Ra[c]||[],Ra[c].unshift(b)},prefilter:function(a,b){b?Qa.unshift(a):Qa.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=Xa(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&&Pa.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(Ta(b,!0),a,d,e)}}),n.each({slideDown:Ta("show"),slideUp:Ta("hide"),slideToggle:Ta("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(La=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),La=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(){Ma||(Ma=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Ma),Ma=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 Ya,Za,$a=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)?Za:Ya)), -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}}}}}),Za={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=$a[b]||n.find.attr;$a[b]=function(a,b,d){var e,f;return d||(f=$a[b],$a[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$a[b]=f),e}});var _a=/^(?: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")||_a.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 ab=/[\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(ab," "):" ")){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(ab," "):"")){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(ab," ").indexOf(b)>=0)return!0;return!1}});var bb=/\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(bb,""):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 cb=n.now(),db=/\?/;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 eb=/#.*$/,fb=/([?&])_=[^&]*/,gb=/^(.*?):[ \t]*([^\r\n]*)$/gm,hb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ib=/^(?:GET|HEAD)$/,jb=/^\/\//,kb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lb={},mb={},nb="*/".concat("*"),ob=a.location.href,pb=kb.exec(ob.toLowerCase())||[];function qb(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 rb(a,b,c,d){var e={},f=a===mb;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 sb(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 tb(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 ub(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:ob,type:"GET",isLocal:hb.test(pb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nb,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?sb(sb(a,n.ajaxSettings),b):sb(n.ajaxSettings,a)},ajaxPrefilter:qb(lb),ajaxTransport:qb(mb),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=gb.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||ob)+"").replace(eb,"").replace(jb,pb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kb.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pb[1]&&h[2]===pb[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pb[3]||("http:"===pb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rb(lb,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ib.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(db.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fb.test(d)?d.replace(fb,"$1_="+cb++):d+(db.test(d)?"&":"?")+"_="+cb++)),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]?", "+nb+"; 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=rb(mb,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=tb(k,v,f)),u=ub(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._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 vb=/%20/g,wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ab(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)Ab(c,a[c],b,e);return d.join("&").replace(vb,"+")},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")&&zb.test(this.nodeName)&&!yb.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(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bb=0,Cb={},Db={0:200,1223:204},Eb=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cb)Cb[a]()}),k.cors=!!Eb&&"withCredentials"in Eb,k.ajax=Eb=!!Eb,n.ajaxTransport(function(a){var b;return k.cors||Eb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bb;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 Cb[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Db[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=Cb[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 Fb=[],Gb=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fb.pop()||n.expando+"_"+cb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gb.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gb.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(Gb,"$1"+e):b.jsonp!==!1&&(b.url+=(db.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,Fb.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 Hb=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hb)return Hb.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.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ib=a.document.documentElement;function Jb(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=Jb(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||Ib;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ib})}}),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=Jb(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]=ya(k.pixelPosition,function(a,c){return c?(c=xa(a,b),va.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 Kb=a.jQuery,Lb=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lb),b&&a.jQuery===n&&(a.jQuery=Kb),n},typeof b===U&&(a.jQuery=a.$=n),n}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/jquery.creditCardValidator.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/jquery.creditCardValidator.js deleted file mode 100755 index 56ce1bf6..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/jquery.creditCardValidator.js +++ /dev/null @@ -1,208 +0,0 @@ -// Generated by CoffeeScript 1.8.0 - -/* -jQuery Credit Card Validator 1.0 - -Copyright 2012-2015 Pawel Decowski - -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. - */ - -(function() { - var $, - __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; - - $ = jQuery; - - $.fn.validateCreditCard = function(callback, options) { - var bind, card, card_type, card_types, get_card_type, is_valid_length, is_valid_luhn, normalize, validate, validate_number, _i, _len, _ref; - card_types = [ - { - name: 'amex', - pattern: /^3[47]/, - valid_length: [15] - }, { - name: 'diners_club_carte_blanche', - pattern: /^30[0-5]/, - valid_length: [14] - }, { - name: 'diners_club_international', - pattern: /^36/, - valid_length: [14] - }, { - name: 'jcb', - pattern: /^35(2[89]|[3-8][0-9])/, - valid_length: [16] - }, { - name: 'laser', - pattern: /^(6304|670[69]|6771)/, - valid_length: [16, 17, 18, 19] - }, { - name: 'visa_electron', - pattern: /^(4026|417500|4508|4844|491(3|7))/, - valid_length: [16] - }, { - name: 'visa', - pattern: /^4/, - valid_length: [16] - }, { - name: 'mastercard', - pattern: /^5[1-5]/, - valid_length: [16] - }, { - name: 'maestro', - pattern: /^(5018|5020|5038|6304|6759|676[1-3])/, - valid_length: [12, 13, 14, 15, 16, 17, 18, 19] - }, { - name: 'discover', - pattern: /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/, - valid_length: [16] - } - ]; - bind = false; - if (callback) { - if (typeof callback === 'object') { - options = callback; - bind = false; - callback = null; - } else if (typeof callback === 'function') { - bind = true; - } - } - if (options == null) { - options = {}; - } - if (options.accept == null) { - options.accept = (function() { - var _i, _len, _results; - _results = []; - for (_i = 0, _len = card_types.length; _i < _len; _i++) { - card = card_types[_i]; - _results.push(card.name); - } - return _results; - })(); - } - _ref = options.accept; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - card_type = _ref[_i]; - if (__indexOf.call((function() { - var _j, _len1, _results; - _results = []; - for (_j = 0, _len1 = card_types.length; _j < _len1; _j++) { - card = card_types[_j]; - _results.push(card.name); - } - return _results; - })(), card_type) < 0) { - throw "Credit card type '" + card_type + "' is not supported"; - } - } - get_card_type = function(number) { - var _j, _len1, _ref1; - _ref1 = (function() { - var _k, _len1, _ref1, _results; - _results = []; - for (_k = 0, _len1 = card_types.length; _k < _len1; _k++) { - card = card_types[_k]; - if (_ref1 = card.name, __indexOf.call(options.accept, _ref1) >= 0) { - _results.push(card); - } - } - return _results; - })(); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - card_type = _ref1[_j]; - if (number.match(card_type.pattern)) { - return card_type; - } - } - return null; - }; - is_valid_luhn = function(number) { - var digit, n, sum, _j, _len1, _ref1; - sum = 0; - _ref1 = number.split('').reverse(); - for (n = _j = 0, _len1 = _ref1.length; _j < _len1; n = ++_j) { - digit = _ref1[n]; - digit = +digit; - if (n % 2) { - digit *= 2; - if (digit < 10) { - sum += digit; - } else { - sum += digit - 9; - } - } else { - sum += digit; - } - } - return sum % 10 === 0; - }; - is_valid_length = function(number, card_type) { - var _ref1; - return _ref1 = number.length, __indexOf.call(card_type.valid_length, _ref1) >= 0; - }; - validate_number = (function(_this) { - return function(number) { - var length_valid, luhn_valid; - card_type = get_card_type(number); - luhn_valid = false; - length_valid = false; - if (card_type != null) { - luhn_valid = is_valid_luhn(number); - length_valid = is_valid_length(number, card_type); - } - return { - card_type: card_type, - valid: luhn_valid && length_valid, - luhn_valid: luhn_valid, - length_valid: length_valid - }; - }; - })(this); - validate = (function(_this) { - return function() { - var number; - number = normalize($(_this).val()); - return validate_number(number); - }; - })(this); - normalize = function(number) { - return (number || "").replace(/[ -]/g, ''); - }; - if (!bind) { - return validate(); - } - this.on('input.jccv', (function(_this) { - return function() { - $(_this).off('keyup.jccv'); - return callback.call(_this, validate()); - }; - })(this)); - this.on('keyup.jccv', (function(_this) { - return function() { - return callback.call(_this, validate()); - }; - })(this)); - callback.call(this, validate()); - return this; - }; - -}).call(this); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/loader.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/loader.js deleted file mode 100755 index ccfcdc9e..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/loader.js +++ /dev/null @@ -1,100 +0,0 @@ -var Loader = Loader || (function(){ - function Loader (readyCallback, view){ - this.assets = {}; - this.images = []; - this.readyCallback = readyCallback; - this.count = 0 - this.view = view - this.loaded = false - } - - // Register an asset as loading - Loader.prototype.register = function(s){ - this.assets[s] = false; - this.count += 1 - } - - // Signal that an asset has loaded - Loader.prototype.ready = function(s){ - window.debug && console.log("ready >> " + s); - - this.assets[s] = true; - if (this.loaded) return; - - this.view && this.view.update( this.percentRemaining() ) - - if (! this.isReady()) return; - - this.loaded = true; - if (this.view) { - this.view && this.view.finish(this.readyCallback) - } - else { - this.readyCallback && this.readyCallback(); - } - } - - // (boolean) Is the loader ready? - Loader.prototype.isReady = function(){ - for (var s in this.assets) { - if (this.assets.hasOwnProperty(s) && this.assets[s] != true) { - return false; - } - } - return true; - } - - // (float) Percentage of assets remaining - Loader.prototype.percentRemaining = function(){ - return this.remainingAssets() / this.count - } - - // (int) Number of assets remaining - Loader.prototype.remainingAssets = function(){ - var n = 0; - for (var s in this.assets) { - if (this.assets.hasOwnProperty(s) && this.assets[s] != true) { - n++; - // console.log('remaining: ' + s); - } - } - return n; - } - - // Preload the images in config.images - Loader.prototype.preloadImages = function(images, register){ - this.register("preload"); - for (var i = 0; i < images.length; i++) { - this.preloadImage(images[i], register); - } - this.ready("preload"); - } - Loader.prototype.preloadImage = function(src, register, cb){ - if (! src || src == "none") return; - var _this = this; - if (! cb && typeof register !== "boolean") { - cb = register - register = null - } - if (register) { - this.register(src); - } - var img = new Image() - var loaded = false - img.onload = function(){ - if (loaded) return - loaded = true - if (cb) { - cb(img); - } - if (register) { - _this.ready(src); - } - } - img.src = src; - if (img.complete) img.onload(); - _this.images.push(img); - } - - return Loader; -})(); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/lodash.min.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/lodash.min.js deleted file mode 100755 index e6c9820b..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/lodash.min.js +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @license - * lodash 3.10.1 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE - * Build: `lodash modern -o ./lodash.js` - */ -;(function(){function n(n,t){if(n!==t){var r=null===n,e=n===w,u=n===n,o=null===t,i=t===w,f=t===t;if(n>t&&!o||!u||r&&!i&&f||e&&f)return 1;if(n<t&&!r||!f||o&&!e&&u||i&&u)return-1}return 0}function t(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function r(n,t,r){if(t!==t)return p(n,r);r-=1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function e(n){return typeof n=="function"||false}function u(n){return null==n?"":n+""}function o(n,t){for(var r=-1,e=n.length;++r<e&&-1<t.indexOf(n.charAt(r));); -return r}function i(n,t){for(var r=n.length;r--&&-1<t.indexOf(n.charAt(r)););return r}function f(t,r){return n(t.a,r.a)||t.b-r.b}function a(n){return Nn[n]}function c(n){return Tn[n]}function l(n,t,r){return t?n=Bn[n]:r&&(n=Dn[n]),"\\"+n}function s(n){return"\\"+Dn[n]}function p(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function h(n){return!!n&&typeof n=="object"}function _(n){return 160>=n&&9<=n&&13>=n||32==n||160==n||5760==n||6158==n||8192<=n&&(8202>=n||8232==n||8233==n||8239==n||8287==n||12288==n||65279==n); -}function v(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;)n[r]===t&&(n[r]=z,o[++u]=r);return o}function g(n){for(var t=-1,r=n.length;++t<r&&_(n.charCodeAt(t)););return t}function y(n){for(var t=n.length;t--&&_(n.charCodeAt(t)););return t}function d(n){return Ln[n]}function m(_){function Nn(n){if(h(n)&&!(Oo(n)||n instanceof zn)){if(n instanceof Ln)return n;if(nu.call(n,"__chain__")&&nu.call(n,"__wrapped__"))return Mr(n)}return new Ln(n)}function Tn(){}function Ln(n,t,r){this.__wrapped__=n,this.__actions__=r||[], -this.__chain__=!!t}function zn(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=Ru,this.__views__=[]}function Bn(){this.__data__={}}function Dn(n){var t=n?n.length:0;for(this.data={hash:gu(null),set:new lu};t--;)this.push(n[t])}function Mn(n,t){var r=n.data;return(typeof t=="string"||ge(t)?r.set.has(t):r.hash[t])?0:-1}function qn(n,t){var r=-1,e=n.length;for(t||(t=Be(e));++r<e;)t[r]=n[r];return t}function Pn(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n);); -return n}function Kn(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false;return true}function Vn(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];t(i,r,n)&&(o[++u]=i)}return o}function Gn(n,t){for(var r=-1,e=n.length,u=Be(e);++r<e;)u[r]=t(n[r],r,n);return u}function Jn(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function Xn(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++u<o;)r=t(r,n[u],u,n);return r}function Hn(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true; -return false}function Qn(n,t,r,e){return n!==w&&nu.call(e,r)?n:t}function nt(n,t,r){for(var e=-1,u=zo(t),o=u.length;++e<o;){var i=u[e],f=n[i],a=r(f,t[i],i,n,t);(a===a?a===f:f!==f)&&(f!==w||i in n)||(n[i]=a)}return n}function tt(n,t){return null==t?n:et(t,zo(t),n)}function rt(n,t){for(var r=-1,e=null==n,u=!e&&Er(n),o=u?n.length:0,i=t.length,f=Be(i);++r<i;){var a=t[r];f[r]=u?Cr(a,o)?n[a]:w:e?w:n[a]}return f}function et(n,t,r){r||(r={});for(var e=-1,u=t.length;++e<u;){var o=t[e];r[o]=n[o]}return r}function ut(n,t,r){ -var e=typeof n;return"function"==e?t===w?n:Bt(n,t,r):null==n?Fe:"object"==e?bt(n):t===w?ze(n):xt(n,t)}function ot(n,t,r,e,u,o,i){var f;if(r&&(f=u?r(n,e,u):r(n)),f!==w)return f;if(!ge(n))return n;if(e=Oo(n)){if(f=kr(n),!t)return qn(n,f)}else{var a=ru.call(n),c=a==K;if(a!=Z&&a!=B&&(!c||u))return Fn[a]?Rr(n,a,t):u?n:{};if(f=Ir(c?{}:n),!t)return tt(f,n)}for(o||(o=[]),i||(i=[]),u=o.length;u--;)if(o[u]==n)return i[u];return o.push(n),i.push(f),(e?Pn:_t)(n,function(e,u){f[u]=ot(e,t,r,u,n,o,i)}),f}function it(n,t,r){ -if(typeof n!="function")throw new Ge(L);return su(function(){n.apply(w,r)},t)}function ft(n,t){var e=n?n.length:0,u=[];if(!e)return u;var o=-1,i=xr(),f=i===r,a=f&&t.length>=F&&gu&&lu?new Dn(t):null,c=t.length;a&&(i=Mn,f=false,t=a);n:for(;++o<e;)if(a=n[o],f&&a===a){for(var l=c;l--;)if(t[l]===a)continue n;u.push(a)}else 0>i(t,a,0)&&u.push(a);return u}function at(n,t){var r=true;return Su(n,function(n,e,u){return r=!!t(n,e,u)}),r}function ct(n,t,r,e){var u=e,o=u;return Su(n,function(n,i,f){i=+t(n,i,f),(r(i,u)||i===e&&i===o)&&(u=i, -o=n)}),o}function lt(n,t){var r=[];return Su(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function st(n,t,r,e){var u;return r(n,function(n,r,o){return t(n,r,o)?(u=e?r:n,false):void 0}),u}function pt(n,t,r,e){e||(e=[]);for(var u=-1,o=n.length;++u<o;){var i=n[u];h(i)&&Er(i)&&(r||Oo(i)||pe(i))?t?pt(i,t,r,e):Jn(e,i):r||(e[e.length]=i)}return e}function ht(n,t){Nu(n,t,Re)}function _t(n,t){return Nu(n,t,zo)}function vt(n,t){return Tu(n,t,zo)}function gt(n,t){for(var r=-1,e=t.length,u=-1,o=[];++r<e;){var i=t[r]; -ve(n[i])&&(o[++u]=i)}return o}function yt(n,t,r){if(null!=n){r!==w&&r in Br(n)&&(t=[r]),r=0;for(var e=t.length;null!=n&&r<e;)n=n[t[r++]];return r&&r==e?n:w}}function dt(n,t,r,e,u,o){if(n===t)n=true;else if(null==n||null==t||!ge(n)&&!h(t))n=n!==n&&t!==t;else n:{var i=dt,f=Oo(n),a=Oo(t),c=D,l=D;f||(c=ru.call(n),c==B?c=Z:c!=Z&&(f=xe(n))),a||(l=ru.call(t),l==B?l=Z:l!=Z&&xe(t));var s=c==Z,a=l==Z,l=c==l;if(!l||f||s){if(!e&&(c=s&&nu.call(n,"__wrapped__"),a=a&&nu.call(t,"__wrapped__"),c||a)){n=i(c?n.value():n,a?t.value():t,r,e,u,o); -break n}if(l){for(u||(u=[]),o||(o=[]),c=u.length;c--;)if(u[c]==n){n=o[c]==t;break n}u.push(n),o.push(t),n=(f?yr:mr)(n,t,i,r,e,u,o),u.pop(),o.pop()}else n=false}else n=dr(n,t,c)}return n}function mt(n,t,r){var e=t.length,u=e,o=!r;if(null==n)return!u;for(n=Br(n);e--;){var i=t[e];if(o&&i[2]?i[1]!==n[i[0]]:!(i[0]in n))return false}for(;++e<u;){var i=t[e],f=i[0],a=n[f],c=i[1];if(o&&i[2]){if(a===w&&!(f in n))return false}else if(i=r?r(a,c,f):w,i===w?!dt(c,a,r,true):!i)return false}return true}function wt(n,t){var r=-1,e=Er(n)?Be(n.length):[]; -return Su(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function bt(n){var t=Ar(n);if(1==t.length&&t[0][2]){var r=t[0][0],e=t[0][1];return function(n){return null==n?false:n[r]===e&&(e!==w||r in Br(n))}}return function(n){return mt(n,t)}}function xt(n,t){var r=Oo(n),e=Wr(n)&&t===t&&!ge(t),u=n+"";return n=Dr(n),function(o){if(null==o)return false;var i=u;if(o=Br(o),!(!r&&e||i in o)){if(o=1==n.length?o:yt(o,Et(n,0,-1)),null==o)return false;i=Zr(n),o=Br(o)}return o[i]===t?t!==w||i in o:dt(t,o[i],w,true)}}function At(n,t,r,e,u){ -if(!ge(n))return n;var o=Er(t)&&(Oo(t)||xe(t)),i=o?w:zo(t);return Pn(i||t,function(f,a){if(i&&(a=f,f=t[a]),h(f)){e||(e=[]),u||(u=[]);n:{for(var c=a,l=e,s=u,p=l.length,_=t[c];p--;)if(l[p]==_){n[c]=s[p];break n}var p=n[c],v=r?r(p,_,c,n,t):w,g=v===w;g&&(v=_,Er(_)&&(Oo(_)||xe(_))?v=Oo(p)?p:Er(p)?qn(p):[]:me(_)||pe(_)?v=pe(p)?ke(p):me(p)?p:{}:g=false),l.push(_),s.push(v),g?n[c]=At(v,_,r,l,s):(v===v?v!==p:p===p)&&(n[c]=v)}}else c=n[a],l=r?r(c,f,a,n,t):w,(s=l===w)&&(l=f),l===w&&(!o||a in n)||!s&&(l===l?l===c:c!==c)||(n[a]=l); -}),n}function jt(n){return function(t){return null==t?w:t[n]}}function kt(n){var t=n+"";return n=Dr(n),function(r){return yt(r,n,t)}}function It(n,t){for(var r=n?t.length:0;r--;){var e=t[r];if(e!=u&&Cr(e)){var u=e;pu.call(n,e,1)}}}function Rt(n,t){return n+yu(ku()*(t-n+1))}function Ot(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function Et(n,t,r){var e=-1,u=n.length;for(t=null==t?0:+t||0,0>t&&(t=-t>u?0:u+t),r=r===w||r>u?u:+r||0,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Be(u);++e<u;)r[e]=n[e+t]; -return r}function Ct(n,t){var r;return Su(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function Ut(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function Wt(t,r,e){var u=wr(),o=-1;return r=Gn(r,function(n){return u(n)}),t=wt(t,function(n){return{a:Gn(r,function(t){return t(n)}),b:++o,c:n}}),Ut(t,function(t,r){var u;n:{for(var o=-1,i=t.a,f=r.a,a=i.length,c=e.length;++o<a;)if(u=n(i[o],f[o])){if(o>=c)break n;o=e[o],u*="asc"===o||true===o?1:-1;break n}u=t.b-r.b}return u})}function $t(n,t){ -var r=0;return Su(n,function(n,e,u){r+=+t(n,e,u)||0}),r}function St(n,t){var e=-1,u=xr(),o=n.length,i=u===r,f=i&&o>=F,a=f&&gu&&lu?new Dn(void 0):null,c=[];a?(u=Mn,i=false):(f=false,a=t?[]:c);n:for(;++e<o;){var l=n[e],s=t?t(l,e,n):l;if(i&&l===l){for(var p=a.length;p--;)if(a[p]===s)continue n;t&&a.push(s),c.push(l)}else 0>u(a,s,0)&&((t||f)&&a.push(s),c.push(l))}return c}function Ft(n,t){for(var r=-1,e=t.length,u=Be(e);++r<e;)u[r]=n[t[r]];return u}function Nt(n,t,r,e){for(var u=n.length,o=e?u:-1;(e?o--:++o<u)&&t(n[o],o,n);); -return r?Et(n,e?0:o,e?o+1:u):Et(n,e?o+1:0,e?u:o)}function Tt(n,t){var r=n;r instanceof zn&&(r=r.value());for(var e=-1,u=t.length;++e<u;)var o=t[e],r=o.func.apply(o.thisArg,Jn([r],o.args));return r}function Lt(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&u<=Eu){for(;e<u;){var o=e+u>>>1,i=n[o];(r?i<=t:i<t)&&null!==i?e=o+1:u=o}return u}return zt(n,t,Fe,r)}function zt(n,t,r,e){t=r(t);for(var u=0,o=n?n.length:0,i=t!==t,f=null===t,a=t===w;u<o;){var c=yu((u+o)/2),l=r(n[c]),s=l!==w,p=l===l; -(i?p||e:f?p&&s&&(e||null!=l):a?p&&(e||s):null==l?0:e?l<=t:l<t)?u=c+1:o=c}return xu(o,Ou)}function Bt(n,t,r){if(typeof n!="function")return Fe;if(t===w)return n;switch(r){case 1:return function(r){return n.call(t,r)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,o){return n.call(t,r,e,u,o)};case 5:return function(r,e,u,o,i){return n.call(t,r,e,u,o,i)}}return function(){return n.apply(t,arguments)}}function Dt(n){var t=new ou(n.byteLength);return new hu(t).set(new hu(n)), -t}function Mt(n,t,r){for(var e=r.length,u=-1,o=bu(n.length-e,0),i=-1,f=t.length,a=Be(f+o);++i<f;)a[i]=t[i];for(;++u<e;)a[r[u]]=n[u];for(;o--;)a[i++]=n[u++];return a}function qt(n,t,r){for(var e=-1,u=r.length,o=-1,i=bu(n.length-u,0),f=-1,a=t.length,c=Be(i+a);++o<i;)c[o]=n[o];for(i=o;++f<a;)c[i+f]=t[f];for(;++e<u;)c[i+r[e]]=n[o++];return c}function Pt(n,t){return function(r,e,u){var o=t?t():{};if(e=wr(e,u,3),Oo(r)){u=-1;for(var i=r.length;++u<i;){var f=r[u];n(o,f,e(f,u,r),r)}}else Su(r,function(t,r,u){ -n(o,t,e(t,r,u),u)});return o}}function Kt(n){return le(function(t,r){var e=-1,u=null==t?0:r.length,o=2<u?r[u-2]:w,i=2<u?r[2]:w,f=1<u?r[u-1]:w;for(typeof o=="function"?(o=Bt(o,f,5),u-=2):(o=typeof f=="function"?f:w,u-=o?1:0),i&&Ur(r[0],r[1],i)&&(o=3>u?w:o,u=1);++e<u;)(i=r[e])&&n(t,i,o);return t})}function Vt(n,t){return function(r,e){var u=r?Bu(r):0;if(!Sr(u))return n(r,e);for(var o=t?u:-1,i=Br(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}function Zt(n){return function(t,r,e){var u=Br(t);e=e(t);for(var o=e.length,i=n?o:-1;n?i--:++i<o;){ -var f=e[i];if(false===r(u[f],f,u))break}return t}}function Yt(n,t){function r(){return(this&&this!==Zn&&this instanceof r?e:n).apply(t,arguments)}var e=Jt(n);return r}function Gt(n){return function(t){var r=-1;t=$e(Ce(t));for(var e=t.length,u="";++r<e;)u=n(u,t[r],r);return u}}function Jt(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5: -return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=$u(n.prototype),t=n.apply(r,t);return ge(t)?t:r}}function Xt(n){function t(r,e,u){return u&&Ur(r,e,u)&&(e=w),r=gr(r,n,w,w,w,w,w,e),r.placeholder=t.placeholder,r}return t}function Ht(n,t){return le(function(r){var e=r[0];return null==e?e:(r.push(t),n.apply(w,r))})}function Qt(n,t){return function(r,e,u){if(u&&Ur(r,e,u)&&(e=w),e=wr(e,u,3),1==e.length){ -u=r=Oo(r)?r:zr(r);for(var o=e,i=-1,f=u.length,a=t,c=a;++i<f;){var l=u[i],s=+o(l);n(s,a)&&(a=s,c=l)}if(u=c,!r.length||u!==t)return u}return ct(r,e,n,t)}}function nr(n,r){return function(e,u,o){return u=wr(u,o,3),Oo(e)?(u=t(e,u,r),-1<u?e[u]:w):st(e,u,n)}}function tr(n){return function(r,e,u){return r&&r.length?(e=wr(e,u,3),t(r,e,n)):-1}}function rr(n){return function(t,r,e){return r=wr(r,e,3),st(t,r,n,true)}}function er(n){return function(){for(var t,r=arguments.length,e=n?r:-1,u=0,o=Be(r);n?e--:++e<r;){ -var i=o[u++]=arguments[e];if(typeof i!="function")throw new Ge(L);!t&&Ln.prototype.thru&&"wrapper"==br(i)&&(t=new Ln([],true))}for(e=t?-1:r;++e<r;){var i=o[e],u=br(i),f="wrapper"==u?zu(i):w;t=f&&$r(f[0])&&f[1]==(E|k|R|C)&&!f[4].length&&1==f[9]?t[br(f[0])].apply(t,f[3]):1==i.length&&$r(i)?t[u]():t.thru(i)}return function(){var n=arguments,e=n[0];if(t&&1==n.length&&Oo(e)&&e.length>=F)return t.plant(e).value();for(var u=0,n=r?o[u].apply(this,n):e;++u<r;)n=o[u].call(this,n);return n}}}function ur(n,t){ -return function(r,e,u){return typeof e=="function"&&u===w&&Oo(r)?n(r,e):t(r,Bt(e,u,3))}}function or(n){return function(t,r,e){return(typeof r!="function"||e!==w)&&(r=Bt(r,e,3)),n(t,r,Re)}}function ir(n){return function(t,r,e){return(typeof r!="function"||e!==w)&&(r=Bt(r,e,3)),n(t,r)}}function fr(n){return function(t,r,e){var u={};return r=wr(r,e,3),_t(t,function(t,e,o){o=r(t,e,o),e=n?o:e,t=n?t:o,u[e]=t}),u}}function ar(n){return function(t,r,e){return t=u(t),(n?t:"")+pr(t,r,e)+(n?"":t)}}function cr(n){ -var t=le(function(r,e){var u=v(e,t.placeholder);return gr(r,n,w,e,u)});return t}function lr(n,t){return function(r,e,u,o){var i=3>arguments.length;return typeof e=="function"&&o===w&&Oo(r)?n(r,e,u,i):Ot(r,wr(e,o,4),u,i,t)}}function sr(n,t,r,e,u,o,i,f,a,c){function l(){for(var m=arguments.length,b=m,j=Be(m);b--;)j[b]=arguments[b];if(e&&(j=Mt(j,e,u)),o&&(j=qt(j,o,i)),_||y){var b=l.placeholder,k=v(j,b),m=m-k.length;if(m<c){var I=f?qn(f):w,m=bu(c-m,0),E=_?k:w,k=_?w:k,C=_?j:w,j=_?w:j;return t|=_?R:O,t&=~(_?O:R), -g||(t&=~(x|A)),j=[n,t,r,C,E,j,k,I,a,m],I=sr.apply(w,j),$r(n)&&Du(I,j),I.placeholder=b,I}}if(b=p?r:this,I=h?b[n]:n,f)for(m=j.length,E=xu(f.length,m),k=qn(j);E--;)C=f[E],j[E]=Cr(C,m)?k[C]:w;return s&&a<j.length&&(j.length=a),this&&this!==Zn&&this instanceof l&&(I=d||Jt(n)),I.apply(b,j)}var s=t&E,p=t&x,h=t&A,_=t&k,g=t&j,y=t&I,d=h?w:Jt(n);return l}function pr(n,t,r){return n=n.length,t=+t,n<t&&mu(t)?(t-=n,r=null==r?" ":r+"",Ue(r,vu(t/r.length)).slice(0,t)):""}function hr(n,t,r,e){function u(){for(var t=-1,f=arguments.length,a=-1,c=e.length,l=Be(c+f);++a<c;)l[a]=e[a]; -for(;f--;)l[a++]=arguments[++t];return(this&&this!==Zn&&this instanceof u?i:n).apply(o?r:this,l)}var o=t&x,i=Jt(n);return u}function _r(n){var t=Pe[n];return function(n,r){return(r=r===w?0:+r||0)?(r=au(10,r),t(n*r)/r):t(n)}}function vr(n){return function(t,r,e,u){var o=wr(e);return null==e&&o===ut?Lt(t,r,n):zt(t,r,o(e,u,1),n)}}function gr(n,t,r,e,u,o,i,f){var a=t&A;if(!a&&typeof n!="function")throw new Ge(L);var c=e?e.length:0;if(c||(t&=~(R|O),e=u=w),c-=u?u.length:0,t&O){var l=e,s=u;e=u=w}var p=a?w:zu(n); -return r=[n,t,r,e,u,l,s,o,i,f],p&&(e=r[1],t=p[1],f=e|t,u=t==E&&e==k||t==E&&e==C&&r[7].length<=p[8]||t==(E|C)&&e==k,(f<E||u)&&(t&x&&(r[2]=p[2],f|=e&x?0:j),(e=p[3])&&(u=r[3],r[3]=u?Mt(u,e,p[4]):qn(e),r[4]=u?v(r[3],z):qn(p[4])),(e=p[5])&&(u=r[5],r[5]=u?qt(u,e,p[6]):qn(e),r[6]=u?v(r[5],z):qn(p[6])),(e=p[7])&&(r[7]=qn(e)),t&E&&(r[8]=null==r[8]?p[8]:xu(r[8],p[8])),null==r[9]&&(r[9]=p[9]),r[0]=p[0],r[1]=f),t=r[1],f=r[9]),r[9]=null==f?a?0:n.length:bu(f-c,0)||0,(p?Lu:Du)(t==x?Yt(r[0],r[2]):t!=R&&t!=(x|R)||r[4].length?sr.apply(w,r):hr.apply(w,r),r); -}function yr(n,t,r,e,u,o,i){var f=-1,a=n.length,c=t.length;if(a!=c&&(!u||c<=a))return false;for(;++f<a;){var l=n[f],c=t[f],s=e?e(u?c:l,u?l:c,f):w;if(s!==w){if(s)continue;return false}if(u){if(!Hn(t,function(n){return l===n||r(l,n,e,u,o,i)}))return false}else if(l!==c&&!r(l,c,e,u,o,i))return false}return true}function dr(n,t,r){switch(r){case M:case q:return+n==+t;case P:return n.name==t.name&&n.message==t.message;case V:return n!=+n?t!=+t:n==+t;case Y:case G:return n==t+""}return false}function mr(n,t,r,e,u,o,i){var f=zo(n),a=f.length,c=zo(t).length; -if(a!=c&&!u)return false;for(c=a;c--;){var l=f[c];if(!(u?l in t:nu.call(t,l)))return false}for(var s=u;++c<a;){var l=f[c],p=n[l],h=t[l],_=e?e(u?h:p,u?p:h,l):w;if(_===w?!r(p,h,e,u,o,i):!_)return false;s||(s="constructor"==l)}return s||(r=n.constructor,e=t.constructor,!(r!=e&&"constructor"in n&&"constructor"in t)||typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)?true:false}function wr(n,t,r){var e=Nn.callback||Se,e=e===Se?ut:e;return r?e(n,t,r):e}function br(n){for(var t=n.name+"",r=Wu[t],e=r?r.length:0;e--;){ -var u=r[e],o=u.func;if(null==o||o==n)return u.name}return t}function xr(n,t,e){var u=Nn.indexOf||Vr,u=u===Vr?r:u;return n?u(n,t,e):u}function Ar(n){n=Oe(n);for(var t=n.length;t--;){var r=n[t][1];n[t][2]=r===r&&!ge(r)}return n}function jr(n,t){var r=null==n?w:n[t];return ye(r)?r:w}function kr(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&nu.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Ir(n){return n=n.constructor,typeof n=="function"&&n instanceof n||(n=Ve), -new n}function Rr(n,t,r){var e=n.constructor;switch(t){case J:return Dt(n);case M:case q:return new e(+n);case X:case H:case Q:case nn:case tn:case rn:case en:case un:case on:return t=n.buffer,new e(r?Dt(t):t,n.byteOffset,n.length);case V:case G:return new e(n);case Y:var u=new e(n.source,kn.exec(n));u.lastIndex=n.lastIndex}return u}function Or(n,t,r){return null==n||Wr(t,n)||(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),t=Zr(t)),t=null==n?n:n[t],null==t?w:t.apply(n,r)}function Er(n){return null!=n&&Sr(Bu(n)); -}function Cr(n,t){return n=typeof n=="number"||On.test(n)?+n:-1,t=null==t?Cu:t,-1<n&&0==n%1&&n<t}function Ur(n,t,r){if(!ge(r))return false;var e=typeof t;return("number"==e?Er(r)&&Cr(t,r.length):"string"==e&&t in r)?(t=r[t],n===n?n===t:t!==t):false}function Wr(n,t){var r=typeof n;return"string"==r&&dn.test(n)||"number"==r?true:Oo(n)?false:!yn.test(n)||null!=t&&n in Br(t)}function $r(n){var t=br(n),r=Nn[t];return typeof r=="function"&&t in zn.prototype?n===r?true:(t=zu(r),!!t&&n===t[0]):false}function Sr(n){return typeof n=="number"&&-1<n&&0==n%1&&n<=Cu; -}function Fr(n,t){return n===w?t:Eo(n,t,Fr)}function Nr(n,t){n=Br(n);for(var r=-1,e=t.length,u={};++r<e;){var o=t[r];o in n&&(u[o]=n[o])}return u}function Tr(n,t){var r={};return ht(n,function(n,e,u){t(n,e,u)&&(r[e]=n)}),r}function Lr(n){for(var t=Re(n),r=t.length,e=r&&n.length,u=!!e&&Sr(e)&&(Oo(n)||pe(n)),o=-1,i=[];++o<r;){var f=t[o];(u&&Cr(f,e)||nu.call(n,f))&&i.push(f)}return i}function zr(n){return null==n?[]:Er(n)?ge(n)?n:Ve(n):Ee(n)}function Br(n){return ge(n)?n:Ve(n)}function Dr(n){if(Oo(n))return n; -var t=[];return u(n).replace(mn,function(n,r,e,u){t.push(e?u.replace(An,"$1"):r||n)}),t}function Mr(n){return n instanceof zn?n.clone():new Ln(n.__wrapped__,n.__chain__,qn(n.__actions__))}function qr(n,t,r){return n&&n.length?((r?Ur(n,t,r):null==t)&&(t=1),Et(n,0>t?0:t)):[]}function Pr(n,t,r){var e=n?n.length:0;return e?((r?Ur(n,t,r):null==t)&&(t=1),t=e-(+t||0),Et(n,0,0>t?0:t)):[]}function Kr(n){return n?n[0]:w}function Vr(n,t,e){var u=n?n.length:0;if(!u)return-1;if(typeof e=="number")e=0>e?bu(u+e,0):e;else if(e)return e=Lt(n,t), -e<u&&(t===t?t===n[e]:n[e]!==n[e])?e:-1;return r(n,t,e||0)}function Zr(n){var t=n?n.length:0;return t?n[t-1]:w}function Yr(n){return qr(n,1)}function Gr(n,t,e,u){if(!n||!n.length)return[];null!=t&&typeof t!="boolean"&&(u=e,e=Ur(n,t,u)?w:t,t=false);var o=wr();if((null!=e||o!==ut)&&(e=o(e,u,3)),t&&xr()===r){t=e;var i;e=-1,u=n.length;for(var o=-1,f=[];++e<u;){var a=n[e],c=t?t(a,e,n):a;e&&i===c||(i=c,f[++o]=a)}n=f}else n=St(n,e);return n}function Jr(n){if(!n||!n.length)return[];var t=-1,r=0;n=Vn(n,function(n){ -return Er(n)?(r=bu(n.length,r),true):void 0});for(var e=Be(r);++t<r;)e[t]=Gn(n,jt(t));return e}function Xr(n,t,r){return n&&n.length?(n=Jr(n),null==t?n:(t=Bt(t,r,4),Gn(n,function(n){return Xn(n,t,w,true)}))):[]}function Hr(n,t){var r=-1,e=n?n.length:0,u={};for(!e||t||Oo(n[0])||(t=[]);++r<e;){var o=n[r];t?u[o]=t[r]:o&&(u[o[0]]=o[1])}return u}function Qr(n){return n=Nn(n),n.__chain__=true,n}function ne(n,t,r){return t.call(r,n)}function te(n,t,r){var e=Oo(n)?Kn:at;return r&&Ur(n,t,r)&&(t=w),(typeof t!="function"||r!==w)&&(t=wr(t,r,3)), -e(n,t)}function re(n,t,r){var e=Oo(n)?Vn:lt;return t=wr(t,r,3),e(n,t)}function ee(n,t,r,e){var u=n?Bu(n):0;return Sr(u)||(n=Ee(n),u=n.length),r=typeof r!="number"||e&&Ur(t,r,e)?0:0>r?bu(u+r,0):r||0,typeof n=="string"||!Oo(n)&&be(n)?r<=u&&-1<n.indexOf(t,r):!!u&&-1<xr(n,t,r)}function ue(n,t,r){var e=Oo(n)?Gn:wt;return t=wr(t,r,3),e(n,t)}function oe(n,t,r){if(r?Ur(n,t,r):null==t){n=zr(n);var e=n.length;return 0<e?n[Rt(0,e-1)]:w}r=-1,n=je(n);var e=n.length,u=e-1;for(t=xu(0>t?0:+t||0,e);++r<t;){var e=Rt(r,u),o=n[e]; -n[e]=n[r],n[r]=o}return n.length=t,n}function ie(n,t,r){var e=Oo(n)?Hn:Ct;return r&&Ur(n,t,r)&&(t=w),(typeof t!="function"||r!==w)&&(t=wr(t,r,3)),e(n,t)}function fe(n,t){var r;if(typeof t!="function"){if(typeof n!="function")throw new Ge(L);var e=n;n=t,t=e}return function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=w),r}}function ae(n,t,r){function e(t,r){r&&iu(r),a=p=h=w,t&&(_=ho(),c=n.apply(s,f),p||a||(f=s=w))}function u(){var n=t-(ho()-l);0>=n||n>t?e(h,a):p=su(u,n)}function o(){e(g,p); -}function i(){if(f=arguments,l=ho(),s=this,h=g&&(p||!y),false===v)var r=y&&!p;else{a||y||(_=l);var e=v-(l-_),i=0>=e||e>v;i?(a&&(a=iu(a)),_=l,c=n.apply(s,f)):a||(a=su(o,e))}return i&&p?p=iu(p):p||t===v||(p=su(u,t)),r&&(i=true,c=n.apply(s,f)),!i||p||a||(f=s=w),c}var f,a,c,l,s,p,h,_=0,v=false,g=true;if(typeof n!="function")throw new Ge(L);if(t=0>t?0:+t||0,true===r)var y=true,g=false;else ge(r)&&(y=!!r.leading,v="maxWait"in r&&bu(+r.maxWait||0,t),g="trailing"in r?!!r.trailing:g);return i.cancel=function(){p&&iu(p),a&&iu(a), -_=0,a=p=h=w},i}function ce(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],o=r.cache;return o.has(u)?o.get(u):(e=n.apply(this,e),r.cache=o.set(u,e),e)}if(typeof n!="function"||t&&typeof t!="function")throw new Ge(L);return r.cache=new ce.Cache,r}function le(n,t){if(typeof n!="function")throw new Ge(L);return t=bu(t===w?n.length-1:+t||0,0),function(){for(var r=arguments,e=-1,u=bu(r.length-t,0),o=Be(u);++e<u;)o[e]=r[t+e];switch(t){case 0:return n.call(this,o);case 1:return n.call(this,r[0],o); -case 2:return n.call(this,r[0],r[1],o)}for(u=Be(t+1),e=-1;++e<t;)u[e]=r[e];return u[t]=o,n.apply(this,u)}}function se(n,t){return n>t}function pe(n){return h(n)&&Er(n)&&nu.call(n,"callee")&&!cu.call(n,"callee")}function he(n,t,r,e){return e=(r=typeof r=="function"?Bt(r,e,3):w)?r(n,t):w,e===w?dt(n,t,r):!!e}function _e(n){return h(n)&&typeof n.message=="string"&&ru.call(n)==P}function ve(n){return ge(n)&&ru.call(n)==K}function ge(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function ye(n){ -return null==n?false:ve(n)?uu.test(Qe.call(n)):h(n)&&Rn.test(n)}function de(n){return typeof n=="number"||h(n)&&ru.call(n)==V}function me(n){var t;if(!h(n)||ru.call(n)!=Z||pe(n)||!(nu.call(n,"constructor")||(t=n.constructor,typeof t!="function"||t instanceof t)))return false;var r;return ht(n,function(n,t){r=t}),r===w||nu.call(n,r)}function we(n){return ge(n)&&ru.call(n)==Y}function be(n){return typeof n=="string"||h(n)&&ru.call(n)==G}function xe(n){return h(n)&&Sr(n.length)&&!!Sn[ru.call(n)]}function Ae(n,t){ -return n<t}function je(n){var t=n?Bu(n):0;return Sr(t)?t?qn(n):[]:Ee(n)}function ke(n){return et(n,Re(n))}function Ie(n){return gt(n,Re(n))}function Re(n){if(null==n)return[];ge(n)||(n=Ve(n));for(var t=n.length,t=t&&Sr(t)&&(Oo(n)||pe(n))&&t||0,r=n.constructor,e=-1,r=typeof r=="function"&&r.prototype===n,u=Be(t),o=0<t;++e<t;)u[e]=e+"";for(var i in n)o&&Cr(i,t)||"constructor"==i&&(r||!nu.call(n,i))||u.push(i);return u}function Oe(n){n=Br(n);for(var t=-1,r=zo(n),e=r.length,u=Be(e);++t<e;){var o=r[t]; -u[t]=[o,n[o]]}return u}function Ee(n){return Ft(n,zo(n))}function Ce(n){return(n=u(n))&&n.replace(En,a).replace(xn,"")}function Ue(n,t){var r="";if(n=u(n),t=+t,1>t||!n||!mu(t))return r;do t%2&&(r+=n),t=yu(t/2),n+=n;while(t);return r}function We(n,t,r){var e=n;return(n=u(n))?(r?Ur(e,t,r):null==t)?n.slice(g(n),y(n)+1):(t+="",n.slice(o(n,t),i(n,t)+1)):n}function $e(n,t,r){return r&&Ur(n,t,r)&&(t=w),n=u(n),n.match(t||Wn)||[]}function Se(n,t,r){return r&&Ur(n,t,r)&&(t=w),h(n)?Ne(n):ut(n,t)}function Fe(n){ -return n}function Ne(n){return bt(ot(n,true))}function Te(n,t,r){if(null==r){var e=ge(t),u=e?zo(t):w;((u=u&&u.length?gt(t,u):w)?u.length:e)||(u=false,r=t,t=n,n=this)}u||(u=gt(t,zo(t)));var o=true,e=-1,i=ve(n),f=u.length;false===r?o=false:ge(r)&&"chain"in r&&(o=r.chain);for(;++e<f;){r=u[e];var a=t[r];n[r]=a,i&&(n.prototype[r]=function(t){return function(){var r=this.__chain__;if(o||r){var e=n(this.__wrapped__);return(e.__actions__=qn(this.__actions__)).push({func:t,args:arguments,thisArg:n}),e.__chain__=r,e}return t.apply(n,Jn([this.value()],arguments)); -}}(a))}return n}function Le(){}function ze(n){return Wr(n)?jt(n):kt(n)}_=_?Yn.defaults(Zn.Object(),_,Yn.pick(Zn,$n)):Zn;var Be=_.Array,De=_.Date,Me=_.Error,qe=_.Function,Pe=_.Math,Ke=_.Number,Ve=_.Object,Ze=_.RegExp,Ye=_.String,Ge=_.TypeError,Je=Be.prototype,Xe=Ve.prototype,He=Ye.prototype,Qe=qe.prototype.toString,nu=Xe.hasOwnProperty,tu=0,ru=Xe.toString,eu=Zn._,uu=Ze("^"+Qe.call(nu).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ou=_.ArrayBuffer,iu=_.clearTimeout,fu=_.parseFloat,au=Pe.pow,cu=Xe.propertyIsEnumerable,lu=jr(_,"Set"),su=_.setTimeout,pu=Je.splice,hu=_.Uint8Array,_u=jr(_,"WeakMap"),vu=Pe.ceil,gu=jr(Ve,"create"),yu=Pe.floor,du=jr(Be,"isArray"),mu=_.isFinite,wu=jr(Ve,"keys"),bu=Pe.max,xu=Pe.min,Au=jr(De,"now"),ju=_.parseInt,ku=Pe.random,Iu=Ke.NEGATIVE_INFINITY,Ru=Ke.POSITIVE_INFINITY,Ou=4294967294,Eu=2147483647,Cu=9007199254740991,Uu=_u&&new _u,Wu={}; -Nn.support={},Nn.templateSettings={escape:_n,evaluate:vn,interpolate:gn,variable:"",imports:{_:Nn}};var $u=function(){function n(){}return function(t){if(ge(t)){n.prototype=t;var r=new n;n.prototype=w}return r||{}}}(),Su=Vt(_t),Fu=Vt(vt,true),Nu=Zt(),Tu=Zt(true),Lu=Uu?function(n,t){return Uu.set(n,t),n}:Fe,zu=Uu?function(n){return Uu.get(n)}:Le,Bu=jt("length"),Du=function(){var n=0,t=0;return function(r,e){var u=ho(),o=S-(u-t);if(t=u,0<o){if(++n>=$)return r}else n=0;return Lu(r,e)}}(),Mu=le(function(n,t){ -return h(n)&&Er(n)?ft(n,pt(t,false,true)):[]}),qu=tr(),Pu=tr(true),Ku=le(function(n){for(var t=n.length,e=t,u=Be(l),o=xr(),i=o===r,f=[];e--;){var a=n[e]=Er(a=n[e])?a:[];u[e]=i&&120<=a.length&&gu&&lu?new Dn(e&&a):null}var i=n[0],c=-1,l=i?i.length:0,s=u[0];n:for(;++c<l;)if(a=i[c],0>(s?Mn(s,a):o(f,a,0))){for(e=t;--e;){var p=u[e];if(0>(p?Mn(p,a):o(n[e],a,0)))continue n}s&&s.push(a),f.push(a)}return f}),Vu=le(function(t,r){r=pt(r);var e=rt(t,r);return It(t,r.sort(n)),e}),Zu=vr(),Yu=vr(true),Gu=le(function(n){return St(pt(n,false,true)); -}),Ju=le(function(n,t){return Er(n)?ft(n,t):[]}),Xu=le(Jr),Hu=le(function(n){var t=n.length,r=2<t?n[t-2]:w,e=1<t?n[t-1]:w;return 2<t&&typeof r=="function"?t-=2:(r=1<t&&typeof e=="function"?(--t,e):w,e=w),n.length=t,Xr(n,r,e)}),Qu=le(function(n){return n=pt(n),this.thru(function(t){t=Oo(t)?t:[Br(t)];for(var r=n,e=-1,u=t.length,o=-1,i=r.length,f=Be(u+i);++e<u;)f[e]=t[e];for(;++o<i;)f[e++]=r[o];return f})}),no=le(function(n,t){return rt(n,pt(t))}),to=Pt(function(n,t,r){nu.call(n,r)?++n[r]:n[r]=1}),ro=nr(Su),eo=nr(Fu,true),uo=ur(Pn,Su),oo=ur(function(n,t){ -for(var r=n.length;r--&&false!==t(n[r],r,n););return n},Fu),io=Pt(function(n,t,r){nu.call(n,r)?n[r].push(t):n[r]=[t]}),fo=Pt(function(n,t,r){n[r]=t}),ao=le(function(n,t,r){var e=-1,u=typeof t=="function",o=Wr(t),i=Er(n)?Be(n.length):[];return Su(n,function(n){var f=u?t:o&&null!=n?n[t]:w;i[++e]=f?f.apply(n,r):Or(n,t,r)}),i}),co=Pt(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),lo=lr(Xn,Su),so=lr(function(n,t,r,e){var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r},Fu),po=le(function(n,t){ -if(null==n)return[];var r=t[2];return r&&Ur(t[0],t[1],r)&&(t.length=1),Wt(n,pt(t),[])}),ho=Au||function(){return(new De).getTime()},_o=le(function(n,t,r){var e=x;if(r.length)var u=v(r,_o.placeholder),e=e|R;return gr(n,e,t,r,u)}),vo=le(function(n,t){t=t.length?pt(t):Ie(n);for(var r=-1,e=t.length;++r<e;){var u=t[r];n[u]=gr(n[u],x,n)}return n}),go=le(function(n,t,r){var e=x|A;if(r.length)var u=v(r,go.placeholder),e=e|R;return gr(t,e,n,r,u)}),yo=Xt(k),mo=Xt(I),wo=le(function(n,t){return it(n,1,t)}),bo=le(function(n,t,r){ -return it(n,t,r)}),xo=er(),Ao=er(true),jo=le(function(n,t){if(t=pt(t),typeof n!="function"||!Kn(t,e))throw new Ge(L);var r=t.length;return le(function(e){for(var u=xu(e.length,r);u--;)e[u]=t[u](e[u]);return n.apply(this,e)})}),ko=cr(R),Io=cr(O),Ro=le(function(n,t){return gr(n,C,w,w,w,pt(t))}),Oo=du||function(n){return h(n)&&Sr(n.length)&&ru.call(n)==D},Eo=Kt(At),Co=Kt(function(n,t,r){return r?nt(n,t,r):tt(n,t)}),Uo=Ht(Co,function(n,t){return n===w?t:n}),Wo=Ht(Eo,Fr),$o=rr(_t),So=rr(vt),Fo=or(Nu),No=or(Tu),To=ir(_t),Lo=ir(vt),zo=wu?function(n){ -var t=null==n?w:n.constructor;return typeof t=="function"&&t.prototype===n||typeof n!="function"&&Er(n)?Lr(n):ge(n)?wu(n):[]}:Lr,Bo=fr(true),Do=fr(),Mo=le(function(n,t){if(null==n)return{};if("function"!=typeof t[0])return t=Gn(pt(t),Ye),Nr(n,ft(Re(n),t));var r=Bt(t[0],t[1],3);return Tr(n,function(n,t,e){return!r(n,t,e)})}),qo=le(function(n,t){return null==n?{}:"function"==typeof t[0]?Tr(n,Bt(t[0],t[1],3)):Nr(n,pt(t))}),Po=Gt(function(n,t,r){return t=t.toLowerCase(),n+(r?t.charAt(0).toUpperCase()+t.slice(1):t); -}),Ko=Gt(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Vo=ar(),Zo=ar(true),Yo=Gt(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),Go=Gt(function(n,t,r){return n+(r?" ":"")+(t.charAt(0).toUpperCase()+t.slice(1))}),Jo=le(function(n,t){try{return n.apply(w,t)}catch(r){return _e(r)?r:new Me(r)}}),Xo=le(function(n,t){return function(r){return Or(r,n,t)}}),Ho=le(function(n,t){return function(r){return Or(n,r,t)}}),Qo=_r("ceil"),ni=_r("floor"),ti=Qt(se,Iu),ri=Qt(Ae,Ru),ei=_r("round");return Nn.prototype=Tn.prototype, -Ln.prototype=$u(Tn.prototype),Ln.prototype.constructor=Ln,zn.prototype=$u(Tn.prototype),zn.prototype.constructor=zn,Bn.prototype["delete"]=function(n){return this.has(n)&&delete this.__data__[n]},Bn.prototype.get=function(n){return"__proto__"==n?w:this.__data__[n]},Bn.prototype.has=function(n){return"__proto__"!=n&&nu.call(this.__data__,n)},Bn.prototype.set=function(n,t){return"__proto__"!=n&&(this.__data__[n]=t),this},Dn.prototype.push=function(n){var t=this.data;typeof n=="string"||ge(n)?t.set.add(n):t.hash[n]=true; -},ce.Cache=Bn,Nn.after=function(n,t){if(typeof t!="function"){if(typeof n!="function")throw new Ge(L);var r=n;n=t,t=r}return n=mu(n=+n)?n:0,function(){return 1>--n?t.apply(this,arguments):void 0}},Nn.ary=function(n,t,r){return r&&Ur(n,t,r)&&(t=w),t=n&&null==t?n.length:bu(+t||0,0),gr(n,E,w,w,w,w,t)},Nn.assign=Co,Nn.at=no,Nn.before=fe,Nn.bind=_o,Nn.bindAll=vo,Nn.bindKey=go,Nn.callback=Se,Nn.chain=Qr,Nn.chunk=function(n,t,r){t=(r?Ur(n,t,r):null==t)?1:bu(yu(t)||1,1),r=0;for(var e=n?n.length:0,u=-1,o=Be(vu(e/t));r<e;)o[++u]=Et(n,r,r+=t); -return o},Nn.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];o&&(u[++e]=o)}return u},Nn.constant=function(n){return function(){return n}},Nn.countBy=to,Nn.create=function(n,t,r){var e=$u(n);return r&&Ur(n,t,r)&&(t=w),t?tt(e,t):e},Nn.curry=yo,Nn.curryRight=mo,Nn.debounce=ae,Nn.defaults=Uo,Nn.defaultsDeep=Wo,Nn.defer=wo,Nn.delay=bo,Nn.difference=Mu,Nn.drop=qr,Nn.dropRight=Pr,Nn.dropRightWhile=function(n,t,r){return n&&n.length?Nt(n,wr(t,r,3),true,true):[]},Nn.dropWhile=function(n,t,r){ -return n&&n.length?Nt(n,wr(t,r,3),true):[]},Nn.fill=function(n,t,r,e){var u=n?n.length:0;if(!u)return[];for(r&&typeof r!="number"&&Ur(n,t,r)&&(r=0,e=u),u=n.length,r=null==r?0:+r||0,0>r&&(r=-r>u?0:u+r),e=e===w||e>u?u:+e||0,0>e&&(e+=u),u=r>e?0:e>>>0,r>>>=0;r<u;)n[r++]=t;return n},Nn.filter=re,Nn.flatten=function(n,t,r){var e=n?n.length:0;return r&&Ur(n,t,r)&&(t=false),e?pt(n,t):[]},Nn.flattenDeep=function(n){return n&&n.length?pt(n,true):[]},Nn.flow=xo,Nn.flowRight=Ao,Nn.forEach=uo,Nn.forEachRight=oo,Nn.forIn=Fo, -Nn.forInRight=No,Nn.forOwn=To,Nn.forOwnRight=Lo,Nn.functions=Ie,Nn.groupBy=io,Nn.indexBy=fo,Nn.initial=function(n){return Pr(n,1)},Nn.intersection=Ku,Nn.invert=function(n,t,r){r&&Ur(n,t,r)&&(t=w),r=-1;for(var e=zo(n),u=e.length,o={};++r<u;){var i=e[r],f=n[i];t?nu.call(o,f)?o[f].push(i):o[f]=[i]:o[f]=i}return o},Nn.invoke=ao,Nn.keys=zo,Nn.keysIn=Re,Nn.map=ue,Nn.mapKeys=Bo,Nn.mapValues=Do,Nn.matches=Ne,Nn.matchesProperty=function(n,t){return xt(n,ot(t,true))},Nn.memoize=ce,Nn.merge=Eo,Nn.method=Xo,Nn.methodOf=Ho, -Nn.mixin=Te,Nn.modArgs=jo,Nn.negate=function(n){if(typeof n!="function")throw new Ge(L);return function(){return!n.apply(this,arguments)}},Nn.omit=Mo,Nn.once=function(n){return fe(2,n)},Nn.pairs=Oe,Nn.partial=ko,Nn.partialRight=Io,Nn.partition=co,Nn.pick=qo,Nn.pluck=function(n,t){return ue(n,ze(t))},Nn.property=ze,Nn.propertyOf=function(n){return function(t){return yt(n,Dr(t),t+"")}},Nn.pull=function(){var n=arguments,t=n[0];if(!t||!t.length)return t;for(var r=0,e=xr(),u=n.length;++r<u;)for(var o=0,i=n[r];-1<(o=e(t,i,o));)pu.call(t,o,1); -return t},Nn.pullAt=Vu,Nn.range=function(n,t,r){r&&Ur(n,t,r)&&(t=r=w),n=+n||0,r=null==r?1:+r||0,null==t?(t=n,n=0):t=+t||0;var e=-1;t=bu(vu((t-n)/(r||1)),0);for(var u=Be(t);++e<t;)u[e]=n,n+=r;return u},Nn.rearg=Ro,Nn.reject=function(n,t,r){var e=Oo(n)?Vn:lt;return t=wr(t,r,3),e(n,function(n,r,e){return!t(n,r,e)})},Nn.remove=function(n,t,r){var e=[];if(!n||!n.length)return e;var u=-1,o=[],i=n.length;for(t=wr(t,r,3);++u<i;)r=n[u],t(r,u,n)&&(e.push(r),o.push(u));return It(n,o),e},Nn.rest=Yr,Nn.restParam=le, -Nn.set=function(n,t,r){if(null==n)return n;var e=t+"";t=null!=n[e]||Wr(t,n)?[e]:Dr(t);for(var e=-1,u=t.length,o=u-1,i=n;null!=i&&++e<u;){var f=t[e];ge(i)&&(e==o?i[f]=r:null==i[f]&&(i[f]=Cr(t[e+1])?[]:{})),i=i[f]}return n},Nn.shuffle=function(n){return oe(n,Ru)},Nn.slice=function(n,t,r){var e=n?n.length:0;return e?(r&&typeof r!="number"&&Ur(n,t,r)&&(t=0,r=e),Et(n,t,r)):[]},Nn.sortBy=function(n,t,r){if(null==n)return[];r&&Ur(n,t,r)&&(t=w);var e=-1;return t=wr(t,r,3),n=wt(n,function(n,r,u){return{a:t(n,r,u), -b:++e,c:n}}),Ut(n,f)},Nn.sortByAll=po,Nn.sortByOrder=function(n,t,r,e){return null==n?[]:(e&&Ur(t,r,e)&&(r=w),Oo(t)||(t=null==t?[]:[t]),Oo(r)||(r=null==r?[]:[r]),Wt(n,t,r))},Nn.spread=function(n){if(typeof n!="function")throw new Ge(L);return function(t){return n.apply(this,t)}},Nn.take=function(n,t,r){return n&&n.length?((r?Ur(n,t,r):null==t)&&(t=1),Et(n,0,0>t?0:t)):[]},Nn.takeRight=function(n,t,r){var e=n?n.length:0;return e?((r?Ur(n,t,r):null==t)&&(t=1),t=e-(+t||0),Et(n,0>t?0:t)):[]},Nn.takeRightWhile=function(n,t,r){ -return n&&n.length?Nt(n,wr(t,r,3),false,true):[]},Nn.takeWhile=function(n,t,r){return n&&n.length?Nt(n,wr(t,r,3)):[]},Nn.tap=function(n,t,r){return t.call(r,n),n},Nn.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new Ge(L);return false===r?e=false:ge(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),ae(n,t,{leading:e,maxWait:+t,trailing:u})},Nn.thru=ne,Nn.times=function(n,t,r){if(n=yu(n),1>n||!mu(n))return[];var e=-1,u=Be(xu(n,4294967295));for(t=Bt(t,r,1);++e<n;)4294967295>e?u[e]=t(e):t(e); -return u},Nn.toArray=je,Nn.toPlainObject=ke,Nn.transform=function(n,t,r,e){var u=Oo(n)||xe(n);return t=wr(t,e,4),null==r&&(u||ge(n)?(e=n.constructor,r=u?Oo(n)?new e:[]:$u(ve(e)?e.prototype:w)):r={}),(u?Pn:_t)(n,function(n,e,u){return t(r,n,e,u)}),r},Nn.union=Gu,Nn.uniq=Gr,Nn.unzip=Jr,Nn.unzipWith=Xr,Nn.values=Ee,Nn.valuesIn=function(n){return Ft(n,Re(n))},Nn.where=function(n,t){return re(n,bt(t))},Nn.without=Ju,Nn.wrap=function(n,t){return t=null==t?Fe:t,gr(t,R,w,[n],[])},Nn.xor=function(){for(var n=-1,t=arguments.length;++n<t;){ -var r=arguments[n];if(Er(r))var e=e?Jn(ft(e,r),ft(r,e)):r}return e?St(e):[]},Nn.zip=Xu,Nn.zipObject=Hr,Nn.zipWith=Hu,Nn.backflow=Ao,Nn.collect=ue,Nn.compose=Ao,Nn.each=uo,Nn.eachRight=oo,Nn.extend=Co,Nn.iteratee=Se,Nn.methods=Ie,Nn.object=Hr,Nn.select=re,Nn.tail=Yr,Nn.unique=Gr,Te(Nn,Nn),Nn.add=function(n,t){return(+n||0)+(+t||0)},Nn.attempt=Jo,Nn.camelCase=Po,Nn.capitalize=function(n){return(n=u(n))&&n.charAt(0).toUpperCase()+n.slice(1)},Nn.ceil=Qo,Nn.clone=function(n,t,r,e){return t&&typeof t!="boolean"&&Ur(n,t,r)?t=false:typeof t=="function"&&(e=r, -r=t,t=false),typeof r=="function"?ot(n,t,Bt(r,e,3)):ot(n,t)},Nn.cloneDeep=function(n,t,r){return typeof t=="function"?ot(n,true,Bt(t,r,3)):ot(n,true)},Nn.deburr=Ce,Nn.endsWith=function(n,t,r){n=u(n),t+="";var e=n.length;return r=r===w?e:xu(0>r?0:+r||0,e),r-=t.length,0<=r&&n.indexOf(t,r)==r},Nn.escape=function(n){return(n=u(n))&&hn.test(n)?n.replace(sn,c):n},Nn.escapeRegExp=function(n){return(n=u(n))&&bn.test(n)?n.replace(wn,l):n||"(?:)"},Nn.every=te,Nn.find=ro,Nn.findIndex=qu,Nn.findKey=$o,Nn.findLast=eo, -Nn.findLastIndex=Pu,Nn.findLastKey=So,Nn.findWhere=function(n,t){return ro(n,bt(t))},Nn.first=Kr,Nn.floor=ni,Nn.get=function(n,t,r){return n=null==n?w:yt(n,Dr(t),t+""),n===w?r:n},Nn.gt=se,Nn.gte=function(n,t){return n>=t},Nn.has=function(n,t){if(null==n)return false;var r=nu.call(n,t);if(!r&&!Wr(t)){if(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),null==n)return false;t=Zr(t),r=nu.call(n,t)}return r||Sr(n.length)&&Cr(t,n.length)&&(Oo(n)||pe(n))},Nn.identity=Fe,Nn.includes=ee,Nn.indexOf=Vr,Nn.inRange=function(n,t,r){ -return t=+t||0,r===w?(r=t,t=0):r=+r||0,n>=xu(t,r)&&n<bu(t,r)},Nn.isArguments=pe,Nn.isArray=Oo,Nn.isBoolean=function(n){return true===n||false===n||h(n)&&ru.call(n)==M},Nn.isDate=function(n){return h(n)&&ru.call(n)==q},Nn.isElement=function(n){return!!n&&1===n.nodeType&&h(n)&&!me(n)},Nn.isEmpty=function(n){return null==n?true:Er(n)&&(Oo(n)||be(n)||pe(n)||h(n)&&ve(n.splice))?!n.length:!zo(n).length},Nn.isEqual=he,Nn.isError=_e,Nn.isFinite=function(n){return typeof n=="number"&&mu(n)},Nn.isFunction=ve,Nn.isMatch=function(n,t,r,e){ -return r=typeof r=="function"?Bt(r,e,3):w,mt(n,Ar(t),r)},Nn.isNaN=function(n){return de(n)&&n!=+n},Nn.isNative=ye,Nn.isNull=function(n){return null===n},Nn.isNumber=de,Nn.isObject=ge,Nn.isPlainObject=me,Nn.isRegExp=we,Nn.isString=be,Nn.isTypedArray=xe,Nn.isUndefined=function(n){return n===w},Nn.kebabCase=Ko,Nn.last=Zr,Nn.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(typeof r=="number")u=(0>r?bu(e+r,0):xu(r||0,e-1))+1;else if(r)return u=Lt(n,t,true)-1,n=n[u],(t===t?t===n:n!==n)?u:-1; -if(t!==t)return p(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},Nn.lt=Ae,Nn.lte=function(n,t){return n<=t},Nn.max=ti,Nn.min=ri,Nn.noConflict=function(){return Zn._=eu,this},Nn.noop=Le,Nn.now=ho,Nn.pad=function(n,t,r){n=u(n),t=+t;var e=n.length;return e<t&&mu(t)?(e=(t-e)/2,t=yu(e),e=vu(e),r=pr("",e,r),r.slice(0,t)+n+r):n},Nn.padLeft=Vo,Nn.padRight=Zo,Nn.parseInt=function(n,t,r){return(r?Ur(n,t,r):null==t)?t=0:t&&(t=+t),n=We(n),ju(n,t||(In.test(n)?16:10))},Nn.random=function(n,t,r){r&&Ur(n,t,r)&&(t=r=w); -var e=null==n,u=null==t;return null==r&&(u&&typeof n=="boolean"?(r=n,n=1):typeof t=="boolean"&&(r=t,u=true)),e&&u&&(t=1,u=false),n=+n||0,u?(t=n,n=0):t=+t||0,r||n%1||t%1?(r=ku(),xu(n+r*(t-n+fu("1e-"+((r+"").length-1))),t)):Rt(n,t)},Nn.reduce=lo,Nn.reduceRight=so,Nn.repeat=Ue,Nn.result=function(n,t,r){var e=null==n?w:n[t];return e===w&&(null==n||Wr(t,n)||(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),e=null==n?w:n[Zr(t)]),e=e===w?r:e),ve(e)?e.call(n):e},Nn.round=ei,Nn.runInContext=m,Nn.size=function(n){var t=n?Bu(n):0; -return Sr(t)?t:zo(n).length},Nn.snakeCase=Yo,Nn.some=ie,Nn.sortedIndex=Zu,Nn.sortedLastIndex=Yu,Nn.startCase=Go,Nn.startsWith=function(n,t,r){return n=u(n),r=null==r?0:xu(0>r?0:+r||0,n.length),n.lastIndexOf(t,r)==r},Nn.sum=function(n,t,r){if(r&&Ur(n,t,r)&&(t=w),t=wr(t,r,3),1==t.length){n=Oo(n)?n:zr(n),r=n.length;for(var e=0;r--;)e+=+t(n[r])||0;n=e}else n=$t(n,t);return n},Nn.template=function(n,t,r){var e=Nn.templateSettings;r&&Ur(n,t,r)&&(t=r=w),n=u(n),t=nt(tt({},r||t),e,Qn),r=nt(tt({},t.imports),e.imports,Qn); -var o,i,f=zo(r),a=Ft(r,f),c=0;r=t.interpolate||Cn;var l="__p+='";r=Ze((t.escape||Cn).source+"|"+r.source+"|"+(r===gn?jn:Cn).source+"|"+(t.evaluate||Cn).source+"|$","g");var p="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,u,f,a){return e||(e=u),l+=n.slice(c,a).replace(Un,s),r&&(o=true,l+="'+__e("+r+")+'"),f&&(i=true,l+="';"+f+";\n__p+='"),e&&(l+="'+((__t=("+e+"))==null?'':__t)+'"),c=a+t.length,t}),l+="';",(t=t.variable)||(l="with(obj){"+l+"}"),l=(i?l.replace(fn,""):l).replace(an,"$1").replace(cn,"$1;"), -l="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}",t=Jo(function(){return qe(f,p+"return "+l).apply(w,a)}),t.source=l,_e(t))throw t;return t},Nn.trim=We,Nn.trimLeft=function(n,t,r){var e=n;return(n=u(n))?n.slice((r?Ur(e,t,r):null==t)?g(n):o(n,t+"")):n},Nn.trimRight=function(n,t,r){var e=n;return(n=u(n))?(r?Ur(e,t,r):null==t)?n.slice(0,y(n)+1):n.slice(0,i(n,t+"")+1):n; -},Nn.trunc=function(n,t,r){r&&Ur(n,t,r)&&(t=w);var e=U;if(r=W,null!=t)if(ge(t)){var o="separator"in t?t.separator:o,e="length"in t?+t.length||0:e;r="omission"in t?u(t.omission):r}else e=+t||0;if(n=u(n),e>=n.length)return n;if(e-=r.length,1>e)return r;if(t=n.slice(0,e),null==o)return t+r;if(we(o)){if(n.slice(e).search(o)){var i,f=n.slice(0,e);for(o.global||(o=Ze(o.source,(kn.exec(o)||"")+"g")),o.lastIndex=0;n=o.exec(f);)i=n.index;t=t.slice(0,null==i?e:i)}}else n.indexOf(o,e)!=e&&(o=t.lastIndexOf(o), --1<o&&(t=t.slice(0,o)));return t+r},Nn.unescape=function(n){return(n=u(n))&&pn.test(n)?n.replace(ln,d):n},Nn.uniqueId=function(n){var t=++tu;return u(n)+t},Nn.words=$e,Nn.all=te,Nn.any=ie,Nn.contains=ee,Nn.eq=he,Nn.detect=ro,Nn.foldl=lo,Nn.foldr=so,Nn.head=Kr,Nn.include=ee,Nn.inject=lo,Te(Nn,function(){var n={};return _t(Nn,function(t,r){Nn.prototype[r]||(n[r]=t)}),n}(),false),Nn.sample=oe,Nn.prototype.sample=function(n){return this.__chain__||null!=n?this.thru(function(t){return oe(t,n)}):oe(this.value()); -},Nn.VERSION=b,Pn("bind bindKey curry curryRight partial partialRight".split(" "),function(n){Nn[n].placeholder=Nn}),Pn(["drop","take"],function(n,t){zn.prototype[n]=function(r){var e=this.__filtered__;if(e&&!t)return new zn(this);r=null==r?1:bu(yu(r)||0,0);var u=this.clone();return e?u.__takeCount__=xu(u.__takeCount__,r):u.__views__.push({size:r,type:n+(0>u.__dir__?"Right":"")}),u},zn.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),Pn(["filter","map","takeWhile"],function(n,t){ -var r=t+1,e=r!=T;zn.prototype[n]=function(n,t){var u=this.clone();return u.__iteratees__.push({iteratee:wr(n,t,1),type:r}),u.__filtered__=u.__filtered__||e,u}}),Pn(["first","last"],function(n,t){var r="take"+(t?"Right":"");zn.prototype[n]=function(){return this[r](1).value()[0]}}),Pn(["initial","rest"],function(n,t){var r="drop"+(t?"":"Right");zn.prototype[n]=function(){return this.__filtered__?new zn(this):this[r](1)}}),Pn(["pluck","where"],function(n,t){var r=t?"filter":"map",e=t?bt:ze;zn.prototype[n]=function(n){ -return this[r](e(n))}}),zn.prototype.compact=function(){return this.filter(Fe)},zn.prototype.reject=function(n,t){return n=wr(n,t,1),this.filter(function(t){return!n(t)})},zn.prototype.slice=function(n,t){n=null==n?0:+n||0;var r=this;return r.__filtered__&&(0<n||0>t)?new zn(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==w&&(t=+t||0,r=0>t?r.dropRight(-t):r.take(t-n)),r)},zn.prototype.takeRightWhile=function(n,t){return this.reverse().takeWhile(n,t).reverse()},zn.prototype.toArray=function(){return this.take(Ru); -},_t(zn.prototype,function(n,t){var r=/^(?:filter|map|reject)|While$/.test(t),e=/^(?:first|last)$/.test(t),u=Nn[e?"take"+("last"==t?"Right":""):t];u&&(Nn.prototype[t]=function(){function t(n){return e&&i?u(n,1)[0]:u.apply(w,Jn([n],o))}var o=e?[1]:arguments,i=this.__chain__,f=this.__wrapped__,a=!!this.__actions__.length,c=f instanceof zn,l=o[0],s=c||Oo(f);return s&&r&&typeof l=="function"&&1!=l.length&&(c=s=false),l={func:ne,args:[t],thisArg:w},a=c&&!a,e&&!i?a?(f=f.clone(),f.__actions__.push(l),n.call(f)):u.call(w,this.value())[0]:!e&&s?(f=a?f:new zn(this), -f=n.apply(f,o),f.__actions__.push(l),new Ln(f,i)):this.thru(t)})}),Pn("join pop push replace shift sort splice split unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?He:Je)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:join|pop|replace|shift)$/.test(n);Nn.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),_t(zn.prototype,function(n,t){var r=Nn[t];if(r){var e=r.name+"";(Wu[e]||(Wu[e]=[])).push({ -name:t,func:r})}}),Wu[sr(w,A).name]=[{name:"wrapper",func:w}],zn.prototype.clone=function(){var n=new zn(this.__wrapped__);return n.__actions__=qn(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=qn(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=qn(this.__views__),n},zn.prototype.reverse=function(){if(this.__filtered__){var n=new zn(this);n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},zn.prototype.value=function(){ -var n,t=this.__wrapped__.value(),r=this.__dir__,e=Oo(t),u=0>r,o=e?t.length:0;n=o;for(var i=this.__views__,f=0,a=-1,c=i.length;++a<c;){var l=i[a],s=l.size;switch(l.type){case"drop":f+=s;break;case"dropRight":n-=s;break;case"take":n=xu(n,f+s);break;case"takeRight":f=bu(f,n-s)}}if(n={start:f,end:n},i=n.start,f=n.end,n=f-i,u=u?f:i-1,i=this.__iteratees__,f=i.length,a=0,c=xu(n,this.__takeCount__),!e||o<F||o==n&&c==n)return Tt(t,this.__actions__);e=[];n:for(;n--&&a<c;){for(u+=r,o=-1,l=t[u];++o<f;){var p=i[o],s=p.type,p=p.iteratee(l); -if(s==T)l=p;else if(!p){if(s==N)continue n;break n}}e[a++]=l}return e},Nn.prototype.chain=function(){return Qr(this)},Nn.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Nn.prototype.concat=Qu,Nn.prototype.plant=function(n){for(var t,r=this;r instanceof Tn;){var e=Mr(r);t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},Nn.prototype.reverse=function(){function n(n){return n.reverse()}var t=this.__wrapped__;return t instanceof zn?(this.__actions__.length&&(t=new zn(this)), -t=t.reverse(),t.__actions__.push({func:ne,args:[n],thisArg:w}),new Ln(t,this.__chain__)):this.thru(n)},Nn.prototype.toString=function(){return this.value()+""},Nn.prototype.run=Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return Tt(this.__wrapped__,this.__actions__)},Nn.prototype.collect=Nn.prototype.map,Nn.prototype.head=Nn.prototype.first,Nn.prototype.select=Nn.prototype.filter,Nn.prototype.tail=Nn.prototype.rest,Nn}var w,b="3.10.1",x=1,A=2,j=4,k=8,I=16,R=32,O=64,E=128,C=256,U=30,W="...",$=150,S=16,F=200,N=1,T=2,L="Expected a function",z="__lodash_placeholder__",B="[object Arguments]",D="[object Array]",M="[object Boolean]",q="[object Date]",P="[object Error]",K="[object Function]",V="[object Number]",Z="[object Object]",Y="[object RegExp]",G="[object String]",J="[object ArrayBuffer]",X="[object Float32Array]",H="[object Float64Array]",Q="[object Int8Array]",nn="[object Int16Array]",tn="[object Int32Array]",rn="[object Uint8Array]",en="[object Uint8ClampedArray]",un="[object Uint16Array]",on="[object Uint32Array]",fn=/\b__p\+='';/g,an=/\b(__p\+=)''\+/g,cn=/(__e\(.*?\)|\b__t\))\+'';/g,ln=/&(?:amp|lt|gt|quot|#39|#96);/g,sn=/[&<>"'`]/g,pn=RegExp(ln.source),hn=RegExp(sn.source),_n=/<%-([\s\S]+?)%>/g,vn=/<%([\s\S]+?)%>/g,gn=/<%=([\s\S]+?)%>/g,yn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,dn=/^\w*$/,mn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,wn=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,bn=RegExp(wn.source),xn=/[\u0300-\u036f\ufe20-\ufe23]/g,An=/\\(\\)?/g,jn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,kn=/\w*$/,In=/^0[xX]/,Rn=/^\[object .+?Constructor\]$/,On=/^\d+$/,En=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Cn=/($^)/,Un=/['\n\r\u2028\u2029\\]/g,Wn=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),$n="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Sn={}; -Sn[X]=Sn[H]=Sn[Q]=Sn[nn]=Sn[tn]=Sn[rn]=Sn[en]=Sn[un]=Sn[on]=true,Sn[B]=Sn[D]=Sn[J]=Sn[M]=Sn[q]=Sn[P]=Sn[K]=Sn["[object Map]"]=Sn[V]=Sn[Z]=Sn[Y]=Sn["[object Set]"]=Sn[G]=Sn["[object WeakMap]"]=false;var Fn={};Fn[B]=Fn[D]=Fn[J]=Fn[M]=Fn[q]=Fn[X]=Fn[H]=Fn[Q]=Fn[nn]=Fn[tn]=Fn[V]=Fn[Z]=Fn[Y]=Fn[G]=Fn[rn]=Fn[en]=Fn[un]=Fn[on]=true,Fn[P]=Fn[K]=Fn["[object Map]"]=Fn["[object Set]"]=Fn["[object WeakMap]"]=false;var Nn={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a", -"\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y", -"\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss"},Tn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Ln={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},zn={"function":true,object:true},Bn={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Dn={"\\":"\\", -"'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Mn=zn[typeof exports]&&exports&&!exports.nodeType&&exports,qn=zn[typeof module]&&module&&!module.nodeType&&module,Pn=zn[typeof self]&&self&&self.Object&&self,Kn=zn[typeof window]&&window&&window.Object&&window,Vn=qn&&qn.exports===Mn&&Mn,Zn=Mn&&qn&&typeof global=="object"&&global&&global.Object&&global||Kn!==(this&&this.window)&&Kn||Pn||this,Yn=m();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Zn._=Yn, define(function(){ -return Yn})):Mn&&qn?Vn?(qn.exports=Yn)._=Yn:Mn._=Yn:Zn._=Yn}).call(this);
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/moment.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/moment.js deleted file mode 100755 index 30e9239a..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/moment.js +++ /dev/null @@ -1,3195 +0,0 @@ -//! moment.js -//! version : 2.10.6 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com - -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.moment = factory() -}(this, function () { 'use strict'; - - var hookCallback; - - function utils_hooks__hooks () { - return hookCallback.apply(null, arguments); - } - - // This is done to register the method called with moment() - // without creating circular dependencies. - function setHookCallback (callback) { - hookCallback = callback; - } - - function isArray(input) { - return Object.prototype.toString.call(input) === '[object Array]'; - } - - function isDate(input) { - return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; - } - - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); - } - return res; - } - - function hasOwnProp(a, b) { - return Object.prototype.hasOwnProperty.call(a, b); - } - - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } - } - - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } - - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; - } - - return a; - } - - function create_utc__createUTC (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, true).utc(); - } - - function defaultParsingFlags() { - // We need to deep clone this object. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso : false - }; - } - - function getParsingFlags(m) { - if (m._pf == null) { - m._pf = defaultParsingFlags(); - } - return m._pf; - } - - function valid__isValid(m) { - if (m._isValid == null) { - var flags = getParsingFlags(m); - m._isValid = !isNaN(m._d.getTime()) && - flags.overflow < 0 && - !flags.empty && - !flags.invalidMonth && - !flags.invalidWeekday && - !flags.nullInput && - !flags.invalidFormat && - !flags.userInvalidated; - - if (m._strict) { - m._isValid = m._isValid && - flags.charsLeftOver === 0 && - flags.unusedTokens.length === 0 && - flags.bigHour === undefined; - } - } - return m._isValid; - } - - function valid__createInvalid (flags) { - var m = create_utc__createUTC(NaN); - if (flags != null) { - extend(getParsingFlags(m), flags); - } - else { - getParsingFlags(m).userInvalidated = true; - } - - return m; - } - - var momentProperties = utils_hooks__hooks.momentProperties = []; - - function copyConfig(to, from) { - var i, prop, val; - - if (typeof from._isAMomentObject !== 'undefined') { - to._isAMomentObject = from._isAMomentObject; - } - if (typeof from._i !== 'undefined') { - to._i = from._i; - } - if (typeof from._f !== 'undefined') { - to._f = from._f; - } - if (typeof from._l !== 'undefined') { - to._l = from._l; - } - if (typeof from._strict !== 'undefined') { - to._strict = from._strict; - } - if (typeof from._tzm !== 'undefined') { - to._tzm = from._tzm; - } - if (typeof from._isUTC !== 'undefined') { - to._isUTC = from._isUTC; - } - if (typeof from._offset !== 'undefined') { - to._offset = from._offset; - } - if (typeof from._pf !== 'undefined') { - to._pf = getParsingFlags(from); - } - if (typeof from._locale !== 'undefined') { - to._locale = from._locale; - } - - if (momentProperties.length > 0) { - for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (typeof val !== 'undefined') { - to[prop] = val; - } - } - } - - return to; - } - - var updateInProgress = false; - - // Moment prototype object - function Moment(config) { - copyConfig(this, config); - this._d = new Date(config._d != null ? config._d.getTime() : NaN); - // Prevent infinite loop in case updateOffset creates new moment - // objects. - if (updateInProgress === false) { - updateInProgress = true; - utils_hooks__hooks.updateOffset(this); - updateInProgress = false; - } - } - - function isMoment (obj) { - return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); - } - - function absFloor (number) { - if (number < 0) { - return Math.ceil(number); - } else { - return Math.floor(number); - } - } - - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; - - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - value = absFloor(coercedNumber); - } - - return value; - } - - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), - lengthDiff = Math.abs(array1.length - array2.length), - diffs = 0, - i; - for (i = 0; i < len; i++) { - if ((dontConvert && array1[i] !== array2[i]) || - (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; - } - } - return diffs + lengthDiff; - } - - function Locale() { - } - - var locales = {}; - var globalLocale; - - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; - } - - // pick the locale from the array - // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each - // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - function chooseLocale(names) { - var i = 0, j, next, locale, split; - - while (i < names.length) { - split = normalizeLocale(names[i]).split('-'); - j = split.length; - next = normalizeLocale(names[i + 1]); - next = next ? next.split('-') : null; - while (j > 0) { - locale = loadLocale(split.slice(0, j).join('-')); - if (locale) { - return locale; - } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; - } - j--; - } - i++; - } - return null; - } - - function loadLocale(name) { - var oldLocale = null; - // TODO: Find a better way to register and load all the locales in Node - if (!locales[name] && typeof module !== 'undefined' && - module && module.exports) { - try { - oldLocale = globalLocale._abbr; - require('./locale/' + name); - // because defineLocale currently also sets the global locale, we - // want to undo that for lazy loaded locales - locale_locales__getSetGlobalLocale(oldLocale); - } catch (e) { } - } - return locales[name]; - } - - // This function will load locale and then set the global locale. If - // no arguments are passed in, it will simply return the current global - // locale key. - function locale_locales__getSetGlobalLocale (key, values) { - var data; - if (key) { - if (typeof values === 'undefined') { - data = locale_locales__getLocale(key); - } - else { - data = defineLocale(key, values); - } - - if (data) { - // moment.duration._locale = moment._locale = data; - globalLocale = data; - } - } - - return globalLocale._abbr; - } - - function defineLocale (name, values) { - if (values !== null) { - values.abbr = name; - locales[name] = locales[name] || new Locale(); - locales[name].set(values); - - // backwards compat for now: also set the locale - locale_locales__getSetGlobalLocale(name); - - return locales[name]; - } else { - // useful for testing - delete locales[name]; - return null; - } - } - - // returns locale data - function locale_locales__getLocale (key) { - var locale; - - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } - - if (!key) { - return globalLocale; - } - - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); - if (locale) { - return locale; - } - key = [key]; - } - - return chooseLocale(key); - } - - var aliases = {}; - - function addUnitAlias (unit, shorthand) { - var lowerCase = unit.toLowerCase(); - aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; - } - - function normalizeUnits(units) { - return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; - } - - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; - - for (prop in inputObject) { - if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } - } - - return normalizedInput; - } - - function makeGetSet (unit, keepTime) { - return function (value) { - if (value != null) { - get_set__set(this, unit, value); - utils_hooks__hooks.updateOffset(this, keepTime); - return this; - } else { - return get_set__get(this, unit); - } - }; - } - - function get_set__get (mom, unit) { - return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); - } - - function get_set__set (mom, unit, value) { - return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } - - // MOMENTS - - function getSet (units, value) { - var unit; - if (typeof units === 'object') { - for (unit in units) { - this.set(unit, units[unit]); - } - } else { - units = normalizeUnits(units); - if (typeof this[units] === 'function') { - return this[units](value); - } - } - return this; - } - - function zeroFill(number, targetLength, forceSign) { - var absNumber = '' + Math.abs(number), - zerosToFill = targetLength - absNumber.length, - sign = number >= 0; - return (sign ? (forceSign ? '+' : '') : '-') + - Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; - } - - var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; - - var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; - - var formatFunctions = {}; - - var formatTokenFunctions = {}; - - // token: 'M' - // padded: ['MM', 2] - // ordinal: 'Mo' - // callback: function () { this.month() + 1 } - function addFormatToken (token, padded, ordinal, callback) { - var func = callback; - if (typeof callback === 'string') { - func = function () { - return this[callback](); - }; - } - if (token) { - formatTokenFunctions[token] = func; - } - if (padded) { - formatTokenFunctions[padded[0]] = function () { - return zeroFill(func.apply(this, arguments), padded[1], padded[2]); - }; - } - if (ordinal) { - formatTokenFunctions[ordinal] = function () { - return this.localeData().ordinal(func.apply(this, arguments), token); - }; - } - } - - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); - } - return input.replace(/\\/g, ''); - } - - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; - - for (i = 0, length = array.length; i < length; i++) { - if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; - } else { - array[i] = removeFormattingTokens(array[i]); - } - } - - return function (mom) { - var output = ''; - for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; - } - return output; - }; - } - - // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } - - format = expandFormat(format, m.localeData()); - formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); - - return formatFunctions[format](m); - } - - function expandFormat(format, locale) { - var i = 5; - - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } - - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } - - return format; - } - - var match1 = /\d/; // 0 - 9 - var match2 = /\d\d/; // 00 - 99 - var match3 = /\d{3}/; // 000 - 999 - var match4 = /\d{4}/; // 0000 - 9999 - var match6 = /[+-]?\d{6}/; // -999999 - 999999 - var match1to2 = /\d\d?/; // 0 - 99 - var match1to3 = /\d{1,3}/; // 0 - 999 - var match1to4 = /\d{1,4}/; // 0 - 9999 - var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 - - var matchUnsigned = /\d+/; // 0 - inf - var matchSigned = /[+-]?\d+/; // -inf - inf - - var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z - - var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 - - // any word (or two) characters or numbers including two/three word month in arabic. - var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; - - var regexes = {}; - - function isFunction (sth) { - // https://github.com/moment/moment/issues/2325 - return typeof sth === 'function' && - Object.prototype.toString.call(sth) === '[object Function]'; - } - - - function addRegexToken (token, regex, strictRegex) { - regexes[token] = isFunction(regex) ? regex : function (isStrict) { - return (isStrict && strictRegex) ? strictRegex : regex; - }; - } - - function getParseRegexForToken (token, config) { - if (!hasOwnProp(regexes, token)) { - return new RegExp(unescapeFormat(token)); - } - - return regexes[token](config._strict, config._locale); - } - - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function unescapeFormat(s) { - return s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - }).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - } - - var tokens = {}; - - function addParseToken (token, callback) { - var i, func = callback; - if (typeof token === 'string') { - token = [token]; - } - if (typeof callback === 'number') { - func = function (input, array) { - array[callback] = toInt(input); - }; - } - for (i = 0; i < token.length; i++) { - tokens[token[i]] = func; - } - } - - function addWeekParseToken (token, callback) { - addParseToken(token, function (input, array, config, token) { - config._w = config._w || {}; - callback(input, config._w, config, token); - }); - } - - function addTimeToArrayFromToken(token, input, config) { - if (input != null && hasOwnProp(tokens, token)) { - tokens[token](input, config._a, config, token); - } - } - - var YEAR = 0; - var MONTH = 1; - var DATE = 2; - var HOUR = 3; - var MINUTE = 4; - var SECOND = 5; - var MILLISECOND = 6; - - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } - - // FORMATTING - - addFormatToken('M', ['MM', 2], 'Mo', function () { - return this.month() + 1; - }); - - addFormatToken('MMM', 0, 0, function (format) { - return this.localeData().monthsShort(this, format); - }); - - addFormatToken('MMMM', 0, 0, function (format) { - return this.localeData().months(this, format); - }); - - // ALIASES - - addUnitAlias('month', 'M'); - - // PARSING - - addRegexToken('M', match1to2); - addRegexToken('MM', match1to2, match2); - addRegexToken('MMM', matchWord); - addRegexToken('MMMM', matchWord); - - addParseToken(['M', 'MM'], function (input, array) { - array[MONTH] = toInt(input) - 1; - }); - - addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { - var month = config._locale.monthsParse(input, token, config._strict); - // if we didn't find a month name, mark the date as invalid. - if (month != null) { - array[MONTH] = month; - } else { - getParsingFlags(config).invalidMonth = input; - } - }); - - // LOCALES - - var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); - function localeMonths (m) { - return this._months[m.month()]; - } - - var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); - function localeMonthsShort (m) { - return this._monthsShort[m.month()]; - } - - function localeMonthsParse (monthName, format, strict) { - var i, mom, regex; - - if (!this._monthsParse) { - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - } - - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - if (strict && !this._longMonthsParse[i]) { - this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); - this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); - } - if (!strict && !this._monthsParse[i]) { - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { - return i; - } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { - return i; - } else if (!strict && this._monthsParse[i].test(monthName)) { - return i; - } - } - } - - // MOMENTS - - function setMonth (mom, value) { - var dayOfMonth; - - // TODO: Move this out of here! - if (typeof value === 'string') { - value = mom.localeData().monthsParse(value); - // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } - } - - dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; - } - - function getSetMonth (value) { - if (value != null) { - setMonth(this, value); - utils_hooks__hooks.updateOffset(this, true); - return this; - } else { - return get_set__get(this, 'Month'); - } - } - - function getDaysInMonth () { - return daysInMonth(this.year(), this.month()); - } - - function checkOverflow (m) { - var overflow; - var a = m._a; - - if (a && getParsingFlags(m).overflow === -2) { - overflow = - a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : - a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : - a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : - a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : - a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : - a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : - -1; - - if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } - - getParsingFlags(m).overflow = overflow; - } - - return m; - } - - function warn(msg) { - if (utils_hooks__hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) { - // console.warn('Deprecation warning: ' + msg); - } - } - - function deprecate(msg, fn) { - var firstTime = true; - - return extend(function () { - if (firstTime) { - warn(msg + '\n' + (new Error()).stack); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); - } - - var deprecations = {}; - - function deprecateSimple(name, msg) { - if (!deprecations[name]) { - warn(msg); - deprecations[name] = true; - } - } - - utils_hooks__hooks.suppressDeprecationWarnings = false; - - var from_string__isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; - - var isoDates = [ - ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], - ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], - ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], - ['GGGG-[W]WW', /\d{4}-W\d{2}/], - ['YYYY-DDD', /\d{4}-\d{3}/] - ]; - - // iso time formats and regexes - var isoTimes = [ - ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], - ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], - ['HH:mm', /(T| )\d\d:\d\d/], - ['HH', /(T| )\d\d/] - ]; - - var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; - - // date from iso format - function configFromISO(config) { - var i, l, - string = config._i, - match = from_string__isoRegex.exec(string); - - if (match) { - getParsingFlags(config).iso = true; - for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(string)) { - config._f = isoDates[i][0]; - break; - } - } - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(string)) { - // match[6] should be 'T' or space - config._f += (match[6] || ' ') + isoTimes[i][0]; - break; - } - } - if (string.match(matchOffset)) { - config._f += 'Z'; - } - configFromStringAndFormat(config); - } else { - config._isValid = false; - } - } - - // date from iso format or fallback - function configFromString(config) { - var matched = aspNetJsonRegex.exec(config._i); - - if (matched !== null) { - config._d = new Date(+matched[1]); - return; - } - - configFromISO(config); - if (config._isValid === false) { - delete config._isValid; - utils_hooks__hooks.createFromInputFallback(config); - } - } - - utils_hooks__hooks.createFromInputFallback = deprecate( - 'moment construction falls back to js Date. This is ' + - 'discouraged and will be removed in upcoming major ' + - 'release. Please refer to ' + - 'https://github.com/moment/moment/issues/1407 for more info.', - function (config) { - config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); - } - ); - - function createDate (y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); - - //the date constructor doesn't accept years < 1970 - if (y < 1970) { - date.setFullYear(y); - } - return date; - } - - function createUTCDate (y) { - var date = new Date(Date.UTC.apply(null, arguments)); - if (y < 1970) { - date.setUTCFullYear(y); - } - return date; - } - - addFormatToken(0, ['YY', 2], 0, function () { - return this.year() % 100; - }); - - addFormatToken(0, ['YYYY', 4], 0, 'year'); - addFormatToken(0, ['YYYYY', 5], 0, 'year'); - addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); - - // ALIASES - - addUnitAlias('year', 'y'); - - // PARSING - - addRegexToken('Y', matchSigned); - addRegexToken('YY', match1to2, match2); - addRegexToken('YYYY', match1to4, match4); - addRegexToken('YYYYY', match1to6, match6); - addRegexToken('YYYYYY', match1to6, match6); - - addParseToken(['YYYYY', 'YYYYYY'], YEAR); - addParseToken('YYYY', function (input, array) { - array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); - }); - addParseToken('YY', function (input, array) { - array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - - // HELPERS - - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } - - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - // HOOKS - - utils_hooks__hooks.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; - - // MOMENTS - - var getSetYear = makeGetSet('FullYear', false); - - function getIsLeapYear () { - return isLeapYear(this.year()); - } - - addFormatToken('w', ['ww', 2], 'wo', 'week'); - addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); - - // ALIASES - - addUnitAlias('week', 'w'); - addUnitAlias('isoWeek', 'W'); - - // PARSING - - addRegexToken('w', match1to2); - addRegexToken('ww', match1to2, match2); - addRegexToken('W', match1to2); - addRegexToken('WW', match1to2, match2); - - addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { - week[token.substr(0, 1)] = toInt(input); - }); - - // HELPERS - - // firstDayOfWeek 0 = sun, 6 = sat - // the day of the week that starts the week - // (usually sunday or monday) - // firstDayOfWeekOfYear 0 = sun, 6 = sat - // the first week is the week that contains the first - // of this day of the week - // (eg. ISO weeks use thursday (4)) - function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { - var end = firstDayOfWeekOfYear - firstDayOfWeek, - daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), - adjustedMoment; - - - if (daysToDayOfWeek > end) { - daysToDayOfWeek -= 7; - } - - if (daysToDayOfWeek < end - 7) { - daysToDayOfWeek += 7; - } - - adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd'); - return { - week: Math.ceil(adjustedMoment.dayOfYear() / 7), - year: adjustedMoment.year() - }; - } - - // LOCALES - - function localeWeek (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - } - - var defaultLocaleWeek = { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - }; - - function localeFirstDayOfWeek () { - return this._week.dow; - } - - function localeFirstDayOfYear () { - return this._week.doy; - } - - // MOMENTS - - function getSetWeek (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); - } - - function getSetISOWeek (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); - } - - addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); - - // ALIASES - - addUnitAlias('dayOfYear', 'DDD'); - - // PARSING - - addRegexToken('DDD', match1to3); - addRegexToken('DDDD', match3); - addParseToken(['DDD', 'DDDD'], function (input, array, config) { - config._dayOfYear = toInt(input); - }); - - // HELPERS - - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { - var week1Jan = 6 + firstDayOfWeek - firstDayOfWeekOfYear, janX = createUTCDate(year, 0, 1 + week1Jan), d = janX.getUTCDay(), dayOfYear; - if (d < firstDayOfWeek) { - d += 7; - } - - weekday = weekday != null ? 1 * weekday : firstDayOfWeek; - - dayOfYear = 1 + week1Jan + 7 * (week - 1) - d + weekday; - - return { - year: dayOfYear > 0 ? year : year - 1, - dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear - }; - } - - // MOMENTS - - function getSetDayOfYear (input) { - var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); - } - - // Pick the first defined of two or three arguments. - function defaults(a, b, c) { - if (a != null) { - return a; - } - if (b != null) { - return b; - } - return c; - } - - function currentDateArray(config) { - var now = new Date(); - if (config._useUTC) { - return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()]; - } - return [now.getFullYear(), now.getMonth(), now.getDate()]; - } - - // convert an array to a date. - // the array should mirror the parameters below - // note: all values past the year are optional and will default to the lowest possible value. - // [year, month, day , hour, minute, second, millisecond] - function configFromArray (config) { - var i, date, input = [], currentDate, yearToUse; - - if (config._d) { - return; - } - - currentDate = currentDateArray(config); - - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } - - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); - - if (config._dayOfYear > daysInYear(yearToUse)) { - getParsingFlags(config)._overflowDayOfYear = true; - } - - date = createUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } - - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } - - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } - - // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && - config._a[MINUTE] === 0 && - config._a[SECOND] === 0 && - config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; - } - - config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); - // Apply timezone offset from input. The actual utcOffset can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); - } - - if (config._nextDay) { - config._a[HOUR] = 24; - } - } - - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp; - - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; - - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); - week = defaults(w.W, 1); - weekday = defaults(w.E, 1); - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; - - weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); - week = defaults(w.w, 1); - - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < dow) { - ++week; - } - } else if (w.e != null) { - // local weekday -- counting starts from begining of week - weekday = w.e + dow; - } else { - // default to begining of week - weekday = dow; - } - } - temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); - - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; - } - - utils_hooks__hooks.ISO_8601 = function () {}; - - // date from string and format string - function configFromStringAndFormat(config) { - // TODO: Move this to another part of the creation flow to prevent circular deps - if (config._f === utils_hooks__hooks.ISO_8601) { - configFromISO(config); - return; - } - - config._a = []; - getParsingFlags(config).empty = true; - - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var string = '' + config._i, - i, parsedInput, tokens, token, skipped, - stringLength = string.length, - totalParsedInputLength = 0; - - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - getParsingFlags(config).unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; - } - // don't parse if it's not a known token - if (formatTokenFunctions[token]) { - if (parsedInput) { - getParsingFlags(config).empty = false; - } - else { - getParsingFlags(config).unusedTokens.push(token); - } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - getParsingFlags(config).unusedTokens.push(token); - } - } - - // add remaining unparsed input length to the string - getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - getParsingFlags(config).unusedInput.push(string); - } - - // clear _12h flag if hour is <= 12 - if (getParsingFlags(config).bigHour === true && - config._a[HOUR] <= 12 && - config._a[HOUR] > 0) { - getParsingFlags(config).bigHour = undefined; - } - // handle meridiem - config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); - - configFromArray(config); - checkOverflow(config); - } - - - function meridiemFixWrap (locale, hour, meridiem) { - var isPm; - - if (meridiem == null) { - // nothing to do - return hour; - } - if (locale.meridiemHour != null) { - return locale.meridiemHour(hour, meridiem); - } else if (locale.isPM != null) { - // Fallback - isPm = locale.isPM(meridiem); - if (isPm && hour < 12) { - hour += 12; - } - if (!isPm && hour === 12) { - hour = 0; - } - return hour; - } else { - // this is not supposed to happen - return hour; - } - } - - function configFromStringAndArray(config) { - var tempConfig, - bestMoment, - - scoreToBeat, - i, - currentScore; - - if (config._f.length === 0) { - getParsingFlags(config).invalidFormat = true; - config._d = new Date(NaN); - return; - } - - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._f = config._f[i]; - configFromStringAndFormat(tempConfig); - - if (!valid__isValid(tempConfig)) { - continue; - } - - // if there is any input that was not parsed add a penalty for that format - currentScore += getParsingFlags(tempConfig).charsLeftOver; - - //or tokens - currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; - - getParsingFlags(tempConfig).score = currentScore; - - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } - - extend(config, bestMoment || tempConfig); - } - - function configFromObject(config) { - if (config._d) { - return; - } - - var i = normalizeObjectUnits(config._i); - config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond]; - - configFromArray(config); - } - - function createFromConfig (config) { - var res = new Moment(checkOverflow(prepareConfig(config))); - if (res._nextDay) { - // Adding is smart enough around DST - res.add(1, 'd'); - res._nextDay = undefined; - } - - return res; - } - - function prepareConfig (config) { - var input = config._i, - format = config._f; - - config._locale = config._locale || locale_locales__getLocale(config._l); - - if (input === null || (format === undefined && input === '')) { - return valid__createInvalid({nullInput: true}); - } - - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } - - if (isMoment(input)) { - return new Moment(checkOverflow(input)); - } else if (isArray(format)) { - configFromStringAndArray(config); - } else if (format) { - configFromStringAndFormat(config); - } else if (isDate(input)) { - config._d = input; - } else { - configFromInput(config); - } - - return config; - } - - function configFromInput(config) { - var input = config._i; - if (input === undefined) { - config._d = new Date(); - } else if (isDate(input)) { - config._d = new Date(+input); - } else if (typeof input === 'string') { - configFromString(config); - } else if (isArray(input)) { - config._a = map(input.slice(0), function (obj) { - return parseInt(obj, 10); - }); - configFromArray(config); - } else if (typeof(input) === 'object') { - configFromObject(config); - } else if (typeof(input) === 'number') { - // from milliseconds - config._d = new Date(input); - } else { - utils_hooks__hooks.createFromInputFallback(config); - } - } - - function createLocalOrUTC (input, format, locale, strict, isUTC) { - var c = {}; - - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c._isAMomentObject = true; - c._useUTC = c._isUTC = isUTC; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; - - return createFromConfig(c); - } - - function local__createLocal (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, false); - } - - var prototypeMin = deprecate( - 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', - function () { - var other = local__createLocal.apply(null, arguments); - return other < this ? this : other; - } - ); - - var prototypeMax = deprecate( - 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', - function () { - var other = local__createLocal.apply(null, arguments); - return other > this ? this : other; - } - ); - - // Pick a moment m from moments so that m[fn](other) is true for all - // other. This relies on the function fn to be transitive. - // - // moments should either be an array of moment objects or an array, whose - // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return local__createLocal(); - } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { - if (!moments[i].isValid() || moments[i][fn](res)) { - res = moments[i]; - } - } - return res; - } - - // TODO: Use [].sort instead? - function min () { - var args = [].slice.call(arguments, 0); - - return pickBy('isBefore', args); - } - - function max () { - var args = [].slice.call(arguments, 0); - - return pickBy('isAfter', args); - } - - function Duration (duration) { - var normalizedInput = normalizeObjectUnits(duration), - years = normalizedInput.year || 0, - quarters = normalizedInput.quarter || 0, - months = normalizedInput.month || 0, - weeks = normalizedInput.week || 0, - days = normalizedInput.day || 0, - hours = normalizedInput.hour || 0, - minutes = normalizedInput.minute || 0, - seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; - - // representation for dateAddRemove - this._milliseconds = +milliseconds + - seconds * 1e3 + // 1000 - minutes * 6e4 + // 1000 * 60 - hours * 36e5; // 1000 * 60 * 60 - // Because of dateAddRemove treats 24 hours as different from a - // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; - // It is impossible translate months into days without knowing - // which months you are are talking about, so we have to store - // it separately. - this._months = +months + - quarters * 3 + - years * 12; - - this._data = {}; - - this._locale = locale_locales__getLocale(); - - this._bubble(); - } - - function isDuration (obj) { - return obj instanceof Duration; - } - - function offset (token, separator) { - addFormatToken(token, 0, 0, function () { - var offset = this.utcOffset(); - var sign = '+'; - if (offset < 0) { - offset = -offset; - sign = '-'; - } - return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); - }); - } - - offset('Z', ':'); - offset('ZZ', ''); - - // PARSING - - addRegexToken('Z', matchOffset); - addRegexToken('ZZ', matchOffset); - addParseToken(['Z', 'ZZ'], function (input, array, config) { - config._useUTC = true; - config._tzm = offsetFromString(input); - }); - - // HELPERS - - // timezone chunker - // '+10:00' > ['10', '00'] - // '-1530' > ['-15', '30'] - var chunkOffset = /([\+\-]|\d\d)/gi; - - function offsetFromString(string) { - var matches = ((string || '').match(matchOffset) || []); - var chunk = matches[matches.length - 1] || []; - var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; - var minutes = +(parts[1] * 60) + toInt(parts[2]); - - return parts[0] === '+' ? minutes : -minutes; - } - - // Return a moment from input, that is local/utc/zone equivalent to model. - function cloneWithOffset(input, model) { - var res, diff; - if (model._isUTC) { - res = model.clone(); - diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res); - // Use low-level api, because this fn is low-level api. - res._d.setTime(+res._d + diff); - utils_hooks__hooks.updateOffset(res, false); - return res; - } else { - return local__createLocal(input).local(); - } - } - - function getDateOffset (m) { - // On Firefox.24 Date#getTimezoneOffset returns a floating point. - // https://github.com/moment/moment/pull/1871 - return -Math.round(m._d.getTimezoneOffset() / 15) * 15; - } - - // HOOKS - - // This function will be called whenever a moment is mutated. - // It is intended to keep the offset in sync with the timezone. - utils_hooks__hooks.updateOffset = function () {}; - - // MOMENTS - - // keepLocalTime = true means only change the timezone, without - // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> - // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset - // +0200, so we adjust the time as needed, to be valid. - // - // Keeping the time actually adds/subtracts (one hour) - // from the actual represented time. That is why we call updateOffset - // a second time. In case it wants us to change the offset again - // _changeInProgress == true case, then we have to adjust, because - // there is no such time in the given timezone. - function getSetOffset (input, keepLocalTime) { - var offset = this._offset || 0, - localAdjust; - if (input != null) { - if (typeof input === 'string') { - input = offsetFromString(input); - } - if (Math.abs(input) < 16) { - input = input * 60; - } - if (!this._isUTC && keepLocalTime) { - localAdjust = getDateOffset(this); - } - this._offset = input; - this._isUTC = true; - if (localAdjust != null) { - this.add(localAdjust, 'm'); - } - if (offset !== input) { - if (!keepLocalTime || this._changeInProgress) { - add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - utils_hooks__hooks.updateOffset(this, true); - this._changeInProgress = null; - } - } - return this; - } else { - return this._isUTC ? offset : getDateOffset(this); - } - } - - function getSetZone (input, keepLocalTime) { - if (input != null) { - if (typeof input !== 'string') { - input = -input; - } - - this.utcOffset(input, keepLocalTime); - - return this; - } else { - return -this.utcOffset(); - } - } - - function setOffsetToUTC (keepLocalTime) { - return this.utcOffset(0, keepLocalTime); - } - - function setOffsetToLocal (keepLocalTime) { - if (this._isUTC) { - this.utcOffset(0, keepLocalTime); - this._isUTC = false; - - if (keepLocalTime) { - this.subtract(getDateOffset(this), 'm'); - } - } - return this; - } - - function setOffsetToParsedOffset () { - if (this._tzm) { - this.utcOffset(this._tzm); - } else if (typeof this._i === 'string') { - this.utcOffset(offsetFromString(this._i)); - } - return this; - } - - function hasAlignedHourOffset (input) { - input = input ? local__createLocal(input).utcOffset() : 0; - - return (this.utcOffset() - input) % 60 === 0; - } - - function isDaylightSavingTime () { - return ( - this.utcOffset() > this.clone().month(0).utcOffset() || - this.utcOffset() > this.clone().month(5).utcOffset() - ); - } - - function isDaylightSavingTimeShifted () { - if (typeof this._isDSTShifted !== 'undefined') { - return this._isDSTShifted; - } - - var c = {}; - - copyConfig(c, this); - c = prepareConfig(c); - - if (c._a) { - var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); - this._isDSTShifted = this.isValid() && - compareArrays(c._a, other.toArray()) > 0; - } else { - this._isDSTShifted = false; - } - - return this._isDSTShifted; - } - - function isLocal () { - return !this._isUTC; - } - - function isUtcOffset () { - return this._isUTC; - } - - function isUtc () { - return this._isUTC && this._offset === 0; - } - - var aspNetRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/; - - // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html - // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere - var create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/; - - function create__createDuration (input, key) { - var duration = input, - // matching against regexp is expensive, do it on demand - match = null, - sign, - ret, - diffRes; - - if (isDuration(input)) { - duration = { - ms : input._milliseconds, - d : input._days, - M : input._months - }; - } else if (typeof input === 'number') { - duration = {}; - if (key) { - duration[key] = input; - } else { - duration.milliseconds = input; - } - } else if (!!(match = aspNetRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : 0, - d : toInt(match[DATE]) * sign, - h : toInt(match[HOUR]) * sign, - m : toInt(match[MINUTE]) * sign, - s : toInt(match[SECOND]) * sign, - ms : toInt(match[MILLISECOND]) * sign - }; - } else if (!!(match = create__isoRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : parseIso(match[2], sign), - M : parseIso(match[3], sign), - d : parseIso(match[4], sign), - h : parseIso(match[5], sign), - m : parseIso(match[6], sign), - s : parseIso(match[7], sign), - w : parseIso(match[8], sign) - }; - } else if (duration == null) {// checks for null or undefined - duration = {}; - } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { - diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); - - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } - - ret = new Duration(duration); - - if (isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; - } - - return ret; - } - - create__createDuration.fn = Duration.prototype; - - function parseIso (inp, sign) { - // We'd normally use ~~inp for this, but unfortunately it also - // converts floats to ints. - // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); - // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - } - - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; - - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; - } - - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); - - return res; - } - - function momentsDifference(base, other) { - var res; - other = cloneWithOffset(other, base); - if (base.isBefore(other)) { - res = positiveMomentsDifference(base, other); - } else { - res = positiveMomentsDifference(other, base); - res.milliseconds = -res.milliseconds; - res.months = -res.months; - } - - return res; - } - - function createAdder(direction, name) { - return function (val, period) { - var dur, tmp; - //invert the arguments, but complain about it - if (period !== null && !isNaN(+period)) { - deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); - tmp = val; val = period; period = tmp; - } - - val = typeof val === 'string' ? +val : val; - dur = create__createDuration(val, period); - add_subtract__addSubtract(this, dur, direction); - return this; - }; - } - - function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = duration._days, - months = duration._months; - updateOffset = updateOffset == null ? true : updateOffset; - - if (milliseconds) { - mom._d.setTime(+mom._d + milliseconds * isAdding); - } - if (days) { - get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); - } - if (months) { - setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - utils_hooks__hooks.updateOffset(mom, days || months); - } - } - - var add_subtract__add = createAdder(1, 'add'); - var add_subtract__subtract = createAdder(-1, 'subtract'); - - function moment_calendar__calendar (time, formats) { - // We want to compare the start of today, vs this. - // Getting start-of-today depends on whether we're local/utc/offset or not. - var now = time || local__createLocal(), - sod = cloneWithOffset(now, this).startOf('day'), - diff = this.diff(sod, 'days', true), - format = diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - return this.format(formats && formats[format] || this.localeData().calendar(format, this, local__createLocal(now))); - } - - function clone () { - return new Moment(this); - } - - function isAfter (input, units) { - var inputMs; - units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); - if (units === 'millisecond') { - input = isMoment(input) ? input : local__createLocal(input); - return +this > +input; - } else { - inputMs = isMoment(input) ? +input : +local__createLocal(input); - return inputMs < +this.clone().startOf(units); - } - } - - function isBefore (input, units) { - var inputMs; - units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); - if (units === 'millisecond') { - input = isMoment(input) ? input : local__createLocal(input); - return +this < +input; - } else { - inputMs = isMoment(input) ? +input : +local__createLocal(input); - return +this.clone().endOf(units) < inputMs; - } - } - - function isBetween (from, to, units) { - return this.isAfter(from, units) && this.isBefore(to, units); - } - - function isSame (input, units) { - var inputMs; - units = normalizeUnits(units || 'millisecond'); - if (units === 'millisecond') { - input = isMoment(input) ? input : local__createLocal(input); - return +this === +input; - } else { - inputMs = +local__createLocal(input); - return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); - } - } - - function diff (input, units, asFloat) { - var that = cloneWithOffset(input, this), - zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4, - delta, output; - - units = normalizeUnits(units); - - if (units === 'year' || units === 'month' || units === 'quarter') { - output = monthDiff(this, that); - if (units === 'quarter') { - output = output / 3; - } else if (units === 'year') { - output = output / 12; - } - } else { - delta = this - that; - output = units === 'second' ? delta / 1e3 : // 1000 - units === 'minute' ? delta / 6e4 : // 1000 * 60 - units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - delta; - } - return asFloat ? output : absFloor(output); - } - - function monthDiff (a, b) { - // difference in months - var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), - // b is in (anchor - 1 month, anchor + 1 month) - anchor = a.clone().add(wholeMonthDiff, 'months'), - anchor2, adjust; - - if (b - anchor < 0) { - anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor - anchor2); - } else { - anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor2 - anchor); - } - - return -(wholeMonthDiff + adjust); - } - - utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; - - function toString () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); - } - - function moment_format__toISOString () { - var m = this.clone().utc(); - if (0 < m.year() && m.year() <= 9999) { - if ('function' === typeof Date.prototype.toISOString) { - // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); - } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } - - function format (inputString) { - var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat); - return this.localeData().postformat(output); - } - - function from (time, withoutSuffix) { - if (!this.isValid()) { - return this.localeData().invalidDate(); - } - return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); - } - - function fromNow (withoutSuffix) { - return this.from(local__createLocal(), withoutSuffix); - } - - function to (time, withoutSuffix) { - if (!this.isValid()) { - return this.localeData().invalidDate(); - } - return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); - } - - function toNow (withoutSuffix) { - return this.to(local__createLocal(), withoutSuffix); - } - - function locale (key) { - var newLocaleData; - - if (key === undefined) { - return this._locale._abbr; - } else { - newLocaleData = locale_locales__getLocale(key); - if (newLocaleData != null) { - this._locale = newLocaleData; - } - return this; - } - } - - var lang = deprecate( - 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', - function (key) { - if (key === undefined) { - return this.localeData(); - } else { - return this.locale(key); - } - } - ); - - function localeData () { - return this._locale; - } - - function startOf (units) { - units = normalizeUnits(units); - // the following switch intentionally omits break keywords - // to utilize falling through the cases. - switch (units) { - case 'year': - this.month(0); - /* falls through */ - case 'quarter': - case 'month': - this.date(1); - /* falls through */ - case 'week': - case 'isoWeek': - case 'day': - this.hours(0); - /* falls through */ - case 'hour': - this.minutes(0); - /* falls through */ - case 'minute': - this.seconds(0); - /* falls through */ - case 'second': - this.milliseconds(0); - } - - // weeks are a special case - if (units === 'week') { - this.weekday(0); - } - if (units === 'isoWeek') { - this.isoWeekday(1); - } - - // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); - } - - return this; - } - - function endOf (units) { - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond') { - return this; - } - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); - } - - function to_type__valueOf () { - return +this._d - ((this._offset || 0) * 60000); - } - - function unix () { - return Math.floor(+this / 1000); - } - - function toDate () { - return this._offset ? new Date(+this) : this._d; - } - - function toArray () { - var m = this; - return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; - } - - function toObject () { - var m = this; - return { - years: m.year(), - months: m.month(), - date: m.date(), - hours: m.hours(), - minutes: m.minutes(), - seconds: m.seconds(), - milliseconds: m.milliseconds() - }; - } - - function moment_valid__isValid () { - return valid__isValid(this); - } - - function parsingFlags () { - return extend({}, getParsingFlags(this)); - } - - function invalidAt () { - return getParsingFlags(this).overflow; - } - - addFormatToken(0, ['gg', 2], 0, function () { - return this.weekYear() % 100; - }); - - addFormatToken(0, ['GG', 2], 0, function () { - return this.isoWeekYear() % 100; - }); - - function addWeekYearFormatToken (token, getter) { - addFormatToken(0, [token, token.length], 0, getter); - } - - addWeekYearFormatToken('gggg', 'weekYear'); - addWeekYearFormatToken('ggggg', 'weekYear'); - addWeekYearFormatToken('GGGG', 'isoWeekYear'); - addWeekYearFormatToken('GGGGG', 'isoWeekYear'); - - // ALIASES - - addUnitAlias('weekYear', 'gg'); - addUnitAlias('isoWeekYear', 'GG'); - - // PARSING - - addRegexToken('G', matchSigned); - addRegexToken('g', matchSigned); - addRegexToken('GG', match1to2, match2); - addRegexToken('gg', match1to2, match2); - addRegexToken('GGGG', match1to4, match4); - addRegexToken('gggg', match1to4, match4); - addRegexToken('GGGGG', match1to6, match6); - addRegexToken('ggggg', match1to6, match6); - - addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { - week[token.substr(0, 2)] = toInt(input); - }); - - addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { - week[token] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - - // HELPERS - - function weeksInYear(year, dow, doy) { - return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week; - } - - // MOMENTS - - function getSetWeekYear (input) { - var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; - return input == null ? year : this.add((input - year), 'y'); - } - - function getSetISOWeekYear (input) { - var year = weekOfYear(this, 1, 4).year; - return input == null ? year : this.add((input - year), 'y'); - } - - function getISOWeeksInYear () { - return weeksInYear(this.year(), 1, 4); - } - - function getWeeksInYear () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - } - - addFormatToken('Q', 0, 0, 'quarter'); - - // ALIASES - - addUnitAlias('quarter', 'Q'); - - // PARSING - - addRegexToken('Q', match1); - addParseToken('Q', function (input, array) { - array[MONTH] = (toInt(input) - 1) * 3; - }); - - // MOMENTS - - function getSetQuarter (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - } - - addFormatToken('D', ['DD', 2], 'Do', 'date'); - - // ALIASES - - addUnitAlias('date', 'D'); - - // PARSING - - addRegexToken('D', match1to2); - addRegexToken('DD', match1to2, match2); - addRegexToken('Do', function (isStrict, locale) { - return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; - }); - - addParseToken(['D', 'DD'], DATE); - addParseToken('Do', function (input, array) { - array[DATE] = toInt(input.match(match1to2)[0], 10); - }); - - // MOMENTS - - var getSetDayOfMonth = makeGetSet('Date', true); - - addFormatToken('d', 0, 'do', 'day'); - - addFormatToken('dd', 0, 0, function (format) { - return this.localeData().weekdaysMin(this, format); - }); - - addFormatToken('ddd', 0, 0, function (format) { - return this.localeData().weekdaysShort(this, format); - }); - - addFormatToken('dddd', 0, 0, function (format) { - return this.localeData().weekdays(this, format); - }); - - addFormatToken('e', 0, 0, 'weekday'); - addFormatToken('E', 0, 0, 'isoWeekday'); - - // ALIASES - - addUnitAlias('day', 'd'); - addUnitAlias('weekday', 'e'); - addUnitAlias('isoWeekday', 'E'); - - // PARSING - - addRegexToken('d', match1to2); - addRegexToken('e', match1to2); - addRegexToken('E', match1to2); - addRegexToken('dd', matchWord); - addRegexToken('ddd', matchWord); - addRegexToken('dddd', matchWord); - - addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) { - var weekday = config._locale.weekdaysParse(input); - // if we didn't get a weekday name, mark the date as invalid - if (weekday != null) { - week.d = weekday; - } else { - getParsingFlags(config).invalidWeekday = input; - } - }); - - addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { - week[token] = toInt(input); - }); - - // HELPERS - - function parseWeekday(input, locale) { - if (typeof input !== 'string') { - return input; - } - - if (!isNaN(input)) { - return parseInt(input, 10); - } - - input = locale.weekdaysParse(input); - if (typeof input === 'number') { - return input; - } - - return null; - } - - // LOCALES - - var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); - function localeWeekdays (m) { - return this._weekdays[m.day()]; - } - - var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); - function localeWeekdaysShort (m) { - return this._weekdaysShort[m.day()]; - } - - var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); - function localeWeekdaysMin (m) { - return this._weekdaysMin[m.day()]; - } - - function localeWeekdaysParse (weekdayName) { - var i, mom, regex; - - this._weekdaysParse = this._weekdaysParse || []; - - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - if (!this._weekdaysParse[i]) { - mom = local__createLocal([2000, 1]).day(i); - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (this._weekdaysParse[i].test(weekdayName)) { - return i; - } - } - } - - // MOMENTS - - function getSetDayOfWeek (input) { - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.localeData()); - return this.add(input - day, 'd'); - } else { - return day; - } - } - - function getSetLocaleDayOfWeek (input) { - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); - } - - function getSetISODayOfWeek (input) { - // behaves the same as moment#day except - // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) - // as a setter, sunday should belong to the previous week. - return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); - } - - addFormatToken('H', ['HH', 2], 0, 'hour'); - addFormatToken('h', ['hh', 2], 0, function () { - return this.hours() % 12 || 12; - }); - - function meridiem (token, lowercase) { - addFormatToken(token, 0, 0, function () { - return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); - }); - } - - meridiem('a', true); - meridiem('A', false); - - // ALIASES - - addUnitAlias('hour', 'h'); - - // PARSING - - function matchMeridiem (isStrict, locale) { - return locale._meridiemParse; - } - - addRegexToken('a', matchMeridiem); - addRegexToken('A', matchMeridiem); - addRegexToken('H', match1to2); - addRegexToken('h', match1to2); - addRegexToken('HH', match1to2, match2); - addRegexToken('hh', match1to2, match2); - - addParseToken(['H', 'HH'], HOUR); - addParseToken(['a', 'A'], function (input, array, config) { - config._isPm = config._locale.isPM(input); - config._meridiem = input; - }); - addParseToken(['h', 'hh'], function (input, array, config) { - array[HOUR] = toInt(input); - getParsingFlags(config).bigHour = true; - }); - - // LOCALES - - function localeIsPM (input) { - // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays - // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); - } - - var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; - function localeMeridiem (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - } - - - // MOMENTS - - // Setting the hour should keep the time, because the user explicitly - // specified which hour he wants. So trying to maintain the same hour (in - // a new timezone) makes sense. Adding/subtracting hours does not follow - // this rule. - var getSetHour = makeGetSet('Hours', true); - - addFormatToken('m', ['mm', 2], 0, 'minute'); - - // ALIASES - - addUnitAlias('minute', 'm'); - - // PARSING - - addRegexToken('m', match1to2); - addRegexToken('mm', match1to2, match2); - addParseToken(['m', 'mm'], MINUTE); - - // MOMENTS - - var getSetMinute = makeGetSet('Minutes', false); - - addFormatToken('s', ['ss', 2], 0, 'second'); - - // ALIASES - - addUnitAlias('second', 's'); - - // PARSING - - addRegexToken('s', match1to2); - addRegexToken('ss', match1to2, match2); - addParseToken(['s', 'ss'], SECOND); - - // MOMENTS - - var getSetSecond = makeGetSet('Seconds', false); - - addFormatToken('S', 0, 0, function () { - return ~~(this.millisecond() / 100); - }); - - addFormatToken(0, ['SS', 2], 0, function () { - return ~~(this.millisecond() / 10); - }); - - addFormatToken(0, ['SSS', 3], 0, 'millisecond'); - addFormatToken(0, ['SSSS', 4], 0, function () { - return this.millisecond() * 10; - }); - addFormatToken(0, ['SSSSS', 5], 0, function () { - return this.millisecond() * 100; - }); - addFormatToken(0, ['SSSSSS', 6], 0, function () { - return this.millisecond() * 1000; - }); - addFormatToken(0, ['SSSSSSS', 7], 0, function () { - return this.millisecond() * 10000; - }); - addFormatToken(0, ['SSSSSSSS', 8], 0, function () { - return this.millisecond() * 100000; - }); - addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { - return this.millisecond() * 1000000; - }); - - - // ALIASES - - addUnitAlias('millisecond', 'ms'); - - // PARSING - - addRegexToken('S', match1to3, match1); - addRegexToken('SS', match1to3, match2); - addRegexToken('SSS', match1to3, match3); - - var token; - for (token = 'SSSS'; token.length <= 9; token += 'S') { - addRegexToken(token, matchUnsigned); - } - - function parseMs(input, array) { - array[MILLISECOND] = toInt(('0.' + input) * 1000); - } - - for (token = 'S'; token.length <= 9; token += 'S') { - addParseToken(token, parseMs); - } - // MOMENTS - - var getSetMillisecond = makeGetSet('Milliseconds', false); - - addFormatToken('z', 0, 0, 'zoneAbbr'); - addFormatToken('zz', 0, 0, 'zoneName'); - - // MOMENTS - - function getZoneAbbr () { - return this._isUTC ? 'UTC' : ''; - } - - function getZoneName () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - } - - var momentPrototype__proto = Moment.prototype; - - momentPrototype__proto.add = add_subtract__add; - momentPrototype__proto.calendar = moment_calendar__calendar; - momentPrototype__proto.clone = clone; - momentPrototype__proto.diff = diff; - momentPrototype__proto.endOf = endOf; - momentPrototype__proto.format = format; - momentPrototype__proto.from = from; - momentPrototype__proto.fromNow = fromNow; - momentPrototype__proto.to = to; - momentPrototype__proto.toNow = toNow; - momentPrototype__proto.get = getSet; - momentPrototype__proto.invalidAt = invalidAt; - momentPrototype__proto.isAfter = isAfter; - momentPrototype__proto.isBefore = isBefore; - momentPrototype__proto.isBetween = isBetween; - momentPrototype__proto.isSame = isSame; - momentPrototype__proto.isValid = moment_valid__isValid; - momentPrototype__proto.lang = lang; - momentPrototype__proto.locale = locale; - momentPrototype__proto.localeData = localeData; - momentPrototype__proto.max = prototypeMax; - momentPrototype__proto.min = prototypeMin; - momentPrototype__proto.parsingFlags = parsingFlags; - momentPrototype__proto.set = getSet; - momentPrototype__proto.startOf = startOf; - momentPrototype__proto.subtract = add_subtract__subtract; - momentPrototype__proto.toArray = toArray; - momentPrototype__proto.toObject = toObject; - momentPrototype__proto.toDate = toDate; - momentPrototype__proto.toISOString = moment_format__toISOString; - momentPrototype__proto.toJSON = moment_format__toISOString; - momentPrototype__proto.toString = toString; - momentPrototype__proto.unix = unix; - momentPrototype__proto.valueOf = to_type__valueOf; - - // Year - momentPrototype__proto.year = getSetYear; - momentPrototype__proto.isLeapYear = getIsLeapYear; - - // Week Year - momentPrototype__proto.weekYear = getSetWeekYear; - momentPrototype__proto.isoWeekYear = getSetISOWeekYear; - - // Quarter - momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; - - // Month - momentPrototype__proto.month = getSetMonth; - momentPrototype__proto.daysInMonth = getDaysInMonth; - - // Week - momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; - momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; - momentPrototype__proto.weeksInYear = getWeeksInYear; - momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; - - // Day - momentPrototype__proto.date = getSetDayOfMonth; - momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; - momentPrototype__proto.weekday = getSetLocaleDayOfWeek; - momentPrototype__proto.isoWeekday = getSetISODayOfWeek; - momentPrototype__proto.dayOfYear = getSetDayOfYear; - - // Hour - momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; - - // Minute - momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; - - // Second - momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; - - // Millisecond - momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; - - // Offset - momentPrototype__proto.utcOffset = getSetOffset; - momentPrototype__proto.utc = setOffsetToUTC; - momentPrototype__proto.local = setOffsetToLocal; - momentPrototype__proto.parseZone = setOffsetToParsedOffset; - momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; - momentPrototype__proto.isDST = isDaylightSavingTime; - momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted; - momentPrototype__proto.isLocal = isLocal; - momentPrototype__proto.isUtcOffset = isUtcOffset; - momentPrototype__proto.isUtc = isUtc; - momentPrototype__proto.isUTC = isUtc; - - // Timezone - momentPrototype__proto.zoneAbbr = getZoneAbbr; - momentPrototype__proto.zoneName = getZoneName; - - // Deprecations - momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); - momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); - momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); - momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone); - - var momentPrototype = momentPrototype__proto; - - function moment__createUnix (input) { - return local__createLocal(input * 1000); - } - - function moment__createInZone () { - return local__createLocal.apply(null, arguments).parseZone(); - } - - var defaultCalendar = { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }; - - function locale_calendar__calendar (key, mom, now) { - var output = this._calendar[key]; - return typeof output === 'function' ? output.call(mom, now) : output; - } - - var defaultLongDateFormat = { - LTS : 'h:mm:ss A', - LT : 'h:mm A', - L : 'MM/DD/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY h:mm A', - LLLL : 'dddd, MMMM D, YYYY h:mm A' - }; - - function longDateFormat (key) { - var format = this._longDateFormat[key], - formatUpper = this._longDateFormat[key.toUpperCase()]; - - if (format || !formatUpper) { - return format; - } - - this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - - return this._longDateFormat[key]; - } - - var defaultInvalidDate = 'Invalid date'; - - function invalidDate () { - return this._invalidDate; - } - - var defaultOrdinal = '%d'; - var defaultOrdinalParse = /\d{1,2}/; - - function ordinal (number) { - return this._ordinal.replace('%d', number); - } - - function preParsePostFormat (string) { - return string; - } - - var defaultRelativeTime = { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }; - - function relative__relativeTime (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (typeof output === 'function') ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); - } - - function pastFuture (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); - } - - function locale_set__set (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (typeof prop === 'function') { - this[i] = prop; - } else { - this['_' + i] = prop; - } - } - // Lenient ordinal parsing accepts just a number in addition to - // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); - } - - var prototype__proto = Locale.prototype; - - prototype__proto._calendar = defaultCalendar; - prototype__proto.calendar = locale_calendar__calendar; - prototype__proto._longDateFormat = defaultLongDateFormat; - prototype__proto.longDateFormat = longDateFormat; - prototype__proto._invalidDate = defaultInvalidDate; - prototype__proto.invalidDate = invalidDate; - prototype__proto._ordinal = defaultOrdinal; - prototype__proto.ordinal = ordinal; - prototype__proto._ordinalParse = defaultOrdinalParse; - prototype__proto.preparse = preParsePostFormat; - prototype__proto.postformat = preParsePostFormat; - prototype__proto._relativeTime = defaultRelativeTime; - prototype__proto.relativeTime = relative__relativeTime; - prototype__proto.pastFuture = pastFuture; - prototype__proto.set = locale_set__set; - - // Month - prototype__proto.months = localeMonths; - prototype__proto._months = defaultLocaleMonths; - prototype__proto.monthsShort = localeMonthsShort; - prototype__proto._monthsShort = defaultLocaleMonthsShort; - prototype__proto.monthsParse = localeMonthsParse; - - // Week - prototype__proto.week = localeWeek; - prototype__proto._week = defaultLocaleWeek; - prototype__proto.firstDayOfYear = localeFirstDayOfYear; - prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; - - // Day of Week - prototype__proto.weekdays = localeWeekdays; - prototype__proto._weekdays = defaultLocaleWeekdays; - prototype__proto.weekdaysMin = localeWeekdaysMin; - prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin; - prototype__proto.weekdaysShort = localeWeekdaysShort; - prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort; - prototype__proto.weekdaysParse = localeWeekdaysParse; - - // Hours - prototype__proto.isPM = localeIsPM; - prototype__proto._meridiemParse = defaultLocaleMeridiemParse; - prototype__proto.meridiem = localeMeridiem; - - function lists__get (format, index, field, setter) { - var locale = locale_locales__getLocale(); - var utc = create_utc__createUTC().set(setter, index); - return locale[field](utc, format); - } - - function list (format, index, field, count, setter) { - if (typeof format === 'number') { - index = format; - format = undefined; - } - - format = format || ''; - - if (index != null) { - return lists__get(format, index, field, setter); - } - - var i; - var out = []; - for (i = 0; i < count; i++) { - out[i] = lists__get(format, i, field, setter); - } - return out; - } - - function lists__listMonths (format, index) { - return list(format, index, 'months', 12, 'month'); - } - - function lists__listMonthsShort (format, index) { - return list(format, index, 'monthsShort', 12, 'month'); - } - - function lists__listWeekdays (format, index) { - return list(format, index, 'weekdays', 7, 'day'); - } - - function lists__listWeekdaysShort (format, index) { - return list(format, index, 'weekdaysShort', 7, 'day'); - } - - function lists__listWeekdaysMin (format, index) { - return list(format, index, 'weekdaysMin', 7, 'day'); - } - - locale_locales__getSetGlobalLocale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); - - // Side effect imports - utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); - utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); - - var mathAbs = Math.abs; - - function duration_abs__abs () { - var data = this._data; - - this._milliseconds = mathAbs(this._milliseconds); - this._days = mathAbs(this._days); - this._months = mathAbs(this._months); - - data.milliseconds = mathAbs(data.milliseconds); - data.seconds = mathAbs(data.seconds); - data.minutes = mathAbs(data.minutes); - data.hours = mathAbs(data.hours); - data.months = mathAbs(data.months); - data.years = mathAbs(data.years); - - return this; - } - - function duration_add_subtract__addSubtract (duration, input, value, direction) { - var other = create__createDuration(input, value); - - duration._milliseconds += direction * other._milliseconds; - duration._days += direction * other._days; - duration._months += direction * other._months; - - return duration._bubble(); - } - - // supports only 2.0-style add(1, 's') or add(duration) - function duration_add_subtract__add (input, value) { - return duration_add_subtract__addSubtract(this, input, value, 1); - } - - // supports only 2.0-style subtract(1, 's') or subtract(duration) - function duration_add_subtract__subtract (input, value) { - return duration_add_subtract__addSubtract(this, input, value, -1); - } - - function absCeil (number) { - if (number < 0) { - return Math.floor(number); - } else { - return Math.ceil(number); - } - } - - function bubble () { - var milliseconds = this._milliseconds; - var days = this._days; - var months = this._months; - var data = this._data; - var seconds, minutes, hours, years, monthsFromDays; - - // if we have a mix of positive and negative values, bubble down first - // check: https://github.com/moment/moment/issues/2166 - if (!((milliseconds >= 0 && days >= 0 && months >= 0) || - (milliseconds <= 0 && days <= 0 && months <= 0))) { - milliseconds += absCeil(monthsToDays(months) + days) * 864e5; - days = 0; - months = 0; - } - - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; - - seconds = absFloor(milliseconds / 1000); - data.seconds = seconds % 60; - - minutes = absFloor(seconds / 60); - data.minutes = minutes % 60; - - hours = absFloor(minutes / 60); - data.hours = hours % 24; - - days += absFloor(hours / 24); - - // convert days to months - monthsFromDays = absFloor(daysToMonths(days)); - months += monthsFromDays; - days -= absCeil(monthsToDays(monthsFromDays)); - - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - - data.days = days; - data.months = months; - data.years = years; - - return this; - } - - function daysToMonths (days) { - // 400 years have 146097 days (taking into account leap year rules) - // 400 years have 12 months === 4800 - return days * 4800 / 146097; - } - - function monthsToDays (months) { - // the reverse of daysToMonths - return months * 146097 / 4800; - } - - function as (units) { - var days; - var months; - var milliseconds = this._milliseconds; - - units = normalizeUnits(units); - - if (units === 'month' || units === 'year') { - days = this._days + milliseconds / 864e5; - months = this._months + daysToMonths(days); - return units === 'month' ? months : months / 12; - } else { - // handle milliseconds separately because of floating point math errors (issue #1867) - days = this._days + Math.round(monthsToDays(this._months)); - switch (units) { - case 'week' : return days / 7 + milliseconds / 6048e5; - case 'day' : return days + milliseconds / 864e5; - case 'hour' : return days * 24 + milliseconds / 36e5; - case 'minute' : return days * 1440 + milliseconds / 6e4; - case 'second' : return days * 86400 + milliseconds / 1000; - // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 864e5) + milliseconds; - default: throw new Error('Unknown unit ' + units); - } - } - } - - // TODO: Use this.as('ms')? - function duration_as__valueOf () { - return ( - this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6 - ); - } - - function makeAs (alias) { - return function () { - return this.as(alias); - }; - } - - var asMilliseconds = makeAs('ms'); - var asSeconds = makeAs('s'); - var asMinutes = makeAs('m'); - var asHours = makeAs('h'); - var asDays = makeAs('d'); - var asWeeks = makeAs('w'); - var asMonths = makeAs('M'); - var asYears = makeAs('y'); - - function duration_get__get (units) { - units = normalizeUnits(units); - return this[units + 's'](); - } - - function makeGetter(name) { - return function () { - return this._data[name]; - }; - } - - var milliseconds = makeGetter('milliseconds'); - var seconds = makeGetter('seconds'); - var minutes = makeGetter('minutes'); - var hours = makeGetter('hours'); - var days = makeGetter('days'); - var months = makeGetter('months'); - var years = makeGetter('years'); - - function weeks () { - return absFloor(this.days() / 7); - } - - var round = Math.round; - var thresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year - }; - - // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { - return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); - } - - function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { - var duration = create__createDuration(posNegDuration).abs(); - var seconds = round(duration.as('s')); - var minutes = round(duration.as('m')); - var hours = round(duration.as('h')); - var days = round(duration.as('d')); - var months = round(duration.as('M')); - var years = round(duration.as('y')); - - var a = seconds < thresholds.s && ['s', seconds] || - minutes === 1 && ['m'] || - minutes < thresholds.m && ['mm', minutes] || - hours === 1 && ['h'] || - hours < thresholds.h && ['hh', hours] || - days === 1 && ['d'] || - days < thresholds.d && ['dd', days] || - months === 1 && ['M'] || - months < thresholds.M && ['MM', months] || - years === 1 && ['y'] || ['yy', years]; - - a[2] = withoutSuffix; - a[3] = +posNegDuration > 0; - a[4] = locale; - return substituteTimeAgo.apply(null, a); - } - - // This function allows you to set a threshold for relative time strings - function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { - if (thresholds[threshold] === undefined) { - return false; - } - if (limit === undefined) { - return thresholds[threshold]; - } - thresholds[threshold] = limit; - return true; - } - - function humanize (withSuffix) { - var locale = this.localeData(); - var output = duration_humanize__relativeTime(this, !withSuffix, locale); - - if (withSuffix) { - output = locale.pastFuture(+this, output); - } - - return locale.postformat(output); - } - - var iso_string__abs = Math.abs; - - function iso_string__toISOString() { - // for ISO strings we do not use the normal bubbling rules: - // * milliseconds bubble up until they become hours - // * days do not bubble at all - // * months bubble up until they become years - // This is because there is no context-free conversion between hours and days - // (think of clock changes) - // and also not between days and months (28-31 days per month) - var seconds = iso_string__abs(this._milliseconds) / 1000; - var days = iso_string__abs(this._days); - var months = iso_string__abs(this._months); - var minutes, hours, years; - - // 3600 seconds -> 60 minutes -> 1 hour - minutes = absFloor(seconds / 60); - hours = absFloor(minutes / 60); - seconds %= 60; - minutes %= 60; - - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - - - // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var Y = years; - var M = months; - var D = days; - var h = hours; - var m = minutes; - var s = seconds; - var total = this.asSeconds(); - - if (!total) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } - - return (total < 0 ? '-' : '') + - 'P' + - (Y ? Y + 'Y' : '') + - (M ? M + 'M' : '') + - (D ? D + 'D' : '') + - ((h || m || s) ? 'T' : '') + - (h ? h + 'H' : '') + - (m ? m + 'M' : '') + - (s ? s + 'S' : ''); - } - - var duration_prototype__proto = Duration.prototype; - - duration_prototype__proto.abs = duration_abs__abs; - duration_prototype__proto.add = duration_add_subtract__add; - duration_prototype__proto.subtract = duration_add_subtract__subtract; - duration_prototype__proto.as = as; - duration_prototype__proto.asMilliseconds = asMilliseconds; - duration_prototype__proto.asSeconds = asSeconds; - duration_prototype__proto.asMinutes = asMinutes; - duration_prototype__proto.asHours = asHours; - duration_prototype__proto.asDays = asDays; - duration_prototype__proto.asWeeks = asWeeks; - duration_prototype__proto.asMonths = asMonths; - duration_prototype__proto.asYears = asYears; - duration_prototype__proto.valueOf = duration_as__valueOf; - duration_prototype__proto._bubble = bubble; - duration_prototype__proto.get = duration_get__get; - duration_prototype__proto.milliseconds = milliseconds; - duration_prototype__proto.seconds = seconds; - duration_prototype__proto.minutes = minutes; - duration_prototype__proto.hours = hours; - duration_prototype__proto.days = days; - duration_prototype__proto.weeks = weeks; - duration_prototype__proto.months = months; - duration_prototype__proto.years = years; - duration_prototype__proto.humanize = humanize; - duration_prototype__proto.toISOString = iso_string__toISOString; - duration_prototype__proto.toString = iso_string__toISOString; - duration_prototype__proto.toJSON = iso_string__toISOString; - duration_prototype__proto.locale = locale; - duration_prototype__proto.localeData = localeData; - - // Deprecations - duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); - duration_prototype__proto.lang = lang; - - // Side effect imports - - addFormatToken('X', 0, 0, 'unix'); - addFormatToken('x', 0, 0, 'valueOf'); - - // PARSING - - addRegexToken('x', matchSigned); - addRegexToken('X', matchTimestamp); - addParseToken('X', function (input, array, config) { - config._d = new Date(parseFloat(input, 10) * 1000); - }); - addParseToken('x', function (input, array, config) { - config._d = new Date(toInt(input)); - }); - - // Side effect imports - - - utils_hooks__hooks.version = '2.10.6'; - - setHookCallback(local__createLocal); - - utils_hooks__hooks.fn = momentPrototype; - utils_hooks__hooks.min = min; - utils_hooks__hooks.max = max; - utils_hooks__hooks.utc = create_utc__createUTC; - utils_hooks__hooks.unix = moment__createUnix; - utils_hooks__hooks.months = lists__listMonths; - utils_hooks__hooks.isDate = isDate; - utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; - utils_hooks__hooks.invalid = valid__createInvalid; - utils_hooks__hooks.duration = create__createDuration; - utils_hooks__hooks.isMoment = isMoment; - utils_hooks__hooks.weekdays = lists__listWeekdays; - utils_hooks__hooks.parseZone = moment__createInZone; - utils_hooks__hooks.localeData = locale_locales__getLocale; - utils_hooks__hooks.isDuration = isDuration; - utils_hooks__hooks.monthsShort = lists__listMonthsShort; - utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; - utils_hooks__hooks.defineLocale = defineLocale; - utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; - utils_hooks__hooks.normalizeUnits = normalizeUnits; - utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; - - var _moment = utils_hooks__hooks; - - return _moment; - -}));
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/oktween.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/oktween.js deleted file mode 100755 index 7e820b04..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/oktween.js +++ /dev/null @@ -1,125 +0,0 @@ -/* - oktween.add({ - obj: el.style, - units: "px", - from: { left: 0 }, - to: { left: 100 }, - duration: 1000, - easing: oktween.easing.circ_out, - finish: function(){ - console.log("done") - } - }) -*/ - -var oktween = (function(){ - var oktween = {} - var tweens = oktween.tweens = [] - var last_t = 0 - var id = 0 - oktween.speed = 1 - oktween.then = oktween.add = function(tween){ - tween.id = id++ - tween.obj = tween.obj || {} - if (tween.easing) { - if (typeof tween.easing == "string") { - tween.easing = oktween.easing[tween.easing] - } - } - else { - tween.easing = oktween.easing.linear - } - if (! ('from' in tween) ) { - tween.from = {} - tween.keys = Object.keys(tween.to) - tween.keys.forEach(function(prop){ - tween.from[prop] = parseFloat(tween.obj[prop]) - }) - } - else { - tween.keys = Object.keys(tween.from) - } - tween.delay = tween.delay || 0 - tween.duration = tween.duration || 200 - tween.start = last_t + tween.delay - tween.done = false - tween.then = function(fn){ tween.after = [fn] } - tween.finish = function(){ tween.start = 0 } - tween.cancel = function(){ - var idx = tweens.indexOf(tween) - if (~idx) { tweens.splice(idx, 1) } - } - tween.tick = 0 - tween.skip = tween.skip || 1 - tweens.push(tween) - return tween - } - oktween.update = function(t) { - requestAnimationFrame(oktween.update) - last_t = t * oktween.speed - if (tweens.length == 0) return - var done = false - tweens.forEach(function(tween, i){ - var dt = Math.min(1.0, (t - tween.start) / tween.duration) - tween.tick++ - if (dt < 0 || (dt < 1 && (tween.tick % tween.skip != 0))) return - var ddt = tween.dt = tween.easing(dt) - tween.keys.forEach(function(prop){ - val = lerp( ddt, tween.from[prop], tween.to[prop] ) - if (tween.round) val = Math.round(val) - if (tween.units) val = (Math.round(val)) + tween.units - tween.obj[prop] = val - }) - tween.update && tween.update(tween.obj, dt) - if (dt == 1) { - tween.finished && tween.finished(tween) - tween.after && tween.after.forEach(function(twn){ - if (typeof twn == "function") { return twn() } - if (! twn.obj) { twn.obj = tween.obj } - oktween.add(twn) - }) - if (tween.loop) { - tween.start = t + tween.delay - } - else { - done = tween.done = true - } - } - }) - if (done) { - tweens = tweens.filter(function(tween){ return ! tween.done }) - } - } - function lerp(n,a,b){ return (b-a)*n+a } - - requestAnimationFrame(oktween.update) - - oktween.easing = { - linear: function(t){ - return t - }, - circ_out: function(t) { - return Math.sqrt(1 - (t = t - 1) * t) - }, - circ_in: function(t){ - return -(Math.sqrt(1 - (t * t)) - 1) - }, - circ_in_out: function(t) { - return ((t*=2) < 1) ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1) - }, - quad_in: function(n){ - return Math.pow(n, 2) - }, - quad_out: function(n){ - return n * (n - 2) * -1 - }, - quad_in_out: function(n){ - n = n * 2 - if(n < 1){ return Math.pow(n, 2) / 2 } - return -1 * ((--n) * (n - 2) - 1) / 2 - }, - - } - - return oktween -})() diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/prefixfree.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/prefixfree.js deleted file mode 100755 index e2c87c42..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/prefixfree.js +++ /dev/null @@ -1,497 +0,0 @@ -/** - * StyleFix 1.0.3 & PrefixFree 1.0.7 - * @author Lea Verou - * MIT license - */ - -(function(){ - -if(!window.addEventListener) { - return; -} - -var self = window.StyleFix = { - link: function(link) { - try { - // Ignore stylesheets with data-noprefix attribute as well as alternate stylesheets - if(link.rel !== 'stylesheet' || link.hasAttribute('data-noprefix')) { - return; - } - } - catch(e) { - return; - } - - var url = link.href || link.getAttribute('data-href'), - base = url.replace(/[^\/]+$/, ''), - base_scheme = (/^[a-z]{3,10}:/.exec(base) || [''])[0], - base_domain = (/^[a-z]{3,10}:\/\/[^\/]+/.exec(base) || [''])[0], - base_query = /^([^?]*)\??/.exec(url)[1], - parent = link.parentNode, - xhr = new XMLHttpRequest(), - process; - - xhr.onreadystatechange = function() { - if(xhr.readyState === 4) { - process(); - } - }; - - process = function() { - var css = xhr.responseText; - - if(css && link.parentNode && (!xhr.status || xhr.status < 400 || xhr.status > 600)) { - css = self.fix(css, true, link); - - // Convert relative URLs to absolute, if needed - if(base) { - css = css.replace(/url\(\s*?((?:"|')?)(.+?)\1\s*?\)/gi, function($0, quote, url) { - if(/^([a-z]{3,10}:|#)/i.test(url)) { // Absolute & or hash-relative - return $0; - } - else if(/^\/\//.test(url)) { // Scheme-relative - // May contain sequences like /../ and /./ but those DO work - return 'url("' + base_scheme + url + '")'; - } - else if(/^\//.test(url)) { // Domain-relative - return 'url("' + base_domain + url + '")'; - } - else if(/^\?/.test(url)) { // Query-relative - return 'url("' + base_query + url + '")'; - } - else { - // Path-relative - return 'url("' + base + url + '")'; - } - }); - - // behavior URLs shoudn’t be converted (Issue #19) - // base should be escaped before added to RegExp (Issue #81) - var escaped_base = base.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g,"\\$1"); - css = css.replace(RegExp('\\b(behavior:\\s*?url\\(\'?"?)' + escaped_base, 'gi'), '$1'); - } - - var style = document.createElement('style'); - style.textContent = css; - style.media = link.media; - style.disabled = link.disabled; - style.setAttribute('data-href', link.getAttribute('href')); - - parent.insertBefore(style, link); - parent.removeChild(link); - - style.media = link.media; // Duplicate is intentional. See issue #31 - } - }; - - try { - xhr.open('GET', url); - xhr.send(null); - } catch (e) { - // Fallback to XDomainRequest if available - if (typeof XDomainRequest != "undefined") { - xhr = new XDomainRequest(); - xhr.onerror = xhr.onprogress = function() {}; - xhr.onload = process; - xhr.open("GET", url); - xhr.send(null); - } - } - - link.setAttribute('data-inprogress', ''); - }, - - styleElement: function(style) { - if (style.hasAttribute('data-noprefix')) { - return; - } - var disabled = style.disabled; - - style.textContent = self.fix(style.textContent, true, style); - - style.disabled = disabled; - }, - - styleAttribute: function(element) { - var css = element.getAttribute('style'); - - css = self.fix(css, false, element); - - element.setAttribute('style', css); - }, - - process: function() { - // Linked stylesheets - $('link[rel="stylesheet"]:not([data-inprogress])').forEach(StyleFix.link); - - // Inline stylesheets - $('style').forEach(StyleFix.styleElement); - - // Inline styles - $('[style]').forEach(StyleFix.styleAttribute); - }, - - register: function(fixer, index) { - (self.fixers = self.fixers || []) - .splice(index === undefined? self.fixers.length : index, 0, fixer); - }, - - fix: function(css, raw, element) { - for(var i=0; i<self.fixers.length; i++) { - css = self.fixers[i](css, raw, element) || css; - } - - return css; - }, - - camelCase: function(str) { - return str.replace(/-([a-z])/g, function($0, $1) { return $1.toUpperCase(); }).replace('-',''); - }, - - deCamelCase: function(str) { - return str.replace(/[A-Z]/g, function($0) { return '-' + $0.toLowerCase() }); - } -}; - -/************************************** - * Process styles - **************************************/ -(function(){ - setTimeout(function(){ - $('link[rel="stylesheet"]').forEach(StyleFix.link); - }, 10); - - document.addEventListener('DOMContentLoaded', StyleFix.process, false); -})(); - -function $(expr, con) { - return [].slice.call((con || document).querySelectorAll(expr)); -} - -})(); - -/** - * PrefixFree - */ -(function(root){ - -if(!window.StyleFix || !window.getComputedStyle) { - return; -} - -// Private helper -function fix(what, before, after, replacement, css) { - what = self[what]; - - if(what.length) { - var regex = RegExp(before + '(' + what.join('|') + ')' + after, 'gi'); - - css = css.replace(regex, replacement); - } - - return css; -} - -var self = window.PrefixFree = { - prefixCSS: function(css, raw, element) { - var prefix = self.prefix; - - // Gradient angles hotfix - if(self.functions.indexOf('linear-gradient') > -1) { - // Gradients are supported with a prefix, convert angles to legacy - css = css.replace(/(\s|:|,)(repeating-)?linear-gradient\(\s*(-?\d*\.?\d*)deg/ig, function ($0, delim, repeating, deg) { - return delim + (repeating || '') + 'linear-gradient(' + (90-deg) + 'deg'; - }); - } - - css = fix('functions', '(\\s|:|,)', '\\s*\\(', '$1' + prefix + '$2(', css); - css = fix('keywords', '(\\s|:)', '(\\s|;|\\}|$)', '$1' + prefix + '$2$3', css); - css = fix('properties', '(^|\\{|\\s|;)', '\\s*:', '$1' + prefix + '$2:', css); - - // Prefix properties *inside* values (issue #8) - if (self.properties.length) { - var regex = RegExp('\\b(' + self.properties.join('|') + ')(?!:)', 'gi'); - - css = fix('valueProperties', '\\b', ':(.+?);', function($0) { - return $0.replace(regex, prefix + "$1") - }, css); - } - - if(raw) { - css = fix('selectors', '', '\\b', self.prefixSelector, css); - css = fix('atrules', '@', '\\b', '@' + prefix + '$1', css); - } - - // Fix double prefixing - css = css.replace(RegExp('-' + prefix, 'g'), '-'); - - // Prefix wildcard - css = css.replace(/-\*-(?=[a-z]+)/gi, self.prefix); - - return css; - }, - - property: function(property) { - return (self.properties.indexOf(property) >=0 ? self.prefix : '') + property; - }, - - value: function(value, property) { - value = fix('functions', '(^|\\s|,)', '\\s*\\(', '$1' + self.prefix + '$2(', value); - value = fix('keywords', '(^|\\s)', '(\\s|$)', '$1' + self.prefix + '$2$3', value); - - if(self.valueProperties.indexOf(property) >= 0) { - value = fix('properties', '(^|\\s|,)', '($|\\s|,)', '$1'+self.prefix+'$2$3', value); - } - - return value; - }, - - // Warning: Prefixes no matter what, even if the selector is supported prefix-less - prefixSelector: function(selector) { - return selector.replace(/^:{1,2}/, function($0) { return $0 + self.prefix }) - }, - - // Warning: Prefixes no matter what, even if the property is supported prefix-less - prefixProperty: function(property, camelCase) { - var prefixed = self.prefix + property; - - return camelCase? StyleFix.camelCase(prefixed) : prefixed; - } -}; - -/************************************** - * Properties - **************************************/ -(function() { - var prefixes = {}, - properties = [], - shorthands = {}, - style = getComputedStyle(document.documentElement, null), - dummy = document.createElement('div').style; - - // Why are we doing this instead of iterating over properties in a .style object? Cause Webkit won't iterate over those. - var iterate = function(property) { - if(property.charAt(0) === '-') { - properties.push(property); - - var parts = property.split('-'), - prefix = parts[1]; - - // Count prefix uses - prefixes[prefix] = ++prefixes[prefix] || 1; - - // This helps determining shorthands - while(parts.length > 3) { - parts.pop(); - - var shorthand = parts.join('-'); - - if(supported(shorthand) && properties.indexOf(shorthand) === -1) { - properties.push(shorthand); - } - } - } - }, - supported = function(property) { - return StyleFix.camelCase(property) in dummy; - } - - // Some browsers have numerical indices for the properties, some don't - if(style.length > 0) { - for(var i=0; i<style.length; i++) { - iterate(style[i]) - } - } - else { - for(var property in style) { - iterate(StyleFix.deCamelCase(property)); - } - } - - // Find most frequently used prefix - var highest = {uses:0}; - for(var prefix in prefixes) { - var uses = prefixes[prefix]; - - if(highest.uses < uses) { - highest = {prefix: prefix, uses: uses}; - } - } - - self.prefix = '-' + highest.prefix + '-'; - self.Prefix = StyleFix.camelCase(self.prefix); - - self.properties = []; - - // Get properties ONLY supported with a prefix - for(var i=0; i<properties.length; i++) { - var property = properties[i]; - - if(property.indexOf(self.prefix) === 0) { // we might have multiple prefixes, like Opera - var unprefixed = property.slice(self.prefix.length); - - if(!supported(unprefixed)) { - self.properties.push(unprefixed); - } - } - } - - // IE fix - if(self.Prefix == 'Ms' - && !('transform' in dummy) - && !('MsTransform' in dummy) - && ('msTransform' in dummy)) { - self.properties.push('transform', 'transform-origin'); - } - - self.properties.sort(); -})(); - -/************************************** - * Values - **************************************/ -(function() { -// Values that might need prefixing -var functions = { - 'linear-gradient': { - property: 'backgroundImage', - params: 'red, teal' - }, - 'calc': { - property: 'width', - params: '1px + 5%' - }, - 'element': { - property: 'backgroundImage', - params: '#foo' - }, - 'cross-fade': { - property: 'backgroundImage', - params: 'url(a.png), url(b.png), 50%' - } -}; - - -functions['repeating-linear-gradient'] = -functions['repeating-radial-gradient'] = -functions['radial-gradient'] = -functions['linear-gradient']; - -// Note: The properties assigned are just to *test* support. -// The keywords will be prefixed everywhere. -var keywords = { - 'initial': 'color', - 'zoom-in': 'cursor', - 'zoom-out': 'cursor', - 'box': 'display', - 'flexbox': 'display', - 'inline-flexbox': 'display', - 'flex': 'display', - 'inline-flex': 'display', - 'grid': 'display', - 'inline-grid': 'display', - 'max-content': 'width', - 'min-content': 'width', - 'fit-content': 'width', - 'fill-available': 'width' -}; - -self.functions = []; -self.keywords = []; - -var style = document.createElement('div').style; - -function supported(value, property) { - style[property] = ''; - style[property] = value; - - return !!style[property]; -} - -for (var func in functions) { - var test = functions[func], - property = test.property, - value = func + '(' + test.params + ')'; - - if (!supported(value, property) - && supported(self.prefix + value, property)) { - // It's supported, but with a prefix - self.functions.push(func); - } -} - -for (var keyword in keywords) { - var property = keywords[keyword]; - - if (!supported(keyword, property) - && supported(self.prefix + keyword, property)) { - // It's supported, but with a prefix - self.keywords.push(keyword); - } -} - -})(); - -/************************************** - * Selectors and @-rules - **************************************/ -(function() { - -var -selectors = { - ':read-only': null, - ':read-write': null, - ':any-link': null, - '::selection': null -}, - -atrules = { - 'keyframes': 'name', - 'viewport': null, - 'document': 'regexp(".")' -}; - -self.selectors = []; -self.atrules = []; - -var style = root.appendChild(document.createElement('style')); - -function supported(selector) { - style.textContent = selector + '{}'; // Safari 4 has issues with style.innerHTML - - return !!style.sheet.cssRules.length; -} - -for(var selector in selectors) { - var test = selector + (selectors[selector]? '(' + selectors[selector] + ')' : ''); - - if(!supported(test) && supported(self.prefixSelector(test))) { - self.selectors.push(selector); - } -} - -for(var atrule in atrules) { - var test = atrule + ' ' + (atrules[atrule] || ''); - - if(!supported('@' + test) && supported('@' + self.prefix + test)) { - self.atrules.push(atrule); - } -} - -root.removeChild(style); - -})(); - -// Properties that accept properties as their value -self.valueProperties = [ - 'transition', - 'transition-property' -] - -// Add class for current prefix -root.className += ' ' + self.prefix; - -StyleFix.register(self.prefixCSS); - - -})(document.documentElement);
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/promise.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/promise.js deleted file mode 100755 index f458ab06..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/promise.js +++ /dev/null @@ -1,34 +0,0 @@ -var promise = function(fn, data){ - var my_cb, my_res, error_cb, my_error - data = data || {} - data.success = function(res){ - my_res = res - if (my_cb) { - my_cb(res) - } - } - data.error = function(res){ - my_error = res - if (error_cb) { - error_cb(res) - } - else { - console.log('error!') - console.log(res) - } - } - fn(data) - var p = { - then: function(cb){ - if (my_res) cb(my_res) - else my_cb = cb - return p - }, - error: function(cb){ - if (my_error) cb(my_error) - else error_cb = cb - return p - } - } - return p -} diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/util.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/util.js deleted file mode 100755 index d45c4b98..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/js/vendor/util.js +++ /dev/null @@ -1,200 +0,0 @@ -if (window.$) { - $.fn.int = function() { return parseInt($(this).val(),10) } - $.fn.float = function() { return parseFloat($(this).val()) } - $.fn.string = function() { return trim($(this).val()) } - $.fn.enable = function() { return $(this).attr("disabled",null) } - $.fn.disable = function() { return $(this).attr("disabled","disabled") } - $.fn.sanitize = function(s) { return trim(sanitize($(this).val())) } - $.fn.stripHTML = function(s) { return trim(stripHTML($(this).val())) } - $.fn.sanitizeName = function(s) { return trim(sanitizeName($(this).val())) } - $.fn.htmlSafe = function(s) { return $(this).html(sanitize(s)) } - $.fn.toDollars = function(i) { return $(this).html((i/100).toFixed(2)) } -} - -function trim (s){ return s.replace(/^\s+/,"").replace(/\s+$/,"") } -function sanitize (s){ return (s || "").replace(new RegExp("[<>&]", 'g'), "") } -function sanitizeName (s){ return (s || "").replace(new RegExp("[^-_a-zA-Z0-9]", 'g'), "") } -function stripHTML (s){ return (s || "").replace(/<[^>]+>/g, "") } -function sanitizeHTML (s){ return (s || "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">") } -function capitalize (s){ return s.split(" ").map(capitalizeWord).join(" ") } -function capitalizeWord (s){ return s.charAt(0).toUpperCase() + s.slice(1) } -function slugify (s){ return (s || "").toLowerCase().replace(/\s/g,"-").replace(/[^-_a-zA-Z0-9]/g, '-').replace(/-+/g,"-") } -function rgb_string (rgb) { return "rgb(" + rgb.map(Math.round).join(",") + ")" } -function rgba_string (rgb,a) { return "rgba(" + rgb.map(Math.round).join(",") + "," + a + ")" } -function hex_string (rgb) { return "#" + rgb.map(Math.round).map(function(n){ var s = n.toString(16); return s.length == 1 ? "0"+s : s }).join("") } -function parse_rgba_string (s) { return s.match(/(\d+)/g).slice(0,3) } - -function title_case (str) { - return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); -} -function pluralize (n,s,ss) { return n + " " + s + ( n == 1 ? "" : (ss || "s") ) } -function as_cash(n){ - var cents = ((n*100) % 100); - if (cents < 10) { cents = "0" + (cents|0) } - else { cents = cents|0 } - return "$" + (n|0) + "." + cents -} - -var E = Math.E -var PI = Math.PI -var PHI = (1+Math.sqrt(5))/2 -var TWO_PI = PI*2 -var HALF_PI = PI/2 -var LN10 = Math.LN10 -function clamp(n,a,b){ return n<a?a:n<b?n:b } -function norm(n,a,b){ return (n-a) / (b-a) } -function lerp(n,a,b){ return (b-a)*n+a } -function mix(n,a,b){ return a*(1-n)+b*n } -function abs(n){ return Math.abs(n) } -function sign(n){ return n ? Math.abs(n)/n : 0 } -function random(){ return Math.random() } -function rand(n){ return (Math.random()*n) } -function randint(n){ return rand(n)|0 } -function randrange(a,b){ return a + rand(b-a) } -function choice(a){ return a[randint(a.length)] } -function noop(){} - -function range(m,n,s){ - var a = [] - s = s || 1 - for (var i = m; i <= n; i += s) { - a.push(i) - } - return a -} - -function defaults (dest, src) { - dest = dest || {} - for (var i in src) { - dest[i] = typeof dest[i] == 'undefined' ? src[i] : dest[i] - } - return dest -} - -function pairs(h){ - var a = [] - for (var i in h) { - if(h.hasOwnProperty(i)) { - a.push([i, h[i]]) - } - } - return a -} -function invert_hash (h) { - var k = {} - for (var i in h) { if (h.hasOwnProperty(i)) k[h[i]] = i } - return k -} -function filenameFromUrl (url) { - var partz = url.split( "/" ) - return partz[partz.length-1].split(".")[0] -} - -// Function.bind polyfill -if (!Function.prototype.bind) { - Function.prototype.bind = function(oThis) { - if (typeof this !== 'function') { - // closest thing possible to the ECMAScript 5 - // internal IsCallable function - throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); - } - - var aArgs = Array.prototype.slice.call(arguments, 1), - fToBind = this, - fNOP = function() {}, - fBound = function() { - return fToBind.apply(this instanceof fNOP && oThis - ? this - : oThis, - aArgs.concat(Array.prototype.slice.call(arguments))); - }; - - fNOP.prototype = this.prototype; - fBound.prototype = new fNOP(); - - return fBound; - }; -} - -// rAF polyfill -(function() { - var lastTime = 0; - var vendors = ['ms', 'moz', 'webkit', 'o']; - for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { - window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; - window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] - || window[vendors[x]+'CancelRequestAnimationFrame']; - } - - if (!window.requestAnimationFrame) - window.requestAnimationFrame = function(callback, element) { - var currTime = new Date().getTime(); - var timeToCall = Math.max(0, 16 - (currTime - lastTime)); - var id = window.setTimeout(function() { callback(currTime + timeToCall); }, - timeToCall); - lastTime = currTime + timeToCall; - return id; - }; - - if (!window.cancelAnimationFrame) - window.cancelAnimationFrame = function(id) { - clearTimeout(id); - }; -}()); - -// Identify browser based on useragent string -var browser = (function( ua ) { - ua = ua.toLowerCase(); - var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || - /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || - []; - var matched = { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - browser = {}; - if ( matched.browser ) { - browser[ matched.browser ] = true; - browser.version = matched.version; - } - // Chrome is Webkit, but Webkit is also Safari. - if ( browser.chrome ) { - browser.webkit = true; - } else if ( browser.webkit ) { - browser.safari = true; - } - if (window.$) $.browser = browser; - return browser; -})( navigator.userAgent ); - -// Naive useragent detection pattern -var is_iphone = (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) -var is_ipad = (navigator.userAgent.match(/iPad/i)) -var is_ios = is_iphone || is_ipad -var is_android = (navigator.userAgent.match(/Android/i)) -var is_mobile = is_iphone || is_ipad || is_android -var is_desktop = ! is_mobile; -var transformProp = browser.safari ? "WebkitTransform" : "transform"; -if (is_android) { - document.body.parentNode.classList.add("android") -} -else { - document.body.parentNode.classList.add("ios") -} - -function selectElementContents(el) { - if (window.getSelection && document.createRange) { - var sel = window.getSelection(); - var range = document.createRange(); - range.selectNodeContents(el); - sel.removeAllRanges(); - sel.addRange(range); - } else if (document.selection && document.body.createTextRange) { - var textRange = document.body.createTextRange(); - textRange.moveToElementText(el); - textRange.select(); - } -} diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-console/www/console-via-logger.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-console/www/console-via-logger.js deleted file mode 100644 index 0ecd9cc3..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/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"); - -//------------------------------------------------------------------------------ -// 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/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-console/www/logger.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-console/www/logger.js deleted file mode 100644 index deb07b57..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/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 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/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js deleted file mode 100644 index 72fee9e3..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js +++ /dev/null @@ -1,12 +0,0 @@ -cordova.define("cordova-plugin-customurlscheme.LaunchMyApp", function(require, exports, module) { -"use strict"; - -/* - Q: Why an empty file? - A: iOS doesn't need plumbing to get the plugin to work, so.. - - Including no file would mean the import in index.html would differ per platform. - - Also, using one version and adding a userAgent check for Android feels wrong. - - And if you're not using PhoneGap Build, you could paste your handleOpenUrl JS function here. -*/ - -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-device/www/device.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-device/www/device.js deleted file mode 100644 index 977dfc09..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-device/www/device.js +++ /dev/null @@ -1,86 +0,0 @@ -cordova.define("cordova-plugin-device.device", 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 argscheck = require('cordova/argscheck'), - channel = require('cordova/channel'), - utils = require('cordova/utils'), - exec = require('cordova/exec'), - cordova = require('cordova'); - -channel.createSticky('onCordovaInfoReady'); -// Tell cordova channel to wait on the CordovaInfoReady event -channel.waitForInitialization('onCordovaInfoReady'); - -/** - * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the - * phone, etc. - * @constructor - */ -function Device() { - this.available = false; - this.platform = null; - this.version = null; - this.uuid = null; - this.cordova = null; - this.model = null; - this.manufacturer = null; - this.isVirtual = null; - this.serial = null; - - var me = this; - - channel.onCordovaReady.subscribe(function() { - me.getInfo(function(info) { - //ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js - //TODO: CB-5105 native implementations should not return info.cordova - var buildLabel = cordova.version; - me.available = true; - me.platform = info.platform; - me.version = info.version; - 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; - utils.alert("[ERROR] Error initializing Cordova: " + e); - }); - }); -} - -/** - * Get device info - * - * @param {Function} successCallback The function to call when the heading data is available - * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL) - */ -Device.prototype.getInfo = function(successCallback, errorCallback) { - argscheck.checkArgs('fF', 'Device.getInfo', arguments); - exec(successCallback, errorCallback, "Device", "getDeviceInfo", []); -}; - -module.exports = new Device(); - -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-dialogs/www/notification.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-dialogs/www/notification.js deleted file mode 100644 index 4ddf530b..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-dialogs/www/notification.js +++ /dev/null @@ -1,133 +0,0 @@ -cordova.define("cordova-plugin-dialogs.notification", 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 = require('cordova/exec'); -var platform = require('cordova/platform'); - -/** - * Provides access to notifications on the device. - */ - -module.exports = { - - /** - * Open a native alert dialog, with a customizable title and button text. - * - * @param {String} message Message to print in the body of the alert - * @param {Function} completeCallback The callback that is called when user clicks on a button. - * @param {String} title Title of the alert dialog (default: Alert) - * @param {String} buttonLabel Label of the close button (default: OK) - */ - alert: function(message, completeCallback, title, buttonLabel) { - 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]); - }, - - /** - * Open a native confirm dialog, with a customizable title and button text. - * The result that the user selects is returned to the result callback. - * - * @param {String} message Message to print in the body of the alert - * @param {Function} resultCallback The callback that is called when user clicks on a button. - * @param {String} title Title of the alert dialog (default: Confirm) - * @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel']) - */ - confirm: function(message, resultCallback, title, buttonLabels) { - var _message = (typeof message === "string" ? message : JSON.stringify(message)); - var _title = (typeof title === "string" ? title : "Confirm"); - var _buttonLabels = (buttonLabels || ["OK", "Cancel"]); - - // Strings are deprecated! - if (typeof _buttonLabels === 'string') { - console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array)."); - } - - _buttonLabels = convertButtonLabels(_buttonLabels); - - exec(resultCallback, null, "Notification", "confirm", [_message, _title, _buttonLabels]); - }, - - /** - * Open a native prompt dialog, with a customizable title and button text. - * The following results are returned to the result callback: - * buttonIndex Index number of the button selected. - * input1 The text entered in the prompt dialog box. - * - * @param {String} message Dialog message to display (default: "Prompt message") - * @param {Function} resultCallback The callback that is called when user clicks on a button. - * @param {String} title Title of the dialog (default: "Prompt") - * @param {Array} buttonLabels Array of strings for the button labels (default: ["OK","Cancel"]) - * @param {String} defaultText Textbox input value (default: empty string) - */ - prompt: function(message, resultCallback, title, buttonLabels, defaultText) { - 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]); - }, - - /** - * Causes the device to beep. - * On Android, the default notification ringtone is played "count" times. - * - * @param {Integer} count The number of beeps. - */ - beep: function(count) { - var defaultedCount = count || 1; - 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/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/Coordinates.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/Coordinates.js deleted file mode 100644 index 4a995077..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/Coordinates.js +++ /dev/null @@ -1,72 +0,0 @@ -cordova.define("cordova-plugin-geolocation.Coordinates", 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. - * -*/ - -/** - * This class contains position information. - * @param {Object} lat - * @param {Object} lng - * @param {Object} alt - * @param {Object} acc - * @param {Object} head - * @param {Object} vel - * @param {Object} altacc - * @constructor - */ -var Coordinates = function(lat, lng, alt, acc, head, vel, altacc) { - /** - * The latitude of the position. - */ - this.latitude = lat; - /** - * The longitude of the position, - */ - this.longitude = lng; - /** - * The accuracy of the position. - */ - this.accuracy = acc; - /** - * The altitude of the position. - */ - this.altitude = (alt !== undefined ? alt : null); - /** - * The direction the device is moving at the position. - */ - this.heading = (head !== undefined ? head : null); - /** - * The velocity with which the device is moving at the position. - */ - this.speed = (vel !== undefined ? vel : null); - - if (this.speed === 0 || this.speed === null) { - this.heading = NaN; - } - - /** - * The altitude accuracy of the position. - */ - this.altitudeAccuracy = (altacc !== undefined) ? altacc : null; -}; - -module.exports = Coordinates; - -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/Position.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/Position.js deleted file mode 100644 index 97c6c2e3..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/Position.js +++ /dev/null @@ -1,36 +0,0 @@ -cordova.define("cordova-plugin-geolocation.Position", 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 Coordinates = require('./Coordinates'); - -var Position = function(coords, timestamp) { - if (coords) { - this.coords = new Coordinates(coords.latitude, coords.longitude, coords.altitude, coords.accuracy, coords.heading, coords.velocity, coords.altitudeAccuracy); - } else { - this.coords = new Coordinates(); - } - this.timestamp = (timestamp !== undefined) ? timestamp : new Date().getTime(); -}; - -module.exports = Position; - -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/PositionError.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/PositionError.js deleted file mode 100644 index c26dd754..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/PositionError.js +++ /dev/null @@ -1,41 +0,0 @@ -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 - * 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. - * -*/ - -/** - * 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/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/geolocation.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/geolocation.js deleted file mode 100644 index 50f1f953..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-geolocation/www/geolocation.js +++ /dev/null @@ -1,214 +0,0 @@ -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 argscheck = require('cordova/argscheck'), - utils = require('cordova/utils'), - exec = require('cordova/exec'), - PositionError = require('./PositionError'), - Position = require('./Position'); - -var timers = {}; // list of timers in use - -// Returns default params, overrides if provided with values -function parseParameters(options) { - var opt = { - maximumAge: 0, - enableHighAccuracy: false, - timeout: Infinity - }; - - if (options) { - if (options.maximumAge !== undefined && !isNaN(options.maximumAge) && options.maximumAge > 0) { - opt.maximumAge = options.maximumAge; - } - if (options.enableHighAccuracy !== undefined) { - opt.enableHighAccuracy = options.enableHighAccuracy; - } - if (options.timeout !== undefined && !isNaN(options.timeout)) { - if (options.timeout < 0) { - opt.timeout = 0; - } else { - opt.timeout = options.timeout; - } - } - } - - return opt; -} - -// Returns a timeout failure, closed over a specified timeout value and error callback. -function createTimeout(errorCallback, timeout) { - var t = setTimeout(function() { - clearTimeout(t); - t = null; - errorCallback({ - code:PositionError.TIMEOUT, - message:"Position retrieval timed out." - }); - }, timeout); - return t; -} - -var geolocation = { - lastPosition:null, // reference to last known (cached) position returned - /** - * Asynchronously acquires the current position. - * - * @param {Function} successCallback The function to call when the position data is available - * @param {Function} errorCallback The function to call when there is an error getting the heading position. (OPTIONAL) - * @param {PositionOptions} options The options for getting the position data. (OPTIONAL) - */ - getCurrentPosition:function(successCallback, errorCallback, options) { - argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments); - options = parseParameters(options); - - // Timer var that will fire an error callback if no position is retrieved from native - // before the "timeout" param provided expires - var timeoutTimer = {timer:null}; - - var win = function(p) { - clearTimeout(timeoutTimer.timer); - if (!(timeoutTimer.timer)) { - // Timeout already happened, or native fired error callback for - // this geo request. - // Don't continue with success callback. - return; - } - var pos = new Position( - { - latitude:p.latitude, - longitude:p.longitude, - altitude:p.altitude, - accuracy:p.accuracy, - heading:p.heading, - velocity:p.velocity, - altitudeAccuracy:p.altitudeAccuracy - }, - p.timestamp - ); - geolocation.lastPosition = pos; - successCallback(pos); - }; - var fail = function(e) { - clearTimeout(timeoutTimer.timer); - timeoutTimer.timer = null; - var err = new PositionError(e.code, e.message); - if (errorCallback) { - errorCallback(err); - } - }; - - // 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) <= 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) { - fail({ - code:PositionError.TIMEOUT, - message:"timeout value in PositionOptions set to 0 and no cached Position object available, or cached Position object's age exceeds provided PositionOptions' maximumAge parameter." - }); - // Otherwise we have to call into native to retrieve a position. - } else { - if (options.timeout !== Infinity) { - // If the timeout value was not set to Infinity (default), then - // set up a timeout function that will fire the error callback - // if no successful position was retrieved before timeout expired. - timeoutTimer.timer = createTimeout(fail, options.timeout); - } else { - // This is here so the check in the win function doesn't mess stuff up - // may seem weird but this guarantees timeoutTimer is - // always truthy before we call into native - timeoutTimer.timer = true; - } - exec(win, fail, "Geolocation", "getLocation", [options.enableHighAccuracy, options.maximumAge]); - } - return timeoutTimer; - }, - /** - * Asynchronously watches the geolocation for changes to geolocation. When a change occurs, - * the successCallback is called with the new location. - * - * @param {Function} successCallback The function to call each time the location data is available - * @param {Function} errorCallback The function to call when there is an error getting the location data. (OPTIONAL) - * @param {PositionOptions} options The options for getting the location data such as frequency. (OPTIONAL) - * @return String The watch id that must be passed to #clearWatch to stop watching. - */ - watchPosition:function(successCallback, errorCallback, options) { - argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments); - options = parseParameters(options); - - var id = utils.createUUID(); - - // Tell device to get a position ASAP, and also retrieve a reference to the timeout timer generated in getCurrentPosition - timers[id] = geolocation.getCurrentPosition(successCallback, errorCallback, options); - - var fail = function(e) { - clearTimeout(timers[id].timer); - var err = new PositionError(e.code, e.message); - if (errorCallback) { - errorCallback(err); - } - }; - - var win = function(p) { - clearTimeout(timers[id].timer); - if (options.timeout !== Infinity) { - timers[id].timer = createTimeout(fail, options.timeout); - } - var pos = new Position( - { - latitude:p.latitude, - longitude:p.longitude, - altitude:p.altitude, - accuracy:p.accuracy, - heading:p.heading, - velocity:p.velocity, - altitudeAccuracy:p.altitudeAccuracy - }, - p.timestamp - ); - geolocation.lastPosition = pos; - successCallback(pos); - }; - - exec(win, fail, "Geolocation", "addWatch", [id, options.enableHighAccuracy]); - - return id; - }, - /** - * Clears the specified heading watch. - * - * @param {String} id The ID of the watch returned from #watchPosition - */ - clearWatch:function(id) { - if (id && timers[id] !== undefined) { - clearTimeout(timers[id].timer); - timers[id].timer = false; - exec(null, null, "Geolocation", "clearWatch", [id]); - } - } -}; - -module.exports = geolocation; - -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js deleted file mode 100644 index 3e87a6e7..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js +++ /dev/null @@ -1,114 +0,0 @@ -cordova.define("cordova-plugin-inappbrowser.inappbrowser", 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. - * -*/ - -(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'); - - 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); - } - }, - - 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'); - } - } - }; - - 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(); - - callbacks = callbacks || {}; - for (var callbackName in callbacks) { - iab.addEventListener(callbackName, callbacks[callbackName]); - } - - var cb = function(eventname) { - iab._eventHandler(eventname); - }; - - strWindowFeatures = strWindowFeatures || ""; - - exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]); - return iab; - }; -})(); - -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-network-information/www/Connection.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-network-information/www/Connection.js deleted file mode 100644 index 5f7279c5..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-network-information/www/Connection.js +++ /dev/null @@ -1,37 +0,0 @@ -cordova.define("cordova-plugin-network-information.Connection", 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. - * -*/ - -/** - * Network status - */ -module.exports = { - UNKNOWN: "unknown", - ETHERNET: "ethernet", - WIFI: "wifi", - CELL_2G: "2g", - CELL_3G: "3g", - CELL_4G: "4g", - CELL:"cellular", - NONE: "none" -}; - -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-network-information/www/network.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-network-information/www/network.js deleted file mode 100644 index 770e6ba5..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-network-information/www/network.js +++ /dev/null @@ -1,94 +0,0 @@ -cordova.define("cordova-plugin-network-information.network", 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 = require('cordova/exec'), - cordova = require('cordova'), - channel = require('cordova/channel'), - utils = require('cordova/utils'); - -// Link the onLine property with the Cordova-supplied network info. -// This works because we clobber the navigator object with our own -// object in bootstrap.js. -// Browser platform do not need to define this property, because -// it is already supported by modern browsers -if (cordova.platformId !== 'browser' && typeof navigator != 'undefined') { - utils.defineGetter(navigator, 'onLine', function() { - return this.connection.type != 'none'; - }); -} - -function NetworkConnection() { - this.type = 'unknown'; -} - -/** - * Get connection info - * - * @param {Function} successCallback The function to call when the Connection data is available - * @param {Function} errorCallback The function to call when there is an error getting the Connection data. (OPTIONAL) - */ -NetworkConnection.prototype.getInfo = function(successCallback, errorCallback) { - exec(successCallback, errorCallback, "NetworkStatus", "getConnectionInfo", []); -}; - -var me = new NetworkConnection(); -var timerId = null; -var timeout = 500; - -channel.createSticky('onCordovaConnectionReady'); -channel.waitForInitialization('onCordovaConnectionReady'); - -channel.onCordovaReady.subscribe(function() { - me.getInfo(function(info) { - me.type = info; - if (info === "none") { - // set a timer if still offline at the end of timer send the offline event - timerId = setTimeout(function(){ - cordova.fireDocumentEvent("offline"); - timerId = null; - }, timeout); - } else { - // If there is a current offline event pending clear it - if (timerId !== null) { - clearTimeout(timerId); - timerId = null; - } - cordova.fireDocumentEvent("online"); - } - - // should only fire this once - if (channel.onCordovaConnectionReady.state !== 2) { - channel.onCordovaConnectionReady.fire(); - } - }, - function (e) { - // If we can't get the network info we should still tell Cordova - // to fire the deviceready event. - if (channel.onCordovaConnectionReady.state !== 2) { - channel.onCordovaConnectionReady.fire(); - } - console.log("Error initializing Network Connection: " + e); - }); -}); - -module.exports = me; - -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js deleted file mode 100644 index 5beaa5fd..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js +++ /dev/null @@ -1,36 +0,0 @@ -cordova.define("cordova-plugin-splashscreen.SplashScreen", 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 = require('cordova/exec'); - -var splashscreen = { - show:function() { - exec(null, null, "SplashScreen", "show", []); - }, - hide:function() { - exec(null, null, "SplashScreen", "hide", []); - } -}; - -module.exports = splashscreen; - -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-statusbar/www/statusbar.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-statusbar/www/statusbar.js deleted file mode 100644 index 708186f9..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-statusbar/www/statusbar.js +++ /dev/null @@ -1,116 +0,0 @@ -cordova.define("cordova-plugin-statusbar.statusbar", 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. - * -*/ - -/* global cordova */ - -var exec = require('cordova/exec'); - -var namedColors = { - "black": "#000000", - "darkGray": "#A9A9A9", - "lightGray": "#D3D3D3", - "white": "#FFFFFF", - "gray": "#808080", - "red": "#FF0000", - "green": "#00FF00", - "blue": "#0000FF", - "cyan": "#00FFFF", - "yellow": "#FFFF00", - "magenta": "#FF00FF", - "orange": "#FFA500", - "purple": "#800080", - "brown": "#A52A2A" -}; - -var StatusBar = { - - isVisible: true, - - overlaysWebView: function (doOverlay) { - exec(null, null, "StatusBar", "overlaysWebView", [doOverlay]); - }, - - styleDefault: function () { - // dark text ( to be used on a light background ) - exec(null, null, "StatusBar", "styleDefault", []); - }, - - styleLightContent: function () { - // light text ( to be used on a dark background ) - exec(null, null, "StatusBar", "styleLightContent", []); - }, - - styleBlackTranslucent: function () { - // #88000000 ? Apple says to use lightContent instead - exec(null, null, "StatusBar", "styleBlackTranslucent", []); - }, - - styleBlackOpaque: function () { - // #FF000000 ? Apple says to use lightContent instead - exec(null, null, "StatusBar", "styleBlackOpaque", []); - }, - - backgroundColorByName: function (colorname) { - return StatusBar.backgroundColorByHexString(namedColors[colorname]); - }, - - backgroundColorByHexString: function (hexString) { - if (hexString.charAt(0) !== "#") { - hexString = "#" + hexString; - } - - if (hexString.length === 4) { - var split = hexString.split(""); - hexString = "#" + split[1] + split[1] + split[2] + split[2] + split[3] + split[3]; - } - - exec(null, null, "StatusBar", "backgroundColorByHexString", [hexString]); - }, - - hide: function () { - exec(null, null, "StatusBar", "hide", []); - StatusBar.isVisible = false; - }, - - show: function () { - exec(null, null, "StatusBar", "show", []); - StatusBar.isVisible = true; - } - -}; - -// prime it. setTimeout so that proxy gets time to init -window.setTimeout(function () { - exec(function (res) { - if (typeof res == 'object') { - if (res.type == 'tap') { - cordova.fireWindowEvent('statusTap'); - } - } else { - StatusBar.isVisible = res; - } - }, null, "StatusBar", "_ready", []); -}, 0); - -module.exports = StatusBar; - -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js deleted file mode 100644 index fe0e83ad..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js +++ /dev/null @@ -1,124 +0,0 @@ -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. -// If not overridden with different values, the popup is not used. Example: -// -// window.plugins.socialsharing.iPadPopupCoordinates = function() { -// return "100,100,200,300"; -// }; -SocialSharing.prototype.iPadPopupCoordinates = function () { - // left,top,width,height - return "-1,-1,-1,-1"; -}; - -SocialSharing.prototype.setIPadPopupCoordinates = function (coords) { - // left,top,width,height - cordova.exec(function() {}, this._getErrorCallback(function() {}, "setIPadPopupCoordinates"), "SocialSharing", "setIPadPopupCoordinates", [coords]); -}; - -SocialSharing.prototype.available = function (callback) { - cordova.exec(function (avail) { - callback(avail ? true : false); - }, 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]); -}; - -SocialSharing.prototype.shareViaTwitter = function (message, file /* multiple not allowed by twitter */, url, successCallback, errorCallback) { - var fileArray = this._asArray(file); - var ecb = this._getErrorCallback(errorCallback, "shareViaTwitter"); - if (fileArray.length > 1) { - ecb("shareViaTwitter supports max one file"); - } else { - cordova.exec(successCallback, ecb, "SocialSharing", "shareViaTwitter", [message, null, fileArray, url]); - } -}; - -SocialSharing.prototype.shareViaFacebook = function (message, fileOrFileArray, url, successCallback, errorCallback) { - cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaFacebook"), "SocialSharing", "shareViaFacebook", [message, null, this._asArray(fileOrFileArray), url]); -}; - -SocialSharing.prototype.shareViaFacebookWithPasteMessageHint = function (message, fileOrFileArray, url, pasteMessageHint, successCallback, errorCallback) { - pasteMessageHint = pasteMessageHint || "If you like you can paste a message from your clipboard"; - cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaFacebookWithPasteMessageHint"), "SocialSharing", "shareViaFacebookWithPasteMessageHint", [message, null, this._asArray(fileOrFileArray), url, pasteMessageHint]); -}; - -SocialSharing.prototype.shareViaWhatsApp = function (message, fileOrFileArray, url, successCallback, errorCallback) { - 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) { - var opts = options; - if (typeof options == "string") { - opts = {"message":options}; // for backward compatibility as the options param used to be the message - } - cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaSMS"), "SocialSharing", "shareViaSMS", [opts, phonenumbers]); -}; - -SocialSharing.prototype.shareViaEmail = function (message, subject, toArray, ccArray, bccArray, fileOrFileArray, successCallback, errorCallback) { - cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaEmail"), "SocialSharing", "shareViaEmail", [message, subject, this._asArray(toArray), this._asArray(ccArray), this._asArray(bccArray), this._asArray(fileOrFileArray)]); -}; - -SocialSharing.prototype.canShareVia = function (via, message, subject, fileOrFileArray, url, successCallback, errorCallback) { - cordova.exec(successCallback, this._getErrorCallback(errorCallback, "canShareVia"), "SocialSharing", "canShareVia", [message, subject, this._asArray(fileOrFileArray), url, via]); -}; - -SocialSharing.prototype.canShareViaEmail = function (successCallback, errorCallback) { - cordova.exec(successCallback, this._getErrorCallback(errorCallback, "canShareViaEmail"), "SocialSharing", "canShareViaEmail", []); -}; - -SocialSharing.prototype.shareViaInstagram = function (message, fileOrFileArray, successCallback, errorCallback) { - cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaInstagram"), "SocialSharing", "shareViaInstagram", [message, null, this._asArray(fileOrFileArray), null]); -}; - -SocialSharing.prototype.shareVia = function (via, message, subject, fileOrFileArray, url, successCallback, errorCallback) { - cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareVia"), "SocialSharing", "shareVia", [message, subject, this._asArray(fileOrFileArray), url, via]); -}; - -SocialSharing.prototype.saveToPhotoAlbum = function (fileOrFileArray, successCallback, errorCallback) { - cordova.exec(successCallback, this._getErrorCallback(errorCallback, "saveToPhotoAlbum"), "SocialSharing", "saveToPhotoAlbum", [this._asArray(fileOrFileArray)]); -}; - -SocialSharing.prototype._asArray = function (param) { - if (param == null) { - param = []; - } else if (typeof param === 'string') { - param = new Array(param); - } - return param; -}; - -SocialSharing.prototype._getErrorCallback = function (ecb, functionName) { - if (typeof ecb === 'function') { - return ecb; - } else { - return function (result) { - console.log("The injected error callback of '" + functionName + "' received: " + JSON.stringify(result)); - } - } -}; - -SocialSharing.install = function () { - if (!window.plugins) { - window.plugins = {}; - } - - window.plugins.socialsharing = new SocialSharing(); - return window.plugins.socialsharing; -}; - -cordova.addConstructor(SocialSharing.install); -}); diff --git a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js deleted file mode 100644 index c74bb4d6..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js +++ /dev/null @@ -1,43 +0,0 @@ -cordova.define("ionic-plugin-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() { - 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) { - 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/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/phonegap-plugin-push/www/push.js b/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/phonegap-plugin-push/www/push.js deleted file mode 100644 index 7234d474..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcarchive/Products/Applications/Stone Island.app/www/plugins/phonegap-plugin-push/www/push.js +++ /dev/null @@ -1,377 +0,0 @@ -cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) { -/** -* This file has been generated by Babel. -* -* DO NOT EDIT IT DIRECTLY -* -* Edit the JS source file src/js/push.js -**/'use strict'; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/* global cordova:false */ -/* globals window */ - -/*! - * Module dependencies. - */ - -var exec = cordova.require('cordova/exec'); - -var PushNotification = function () { - /** - * PushNotification constructor. - * - * @param {Object} options to initiate Push Notifications. - * @return {PushNotification} instance that can be monitored and cancelled. - */ - function PushNotification(options) { - var _this = this; - - _classCallCheck(this, PushNotification); - - 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 success = function success(result) { - if (result && typeof result.registrationId !== 'undefined') { - _this.emit('registration', result); - } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { - var executeFuctionOrEmitEventByName = function executeFuctionOrEmitEventByName(functionName, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } - - var namespaces = functionName.split('.'); - var func = namespaces.pop(); - for (var i = 0; i < namespaces.length; i++) { - context = context[namespaces[i]]; - } - - if (typeof context[func] === 'function') { - context[func].call(context, args); - } else { - _this.emit(functionName, args); - } - }; - - executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); - } else if (result) { - _this.emit('notification', result); - } - }; - - // triggered on error - var fail = function fail(msg) { - var e = typeof msg === 'string' ? new Error(msg) : msg; - _this.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 - */ - - - _createClass(PushNotification, [{ - key: 'unregister', - value: function unregister(successCallback) { - var _this2 = this; - - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var options = arguments[2]; - - 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; - } - - var cleanHandlersAndPassThrough = function cleanHandlersAndPassThrough() { - if (!options) { - _this2.handlers = { - registration: [], - notification: [], - error: [] - }; - } - successCallback(); - }; - - exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); - } - - /** - * subscribe to a topic - * @param {String} topic topic to subscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ - - }, { - key: 'subscribe', - value: function subscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; - - if (typeof errorCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'failure parameter not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'success callback parameter must be a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); - } - - /** - * unsubscribe to a topic - * @param {String} topic topic to unsubscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ - - }, { - key: 'unsubscribe', - value: function unsubscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; - - if (typeof errorCallback !== 'function') { - console.log('PushNotification.unsubscribe failure: failure parameter not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.unsubscribe failure: ' + 'success callback parameter must be a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); - } - - /** - * Call this to set the application icon badge - */ - - }, { - key: 'setApplicationIconBadgeNumber', - value: function setApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var badge = arguments[2]; - - 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 - */ - - }, { - key: 'getApplicationIconBadgeNumber', - value: function getApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 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', []); - } - - /** - * Clear all notifications - */ - - }, { - key: 'clearAllNotifications', - value: function clearAllNotifications() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - - if (typeof errorCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: failure parameter ' + 'not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: success callback ' + 'parameter must be a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); - } - /** - * 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. - */ - - }, { - key: 'on', - value: function on(eventName, callback) { - if (!this.handlers.hasOwnProperty(eventName)) { - this.handlers[eventName] = []; - } - this.handlers[eventName].push(callback); - } - - /** - * Remove event listener. - * - * @param {String} eventName to match subscription. - * @param {Function} handle function associated with event. - */ - - }, { - key: 'off', - value: function off(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. - */ - - }, { - key: 'emit', - value: function emit() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - var eventName = args.shift(); - - if (!this.handlers.hasOwnProperty(eventName)) { - return false; - } - - for (var i = 0, length = this.handlers[eventName].length; i < length; i++) { - var callback = this.handlers[eventName][i]; - if (typeof callback === 'function') { - callback.apply(undefined, args); - } else { - console.log('event handler: ' + eventName + ' must be a function'); - } - } - - return true; - } - }, { - key: 'finish', - value: function finish() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'handler'; - - 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', [id]); - } - }]); - - return PushNotification; -}(); - -/*! - * 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 init(options) { - return new PushNotification(options); - }, - - hasPermission: function hasPermission(successCallback, errorCallback) { - exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); - }, - - /** - * 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/Stone Island.xcodeproj/project.pbxproj b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj index 1abfe332..39ab7c05 100755 --- a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj +++ b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj @@ -5,78 +5,74 @@ }; objectVersion = 46; objects = { + /* Begin PBXBuildFile section */ - 00E07008265D45F78DE2FC2B /* PushPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = A47F3571A27B4754B79DE957 /* PushPlugin.m */; }; + 00292D7361514757834B078F /* CDVReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 402ECC98EDB445EAB39A181B /* CDVReachability.m */; }; 0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0207DA571B56EA530066E2B4 /* Images.xcassets */; }; - 03BD482E39A64A28883BC1E1 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95B6D10A198941E0A7AA661B /* CoreTelephony.framework */; }; - 045A3C59D292410F9D920556 /* CDVNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = D85F1B722F5C4D9184B533B2 /* CDVNotification.m */; }; - 1212F7EE969A4FEF92FA8A0D /* CDVSplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 4805F5F534E94CDD825594B0 /* CDVSplashScreen.m */; }; - 13D39F8FCB8346D3B64AAF03 /* CDVLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 8186CF42575B49A5A36D703E /* CDVLogger.m */; }; - 1BF6C060B713453497EB35AA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE9E6DD935C64267A98EC052 /* SystemConfiguration.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 05A8EA42E85840F29AEC5612 /* NSString+URLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 247DF6309B9A4852930F5422 /* NSString+URLEncoding.m */; }; + 0B19C06F751443898AF0076E /* PushPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = CFE3D31E5B3A401EAD4B0E34 /* PushPlugin.m */; }; + 0C4BC9F008C544F0A0423ADE /* CDVConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = E27E1C8093DD497B877C8B2C /* CDVConnection.m */; }; 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 */; }; + 301BF552109A68D80062928A /* ReferenceProxy 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 */; }; - 306A5CC6B54147FF937B3E66 /* CDVNotification.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 47CC53F14E1A4CCEBA26F014 /* CDVNotification.bundle */; }; - 3EBFCB392D1643C3A52ADA67 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 746B7EAAA8C84872957E0779 /* MessageUI.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - 3F6F4AA6BFC54752BA517BBD /* NSString+URLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BEBC10E7898469099FAC638 /* NSString+URLEncoding.m */; }; - 4B6BBE91703E44438C3D6BF4 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD198525BB6748059C5435FC /* AudioToolbox.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - 6944BC1404274F5EABDB5309 /* CDVDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 437D912BC66846BB91069F1C /* CDVDevice.m */; }; + 34BD1209DECD44A4A55374EB /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 77C59C86309E4D8987D4CA70 /* libsqlite3.tbd */; }; + 391EE835DB9F4983A321009C /* CDVViewController+SplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F25F2DF1DED450FBF1E607C /* CDVViewController+SplashScreen.m */; }; + 4B9F8B1408024D8F8B1750F1 /* CDVStatusBar.m in Sources */ = {isa = PBXBuildFile; fileRef = C392C52069EB42E4BE6EBB98 /* CDVStatusBar.m */; }; + 4D1A300EC66D468C91E39C72 /* CDVDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = E2153F72606E4C60ABC04685 /* CDVDevice.m */; }; + 52D993DBC5674CE7B649BE6D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E7BA0074B9E4B39ACBBBDCA /* CoreLocation.framework */; }; + 5EF3A98FD22A4E3B9D7D5A3F /* CDVNotification.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0C0854070D0149BBA85AE26D /* CDVNotification.bundle */; }; + 676D85A4342249D6916BD261 /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0E2417C6C05481AAEC4B7EC /* Social.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 67B31E87600743CCA322713F /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 012BD3F912994450823BD91B /* MessageUI.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 6AFF5BF91D6E424B00AB3073 /* CDVLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */; }; - 6B7EE953AD6648EE8F6E5CA8 /* CDVViewController+SplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = EB8BDEB734CD48ADBF05E9EA /* CDVViewController+SplashScreen.m */; }; - 747C46CBA9734554A22CAB0C /* SocialSharing.m in Sources */ = {isa = PBXBuildFile; fileRef = EDC0235E6F114278ACA2B9C6 /* SocialSharing.m */; }; - 8CAC76174AB94768B116FD0B /* CDVInAppBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 32392B501EF64EF9BBE51B90 /* CDVInAppBrowser.m */; }; - 8ED0EF3D30224A44911EF6D5 /* CDVStatusBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 76946BF56E47485485297F85 /* CDVStatusBar.m */; }; - 9DA6B2875B144609A917701E /* IonicKeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = BDCE90E725A8494681A53F1E /* IonicKeyboard.m */; }; - DCB810ACFCCB4E61929DB7F1 /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EA86E7B178641B2B8A2E100 /* Social.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - DD12ACF49C7E6775E99375DA /* libPods-Stone Island.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0808D2FADAC40215352A5BB /* libPods-Stone Island.a */; }; - DE3D3EE67C25493DA42B64BA /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78F35811DF5A49EAA588B6F1 /* CoreLocation.framework */; }; - E5221FD6CABD42BC868C7898 /* CDVConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 487AD4DA56C9496CBD9B1107 /* CDVConnection.m */; }; - E88E58A089E644DBBA79BBAF /* CDVReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = F12981AA34334DAAB9FFFD15 /* CDVReachability.m */; }; - EC576C7FFE9C4923AC9F246D /* CDVLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 12D5FD89600D46479D6C049E /* CDVLocation.m */; }; - FD100FFA6CDF40B5BBFC3EF2 /* AppDelegate+notification.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BBDCE0E3CD64C0A8BD16077 /* AppDelegate+notification.m */; }; - 61273E0E5C6F4C1F980F3AB6 /* CDVWKWebViewEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 42554F171DB84178A87C52BF /* CDVWKWebViewEngine.m */; }; - 1921050AF02243B59D731EA2 /* CDVWKWebViewUIDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 382BC0B7B47543A38F56BEE2 /* CDVWKWebViewUIDelegate.m */; }; - C9349CEE7CEB4787B7CC16EC /* CDVWKProcessPoolFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C9228FB919C46F2A8790488 /* CDVWKProcessPoolFactory.m */; }; - AAF4CD79DD534E02B4DB6AB1 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67C31CDFE0EB4523BAA5C5F1 /* WebKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 86441B2FBF264A9E9034E9BF /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D112582B1274BAF96CB5928 /* libz.tbd */; }; + 95AEE0DF183F45A1AC1A053C /* CDVSplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = B46B69E074F643B082273EA5 /* CDVSplashScreen.m */; }; + A5D959180A5140DFA7F159C7 /* CDVLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = BF835FF23FAC45D285B43E59 /* CDVLocation.m */; }; + B7460C753F1E4E038752BFB6 /* SocialSharing.m in Sources */ = {isa = PBXBuildFile; fileRef = 911470B2007640ABA50E4473 /* SocialSharing.m */; }; + B9E149C1CAA24EEF9208095C /* IonicKeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = AF77C434CADC42FC820DB7D0 /* IonicKeyboard.m */; }; + C3B36D97C2D74E5FA1C3F20E /* CDVInAppBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = B358157B5AC540ECA450BD6B /* CDVInAppBrowser.m */; }; + C4319511B5AE4AAE9E021B2D /* AppDelegate+notification.m in Sources */ = {isa = PBXBuildFile; fileRef = CDA5A43076204007911C3F4D /* AppDelegate+notification.m */; }; + C647358191044F199E40B2F2 /* CDVNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 82D4850EF4B54FA0BA06B113 /* CDVNotification.m */; }; + E85868947CF042D090B2A0CD /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E7FF70CADCE4C62A3A15BFA /* SystemConfiguration.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + EDB14852205E4C08B43FD049 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A608A9D949443289C4F2926 /* AudioToolbox.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + F47B4216B08260D816EB7EB2 /* libPods-Stone Island.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BD106A1156B25ACB2FE31378 /* libPods-Stone Island.a */; }; + F8F34D16E4BB41B7A1A9A7DB /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F9D288BF4F449C78EE81842 /* CoreTelephony.framework */; }; + FC7D37269C9148D8A6ABAE5E /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7FC3DDB575348BB91912568 /* AddressBook.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 301BF534109A57CC0062928A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */; + containerPortal = 301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */; proxyType = 2; remoteGlobalIDString = D2AAC07E0554694100DB518D; remoteInfo = CordovaLib; }; 301BF550109A68C00062928A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */; + containerPortal = 301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */; proxyType = 1; remoteGlobalIDString = D2AAC07D0554694100DB518D; remoteInfo = CordovaLib; }; - CE8E9CB41F79D03E00E42B2C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C0C01EB21E3911D50056E6CB; - remoteInfo = Cordova; - }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 012BD3F912994450823BD91B /* MessageUI.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; 0207DA571B56EA530066E2B4 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "Stone Island/Images.xcassets"; sourceTree = SOURCE_ROOT; }; - 09CBE923AA964AE99C7EB62D /* 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>"; }; - 0C8B833F74484F598B4B27A4 /* 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>"; }; - 12D5FD89600D46479D6C049E /* 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>"; }; + 0C0854070D0149BBA85AE26D /* CDVNotification.bundle */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = "wrapper.plug-in"; name = CDVNotification.bundle; path = CDVNotification.bundle; sourceTree = "<group>"; }; + 0D112582B1274BAF96CB5928 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + 18821AB3445D4B1F9AD81783 /* 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>"; }; 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; }; + 1FFBCEABD1274F6380CEBDFD /* 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>"; }; + 247DF6309B9A4852930F5422 /* 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>"; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; - 2C8B26080D914B89BCFB2815 /* PushPlugin.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = PushPlugin.h; path = "phonegap-plugin-push/PushPlugin.h"; sourceTree = "<group>"; }; - 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = CordovaLib/CordovaLib.xcodeproj; sourceTree = "<group>"; }; + 2B50D43459DF40FFB646C1A8 /* 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>"; }; + 2E7FF70CADCE4C62A3A15BFA /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; 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>"; }; @@ -84,54 +80,44 @@ 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; }; - 31F8D3510B6B41AE8A8DCFA6 /* 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>"; }; - 32392B501EF64EF9BBE51B90 /* 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>"; }; 32CA4F630368D1EE00C91783 /* Stone Island-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Stone Island-Prefix.pch"; sourceTree = "<group>"; }; - 37B2BF19819B402985C0DB42 /* 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>"; }; - 437D912BC66846BB91069F1C /* 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>"; }; - 47CC53F14E1A4CCEBA26F014 /* CDVNotification.bundle */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.plug-in"; path = CDVNotification.bundle; sourceTree = "<group>"; }; - 4805F5F534E94CDD825594B0 /* 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>"; }; - 487AD4DA56C9496CBD9B1107 /* 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>"; }; - 5842BF12B8014E1D80A3C717 /* AppDelegate+notification.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "AppDelegate+notification.h"; path = "phonegap-plugin-push/AppDelegate+notification.h"; sourceTree = "<group>"; }; - 5EA86E7B178641B2B8A2E100 /* Social.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; }; + 3A608A9D949443289C4F2926 /* AudioToolbox.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + 3E7BA0074B9E4B39ACBBBDCA /* CoreLocation.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + 402ECC98EDB445EAB39A181B /* 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>"; }; + 52BD65496AC64AF4A8A928EC /* 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>"; }; 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CDVLaunchScreen.storyboard; path = "Stone Island/CDVLaunchScreen.storyboard"; sourceTree = SOURCE_ROOT; }; - 746B7EAAA8C84872957E0779 /* MessageUI.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; - 76903AC778CF4786B4531C67 /* 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>"; }; - 76946BF56E47485485297F85 /* CDVStatusBar.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVStatusBar.m; path = "cordova-plugin-statusbar/CDVStatusBar.m"; sourceTree = "<group>"; }; - 78F35811DF5A49EAA588B6F1 /* CoreLocation.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; - 7BBA129DA9994DCC8E9F5516 /* 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>"; }; - 7BBDCE0E3CD64C0A8BD16077 /* AppDelegate+notification.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = "AppDelegate+notification.m"; path = "phonegap-plugin-push/AppDelegate+notification.m"; sourceTree = "<group>"; }; - 7F9D16DF325743BAB515A5BB /* 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>"; }; - 8186CF42575B49A5A36D703E /* 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>"; }; - 839FA59F1DFF4206AF016F67 /* 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>"; }; + 6E4A37221806416C8DBDB20F /* 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>"; }; + 6F25F2DF1DED450FBF1E607C /* 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>"; }; + 72BD9B93E136426081355ED7 /* 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>"; }; + 77C59C86309E4D8987D4CA70 /* libsqlite3.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; + 82D4850EF4B54FA0BA06B113 /* 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>"; }; 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; }; - 95B6D10A198941E0A7AA661B /* CoreTelephony.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; - 9BEBC10E7898469099FAC638 /* 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>"; }; - A1D59A9DC6AC4274A1160579 /* CDVStatusBar.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVStatusBar.h; path = "cordova-plugin-statusbar/CDVStatusBar.h"; sourceTree = "<group>"; }; - A47F3571A27B4754B79DE957 /* PushPlugin.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = PushPlugin.m; path = "phonegap-plugin-push/PushPlugin.m"; sourceTree = "<group>"; }; - ABC3DCE2A5A44151B461C72C /* 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>"; }; - BD198525BB6748059C5435FC /* AudioToolbox.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - BDCE90E725A8494681A53F1E /* 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>"; }; - C650AF57562547CC88B49BDB /* 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>"; }; - CBBB06D50E8E4880BEFBE558 /* 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>"; }; - D0808D2FADAC40215352A5BB /* libPods-Stone Island.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Stone Island.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - D85F1B722F5C4D9184B533B2 /* 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>"; }; + 8F9D288BF4F449C78EE81842 /* CoreTelephony.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; + 911470B2007640ABA50E4473 /* 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>"; }; + A1021B44728347928D555C3C /* PushPlugin.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = PushPlugin.h; path = "phonegap-plugin-push/PushPlugin.h"; sourceTree = "<group>"; }; + AF77C434CADC42FC820DB7D0 /* 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>"; }; + B0E2417C6C05481AAEC4B7EC /* Social.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; }; + B358157B5AC540ECA450BD6B /* 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>"; }; + B44DB35CEDB14041A48E7CD5 /* 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>"; }; + B46B69E074F643B082273EA5 /* 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>"; }; + BD106A1156B25ACB2FE31378 /* libPods-Stone Island.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Stone Island.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + BF835FF23FAC45D285B43E59 /* 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>"; }; + BFCA69D29B704DDD94DECCC3 /* 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>"; }; + C392C52069EB42E4BE6EBB98 /* CDVStatusBar.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVStatusBar.m; path = "cordova-plugin-statusbar/CDVStatusBar.m"; sourceTree = "<group>"; }; + C7B8120981364B7E93CFF999 /* 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>"; }; + C7FC3DDB575348BB91912568 /* AddressBook.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; }; + CDA5A43076204007911C3F4D /* AppDelegate+notification.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = "AppDelegate+notification.m"; path = "phonegap-plugin-push/AppDelegate+notification.m"; sourceTree = "<group>"; }; + CFE3D31E5B3A401EAD4B0E34 /* PushPlugin.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = PushPlugin.m; path = "phonegap-plugin-push/PushPlugin.m"; sourceTree = "<group>"; }; + D5817CACD7364DE6B809405E /* CDVStatusBar.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVStatusBar.h; path = "cordova-plugin-statusbar/CDVStatusBar.h"; sourceTree = "<group>"; }; + DC4FC98BECD94C008A048D5B /* 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>"; }; + E02D6585112F45E8BB606277 /* AppDelegate+notification.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "AppDelegate+notification.h"; path = "phonegap-plugin-push/AppDelegate+notification.h"; sourceTree = "<group>"; }; + E2153F72606E4C60ABC04685 /* 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>"; }; + E27E1C8093DD497B877C8B2C /* 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>"; }; 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>"; }; - EB8BDEB734CD48ADBF05E9EA /* 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>"; }; - ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = "<group>"; }; - EDC0235E6F114278ACA2B9C6 /* 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>"; }; - EE9E6DD935C64267A98EC052 /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - F12981AA34334DAAB9FFFD15 /* 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>"; }; - F3CE61E09DA34B75AD99F264 /* 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>"; }; + ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Bridging-Header.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>"; }; - 42554F171DB84178A87C52BF /* CDVWKWebViewEngine.m */ = {isa = PBXFileReference; name = "CDVWKWebViewEngine.m"; path = "cordova-plugin-wkwebview-engine/CDVWKWebViewEngine.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; - 382BC0B7B47543A38F56BEE2 /* CDVWKWebViewUIDelegate.m */ = {isa = PBXFileReference; name = "CDVWKWebViewUIDelegate.m"; path = "cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; - 7C9228FB919C46F2A8790488 /* CDVWKProcessPoolFactory.m */ = {isa = PBXFileReference; name = "CDVWKProcessPoolFactory.m"; path = "cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; - 24616C5AD60A46DC9527B0B5 /* CDVWKWebViewEngine.h */ = {isa = PBXFileReference; name = "CDVWKWebViewEngine.h"; path = "cordova-plugin-wkwebview-engine/CDVWKWebViewEngine.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - 94EBFB9DC2CE4E9B8C92DE89 /* CDVWKWebViewUIDelegate.h */ = {isa = PBXFileReference; name = "CDVWKWebViewUIDelegate.h"; path = "cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - 736D2CE3A74A4B53A5EB13EA /* CDVWKProcessPoolFactory.h */ = {isa = PBXFileReference; name = "CDVWKProcessPoolFactory.h"; path = "cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - 67C31CDFE0EB4523BAA5C5F1 /* WebKit.framework */ = {isa = PBXFileReference; name = "WebKit.framework"; path = "System/Library/Frameworks/WebKit.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; }; + FEC6ACAB797B468F8650E4BD /* 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>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -139,15 +125,17 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 301BF552109A68D80062928A /* libCordova.a in Frameworks */, - 4B6BBE91703E44438C3D6BF4 /* AudioToolbox.framework in Frameworks */, - DE3D3EE67C25493DA42B64BA /* CoreLocation.framework in Frameworks */, - 1BF6C060B713453497EB35AA /* SystemConfiguration.framework in Frameworks */, - 03BD482E39A64A28883BC1E1 /* CoreTelephony.framework in Frameworks */, - DCB810ACFCCB4E61929DB7F1 /* Social.framework in Frameworks */, - 3EBFCB392D1643C3A52ADA67 /* MessageUI.framework in Frameworks */, - DD12ACF49C7E6775E99375DA /* libPods-Stone Island.a in Frameworks */, - AAF4CD79DD534E02B4DB6AB1 /* WebKit.framework in Frameworks */, + 301BF552109A68D80062928A /* ReferenceProxy in Frameworks */, + EDB14852205E4C08B43FD049 /* AudioToolbox.framework in Frameworks */, + 52D993DBC5674CE7B649BE6D /* CoreLocation.framework in Frameworks */, + E85868947CF042D090B2A0CD /* SystemConfiguration.framework in Frameworks */, + F8F34D16E4BB41B7A1A9A7DB /* CoreTelephony.framework in Frameworks */, + 676D85A4342249D6916BD261 /* Social.framework in Frameworks */, + 67B31E87600743CCA322713F /* MessageUI.framework in Frameworks */, + FC7D37269C9148D8A6ABAE5E /* AddressBook.framework in Frameworks */, + 34BD1209DECD44A4A55374EB /* libsqlite3.tbd in Frameworks */, + 86441B2FBF264A9E9034E9BF /* libz.tbd in Frameworks */, + F47B4216B08260D816EB7EB2 /* libPods-Stone Island.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -175,20 +163,20 @@ name = Products; sourceTree = "<group>"; }; - 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { + 29B97314FDCFA39411CA2CEA = { isa = PBXGroup; children = ( EB87FDF41871DAF40020F90C /* config.xml */, EB87FDF31871DA8E0020F90C /* www */, EB87FDF11871DA420020F90C /* Staging */, - 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */, + 301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */, 080E96DDFE201D6D7F000001 /* Classes */, 307C750510C5A3420062BCA9 /* Plugins */, 29B97315FDCFA39411CA2CEA /* Other Sources */, 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, - 79E9018CEB48F0A5BABD4388 /* Pods */, + C6D381EF88EC4E0DB42098AF /* Pods */, ); name = CustomTemplate; sourceTree = "<group>"; @@ -211,7 +199,7 @@ 3047A50E1AB8057F00498E2A /* config */, 8D1107310486CEB800E47090 /* Stone Island-Info.plist */, 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */, - 47CC53F14E1A4CCEBA26F014 /* CDVNotification.bundle */, + 0C0854070D0149BBA85AE26D /* CDVNotification.bundle */, ); name = Resources; path = "Stone Island/Resources"; @@ -220,14 +208,16 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( - BD198525BB6748059C5435FC /* AudioToolbox.framework */, - 78F35811DF5A49EAA588B6F1 /* CoreLocation.framework */, - EE9E6DD935C64267A98EC052 /* SystemConfiguration.framework */, - 95B6D10A198941E0A7AA661B /* CoreTelephony.framework */, - 5EA86E7B178641B2B8A2E100 /* Social.framework */, - 746B7EAAA8C84872957E0779 /* MessageUI.framework */, - D0808D2FADAC40215352A5BB /* libPods-Stone Island.a */, - 67C31CDFE0EB4523BAA5C5F1 /* WebKit.framework */, + 3A608A9D949443289C4F2926 /* AudioToolbox.framework */, + 3E7BA0074B9E4B39ACBBBDCA /* CoreLocation.framework */, + 2E7FF70CADCE4C62A3A15BFA /* SystemConfiguration.framework */, + 8F9D288BF4F449C78EE81842 /* CoreTelephony.framework */, + B0E2417C6C05481AAEC4B7EC /* Social.framework */, + 012BD3F912994450823BD91B /* MessageUI.framework */, + C7FC3DDB575348BB91912568 /* AddressBook.framework */, + 77C59C86309E4D8987D4CA70 /* libsqlite3.tbd */, + 0D112582B1274BAF96CB5928 /* libz.tbd */, + BD106A1156B25ACB2FE31378 /* libPods-Stone Island.a */, ); name = Frameworks; sourceTree = "<group>"; @@ -236,7 +226,6 @@ isa = PBXGroup; children = ( 301BF535109A57CC0062928A /* libCordova.a */, - CE8E9CB51F79D03E00E42B2C /* Cordova.framework */, ); name = Products; sourceTree = "<group>"; @@ -254,48 +243,40 @@ 307C750510C5A3420062BCA9 /* Plugins */ = { isa = PBXGroup; children = ( - 8186CF42575B49A5A36D703E /* CDVLogger.m */, - 31F8D3510B6B41AE8A8DCFA6 /* CDVLogger.h */, - 437D912BC66846BB91069F1C /* CDVDevice.m */, - ABC3DCE2A5A44151B461C72C /* CDVDevice.h */, - D85F1B722F5C4D9184B533B2 /* CDVNotification.m */, - 7BBA129DA9994DCC8E9F5516 /* CDVNotification.h */, - 12D5FD89600D46479D6C049E /* CDVLocation.m */, - 0C8B833F74484F598B4B27A4 /* CDVLocation.h */, - 32392B501EF64EF9BBE51B90 /* CDVInAppBrowser.m */, - 839FA59F1DFF4206AF016F67 /* CDVInAppBrowser.h */, - 487AD4DA56C9496CBD9B1107 /* CDVConnection.m */, - F12981AA34334DAAB9FFFD15 /* CDVReachability.m */, - 37B2BF19819B402985C0DB42 /* CDVConnection.h */, - 76903AC778CF4786B4531C67 /* CDVReachability.h */, - 4805F5F534E94CDD825594B0 /* CDVSplashScreen.m */, - EB8BDEB734CD48ADBF05E9EA /* CDVViewController+SplashScreen.m */, - 7F9D16DF325743BAB515A5BB /* CDVSplashScreen.h */, - CBBB06D50E8E4880BEFBE558 /* CDVViewController+SplashScreen.h */, - 76946BF56E47485485297F85 /* CDVStatusBar.m */, - A1D59A9DC6AC4274A1160579 /* CDVStatusBar.h */, - 9BEBC10E7898469099FAC638 /* NSString+URLEncoding.m */, - EDC0235E6F114278ACA2B9C6 /* SocialSharing.m */, - C650AF57562547CC88B49BDB /* NSString+URLEncoding.h */, - 09CBE923AA964AE99C7EB62D /* SocialSharing.h */, - BDCE90E725A8494681A53F1E /* IonicKeyboard.m */, - F3CE61E09DA34B75AD99F264 /* IonicKeyboard.h */, - 7BBDCE0E3CD64C0A8BD16077 /* AppDelegate+notification.m */, - A47F3571A27B4754B79DE957 /* PushPlugin.m */, - 5842BF12B8014E1D80A3C717 /* AppDelegate+notification.h */, - 2C8B26080D914B89BCFB2815 /* PushPlugin.h */, - 42554F171DB84178A87C52BF /* CDVWKWebViewEngine.m */, - 382BC0B7B47543A38F56BEE2 /* CDVWKWebViewUIDelegate.m */, - 7C9228FB919C46F2A8790488 /* CDVWKProcessPoolFactory.m */, - 24616C5AD60A46DC9527B0B5 /* CDVWKWebViewEngine.h */, - 94EBFB9DC2CE4E9B8C92DE89 /* CDVWKWebViewUIDelegate.h */, - 736D2CE3A74A4B53A5EB13EA /* CDVWKProcessPoolFactory.h */, + E2153F72606E4C60ABC04685 /* CDVDevice.m */, + 1FFBCEABD1274F6380CEBDFD /* CDVDevice.h */, + 82D4850EF4B54FA0BA06B113 /* CDVNotification.m */, + 52BD65496AC64AF4A8A928EC /* CDVNotification.h */, + BF835FF23FAC45D285B43E59 /* CDVLocation.m */, + 2B50D43459DF40FFB646C1A8 /* CDVLocation.h */, + B358157B5AC540ECA450BD6B /* CDVInAppBrowser.m */, + BFCA69D29B704DDD94DECCC3 /* CDVInAppBrowser.h */, + E27E1C8093DD497B877C8B2C /* CDVConnection.m */, + 402ECC98EDB445EAB39A181B /* CDVReachability.m */, + FEC6ACAB797B468F8650E4BD /* CDVConnection.h */, + C7B8120981364B7E93CFF999 /* CDVReachability.h */, + B46B69E074F643B082273EA5 /* CDVSplashScreen.m */, + 6F25F2DF1DED450FBF1E607C /* CDVViewController+SplashScreen.m */, + 18821AB3445D4B1F9AD81783 /* CDVSplashScreen.h */, + B44DB35CEDB14041A48E7CD5 /* CDVViewController+SplashScreen.h */, + C392C52069EB42E4BE6EBB98 /* CDVStatusBar.m */, + D5817CACD7364DE6B809405E /* CDVStatusBar.h */, + 247DF6309B9A4852930F5422 /* NSString+URLEncoding.m */, + 911470B2007640ABA50E4473 /* SocialSharing.m */, + 72BD9B93E136426081355ED7 /* NSString+URLEncoding.h */, + 6E4A37221806416C8DBDB20F /* SocialSharing.h */, + AF77C434CADC42FC820DB7D0 /* IonicKeyboard.m */, + DC4FC98BECD94C008A048D5B /* IonicKeyboard.h */, + CDA5A43076204007911C3F4D /* AppDelegate+notification.m */, + CFE3D31E5B3A401EAD4B0E34 /* PushPlugin.m */, + E02D6585112F45E8BB606277 /* AppDelegate+notification.h */, + A1021B44728347928D555C3C /* PushPlugin.h */, ); name = Plugins; path = "Stone Island/Plugins"; sourceTree = SOURCE_ROOT; }; - 79E9018CEB48F0A5BABD4388 /* Pods */ = { + C6D381EF88EC4E0DB42098AF /* Pods */ = { isa = PBXGroup; children = ( ); @@ -318,13 +299,13 @@ isa = PBXNativeTarget; buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Stone Island" */; buildPhases = ( - 906A8B20E19F94F79EB8096B /* [CP] Check Pods Manifest.lock */, + 2D6F126B960E439DA02D61E1 /* [CP] Check Pods Manifest.lock */, 304B58A110DAC018002A0835 /* Copy www directory */, 1D60588D0D05DD3D006BFB54 /* Resources */, 1D60588E0D05DD3D006BFB54 /* Sources */, 1D60588F0D05DD3D006BFB54 /* Frameworks */, - 2A1750E35FDB26D2A0A1E68A /* [CP] Embed Pods Frameworks */, - C003F036D726E410BB1B13F4 /* [CP] Copy Pods Resources */, + 64C274CA54D5383FAB6F8F39 /* [CP] Embed Pods Frameworks */, + 19041D7E5996E811D7AB4BEA /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -343,27 +324,18 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 510; - TargetAttributes = { - 1D6058900D05DD3D006BFB54 = { - DevelopmentTeam = C6JQTPGJ97; - ProvisioningStyle = Automatic; - }; - }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Stone Island" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; - knownRegions = ( - en, - ); - mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; + mainGroup = 29B97314FDCFA39411CA2CEA; productRefGroup = 19C28FACFE9D520D11CA2CBB /* Products */; projectDirPath = ""; projectReferences = ( { ProductGroup = 301BF52E109A57CC0062928A /* Products */; - ProjectRef = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */; + ProjectRef = 301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */; }, ); projectRoot = ""; @@ -381,13 +353,6 @@ remoteRef = 301BF534109A57CC0062928A /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - CE8E9CB51F79D03E00E42B2C /* Cordova.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Cordova.framework; - remoteRef = CE8E9CB41F79D03E00E42B2C /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ @@ -398,71 +363,71 @@ 302D95F214D2391D003F00A1 /* MainViewController.xib in Resources */, 0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */, 6AFF5BF91D6E424B00AB3073 /* CDVLaunchScreen.storyboard in Resources */, - 306A5CC6B54147FF937B3E66 /* CDVNotification.bundle in Resources */, + 5EF3A98FD22A4E3B9D7D5A3F /* CDVNotification.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2A1750E35FDB26D2A0A1E68A /* [CP] Embed Pods Frameworks */ = { + 19041D7E5996E811D7AB4BEA /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-frameworks.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 304B58A110DAC018002A0835 /* Copy www directory */ = { + 2D6F126B960E439DA02D61E1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Copy www directory"; + name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "NODEJS_PATH=/usr/local/bin; NVM_NODE_PATH=~/.nvm/versions/node/`nvm version 2>/dev/null`/bin; N_NODE_PATH=`find /usr/local/n/versions/node/* -maxdepth 0 -type d 2>/dev/null | tail -1`/bin; XCODE_NODE_PATH=`xcode-select --print-path`/usr/share/xcs/Node/bin; PATH=$NODEJS_PATH:$NVM_NODE_PATH:$N_NODE_PATH:$XCODE_NODE_PATH:$PATH && node cordova/lib/copy-www-build-step.js"; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; - 906A8B20E19F94F79EB8096B /* [CP] Check Pods Manifest.lock */ = { + 304B58A110DAC018002A0835 /* Copy www directory */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "[CP] Check Pods Manifest.lock"; + name = "Copy www directory"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "NODEJS_PATH=/usr/local/bin; NVM_NODE_PATH=~/.nvm/versions/node/`nvm version 2>/dev/null`/bin; N_NODE_PATH=`find /usr/local/n/versions/node/* -maxdepth 0 -type d 2>/dev/null | tail -1`/bin; XCODE_NODE_PATH=`xcode-select --print-path`/usr/share/xcs/Node/bin; PATH=$NODEJS_PATH:$NVM_NODE_PATH:$N_NODE_PATH:$XCODE_NODE_PATH:$PATH && node cordova/lib/copy-www-build-step.js"; showEnvVarsInLog = 0; }; - C003F036D726E410BB1B13F4 /* [CP] Copy Pods Resources */ = { + 64C274CA54D5383FAB6F8F39 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "[CP] Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Stone Island/Pods-Stone Island-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -475,24 +440,20 @@ 1D60589B0D05DD56006BFB54 /* main.m in Sources */, 1D3623260D0F684500981E51 /* AppDelegate.m in Sources */, 302D95F114D2391D003F00A1 /* MainViewController.m in Sources */, - 13D39F8FCB8346D3B64AAF03 /* CDVLogger.m in Sources */, - 6944BC1404274F5EABDB5309 /* CDVDevice.m in Sources */, - 045A3C59D292410F9D920556 /* CDVNotification.m in Sources */, - EC576C7FFE9C4923AC9F246D /* CDVLocation.m in Sources */, - 8CAC76174AB94768B116FD0B /* CDVInAppBrowser.m in Sources */, - E5221FD6CABD42BC868C7898 /* CDVConnection.m in Sources */, - E88E58A089E644DBBA79BBAF /* CDVReachability.m in Sources */, - 1212F7EE969A4FEF92FA8A0D /* CDVSplashScreen.m in Sources */, - 6B7EE953AD6648EE8F6E5CA8 /* CDVViewController+SplashScreen.m in Sources */, - 8ED0EF3D30224A44911EF6D5 /* CDVStatusBar.m in Sources */, - 3F6F4AA6BFC54752BA517BBD /* NSString+URLEncoding.m in Sources */, - 747C46CBA9734554A22CAB0C /* SocialSharing.m in Sources */, - 9DA6B2875B144609A917701E /* IonicKeyboard.m in Sources */, - FD100FFA6CDF40B5BBFC3EF2 /* AppDelegate+notification.m in Sources */, - 00E07008265D45F78DE2FC2B /* PushPlugin.m in Sources */, - 61273E0E5C6F4C1F980F3AB6 /* CDVWKWebViewEngine.m in Sources */, - 1921050AF02243B59D731EA2 /* CDVWKWebViewUIDelegate.m in Sources */, - C9349CEE7CEB4787B7CC16EC /* CDVWKProcessPoolFactory.m in Sources */, + 4D1A300EC66D468C91E39C72 /* CDVDevice.m in Sources */, + C647358191044F199E40B2F2 /* CDVNotification.m in Sources */, + A5D959180A5140DFA7F159C7 /* CDVLocation.m in Sources */, + C3B36D97C2D74E5FA1C3F20E /* CDVInAppBrowser.m in Sources */, + 0C4BC9F008C544F0A0423ADE /* CDVConnection.m in Sources */, + 00292D7361514757834B078F /* CDVReachability.m in Sources */, + 95AEE0DF183F45A1AC1A053C /* CDVSplashScreen.m in Sources */, + 391EE835DB9F4983A321009C /* CDVViewController+SplashScreen.m in Sources */, + 4B9F8B1408024D8F8B1750F1 /* CDVStatusBar.m in Sources */, + 05A8EA42E85840F29AEC5612 /* NSString+URLEncoding.m in Sources */, + B7460C753F1E4E038752BFB6 /* SocialSharing.m in Sources */, + B9E149C1CAA24EEF9208095C /* IonicKeyboard.m in Sources */, + C4319511B5AE4AAE9E021B2D /* AppDelegate+notification.m in Sources */, + 0B19C06F751443898AF0076E /* PushPlugin.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -516,10 +477,7 @@ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = C6JQTPGJ97; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -530,7 +488,6 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; PRODUCT_NAME = "Stone Island"; - PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -544,10 +501,7 @@ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = C6JQTPGJ97; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Stone Island/Stone Island-Prefix.pch"; GCC_THUMB_SUPPORT = NO; @@ -556,7 +510,6 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; PRODUCT_NAME = "Stone Island"; - PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; diff --git a/StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist b/StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 05e8d194..00000000 --- a/StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,14 +0,0 @@ -<?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>5</integer> - </dict> - </dict> -</dict> -</plist> diff --git a/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate b/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate Binary files differindex 0693d2ac..a180f759 100644 --- a/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate +++ b/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist b/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist index c6e957c0..a3782857 100644 --- a/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ <key>Stone Island.xcscheme_^#shared#^_</key> <dict> <key>orderHint</key> - <integer>4</integer> + <integer>1</integer> </dict> </dict> </dict> diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/Contents.json b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/Contents.json index 56254c1d..4c005a7e 100644 --- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/Contents.json @@ -3,152 +3,157 @@ { "idiom" : "iphone", "size" : "20x20", + "filename" : "icon-20@2x.png", "scale" : "2x" }, { "idiom" : "iphone", "size" : "20x20", + "filename" : "icon-20@3x.png", "scale" : "3x" }, { - "size" : "29x29", "idiom" : "iphone", + "size" : "29x29", "filename" : "icon-small.png", "scale" : "1x" }, { - "size" : "29x29", "idiom" : "iphone", + "size" : "29x29", "filename" : "icon-small@2x.png", "scale" : "2x" }, { - "size" : "29x29", "idiom" : "iphone", + "size" : "29x29", "filename" : "icon-small@3x.png", "scale" : "3x" }, { - "size" : "40x40", "idiom" : "iphone", + "size" : "40x40", "filename" : "icon-40@2x.png", "scale" : "2x" }, { - "size" : "40x40", "idiom" : "iphone", + "size" : "40x40", "filename" : "icon-60@2x.png", "scale" : "3x" }, { - "size" : "57x57", "idiom" : "iphone", + "size" : "57x57", "filename" : "icon.png", "scale" : "1x" }, { - "size" : "57x57", "idiom" : "iphone", + "size" : "57x57", "filename" : "icon@2x.png", "scale" : "2x" }, { - "size" : "60x60", "idiom" : "iphone", + "size" : "60x60", "filename" : "icon-60@2x.png", "scale" : "2x" }, { - "size" : "60x60", "idiom" : "iphone", + "size" : "60x60", "filename" : "icon-60@3x.png", "scale" : "3x" }, { "idiom" : "ipad", "size" : "20x20", + "filename" : "icon-20.png", "scale" : "1x" }, { "idiom" : "ipad", "size" : "20x20", + "filename" : "icon-20@2x.png", "scale" : "2x" }, { - "size" : "29x29", "idiom" : "ipad", + "size" : "29x29", "filename" : "icon-small.png", "scale" : "1x" }, { - "size" : "29x29", "idiom" : "ipad", + "size" : "29x29", "filename" : "icon-small@2x.png", "scale" : "2x" }, { - "size" : "40x40", "idiom" : "ipad", + "size" : "40x40", "filename" : "icon-40.png", "scale" : "1x" }, { - "size" : "40x40", "idiom" : "ipad", + "size" : "40x40", "filename" : "icon-40@2x.png", "scale" : "2x" }, { - "size" : "50x50", "idiom" : "ipad", + "size" : "50x50", "filename" : "icon-50.png", "scale" : "1x" }, { - "size" : "50x50", "idiom" : "ipad", + "size" : "50x50", "filename" : "icon-50@2x.png", "scale" : "2x" }, { - "size" : "72x72", "idiom" : "ipad", + "size" : "72x72", "filename" : "icon-72.png", "scale" : "1x" }, { - "size" : "72x72", "idiom" : "ipad", + "size" : "72x72", "filename" : "icon-72@2x.png", "scale" : "2x" }, { - "size" : "76x76", "idiom" : "ipad", + "size" : "76x76", "filename" : "icon-76.png", "scale" : "1x" }, { - "size" : "76x76", "idiom" : "ipad", + "size" : "76x76", "filename" : "icon-76@2x.png", "scale" : "2x" }, { - "size" : "83.5x83.5", "idiom" : "ipad", + "size" : "83.5x83.5", "filename" : "icon-83.5@2x.png", "scale" : "2x" }, { "size" : "1024x1024", "idiom" : "ios-marketing", - "filename" : "1024x1024bb.png", + "filename" : "icon-1024.png", "scale" : "1x" }, { "size" : "24x24", "idiom" : "watch", + "filename" : "AppIcon24x24@2x.png", "scale" : "2x", "role" : "notificationCenter", "subtype" : "38mm" @@ -156,6 +161,7 @@ { "size" : "27.5x27.5", "idiom" : "watch", + "filename" : "AppIcon27.5x27.5@2x.png", "scale" : "2x", "role" : "notificationCenter", "subtype" : "42mm" @@ -163,18 +169,21 @@ { "size" : "29x29", "idiom" : "watch", + "filename" : "AppIcon29x29@2x.png", "role" : "companionSettings", "scale" : "2x" }, { "size" : "29x29", "idiom" : "watch", + "filename" : "AppIcon29x29@3x.png", "role" : "companionSettings", "scale" : "3x" }, { "size" : "40x40", "idiom" : "watch", + "filename" : "AppIcon40x40@2x.png", "scale" : "2x", "role" : "appLauncher", "subtype" : "38mm" @@ -182,6 +191,7 @@ { "size" : "44x44", "idiom" : "watch", + "filename" : "AppIcon44x44@2x.png", "scale" : "2x", "role" : "longLook", "subtype" : "42mm" @@ -189,6 +199,7 @@ { "size" : "86x86", "idiom" : "watch", + "filename" : "AppIcon86x86@2x.png", "scale" : "2x", "role" : "quickLook", "subtype" : "38mm" @@ -196,13 +207,15 @@ { "size" : "98x98", "idiom" : "watch", + "filename" : "AppIcon98x98@2x.png", "scale" : "2x", "role" : "quickLook", "subtype" : "42mm" }, { - "idiom" : "watch-marketing", "size" : "1024x1024", + "idiom" : "watch-marketing", + "filename" : "icon-1024.png", "scale" : "1x" } ], @@ -210,4 +223,4 @@ "version" : 1, "author" : "xcode" } -}
\ No newline at end of file +} 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 Binary files differindex d2617e23..e865adbc 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 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 Binary files differindex 1813fa48..6d07dce5 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 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 Binary files differindex 531435f3..98a9d96d 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 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 Binary files differindex dffdf8ba..bac693f7 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 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 Binary files differindex 23c5b259..955af362 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 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 Binary files differindex da2863a4..e1268916 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 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 Binary files differindex 3094af16..8c6e5df3 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 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 Binary files differindex 9515e8dc..dd819da6 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 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 Binary files differindex 93e7a05d..63afe7f1 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 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 Binary files differindex 351f06c9..4cff29a2 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 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 Binary files differindex 52bafc1d..3c1a0115 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 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 Binary files differindex cbe03b26..0ea1c42f 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 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 Binary files differindex 8e3a96d6..2c72038e 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 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 Binary files differindex a40b6358..5c37dfc2 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 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 Binary files differindex 2c9b6664..b2571a71 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 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 Binary files differindex cf5b68db..d75098f5 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 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 Binary files differindex 50dcc57f..eae0792d 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 diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchStoryboard.imageset/Contents.json b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchStoryboard.imageset/Contents.json index 621019de..a044a08d 100644 --- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchStoryboard.imageset/Contents.json +++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchStoryboard.imageset/Contents.json @@ -38,7 +38,8 @@ }, { "idiom": "universal", - "scale": "2x" + "scale": "2x", + "filename": "Default@2x~universal~anyany.png" }, { "idiom": "universal", diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchStoryboard.imageset/Default@2x~universal~anyany.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchStoryboard.imageset/Default@2x~universal~anyany.png Binary files differnew file mode 100644 index 00000000..507cf688 --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchStoryboard.imageset/Default@2x~universal~anyany.png 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 deleted file mode 100644 index ccfa3a51..00000000 --- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.m +++ /dev/null @@ -1,38 +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 "CDVLogger.h" -#import <Cordova/CDV.h> - -@implementation CDVLogger - -/* log a message */ -- (void)logLevel:(CDVInvokedUrlCommand*)command -{ - id level = [command argumentAtIndex:0]; - id message = [command argumentAtIndex:1]; - - if ([level isEqualToString:@"LOG"]) { - NSLog(@"%@", message); - } else { - NSLog(@"%@: %@", level, message); - } -} - -@end 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 8ad8116b..ab97055a 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 @@ -178,11 +178,26 @@ return device; } +- (BOOL) isUsingCDVLaunchScreen { + NSString* launchStoryboardName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchStoryboardName"]; + if (launchStoryboardName) { + return ([launchStoryboardName isEqualToString:@"CDVLaunchScreen"]); + } else { + return NO; + } +} + - (NSString*)getImageName:(UIInterfaceOrientation)currentOrientation delegate:(id<CDVScreenOrientationDelegate>)orientationDelegate device:(CDV_iOSDevice)device { // Use UILaunchImageFile if specified in plist. Otherwise, use Default. NSString* imageName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchImageFile"]; + // detect if we are using CB-9762 Launch Storyboard; if so, return the associated image instead + if ([self isUsingCDVLaunchScreen]) { + imageName = @"LaunchStoryboard"; + return imageName; + } + NSUInteger supportedOrientations = [orientationDelegate supportedInterfaceOrientations]; // Checks to see if the developer has locked the orientation to use only one of Portrait or Landscape @@ -334,6 +349,14 @@ - (void)updateBounds { + if ([self isUsingCDVLaunchScreen]) { + // CB-9762's launch screen expects the image to fill the screen and be scaled using AspectFill. + CGSize viewportSize = [UIApplication sharedApplication].delegate.window.bounds.size; + _imageView.frame = CGRectMake(0, 0, viewportSize.width, viewportSize.height); + _imageView.contentMode = UIViewContentModeScaleAspectFill; + return; + } + UIImage* img = _imageView.image; CGRect imgBounds = (img) ? CGRectMake(0, 0, img.size.width, img.size.height) : CGRectZero; diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.h deleted file mode 100644 index f4f8816e..00000000 --- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.h +++ /dev/null @@ -1,27 +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 <WebKit/WebKit.h> - -@interface CDVWKProcessPoolFactory : NSObject -@property (nonatomic, retain) WKProcessPool* sharedPool; - -+(instancetype) sharedFactory; --(WKProcessPool*) sharedProcessPool; -@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.m deleted file mode 100644 index 48ac09e6..00000000 --- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.m +++ /dev/null @@ -1,49 +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 <Foundation/Foundation.h> -#import <WebKit/WebKit.h> -#import "CDVWKProcessPoolFactory.h" - -static CDVWKProcessPoolFactory *factory = nil; - -@implementation CDVWKProcessPoolFactory - -+ (instancetype)sharedFactory -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - factory = [[CDVWKProcessPoolFactory alloc] init]; - }); - - return factory; -} - -- (instancetype)init -{ - if (self = [super init]) { - _sharedPool = [[WKProcessPool alloc] init]; - } - return self; -} - -- (WKProcessPool*) sharedProcessPool { - return _sharedPool; -} -@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewEngine.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewEngine.h deleted file mode 100644 index 2fe4bc21..00000000 --- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewEngine.h +++ /dev/null @@ -1,27 +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 <WebKit/WebKit.h> -#import <Cordova/CDV.h> - -@interface CDVWKWebViewEngine : CDVPlugin <CDVWebViewEngineProtocol, WKScriptMessageHandler, WKNavigationDelegate> - -@property (nonatomic, strong, readonly) id <WKUIDelegate> uiDelegate; - -@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewEngine.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewEngine.m deleted file mode 100644 index e9ff2466..00000000 --- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewEngine.m +++ /dev/null @@ -1,480 +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 "CDVWKWebViewEngine.h" -#import "CDVWKWebViewUIDelegate.h" -#import "CDVWKProcessPoolFactory.h" -#import <Cordova/NSDictionary+CordovaPreferences.h> - -#import <objc/message.h> - -#define CDV_BRIDGE_NAME @"cordova" -#define CDV_WKWEBVIEW_FILE_URL_LOAD_SELECTOR @"loadFileURL:allowingReadAccessToURL:" - -@interface CDVWKWeakScriptMessageHandler : NSObject <WKScriptMessageHandler> - -@property (nonatomic, weak, readonly) id<WKScriptMessageHandler>scriptMessageHandler; - -- (instancetype)initWithScriptMessageHandler:(id<WKScriptMessageHandler>)scriptMessageHandler; - -@end - - -@interface CDVWKWebViewEngine () - -@property (nonatomic, strong, readwrite) UIView* engineWebView; -@property (nonatomic, strong, readwrite) id <WKUIDelegate> uiDelegate; -@property (nonatomic, weak) id <WKScriptMessageHandler> weakScriptMessageHandler; - -@end - -// see forwardingTargetForSelector: selector comment for the reason for this pragma -#pragma clang diagnostic ignored "-Wprotocol" - -@implementation CDVWKWebViewEngine - -@synthesize engineWebView = _engineWebView; - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super init]; - if (self) { - if (NSClassFromString(@"WKWebView") == nil) { - return nil; - } - - self.engineWebView = [[WKWebView alloc] initWithFrame:frame]; - } - - return self; -} - -- (WKWebViewConfiguration*) createConfigurationFromSettings:(NSDictionary*)settings -{ - WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init]; - configuration.processPool = [[CDVWKProcessPoolFactory sharedFactory] sharedProcessPool]; - if (settings == nil) { - return configuration; - } - - configuration.allowsInlineMediaPlayback = [settings cordovaBoolSettingForKey:@"AllowInlineMediaPlayback" defaultValue:NO]; - configuration.mediaPlaybackRequiresUserAction = [settings cordovaBoolSettingForKey:@"MediaPlaybackRequiresUserAction" defaultValue:YES]; - configuration.suppressesIncrementalRendering = [settings cordovaBoolSettingForKey:@"SuppressesIncrementalRendering" defaultValue:NO]; - configuration.mediaPlaybackAllowsAirPlay = [settings cordovaBoolSettingForKey:@"MediaPlaybackAllowsAirPlay" defaultValue:YES]; - return configuration; -} - -- (void)pluginInitialize -{ - // viewController would be available now. we attempt to set all possible delegates to it, by default - NSDictionary* settings = self.commandDelegate.settings; - - self.uiDelegate = [[CDVWKWebViewUIDelegate alloc] initWithTitle:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]]; - - CDVWKWeakScriptMessageHandler *weakScriptMessageHandler = [[CDVWKWeakScriptMessageHandler alloc] initWithScriptMessageHandler:self]; - - WKUserContentController* userContentController = [[WKUserContentController alloc] init]; - [userContentController addScriptMessageHandler:weakScriptMessageHandler name:CDV_BRIDGE_NAME]; - - WKWebViewConfiguration* configuration = [self createConfigurationFromSettings:settings]; - configuration.userContentController = userContentController; - - // re-create WKWebView, since we need to update configuration - WKWebView* wkWebView = [[WKWebView alloc] initWithFrame:self.engineWebView.frame configuration:configuration]; - wkWebView.UIDelegate = self.uiDelegate; - self.engineWebView = wkWebView; - - if (IsAtLeastiOSVersion(@"9.0") && [self.viewController isKindOfClass:[CDVViewController class]]) { - wkWebView.customUserAgent = ((CDVViewController*) self.viewController).userAgent; - } - - if ([self.viewController conformsToProtocol:@protocol(WKUIDelegate)]) { - wkWebView.UIDelegate = (id <WKUIDelegate>)self.viewController; - } - - if ([self.viewController conformsToProtocol:@protocol(WKNavigationDelegate)]) { - wkWebView.navigationDelegate = (id <WKNavigationDelegate>)self.viewController; - } else { - wkWebView.navigationDelegate = (id <WKNavigationDelegate>)self; - } - - if ([self.viewController conformsToProtocol:@protocol(WKScriptMessageHandler)]) { - [wkWebView.configuration.userContentController addScriptMessageHandler:(id < WKScriptMessageHandler >)self.viewController name:CDV_BRIDGE_NAME]; - } - - [self updateSettings:settings]; - - // check if content thread has died on resume - NSLog(@"%@", @"CDVWKWebViewEngine will reload WKWebView if required on resume"); - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(onAppWillEnterForeground:) - name:UIApplicationWillEnterForegroundNotification object:nil]; - - NSLog(@"Using WKWebView"); - - [self addURLObserver]; -} - -- (void)onReset { - [self addURLObserver]; -} - -static void * KVOContext = &KVOContext; - -- (void)addURLObserver { - if(!IsAtLeastiOSVersion(@"9.0")){ - [self.webView addObserver:self forKeyPath:@"URL" options:0 context:KVOContext]; - } -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context -{ - if (context == KVOContext) { - if (object == [self webView] && [keyPath isEqualToString: @"URL"] && [object valueForKeyPath:keyPath] == nil){ - NSLog(@"URL is nil. Reloading WKWebView"); - [(WKWebView*)_engineWebView reload]; - } - } else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -- (void) onAppWillEnterForeground:(NSNotification*)notification { - if ([self shouldReloadWebView]) { - NSLog(@"%@", @"CDVWKWebViewEngine reloading!"); - [(WKWebView*)_engineWebView reload]; - } -} - -- (BOOL)shouldReloadWebView -{ - WKWebView* wkWebView = (WKWebView*)_engineWebView; - return [self shouldReloadWebView:wkWebView.URL title:wkWebView.title]; -} - -- (BOOL)shouldReloadWebView:(NSURL*)location title:(NSString*)title -{ - BOOL title_is_nil = (title == nil); - BOOL location_is_blank = [[location absoluteString] isEqualToString:@"about:blank"]; - - BOOL reload = (title_is_nil || location_is_blank); - -#ifdef DEBUG - NSLog(@"%@", @"CDVWKWebViewEngine shouldReloadWebView::"); - NSLog(@"CDVWKWebViewEngine shouldReloadWebView title: %@", title); - NSLog(@"CDVWKWebViewEngine shouldReloadWebView location: %@", [location absoluteString]); - NSLog(@"CDVWKWebViewEngine shouldReloadWebView reload: %u", reload); -#endif - - return reload; -} - - -- (id)loadRequest:(NSURLRequest*)request -{ - if ([self canLoadRequest:request]) { // can load, differentiate between file urls and other schemes - if (request.URL.fileURL) { - SEL wk_sel = NSSelectorFromString(CDV_WKWEBVIEW_FILE_URL_LOAD_SELECTOR); - NSURL* readAccessUrl = [request.URL URLByDeletingLastPathComponent]; - return ((id (*)(id, SEL, id, id))objc_msgSend)(_engineWebView, wk_sel, request.URL, readAccessUrl); - } else { - return [(WKWebView*)_engineWebView loadRequest:request]; - } - } else { // can't load, print out error - NSString* errorHtml = [NSString stringWithFormat: - @"<!doctype html>" - @"<title>Error</title>" - @"<div style='font-size:2em'>" - @" <p>The WebView engine '%@' is unable to load the request: %@</p>" - @" <p>Most likely the cause of the error is that the loading of file urls is not supported in iOS %@.</p>" - @"</div>", - NSStringFromClass([self class]), - [request.URL description], - [[UIDevice currentDevice] systemVersion] - ]; - return [self loadHTMLString:errorHtml baseURL:nil]; - } -} - -- (id)loadHTMLString:(NSString*)string baseURL:(NSURL*)baseURL -{ - return [(WKWebView*)_engineWebView loadHTMLString:string baseURL:baseURL]; -} - -- (NSURL*) URL -{ - return [(WKWebView*)_engineWebView URL]; -} - -- (BOOL) canLoadRequest:(NSURLRequest*)request -{ - // See: https://issues.apache.org/jira/browse/CB-9636 - SEL wk_sel = NSSelectorFromString(CDV_WKWEBVIEW_FILE_URL_LOAD_SELECTOR); - - // if it's a file URL, check whether WKWebView has the selector (which is in iOS 9 and up only) - if (request.URL.fileURL) { - return [_engineWebView respondsToSelector:wk_sel]; - } else { - return YES; - } -} - -- (void)updateSettings:(NSDictionary*)settings -{ - WKWebView* wkWebView = (WKWebView*)_engineWebView; - - wkWebView.configuration.preferences.minimumFontSize = [settings cordovaFloatSettingForKey:@"MinimumFontSize" defaultValue:0.0]; - - /* - wkWebView.configuration.preferences.javaScriptEnabled = [settings cordovaBoolSettingForKey:@"JavaScriptEnabled" default:YES]; - wkWebView.configuration.preferences.javaScriptCanOpenWindowsAutomatically = [settings cordovaBoolSettingForKey:@"JavaScriptCanOpenWindowsAutomatically" default:NO]; - */ - - // By default, DisallowOverscroll is false (thus bounce is allowed) - BOOL bounceAllowed = !([settings cordovaBoolSettingForKey:@"DisallowOverscroll" defaultValue:NO]); - - // prevent webView from bouncing - if (!bounceAllowed) { - if ([wkWebView respondsToSelector:@selector(scrollView)]) { - ((UIScrollView*)[wkWebView scrollView]).bounces = NO; - } else { - for (id subview in wkWebView.subviews) { - if ([[subview class] isSubclassOfClass:[UIScrollView class]]) { - ((UIScrollView*)subview).bounces = NO; - } - } - } - } - - NSString* decelerationSetting = [settings cordovaSettingForKey:@"WKWebViewDecelerationSpeed"]; - if (!decelerationSetting) { - // Fallback to the UIWebView-named preference - decelerationSetting = [settings cordovaSettingForKey:@"UIWebViewDecelerationSpeed"]; - } - - if (![@"fast" isEqualToString:decelerationSetting]) { - [wkWebView.scrollView setDecelerationRate:UIScrollViewDecelerationRateNormal]; - } else { - [wkWebView.scrollView setDecelerationRate:UIScrollViewDecelerationRateFast]; - } - - wkWebView.allowsBackForwardNavigationGestures = [settings cordovaBoolSettingForKey:@"AllowBackForwardNavigationGestures" defaultValue:NO]; -} - -- (void)updateWithInfo:(NSDictionary*)info -{ - NSDictionary* scriptMessageHandlers = [info objectForKey:kCDVWebViewEngineScriptMessageHandlers]; - NSDictionary* settings = [info objectForKey:kCDVWebViewEngineWebViewPreferences]; - id navigationDelegate = [info objectForKey:kCDVWebViewEngineWKNavigationDelegate]; - id uiDelegate = [info objectForKey:kCDVWebViewEngineWKUIDelegate]; - - WKWebView* wkWebView = (WKWebView*)_engineWebView; - - if (scriptMessageHandlers && [scriptMessageHandlers isKindOfClass:[NSDictionary class]]) { - NSArray* allKeys = [scriptMessageHandlers allKeys]; - - for (NSString* key in allKeys) { - id object = [scriptMessageHandlers objectForKey:key]; - if ([object conformsToProtocol:@protocol(WKScriptMessageHandler)]) { - [wkWebView.configuration.userContentController addScriptMessageHandler:object name:key]; - } - } - } - - if (navigationDelegate && [navigationDelegate conformsToProtocol:@protocol(WKNavigationDelegate)]) { - wkWebView.navigationDelegate = navigationDelegate; - } - - if (uiDelegate && [uiDelegate conformsToProtocol:@protocol(WKUIDelegate)]) { - wkWebView.UIDelegate = uiDelegate; - } - - if (settings && [settings isKindOfClass:[NSDictionary class]]) { - [self updateSettings:settings]; - } -} - -// This forwards the methods that are in the header that are not implemented here. -// Both WKWebView and UIWebView implement the below: -// loadHTMLString:baseURL: -// loadRequest: -- (id)forwardingTargetForSelector:(SEL)aSelector -{ - return _engineWebView; -} - -- (UIView*)webView -{ - return self.engineWebView; -} - -#pragma mark WKScriptMessageHandler implementation - -- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message -{ - if (![message.name isEqualToString:CDV_BRIDGE_NAME]) { - return; - } - - CDVViewController* vc = (CDVViewController*)self.viewController; - - NSArray* jsonEntry = message.body; // NSString:callbackId, NSString:service, NSString:action, NSArray:args - CDVInvokedUrlCommand* command = [CDVInvokedUrlCommand commandFromJson:jsonEntry]; - CDV_EXEC_LOG(@"Exec(%@): Calling %@.%@", command.callbackId, command.className, command.methodName); - - if (![vc.commandQueue execute:command]) { -#ifdef DEBUG - NSError* error = nil; - NSString* commandJson = nil; - NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonEntry - options:0 - error:&error]; - - if (error == nil) { - commandJson = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - } - - static NSUInteger maxLogLength = 1024; - NSString* commandString = ([commandJson length] > maxLogLength) ? - [NSString stringWithFormat : @"%@[...]", [commandJson substringToIndex:maxLogLength]] : - commandJson; - - NSLog(@"FAILED pluginJSON = %@", commandString); -#endif - } -} - -#pragma mark WKNavigationDelegate implementation - -- (void)webView:(WKWebView*)webView didStartProvisionalNavigation:(WKNavigation*)navigation -{ - [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginResetNotification object:webView]]; -} - -- (void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation -{ - CDVViewController* vc = (CDVViewController*)self.viewController; - [CDVUserAgentUtil releaseLock:vc.userAgentLockToken]; - - [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPageDidLoadNotification object:webView]]; -} - -- (void)webView:(WKWebView*)theWebView didFailProvisionalNavigation:(WKNavigation*)navigation withError:(NSError*)error -{ - [self webView:theWebView didFailNavigation:navigation withError:error]; -} - -- (void)webView:(WKWebView*)theWebView didFailNavigation:(WKNavigation*)navigation withError:(NSError*)error -{ - CDVViewController* vc = (CDVViewController*)self.viewController; - [CDVUserAgentUtil releaseLock:vc.userAgentLockToken]; - - NSString* message = [NSString stringWithFormat:@"Failed to load webpage with error: %@", [error localizedDescription]]; - NSLog(@"%@", message); - - NSURL* errorUrl = vc.errorURL; - if (errorUrl) { - errorUrl = [NSURL URLWithString:[NSString stringWithFormat:@"?error=%@", [message stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] relativeToURL:errorUrl]; - NSLog(@"%@", [errorUrl absoluteString]); - [theWebView loadRequest:[NSURLRequest requestWithURL:errorUrl]]; - } -} - -- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView -{ - [webView reload]; -} - -- (BOOL)defaultResourcePolicyForURL:(NSURL*)url -{ - // all file:// urls are allowed - if ([url isFileURL]) { - return YES; - } - - return NO; -} - -- (void) webView: (WKWebView *) webView decidePolicyForNavigationAction: (WKNavigationAction*) navigationAction decisionHandler: (void (^)(WKNavigationActionPolicy)) decisionHandler -{ - NSURL* url = [navigationAction.request URL]; - CDVViewController* vc = (CDVViewController*)self.viewController; - - /* - * Give plugins the chance to handle the url - */ - BOOL anyPluginsResponded = NO; - BOOL shouldAllowRequest = NO; - - for (NSString* pluginName in vc.pluginObjects) { - CDVPlugin* plugin = [vc.pluginObjects objectForKey:pluginName]; - SEL selector = NSSelectorFromString(@"shouldOverrideLoadWithRequest:navigationType:"); - if ([plugin respondsToSelector:selector]) { - anyPluginsResponded = YES; - // https://issues.apache.org/jira/browse/CB-12497 - int navType = (int)navigationAction.navigationType; - if (WKNavigationTypeOther == navigationAction.navigationType) { - navType = (int)UIWebViewNavigationTypeOther; - } - shouldAllowRequest = (((BOOL (*)(id, SEL, id, int))objc_msgSend)(plugin, selector, navigationAction.request, navType)); - if (!shouldAllowRequest) { - break; - } - } - } - - if (anyPluginsResponded) { - return decisionHandler(shouldAllowRequest); - } - - /* - * Handle all other types of urls (tel:, sms:), and requests to load a url in the main webview. - */ - BOOL shouldAllowNavigation = [self defaultResourcePolicyForURL:url]; - if (shouldAllowNavigation) { - return decisionHandler(YES); - } else { - [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]]; - } - - return decisionHandler(NO); -} - -@end - -#pragma mark - CDVWKWeakScriptMessageHandler - -@implementation CDVWKWeakScriptMessageHandler - -- (instancetype)initWithScriptMessageHandler:(id<WKScriptMessageHandler>)scriptMessageHandler -{ - self = [super init]; - if (self) { - _scriptMessageHandler = scriptMessageHandler; - } - return self; -} - -- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message -{ - [self.scriptMessageHandler userContentController:userContentController didReceiveScriptMessage:message]; -} - -@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.h deleted file mode 100644 index 33a179b0..00000000 --- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.h +++ /dev/null @@ -1,28 +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 <WebKit/WebKit.h> - -@interface CDVWKWebViewUIDelegate : NSObject <WKUIDelegate> - -@property (nonatomic, copy) NSString* title; - -- (instancetype)initWithTitle:(NSString*)title; - -@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.m deleted file mode 100644 index a7a16f2c..00000000 --- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.m +++ /dev/null @@ -1,123 +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 "CDVWKWebViewUIDelegate.h" - -@implementation CDVWKWebViewUIDelegate - -- (instancetype)initWithTitle:(NSString*)title -{ - self = [super init]; - if (self) { - self.title = title; - } - - return self; -} - -- (void) webView:(WKWebView*)webView runJavaScriptAlertPanelWithMessage:(NSString*)message - initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void (^)(void))completionHandler -{ - UIAlertController* alert = [UIAlertController alertControllerWithTitle:self.title - message:message - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") - style:UIAlertActionStyleDefault - handler:^(UIAlertAction* action) - { - completionHandler(); - [alert dismissViewControllerAnimated:YES completion:nil]; - }]; - - [alert addAction:ok]; - - UIViewController* rootController = [UIApplication sharedApplication].delegate.window.rootViewController; - - [rootController presentViewController:alert animated:YES completion:nil]; -} - -- (void) webView:(WKWebView*)webView runJavaScriptConfirmPanelWithMessage:(NSString*)message - initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void (^)(BOOL result))completionHandler -{ - UIAlertController* alert = [UIAlertController alertControllerWithTitle:self.title - message:message - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") - style:UIAlertActionStyleDefault - handler:^(UIAlertAction* action) - { - completionHandler(YES); - [alert dismissViewControllerAnimated:YES completion:nil]; - }]; - - [alert addAction:ok]; - - UIAlertAction* cancel = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel") - style:UIAlertActionStyleDefault - handler:^(UIAlertAction* action) - { - completionHandler(NO); - [alert dismissViewControllerAnimated:YES completion:nil]; - }]; - [alert addAction:cancel]; - - UIViewController* rootController = [UIApplication sharedApplication].delegate.window.rootViewController; - - [rootController presentViewController:alert animated:YES completion:nil]; -} - -- (void) webView:(WKWebView*)webView runJavaScriptTextInputPanelWithPrompt:(NSString*)prompt - defaultText:(NSString*)defaultText initiatedByFrame:(WKFrameInfo*)frame - completionHandler:(void (^)(NSString* result))completionHandler -{ - UIAlertController* alert = [UIAlertController alertControllerWithTitle:self.title - message:prompt - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") - style:UIAlertActionStyleDefault - handler:^(UIAlertAction* action) - { - completionHandler(((UITextField*)alert.textFields[0]).text); - [alert dismissViewControllerAnimated:YES completion:nil]; - }]; - - [alert addAction:ok]; - - UIAlertAction* cancel = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel") - style:UIAlertActionStyleDefault - handler:^(UIAlertAction* action) - { - completionHandler(nil); - [alert dismissViewControllerAnimated:YES completion:nil]; - }]; - [alert addAction:cancel]; - - [alert addTextFieldWithConfigurationHandler:^(UITextField* textField) { - textField.text = defaultText; - }]; - - UIViewController* rootController = [UIApplication sharedApplication].delegate.window.rootViewController; - - [rootController presentViewController:alert animated:YES completion:nil]; -} - -@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 index 4cc1dcb0..276a0080 100644 --- a/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.h +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.h @@ -29,7 +29,7 @@ @protocol GGLInstanceIDDelegate; @protocol GCMReceiverDelegate; -@interface PushPlugin : CDVPlugin +@interface PushPlugin : CDVPlugin<GGLInstanceIDDelegate, GCMReceiverDelegate> { NSDictionary *notificationMessage; BOOL isInline; @@ -68,12 +68,13 @@ - (void)didSendDataMessageWithID:(NSString *)messageID; - (void)didDeleteMessagesOnServer; -// FCM Features -@property(nonatomic, assign) BOOL usesFCM; -@property(nonatomic, strong) NSNumber *fcmSandbox; -@property(nonatomic, strong) NSString *fcmSenderId; -@property(nonatomic, strong) NSDictionary *fcmRegistrationOptions; -@property(nonatomic, strong) NSString *fcmRegistrationToken; -@property(nonatomic, strong) NSArray *fcmTopics; +// GCM Features +@property(nonatomic, assign) BOOL usesGCM; +@property(nonatomic, strong) NSNumber* gcmSandbox; +@property(nonatomic, strong) NSString *gcmSenderId; +@property(nonatomic, strong) NSDictionary *gcmRegistrationOptions; +@property(nonatomic, strong) void (^gcmRegistrationHandler) (NSString *registrationToken, NSError *error); +@property(nonatomic, strong) NSString *gcmRegistrationToken; +@property(nonatomic, strong) NSArray *gcmTopics; @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 index 90475d10..a176b9af 100644 --- a/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.m +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.m @@ -27,9 +27,8 @@ #define GMP_NO_MODULES true #import "PushPlugin.h" -@import FirebaseInstanceID; -@import FirebaseMessaging; -@import FirebaseAnalytics; +#import "GoogleCloudMessaging.h" +#import "GGLInstanceIDHeaders.h" @implementation PushPlugin : CDVPlugin @@ -43,62 +42,78 @@ @synthesize clearBadge; @synthesize handlerObj; -@synthesize usesFCM; -@synthesize fcmSandbox; -@synthesize fcmSenderId; -@synthesize fcmRegistrationOptions; -@synthesize fcmRegistrationToken; -@synthesize fcmTopics; +@synthesize usesGCM; +@synthesize gcmSandbox; +@synthesize gcmSenderId; +@synthesize gcmRegistrationOptions; +@synthesize gcmRegistrationHandler; +@synthesize gcmRegistrationToken; +@synthesize gcmTopics; --(void)initRegistration; +-(void)initGCMRegistrationHandler; { - NSString * registrationToken = [[FIRInstanceID instanceID] token]; + __weak __block PushPlugin *weakSelf = self; + gcmRegistrationHandler = ^(NSString *registrationToken, NSError *error){ + if (registrationToken != nil) { + NSLog(@"GCM Registration Token: %@", registrationToken); + [weakSelf setGcmRegistrationToken: registrationToken]; - if (registrationToken != nil) { - NSLog(@"FCM Registration Token: %@", registrationToken); - [self setFcmRegistrationToken: registrationToken]; - - id topics = [self fcmTopics]; - if (topics != nil) { - for (NSString *topic in topics) { - NSLog(@"subscribe to topic: %@", topic); - id pubSub = [FIRMessaging messaging]; - [pubSub subscribeToTopic:topic]; + id topics = [weakSelf gcmTopics]; + if (topics != nil) { + for (NSString *topic in topics) { + NSLog(@"subscribe from topic: %@", topic); + id pubSub = [GCMPubSub sharedInstance]; + [pubSub subscribeWithToken: [weakSelf gcmRegistrationToken] + topic:[NSString stringWithFormat:@"/topics/%@", topic] + options:nil + handler:^void(NSError *error) { + if (error) { + if (error.code == 3001) { + NSLog(@"Already subscribed to %@", topic); + } else { + NSLog(@"Failed to subscribe to topic %@: %@", topic, error); + } + } + else { + NSLog(@"Successfully subscribe to topic %@", topic); + } + }]; + } } - } - - [self registerWithToken:registrationToken]; - } else { - NSLog(@"FCM token is null"); - } + [weakSelf registerWithToken:registrationToken]; + } else { + NSLog(@"Registration to GCM failed with error: %@", error.localizedDescription); + [weakSelf failWithMessage:self.callbackId withMsg:@"" withError:error]; + } + }; } -// FCM refresh token +// GCM refresh token // Unclear how this is testable under normal circumstances - (void)onTokenRefresh { #if !TARGET_IPHONE_SIMULATOR // A rotation of the registration tokens is happening, so the app needs to request a new token. - NSLog(@"The FCM registration token needs to be changed."); - [[FIRInstanceID instanceID] token]; - [self initRegistration]; + NSLog(@"The GCM registration token needs to be changed."); + [[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:[self gcmSenderId] + scope:kGGLInstanceIDScopeGCM + options:[self gcmRegistrationOptions] + handler:[self gcmRegistrationHandler]]; #endif } -// contains error info -- (void)sendDataMessageFailure:(NSNotification *)notification { - NSLog(@"sendDataMessageFailure"); -} -- (void)sendDataMessageSuccess:(NSNotification *)notification { - NSLog(@"sendDataMessageSuccess"); -} - -- (void)didSendDataMessageWithID:messageID { - NSLog(@"didSendDataMessageWithID"); +- (void)willSendDataMessageWithID:(NSString *)messageID error:(NSError *)error { + NSLog(@"willSendDataMessageWithID"); + if (error) { + // Failed to send the message. + } else { + // Will send message, you can save the messageID to track the message + } } -- (void)willSendDataMessageWithID:messageID error:error { +- (void)didSendDataMessageWithID:(NSString *)messageID { NSLog(@"willSendDataMessageWithID"); + // Did successfully send message identified by messageID } - (void)didDeleteMessagesOnServer { @@ -113,10 +128,20 @@ NSArray* topics = [command argumentAtIndex:0]; if (topics != nil) { - id pubSub = [FIRMessaging messaging]; + id pubSub = [GCMPubSub sharedInstance]; for (NSString *topic in topics) { NSLog(@"unsubscribe from topic: %@", topic); - [pubSub unsubscribeFromTopic:topic]; + [pubSub unsubscribeWithToken: [self gcmRegistrationToken] + topic:[NSString stringWithFormat:@"/topics/%@", topic] + options:nil + handler:^void(NSError *error) { + if (error) { + NSLog(@"Failed to unsubscribe from topic %@: %@", topic, error); + } + else { + NSLog(@"Successfully unsubscribe from topic %@", topic); + } + }]; } } else { [[UIApplication sharedApplication] unregisterForRemoteNotifications]; @@ -130,10 +155,25 @@ if (topic != nil) { NSLog(@"subscribe from topic: %@", topic); - id pubSub = [FIRMessaging messaging]; - [pubSub subscribeToTopic:topic]; - NSLog(@"Successfully subscribe to topic %@", topic); - [self successWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Successfully subscribe to topic %@", topic]]; + id pubSub = [GCMPubSub sharedInstance]; + [pubSub subscribeWithToken: [self gcmRegistrationToken] + topic:[NSString stringWithFormat:@"/topics/%@", topic] + options:nil + handler:^void(NSError *error) { + if (error) { + if (error.code == 3001) { + NSLog(@"Already subscribed to %@", topic); + [self successWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Already subscribed to %@", topic]]; + } else { + NSLog(@"Failed to subscribe to topic %@: %@", topic, error); + [self failWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Failed to subscribe to topic %@", topic] withError:error]; + } + } + else { + NSLog(@"Successfully subscribe to topic %@", topic); + [self successWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Successfully subscribe to topic %@", topic]]; + } + }]; } else { NSLog(@"There is no topic to subscribe"); [self successWithMessage:command.callbackId withMsg:@"There is no topic to subscribe"]; @@ -146,10 +186,19 @@ if (topic != nil) { NSLog(@"unsubscribe from topic: %@", topic); - id pubSub = [FIRMessaging messaging]; - [pubSub unsubscribeFromTopic:topic]; - NSLog(@"Successfully unsubscribe from topic %@", topic); - [self successWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Successfully unsubscribe from topic %@", topic]]; + id pubSub = [GCMPubSub sharedInstance]; + [pubSub unsubscribeWithToken: [self gcmRegistrationToken] + topic:[NSString stringWithFormat:@"/topics/%@", topic] + options:nil + handler:^void(NSError *error) { + if (error) { + NSLog(@"Failed to unsubscribe to topic %@: %@", topic, error); + [self failWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Failed to unsubscribe to topic %@", topic] withError:error]; + } else { + NSLog(@"Successfully unsubscribe to topic %@", topic); + [self successWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Successfully unsubscribe to topic %@", topic]]; + } + }]; } else { NSLog(@"There is no topic to unsubscribe"); [self successWithMessage:command.callbackId withMsg:@"There is no topic to unsubscribe"]; @@ -158,22 +207,6 @@ - (void)init:(CDVInvokedUrlCommand*)command; { - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(onTokenRefresh) - name:kFIRInstanceIDTokenRefreshNotification object:nil]; - - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(sendDataMessageFailure:) - name:FIRMessagingSendErrorNotification object:nil]; - - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(sendDataMessageSuccess:) - name:FIRMessagingSendSuccessNotification object:nil]; - - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(didDeleteMessagesOnServer) - name:FIRMessagingMessagesDeletedNotification object:nil]; - [self.commandDelegate runInBackground:^ { NSLog(@"Push Plugin register called"); @@ -182,10 +215,13 @@ NSMutableDictionary* options = [command.arguments objectAtIndex:0]; NSMutableDictionary* iosOptions = [options objectForKey:@"ios"]; - NSArray* topics = [iosOptions objectForKey:@"topics"]; - [self setFcmTopics:topics]; + NSArray* topics = [iosOptions objectForKey:@"topics"]; + [self setGcmTopics:topics]; +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 UIUserNotificationType UserNotificationTypes = UIUserNotificationTypeNone; +#endif + UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeNone; id badgeArg = [iosOptions objectForKey:@"badge"]; id soundArg = [iosOptions objectForKey:@"sound"]; @@ -194,20 +230,32 @@ 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"); @@ -219,8 +267,12 @@ } 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 NSLog(@"PushPlugin.register: better button setup"); // setup action buttons NSMutableSet *categories = [[NSMutableSet alloc] init]; @@ -277,46 +329,45 @@ } } +#else + NSLog(@"PushPlugin.register: action buttons only supported on iOS8 and above"); +#endif + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 if ([[UIApplication sharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UserNotificationTypes categories:categories]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; [[UIApplication sharedApplication] registerForRemoteNotifications]; + } else { + [[UIApplication sharedApplication] registerForRemoteNotificationTypes: + (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; } - - // Read GoogleService-Info.plist - NSString *path = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; - - // Load the file content and read the data into arrays - NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; - fcmSenderId = [dict objectForKey:@"GCM_SENDER_ID"]; - BOOL isGcmEnabled = [[dict valueForKey:@"IS_GCM_ENABLED"] boolValue]; - - NSLog(@"FCM Sender ID %@", fcmSenderId); +#else + [[UIApplication sharedApplication] registerForRemoteNotificationTypes: + (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; +#endif // GCM options - [self setFcmSenderId: fcmSenderId]; - if(isGcmEnabled && [[self fcmSenderId] length] > 0) { - NSLog(@"Using FCM Notification"); - [self setUsesFCM: YES]; - dispatch_async(dispatch_get_main_queue(), ^{ - if([FIRApp defaultApp] == nil) - [FIRApp configure]; - [self initRegistration]; - }); + [self setGcmSenderId: [iosOptions objectForKey:@"senderID"]]; + NSLog(@"GCM Sender ID %@", gcmSenderId); + if([[self gcmSenderId] length] > 0) { + NSLog(@"Using GCM Notification"); + [self setUsesGCM: YES]; + [self initGCMRegistrationHandler]; } else { NSLog(@"Using APNS Notification"); - [self setUsesFCM:NO]; + [self setUsesGCM:NO]; } - id fcmSandboxArg = [iosOptions objectForKey:@"fcmSandbox"]; + id gcmSandBoxArg = [iosOptions objectForKey:@"gcmSandbox"]; - [self setFcmSandbox:@NO]; - if ([self usesFCM] && - (([fcmSandboxArg isKindOfClass:[NSString class]] && [fcmSandboxArg isEqualToString:@"true"]) || - [fcmSandboxArg boolValue])) + [self setGcmSandbox:@NO]; + if ([self usesGCM] && + (([gcmSandBoxArg isKindOfClass:[NSString class]] && [gcmSandBoxArg isEqualToString:@"true"]) || + [gcmSandBoxArg boolValue])) { - NSLog(@"Using FCM Sandbox"); - [self setFcmSandbox:@YES]; + NSLog(@"Using GCM Sandbox"); + [self setGcmSandbox:@YES]; } if (notificationMessage) { // if there is a pending startup notification @@ -371,8 +422,14 @@ [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 = [[[UIApplication sharedApplication] currentUserNotificationSettings] types]; + 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"; @@ -383,13 +440,13 @@ // 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 & UIUserNotificationTypeBadge){ + if(rntypes & UIRemoteNotificationTypeBadge){ pushBadge = @"enabled"; } - if(rntypes & UIUserNotificationTypeAlert) { + if(rntypes & UIRemoteNotificationTypeAlert) { pushAlert = @"enabled"; } - if(rntypes & UIUserNotificationTypeSound) { + if(rntypes & UIRemoteNotificationTypeSound) { pushSound = @"enabled"; } @@ -403,7 +460,24 @@ [results setValue:dev.model forKey:@"deviceModel"]; [results setValue:dev.systemVersion forKey:@"deviceSystemVersion"]; - if(![self usesFCM]) { + if([self usesGCM]) { + GGLInstanceIDConfig *instanceIDConfig = [GGLInstanceIDConfig defaultConfig]; + instanceIDConfig.delegate = self; + [[GGLInstanceID sharedInstance] startWithConfig:instanceIDConfig]; + + [self setGcmRegistrationOptions: @{kGGLInstanceIDRegisterAPNSOption:deviceToken, + kGGLInstanceIDAPNSServerTypeSandboxOption:[self gcmSandbox]}]; + + [[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:[self gcmSenderId] + scope:kGGLInstanceIDScopeGCM + options:[self gcmRegistrationOptions] + handler:[self gcmRegistrationHandler]]; + + GCMConfig *gcmConfig = [GCMConfig defaultConfig]; + gcmConfig.receiverDelegate = self; + [[GCMService sharedInstance] startWithConfig:gcmConfig]; + + } else { [self registerWithToken: token]; } #endif @@ -536,36 +610,31 @@ [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; } --(void)successWithMessage:(NSString *)myCallbackId withMsg:(NSString *)message +-(void)successWithMessage:(NSString *)callbackId withMsg:(NSString *)message { - if (myCallbackId != nil) + if (callbackId != nil) { CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message]; - [self.commandDelegate sendPluginResult:commandResult callbackId:myCallbackId]; + [self.commandDelegate sendPluginResult:commandResult callbackId:callbackId]; } } -(void)registerWithToken:(NSString*)token; { // Send result to trigger 'registration' event but keep callback - NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:2]; + NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:1]; [message setObject:token forKey:@"registrationId"]; - if ([self usesFCM]) { - [message setObject:@"FCM" forKey:@"registrationType"]; - } else { - [message setObject:@"APNS" forKey:@"registrationType"]; - } CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message]; [pluginResult setKeepCallbackAsBool:YES]; [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId]; } --(void)failWithMessage:(NSString *)myCallbackId withMsg:(NSString *)message withError:(NSError *)error +-(void)failWithMessage:(NSString *)callbackId withMsg:(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:myCallbackId]; + [self.commandDelegate sendPluginResult:commandResult callbackId:callbackId]; } -(void) finish:(CDVInvokedUrlCommand*)command diff --git a/StoneIsland/platforms/ios/Stone Island/Stone Island-Info.plist b/StoneIsland/platforms/ios/Stone Island/Stone Island-Info.plist index 7587f3bb..bc255035 100644 --- a/StoneIsland/platforms/ios/Stone Island/Stone Island-Info.plist +++ b/StoneIsland/platforms/ios/Stone Island/Stone Island-Info.plist @@ -21,52 +21,58 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>0.9.1</string> + <string>0.9.2</string> <key>CFBundleSignature</key> <string>????</string> - <key>CFBundleURLTypes</key> - <array> - <dict> - <key>CFBundleURLSchemes</key> - <array> - <string>stoneisland</string> - </array> - </dict> - </array> <key>CFBundleVersion</key> - <string>0.9.1</string> + <string>0.9.2</string> <key>LSRequiresIPhoneOS</key> <true/> - <key>NSAppTransportSecurity</key> - <dict> - <key>NSAllowsArbitraryLoads</key> - <true/> - </dict> - <key>NSLocationWhenInUseUsageDescription</key> - <string/> <key>NSMainNibFile</key> <string/> <key>NSMainNibFile~ipad</key> <string/> - <key>UIBackgroundModes</key> + <key>UISupportedInterfaceOrientations</key> <array> - <string>remote-notification</string> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationPortraitUpsideDown</string> </array> - <key>UIInterfaceOrientation</key> + <key>UISupportedInterfaceOrientations~ipad</key> <array> <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationPortraitUpsideDown</string> </array> <key>UIRequiresFullScreen</key> <true/> - <key>UISupportedInterfaceOrientations</key> + <key>NSAppTransportSecurity</key> + <dict> + <key>NSAllowsArbitraryLoads</key> + <true/> + </dict> + <key>UIInterfaceOrientation</key> <array> <string>UIInterfaceOrientationPortrait</string> - <string>UIInterfaceOrientationPortraitUpsideDown</string> </array> - <key>UISupportedInterfaceOrientations~ipad</key> + <key>UILaunchStoryboardName</key> + <string>CDVLaunchScreen</string> + <key>CFBundleURLTypes</key> <array> - <string>UIInterfaceOrientationPortrait</string> - <string>UIInterfaceOrientationPortraitUpsideDown</string> + <dict> + <key>CFBundleURLSchemes</key> + <array> + <string>stoneisland</string> + </array> + </dict> + </array> + <key>NSLocationWhenInUseUsageDescription</key> + <string/> + <key>UIBackgroundModes</key> + <array> + <string>remote-notification</string> </array> + <key>GCM_SENDER_ID</key> + <string>85075801930</string> + <key>IS_GCM_ENABLED</key> + <true/> </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 92ab2f21..391e10e2 100755 --- a/StoneIsland/platforms/ios/Stone Island/config.xml +++ b/StoneIsland/platforms/ios/Stone Island/config.xml @@ -1,8 +1,12 @@ <?xml version='1.0' encoding='utf-8'?> -<widget android-versionCode="6091" id="us.okfoc.stoneisland" version="0.9.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> +<widget android-versionCode="6092" id="us.okfoc.stoneisland" version="0.9.2" 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> + <feature name="Console"> + <param name="ios-package" value="CDVLogger" /> + <param name="onload" value="true" /> + </feature> <feature name="HandleOpenUrl"> <param name="ios-package" value="CDVHandleOpenURL" /> <param name="onload" value="true" /> @@ -15,9 +19,6 @@ <param name="ios-package" value="CDVGestureHandler" /> <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> @@ -51,15 +52,12 @@ <feature name="PushNotification"> <param name="ios-package" value="PushPlugin" /> </feature> - <feature name="CDVWKWebViewEngine"> - <param name="ios-package" value="CDVWKWebViewEngine" /> - </feature> <name>Stone Island</name> <description> Stone Island </description> <author email="julescarbon@gmail.com" href="http://asdf.us/"> - Jules Laplace + Jules LaPlace </author> <content src="index.html" /> <access origin="*" /> @@ -71,6 +69,16 @@ <allow-intent href="geo:*" /> <allow-intent href="itms:*" /> <allow-intent href="itms-apps:*" /> + <splash src="res/screen/ios/Default@2x~universal~anyany.png" /> + <splash height="480" src="res/screen/ios/Default~iphone.png" width="320" /> + <splash height="960" src="res/screen/ios/Default@2x~iphone.png" width="640" /> + <splash height="1024" src="res/screen/ios/Default-Portrait~ipad.png" width="768" /> + <splash height="2048" src="res/screen/ios/Default-Portrait@2x~ipad.png" width="1536" /> + <splash height="768" src="res/screen/ios/Default-Landscape~ipad.png" width="1024" /> + <splash height="1536" src="res/screen/ios/Default-Landscape@2x~ipad.png" width="2048" /> + <splash height="1136" src="res/screen/ios/Default-568h@2x~iphone.png" width="640" /> + <splash height="1334" src="res/screen/ios/Default-667h.png" width="750" /> + <splash height="2208" src="res/screen/ios/Default-736h.png" width="1242" /> <preference name="AllowInlineMediaPlayback" value="true" /> <preference name="BackupWebStorage" value="local" /> <preference name="DisallowOverscroll" value="true" /> @@ -86,12 +94,11 @@ <preference name="PaginationMode" value="unpaginated" /> <preference name="StatusBarOverlaysWebView" value="false" /> <preference name="StatusBarStyle" value="default" /> - <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" /> <preference name="TopActivityIndicator" value="white" /> <preference name="HideKeyboardFormAccessoryBar" value="false" /> <preference name="orientation" value="portrait" /> <preference name="StatusBarBackgroundColor" value="#ffffff" /> <preference name="SplashMaintainAspectRatio" value="true" /> <preference name="ShowSplashScreenSpinner" value="false" /> - <preference name="AutoHideSplashScreen" value="false" /> + <preference name="AutoHideSplashScreen" value="true" /> </widget> diff --git a/StoneIsland/platforms/ios/cordova/Api.js b/StoneIsland/platforms/ios/cordova/Api.js index b95f8e8c..dd50d11f 100755 --- a/StoneIsland/platforms/ios/cordova/Api.js +++ b/StoneIsland/platforms/ios/cordova/Api.js @@ -17,12 +17,13 @@ under the License. */ -/*jslint node: true */ +/* jslint node: true */ var fs = require('fs'); var path = require('path'); var unorm = require('unorm'); var projectFile = require('./lib/projectFile'); +var check_reqs = require('./lib/check_reqs'); var CordovaError = require('cordova-common').CordovaError; var CordovaLogger = require('cordova-common').CordovaLogger; var events = require('cordova-common').events; @@ -30,7 +31,7 @@ var PluginManager = require('cordova-common').PluginManager; var Q = require('q'); var util = require('util'); -function setupEvents(externalEventEmitter) { +function setupEvents (externalEventEmitter) { if (externalEventEmitter) { // This will make the platform internal events visible outside events.forwardEventsTo(externalEventEmitter); @@ -52,7 +53,7 @@ function setupEvents(externalEventEmitter) { * logging purposes. If no EventEmitter provided, all events will be logged to * console */ -function Api(platform, platformRootDir, events) { +function Api (platform, platformRootDir, events) { // 'platform' property is required as per PlatformApi spec this.platform = platform || 'ios'; this.root = platformRootDir || path.resolve(__dirname, '..'); @@ -63,15 +64,15 @@ function Api(platform, platformRootDir, events) { var xcodeCordovaProj; try { - xcodeProjDir = fs.readdirSync(this.root).filter( function(e) { return e.match(/\.xcodeproj$/i); })[0]; + xcodeProjDir = fs.readdirSync(this.root).filter(function (e) { return e.match(/\.xcodeproj$/i); })[0]; if (!xcodeProjDir) { throw new CordovaError('The provided path "' + this.root + '" is not a Cordova iOS project.'); } - var cordovaProjName = xcodeProjDir.substring(xcodeProjDir.lastIndexOf(path.sep)+1, xcodeProjDir.indexOf('.xcodeproj')); + var cordovaProjName = xcodeProjDir.substring(xcodeProjDir.lastIndexOf(path.sep) + 1, xcodeProjDir.indexOf('.xcodeproj')); xcodeCordovaProj = path.join(this.root, cordovaProjName); - } catch(e) { - throw new CordovaError('The provided path "'+this.root+'" is not a Cordova iOS project.'); + } catch (e) { + throw new CordovaError('The provided path "' + this.root + '" is not a Cordova iOS project.'); } this.locations = { @@ -118,17 +119,16 @@ Api.createPlatform = function (destination, config, options, events) { var result; try { result = require('../../../lib/create') - .createProject(destination, config.packageName(), name, options) - .then(function () { - // after platform is created we return Api instance based on new Api.js location - // This is required to correctly resolve paths in the future api calls - var PlatformApi = require(path.resolve(destination, 'cordova/Api')); - return new PlatformApi('ios', destination, events); - }); - } - catch(e) { - events.emit('error','createPlatform is not callable from the iOS project API.'); - throw(e); + .createProject(destination, config.packageName(), name, options) + .then(function () { + // after platform is created we return Api instance based on new Api.js location + // This is required to correctly resolve paths in the future api calls + var PlatformApi = require(path.resolve(destination, 'cordova/Api')); + return new PlatformApi('ios', destination, events); + }); + } catch (e) { + events.emit('error', 'createPlatform is not callable from the iOS project API.'); + throw (e); } return result; }; @@ -155,15 +155,14 @@ Api.updatePlatform = function (destination, options, events) { var result; try { result = require('../../../lib/create') - .updateProject(destination, options) - .then(function () { - var PlatformApi = require(path.resolve(destination, 'cordova/Api')); - return new PlatformApi('ios', destination, events); - }); - } - catch (e) { - events.emit('error','updatePlatform is not callable from the iOS project API, you will need to do this manually.'); - throw(e); + .updateProject(destination, options) + .then(function () { + var PlatformApi = require(path.resolve(destination, 'cordova/Api')); + return new PlatformApi('ios', destination, events); + }); + } catch (e) { + events.emit('error', 'updatePlatform is not callable from the iOS project API, you will need to do this manually.'); + throw (e); } return result; }; @@ -233,15 +232,15 @@ Api.prototype.addPlugin = function (plugin, installOptions) { return PluginManager.get(self.platform, self.locations, xcodeproj) .addPlugin(plugin, installOptions) - .then(function(){ + .then(function () { var frameworkTags = plugin.getFrameworks(self.platform); - var frameworkPods = frameworkTags.filter(function(obj){ - return (obj.type == 'podspec'); + var frameworkPods = frameworkTags.filter(function (obj) { + return (obj.type === 'podspec'); }); return Q.resolve(frameworkPods); }) - .then(function(frameworkPods) { + .then(function (frameworkPods) { if (!(frameworkPods.length)) { return Q.resolve(); } @@ -255,9 +254,9 @@ Api.prototype.addPlugin = function (plugin, installOptions) { events.emit('verbose', 'Adding pods since the plugin contained <framework>(s) with type="podspec"'); var podsjsonFile = new PodsJson(path.join(project_dir, PodsJson.FILENAME)); - var podfileFile = new Podfile(path.join(project_dir, Podfile.FILENAME), project_name); + var podfileFile = new Podfile(path.join(project_dir, Podfile.FILENAME), project_name); - frameworkPods.forEach(function(obj) { + frameworkPods.forEach(function (obj) { var podJson = { name: obj.src, type: obj.type, @@ -265,9 +264,9 @@ Api.prototype.addPlugin = function (plugin, installOptions) { }; var val = podsjsonFile.get(podJson.name); - if (val) { // found + if (val) { // found if (podJson.spec !== val.spec) { // exists, different spec, print warning - events.emit('warn', plugin.id + ' depends on ' + podJson.name + '@' + podJson.spec + ', which conflicts with another plugin. ' + podJson.name + '@' + val.spec + ' is already installed and was not overwritten.'); + events.emit('warn', plugin.id + ' depends on ' + podJson.name + '@' + podJson.spec + ', which conflicts with another plugin. ' + podJson.name + '@' + val.spec + ' is already installed and was not overwritten.'); } // increment count, but don't add in Podfile because it already exists podsjsonFile.increment(podJson.name); @@ -287,7 +286,6 @@ Api.prototype.addPlugin = function (plugin, installOptions) { podfileFile.write(); events.emit('verbose', 'Running `pod install` (to install plugins)'); - var check_reqs = require('./lib/check_reqs'); return podfileFile.install(check_reqs.check_cocoapods); } else { events.emit('verbose', 'Podfile unchanged, skipping `pod install`'); @@ -317,15 +315,15 @@ Api.prototype.removePlugin = function (plugin, uninstallOptions) { return PluginManager.get(self.platform, self.locations, xcodeproj) .removePlugin(plugin, uninstallOptions) - .then(function(){ + .then(function () { var frameworkTags = plugin.getFrameworks(self.platform); - var frameworkPods = frameworkTags.filter(function(obj){ - return (obj.type == 'podspec'); + var frameworkPods = frameworkTags.filter(function (obj) { + return (obj.type === 'podspec'); }); return Q.resolve(frameworkPods); }) - .then(function(frameworkPods) { + .then(function (frameworkPods) { if (!(frameworkPods.length)) { return Q.resolve(); } @@ -336,12 +334,12 @@ Api.prototype.removePlugin = function (plugin, uninstallOptions) { var Podfile = require('./lib/Podfile').Podfile; var PodsJson = require('./lib/PodsJson').PodsJson; - events.emit('verbose', 'Adding pods since the plugin contained <framework>(s) with type=\"podspec\"'); + events.emit('verbose', 'Adding pods since the plugin contained <framework>(s) with type=\"podspec\"'); /* eslint no-useless-escape : 0 */ var podsjsonFile = new PodsJson(path.join(project_dir, PodsJson.FILENAME)); - var podfileFile = new Podfile(path.join(project_dir, Podfile.FILENAME), project_name); - - frameworkPods.forEach(function(obj) { + var podfileFile = new Podfile(path.join(project_dir, Podfile.FILENAME), project_name); + + frameworkPods.forEach(function (obj) { var podJson = { name: obj.src, type: obj.type, @@ -352,7 +350,7 @@ Api.prototype.removePlugin = function (plugin, uninstallOptions) { if (val) { // found, decrement count podsjsonFile.decrement(podJson.name); } else { // not found (perhaps a sync error) - var message = util.format('plugin \"%s\" podspec \"%s\" does not seem to be in pods.json, nothing to remove. Will attempt to remove from Podfile.', plugin.id, podJson.name); + var message = util.format('plugin \"%s\" podspec \"%s\" does not seem to be in pods.json, nothing to remove. Will attempt to remove from Podfile.', plugin.id, podJson.name); /* eslint no-useless-escape : 0 */ events.emit('verbose', message); } @@ -367,7 +365,6 @@ Api.prototype.removePlugin = function (plugin, uninstallOptions) { podfileFile.write(); events.emit('verbose', 'Running `pod install` (to uninstall pods)'); - var check_reqs = require('./lib/check_reqs'); return podfileFile.install(check_reqs.check_cocoapods); } else { events.emit('verbose', 'Podfile unchanged, skipping `pod install`'); @@ -412,10 +409,10 @@ Api.prototype.removePlugin = function (plugin, uninstallOptions) { */ Api.prototype.build = function (buildOptions) { var self = this; - return require('./lib/check_reqs').run() - .then(function () { - return require('./lib/build').run.call(self, buildOptions); - }); + return check_reqs.run() + .then(function () { + return require('./lib/build').run.call(self, buildOptions); + }); }; /** @@ -430,12 +427,12 @@ Api.prototype.build = function (buildOptions) { * @return {Promise} A promise either fulfilled if package was built and ran * successfully, or rejected with CordovaError. */ -Api.prototype.run = function(runOptions) { +Api.prototype.run = function (runOptions) { var self = this; - return require('./lib/check_reqs').run() - .then(function () { - return require('./lib/run').run.call(self, runOptions); - }); + return check_reqs.run() + .then(function () { + return require('./lib/run').run.call(self, runOptions); + }); }; /** @@ -444,15 +441,15 @@ Api.prototype.run = function(runOptions) { * @return {Promise} Return a promise either fulfilled, or rejected with * CordovaError. */ -Api.prototype.clean = function(cleanOptions) { +Api.prototype.clean = function (cleanOptions) { var self = this; - return require('./lib/check_reqs').run() - .then(function () { - return require('./lib/clean').run.call(self, cleanOptions); - }) - .then(function () { - return require('./lib/prepare').clean.call(self, cleanOptions); - }); + return check_reqs.run() + .then(function () { + return require('./lib/clean').run.call(self, cleanOptions); + }) + .then(function () { + return require('./lib/prepare').clean.call(self, cleanOptions); + }); }; /** @@ -463,8 +460,8 @@ Api.prototype.clean = function(cleanOptions) { * @return {Promise<Requirement[]>} Promise, resolved with set of Requirement * objects for current platform. */ -Api.prototype.requirements = function() { - return require('./lib/check_reqs').check_all(); +Api.prototype.requirements = function () { + return check_reqs.check_all(); }; module.exports = Api; diff --git a/StoneIsland/platforms/ios/cordova/defaults.xml b/StoneIsland/platforms/ios/cordova/defaults.xml index f3ae2075..77a0a0b3 100755 --- a/StoneIsland/platforms/ios/cordova/defaults.xml +++ b/StoneIsland/platforms/ios/cordova/defaults.xml @@ -39,6 +39,10 @@ <feature name="LocalStorage"> <param name="ios-package" value="CDVLocalStorage"/> </feature> + <feature name="Console"> + <param name="ios-package" value="CDVLogger"/> + <param name="onload" value="true"/> + </feature> <feature name="HandleOpenUrl"> <param name="ios-package" value="CDVHandleOpenURL"/> <param name="onload" value="true"/> diff --git a/StoneIsland/platforms/ios/cordova/lib/Podfile.js b/StoneIsland/platforms/ios/cordova/lib/Podfile.js index 084c10c3..49173c4c 100755 --- a/StoneIsland/platforms/ios/cordova/lib/Podfile.js +++ b/StoneIsland/platforms/ios/cordova/lib/Podfile.js @@ -16,18 +16,19 @@ specific language governing permissions and limitations under the License. */ +'use strict'; -var fs = require('fs'), - path = require('path'), - util = require('util'), - events = require('cordova-common').events, - Q = require('q'), - superspawn = require('cordova-common').superspawn, - CordovaError = require('cordova-common').CordovaError; +var fs = require('fs'); +var path = require('path'); +var util = require('util'); +var events = require('cordova-common').events; +var Q = require('q'); +var superspawn = require('cordova-common').superspawn; +var CordovaError = require('cordova-common').CordovaError; Podfile.FILENAME = 'Podfile'; -function Podfile(podFilePath, projectName) { +function Podfile (podFilePath, projectName) { this.podToken = '##INSERT_POD##'; this.path = podFilePath; @@ -53,12 +54,12 @@ function Podfile(podFilePath, projectName) { this.write(); } else { events.emit('verbose', 'Podfile found in platforms/ios'); - // parse for pods + // parse for pods this.pods = this.__parseForPods(fs.readFileSync(this.path, 'utf8')); } } -Podfile.prototype.__parseForPods = function(text) { +Podfile.prototype.__parseForPods = function (text) { // split by \n var arr = text.split('\n'); @@ -69,38 +70,45 @@ Podfile.prototype.__parseForPods = function(text) { var podRE = new RegExp('pod \'([^\']*)\'\\s*,?\\s*(.*)'); // only grab lines that don't have the pod spec' - return arr.filter(function(line) { + return arr.filter(function (line) { var m = podRE.exec(line); return (m !== null); }) - .reduce(function(obj, line){ - var m = podRE.exec(line); + .reduce(function (obj, line) { + var m = podRE.exec(line); - if (m !== null) { - // strip out any single quotes around the value m[2] - var podSpec = m[2].replace(/^\'|\'$/g, ''); - obj[m[1]] = podSpec; // i.e pod 'Foo', '1.2' ==> { 'Foo' : '1.2'} - } + if (m !== null) { + // strip out any single quotes around the value m[2] + var podSpec = m[2].replace(/^\'|\'$/g, ''); /* eslint no-useless-escape : 0 */ + obj[m[1]] = podSpec; // i.e pod 'Foo', '1.2' ==> { 'Foo' : '1.2'} + } - return obj; - }, {}); + return obj; + }, {}); }; -Podfile.prototype.getTemplate = function() { +Podfile.prototype.escapeSingleQuotes = function (string) { + return string.replace('\'', '\\\''); +}; + +Podfile.prototype.getTemplate = function () { + // Escaping possible ' in the project name + var projectName = this.escapeSingleQuotes(this.projectName); return util.format( - '# DO NOT MODIFY -- auto-generated by Apache Cordova\n' + + '# DO NOT MODIFY -- auto-generated by Apache Cordova\n' + 'platform :ios, \'8.0\'\n' + 'target \'%s\' do\n' + '\tproject \'%s.xcodeproj\'\n' + '%s\n' + 'end\n', - this.projectName, this.projectName, this.podToken); + projectName, projectName, this.podToken); }; -Podfile.prototype.addSpec = function(name, spec) { +Podfile.prototype.addSpec = function (name, spec) { name = name || ''; - spec = spec; // optional + // optional + spec = spec; /* eslint no-self-assign : 0 */ if (!name.length) { // blank names are not allowed throw new CordovaError('Podfile addSpec: name is not specified.'); @@ -112,39 +120,39 @@ Podfile.prototype.addSpec = function(name, spec) { events.emit('verbose', util.format('Added pod line for `%s`', name)); }; -Podfile.prototype.removeSpec = function(name) { +Podfile.prototype.removeSpec = function (name) { if (this.existsSpec(name)) { delete this.pods[name]; this.__dirty = true; } - + events.emit('verbose', util.format('Removed pod line for `%s`', name)); }; -Podfile.prototype.getSpec = function(name) { +Podfile.prototype.getSpec = function (name) { return this.pods[name]; }; -Podfile.prototype.existsSpec = function(name) { +Podfile.prototype.existsSpec = function (name) { return (name in this.pods); }; -Podfile.prototype.clear = function() { +Podfile.prototype.clear = function () { this.pods = {}; this.__dirty = true; }; -Podfile.prototype.destroy = function() { +Podfile.prototype.destroy = function () { fs.unlinkSync(this.path); events.emit('verbose', util.format('Deleted `%s`', this.path)); }; -Podfile.prototype.write = function() { +Podfile.prototype.write = function () { var text = this.getTemplate(); var self = this; var podsString = - Object.keys(this.pods).map(function(key) { + Object.keys(this.pods).map(function (key) { var name = key; var spec = self.pods[key]; @@ -159,8 +167,7 @@ Podfile.prototype.write = function() { } else { return util.format('\tpod \'%s\'', name); } - }) - .join('\n'); + }).join('\n'); text = text.replace(this.podToken, podsString); fs.writeFileSync(this.path, text, 'utf8'); @@ -169,14 +176,16 @@ Podfile.prototype.write = function() { events.emit('verbose', 'Wrote to Podfile.'); }; -Podfile.prototype.isDirty = function() { +Podfile.prototype.isDirty = function () { return this.__dirty; }; -Podfile.prototype.before_install = function() { +Podfile.prototype.before_install = function (toolOptions) { + toolOptions = toolOptions || {}; + // Template tokens in order: project name, project name, debug | release var template = - '// DO NOT MODIFY -- auto-generated by Apache Cordova\n' + + '// DO NOT MODIFY -- auto-generated by Apache Cordova\n' + '#include "Pods/Target Support Files/Pods-%s/Pods-%s.%s.xcconfig"'; var debugContents = util.format(template, this.projectName, this.projectName, 'debug'); @@ -188,10 +197,10 @@ Podfile.prototype.before_install = function() { fs.writeFileSync(debugConfigPath, debugContents, 'utf8'); fs.writeFileSync(releaseConfigPath, releaseContents, 'utf8'); - return Q.resolve(); + return Q.resolve(toolOptions); }; -Podfile.prototype.install = function(requirementsCheckerFunction) { +Podfile.prototype.install = function (requirementsCheckerFunction) { var opts = {}; opts.cwd = path.join(this.path, '..'); // parent path of this Podfile opts.stdio = 'pipe'; @@ -203,28 +212,34 @@ Podfile.prototype.install = function(requirementsCheckerFunction) { } return requirementsCheckerFunction() - .then(function() { - return self.before_install(); - }) - .then(function() { - return superspawn.spawn('pod', ['install', '--verbose'], opts) - .progress(function (stdio){ - if (stdio.stderr) { console.error(stdio.stderr); } - if (stdio.stdout) { - if (first) { - events.emit('verbose', '==== pod install start ====\n'); - first = false; - } - events.emit('verbose', stdio.stdout); - } + .then(function (toolOptions) { + return self.before_install(toolOptions); + }) + .then(function (toolOptions) { + if (toolOptions.ignore) { + events.emit('verbose', '==== pod install start ====\n'); + events.emit('verbose', toolOptions.ignoreMessage); + return Q.resolve(); + } else { + return superspawn.spawn('pod', ['install', '--verbose'], opts) + .progress(function (stdio) { + if (stdio.stderr) { console.error(stdio.stderr); } + if (stdio.stdout) { + if (first) { + events.emit('verbose', '==== pod install start ====\n'); + first = false; + } + events.emit('verbose', stdio.stdout); + } + }); + } + }) + .then(function () { // done + events.emit('verbose', '==== pod install end ====\n'); + }) + .fail(function (error) { + throw error; }); - }) - .then(function() { // done - events.emit('verbose', '==== pod install end ====\n'); - }) - .fail(function(error){ - throw error; - }); }; -module.exports.Podfile = Podfile;
\ No newline at end of file +module.exports.Podfile = Podfile; diff --git a/StoneIsland/platforms/ios/cordova/lib/PodsJson.js b/StoneIsland/platforms/ios/cordova/lib/PodsJson.js index b13a1afe..04705273 100755 --- a/StoneIsland/platforms/ios/cordova/lib/PodsJson.js +++ b/StoneIsland/platforms/ios/cordova/lib/PodsJson.js @@ -17,15 +17,15 @@ under the License. */ -var fs = require('fs'), - path = require('path'), - util = require('util'), - events = require('cordova-common').events, - CordovaError = require('cordova-common').CordovaError; +var fs = require('fs'); +var path = require('path'); +var util = require('util'); +var events = require('cordova-common').events; +var CordovaError = require('cordova-common').CordovaError; PodsJson.FILENAME = 'pods.json'; -function PodsJson(podsJsonPath) { +function PodsJson (podsJsonPath) { this.path = podsJsonPath; this.contents = null; this.__dirty = false; @@ -41,18 +41,18 @@ function PodsJson(podsJsonPath) { this.clear(); this.write(); } else { - events.emit('verbose', 'pods.json found in platforms/ios'); + events.emit('verbose', 'pods.json found in platforms/ios'); // load contents this.contents = fs.readFileSync(this.path, 'utf8'); this.contents = JSON.parse(this.contents); } } -PodsJson.prototype.get = function(name) { +PodsJson.prototype.get = function (name) { return this.contents[name]; }; -PodsJson.prototype.remove = function(name) { +PodsJson.prototype.remove = function (name) { if (this.contents[name]) { delete this.contents[name]; this.__dirty = true; @@ -60,17 +60,17 @@ PodsJson.prototype.remove = function(name) { } }; -PodsJson.prototype.clear = function() { +PodsJson.prototype.clear = function () { this.contents = {}; this.__dirty = true; }; -PodsJson.prototype.destroy = function() { +PodsJson.prototype.destroy = function () { fs.unlinkSync(this.path); events.emit('verbose', util.format('Deleted `%s`', this.path)); }; -PodsJson.prototype.write = function() { +PodsJson.prototype.write = function () { if (this.contents) { fs.writeFileSync(this.path, JSON.stringify(this.contents, null, 4)); this.__dirty = false; @@ -78,11 +78,11 @@ PodsJson.prototype.write = function() { } }; -PodsJson.prototype.set = function(name, type, spec, count) { +PodsJson.prototype.set = function (name, type, spec, count) { this.setJson(name, { name: name, type: type, spec: spec, count: count }); }; -PodsJson.prototype.increment = function(name) { +PodsJson.prototype.increment = function (name) { var val = this.get(name); if (val) { val.count++; @@ -90,7 +90,7 @@ PodsJson.prototype.increment = function(name) { } }; -PodsJson.prototype.decrement = function(name) { +PodsJson.prototype.decrement = function (name) { var val = this.get(name); if (val) { val.count--; @@ -102,13 +102,13 @@ PodsJson.prototype.decrement = function(name) { } }; -PodsJson.prototype.setJson = function(name, json) { +PodsJson.prototype.setJson = function (name, json) { this.contents[name] = json; this.__dirty = true; events.emit('verbose', util.format('Set pods.json for `%s`', name)); }; -PodsJson.prototype.isDirty = function() { +PodsJson.prototype.isDirty = function () { return this.__dirty; }; diff --git a/StoneIsland/platforms/ios/cordova/lib/build.js b/StoneIsland/platforms/ios/cordova/lib/build.js index 29d808ab..f51b084c 100755 --- a/StoneIsland/platforms/ios/cordova/lib/build.js +++ b/StoneIsland/platforms/ios/cordova/lib/build.js @@ -17,23 +17,16 @@ * under the License. */ -/*jshint node: true*/ +var Q = require('q'); +var path = require('path'); +var shell = require('shelljs'); +var spawn = require('./spawn'); +var fs = require('fs'); +var plist = require('plist'); +var util = require('util'); -var Q = require('q'), - path = require('path'), - shell = require('shelljs'), - spawn = require('./spawn'), - fs = require('fs'), - plist = require('plist'), - util = require('util'); - -var check_reqs; -try { - check_reqs = require('./check_reqs'); -} catch (err) { - // For unit tests, check_reqs.js is not a sibling to build.js - check_reqs = require('../../../../lib/check_reqs'); -} +var check_reqs = require('./check_reqs'); +var projectFile = require('./projectFile'); var events = require('cordova-common').events; @@ -41,41 +34,43 @@ var projectPath = path.join(__dirname, '..', '..'); var projectName = null; // These are regular expressions to detect if the user is changing any of the built-in xcodebuildArgs +/* eslint-disable no-useless-escape */ var buildFlagMatchers = { - 'xcconfig' : /^\-xcconfig\s*(.*)$/, - 'workspace' : /^\-workspace\s*(.*)/, - 'scheme' : /^\-scheme\s*(.*)/, - 'configuration' : /^\-configuration\s*(.*)/, - 'sdk' : /^\-sdk\s*(.*)/, - 'destination' : /^\-destination\s*(.*)/, - 'archivePath' : /^\-archivePath\s*(.*)/, - 'configuration_build_dir' : /^(CONFIGURATION_BUILD_DIR=.*)/, - 'shared_precomps_dir' : /^(SHARED_PRECOMPS_DIR=.*)/ + 'xcconfig': /^\-xcconfig\s*(.*)$/, + 'workspace': /^\-workspace\s*(.*)/, + 'scheme': /^\-scheme\s*(.*)/, + 'configuration': /^\-configuration\s*(.*)/, + 'sdk': /^\-sdk\s*(.*)/, + 'destination': /^\-destination\s*(.*)/, + 'archivePath': /^\-archivePath\s*(.*)/, + 'configuration_build_dir': /^(CONFIGURATION_BUILD_DIR=.*)/, + 'shared_precomps_dir': /^(SHARED_PRECOMPS_DIR=.*)/ }; +/* eslint-enable no-useless-escape */ /** * Returns a promise that resolves to the default simulator target; the logic here - * matches what `cordova emulate ios` does. - * + * matches what `cordova emulate ios` does. + * * The return object has two properties: `name` (the Xcode destination name), * `identifier` (the simctl identifier), and `simIdentifier` (essentially the cordova emulate target) - * + * * @return {Promise} */ -function getDefaultSimulatorTarget() { +function getDefaultSimulatorTarget () { return require('./list-emulator-build-targets').run() - .then(function (emulators) { - var targetEmulator; - if (emulators.length > 0) { - targetEmulator = emulators[0]; - } - emulators.forEach(function (emulator) { - if (emulator.name.indexOf('iPhone') === 0) { - targetEmulator = emulator; + .then(function (emulators) { + var targetEmulator; + if (emulators.length > 0) { + targetEmulator = emulators[0]; } + emulators.forEach(function (emulator) { + if (emulator.name.indexOf('iPhone') === 0) { + targetEmulator = emulator; + } + }); + return targetEmulator; }); - return targetEmulator; - }); } module.exports.run = function (buildOpts) { @@ -91,126 +86,153 @@ module.exports.run = function (buildOpts) { return Q.reject('Cannot specify "device" and "emulator" options together.'); } - if(buildOpts.buildConfig) { - if(!fs.existsSync(buildOpts.buildConfig)) { + if (buildOpts.buildConfig) { + if (!fs.existsSync(buildOpts.buildConfig)) { return Q.reject('Build config file does not exist:' + buildOpts.buildConfig); } - events.emit('log','Reading build config file:', path.resolve(buildOpts.buildConfig)); + events.emit('log', 'Reading build config file:', path.resolve(buildOpts.buildConfig)); var contents = fs.readFileSync(buildOpts.buildConfig, 'utf-8'); var buildConfig = JSON.parse(contents.replace(/^\ufeff/, '')); // Remove BOM - if(buildConfig.ios) { + if (buildConfig.ios) { var buildType = buildOpts.release ? 'release' : 'debug'; var config = buildConfig.ios[buildType]; - if(config) { - ['codeSignIdentity', 'codeSignResourceRules', 'provisioningProfile', 'developmentTeam', 'packageType', 'buildFlag'].forEach( - function(key) { + if (config) { + ['codeSignIdentity', 'codeSignResourceRules', 'provisioningProfile', 'developmentTeam', 'packageType', 'buildFlag', 'iCloudContainerEnvironment'].forEach( + function (key) { buildOpts[key] = buildOpts[key] || config[key]; }); } } } -return require('./list-devices').run() - .then(function (devices) { - if (devices.length > 0 && !(buildOpts.emulator)) { - // we also explicitly set device flag in options as we pass - // those parameters to other api (build as an example) - buildOpts.device = true; - return check_reqs.check_ios_deploy(); - } - }).then(function () { - // CB-12287: Determine the device we should target when building for a simulator - if (!buildOpts.device) { - var promise; - if (buildOpts.target) { + return require('./list-devices').run() + .then(function (devices) { + if (devices.length > 0 && !(buildOpts.emulator)) { + // we also explicitly set device flag in options as we pass + // those parameters to other api (build as an example) + buildOpts.device = true; + return check_reqs.check_ios_deploy(); + } + }).then(function () { + // CB-12287: Determine the device we should target when building for a simulator + if (!buildOpts.device) { + var newTarget = buildOpts.target || ''; + + if (newTarget) { + // only grab the device name, not the runtime specifier + newTarget = newTarget.split(',')[0]; + } // a target was given to us, find the matching Xcode destination name - promise = require('./list-emulator-build-targets').targetForSimIdentifier(buildOpts.target); - } else { - // no target provided, pick a default one (matching our emulator logic) - promise = getDefaultSimulatorTarget(); + var promise = require('./list-emulator-build-targets').targetForSimIdentifier(newTarget); + return promise.then(function (theTarget) { + if (!theTarget) { + return getDefaultSimulatorTarget().then(function (defaultTarget) { + emulatorTarget = defaultTarget.name; + events.emit('log', 'Building for ' + emulatorTarget + ' Simulator'); + return emulatorTarget; + }); + } else { + emulatorTarget = theTarget.name; + events.emit('log', 'Building for ' + emulatorTarget + ' Simulator'); + return emulatorTarget; + } + }); } - return promise.then(function(theTarget) { - emulatorTarget = theTarget.name; - events.emit('log', 'Building for ' + emulatorTarget + ' Simulator'); - }); - } - }).then(function () { - return check_reqs.run(); - }).then(function () { - return findXCodeProjectIn(projectPath); - }).then(function (name) { - projectName = name; - var extraConfig = ''; - if (buildOpts.codeSignIdentity) { - extraConfig += 'CODE_SIGN_IDENTITY = ' + buildOpts.codeSignIdentity + '\n'; - extraConfig += 'CODE_SIGN_IDENTITY[sdk=iphoneos*] = ' + buildOpts.codeSignIdentity + '\n'; - } - if (buildOpts.codeSignResourceRules) { - extraConfig += 'CODE_SIGN_RESOURCE_RULES_PATH = ' + buildOpts.codeSignResourceRules + '\n'; - } - if (buildOpts.provisioningProfile) { - extraConfig += 'PROVISIONING_PROFILE = ' + buildOpts.provisioningProfile + '\n'; - } - if (buildOpts.developmentTeam) { - extraConfig += 'DEVELOPMENT_TEAM = ' + buildOpts.developmentTeam + '\n'; - } - return Q.nfcall(fs.writeFile, path.join(__dirname, '..', 'build-extras.xcconfig'), extraConfig, 'utf-8'); - }).then(function () { - var configuration = buildOpts.release ? 'Release' : 'Debug'; + }).then(function () { + return check_reqs.run(); + }).then(function () { + return findXCodeProjectIn(projectPath); + }).then(function (name) { + projectName = name; + var extraConfig = ''; + if (buildOpts.codeSignIdentity) { + extraConfig += 'CODE_SIGN_IDENTITY = ' + buildOpts.codeSignIdentity + '\n'; + extraConfig += 'CODE_SIGN_IDENTITY[sdk=iphoneos*] = ' + buildOpts.codeSignIdentity + '\n'; + } + if (buildOpts.codeSignResourceRules) { + extraConfig += 'CODE_SIGN_RESOURCE_RULES_PATH = ' + buildOpts.codeSignResourceRules + '\n'; + } + if (buildOpts.provisioningProfile) { + extraConfig += 'PROVISIONING_PROFILE = ' + buildOpts.provisioningProfile + '\n'; + } + if (buildOpts.developmentTeam) { + extraConfig += 'DEVELOPMENT_TEAM = ' + buildOpts.developmentTeam + '\n'; + } + return Q.nfcall(fs.writeFile, path.join(__dirname, '..', 'build-extras.xcconfig'), extraConfig, 'utf-8'); + }).then(function () { + var configuration = buildOpts.release ? 'Release' : 'Debug'; - events.emit('log','Building project: ' + path.join(projectPath, projectName + '.xcworkspace')); - events.emit('log','\tConfiguration: ' + configuration); - events.emit('log','\tPlatform: ' + (buildOpts.device ? 'device' : 'emulator')); + events.emit('log', 'Building project: ' + path.join(projectPath, projectName + '.xcworkspace')); + events.emit('log', '\tConfiguration: ' + configuration); + events.emit('log', '\tPlatform: ' + (buildOpts.device ? 'device' : 'emulator')); - var buildOutputDir = path.join(projectPath, 'build', (buildOpts.device ? 'device' : 'emulator')); + var buildOutputDir = path.join(projectPath, 'build', (buildOpts.device ? 'device' : 'emulator')); - // remove the build/device folder before building - return spawn('rm', [ '-rf', buildOutputDir ], projectPath) - .then(function() { - var xcodebuildArgs = getXcodeBuildArgs(projectName, projectPath, configuration, buildOpts.device, buildOpts.buildFlag, emulatorTarget); - return spawn('xcodebuild', xcodebuildArgs, projectPath); - }); + // remove the build/device folder before building + return spawn('rm', [ '-rf', buildOutputDir ], projectPath) + .then(function () { + var xcodebuildArgs = getXcodeBuildArgs(projectName, projectPath, configuration, buildOpts.device, buildOpts.buildFlag, emulatorTarget); + return spawn('xcodebuild', xcodebuildArgs, projectPath); + }); - }).then(function () { - if (!buildOpts.device || buildOpts.noSign) { - return; - } + }).then(function () { + if (!buildOpts.device || buildOpts.noSign) { + return; + } - var exportOptions = {'compileBitcode': false, 'method': 'development'}; + var locations = { + root: projectPath, + pbxproj: path.join(projectPath, projectName + '.xcodeproj', 'project.pbxproj') + }; - if (buildOpts.packageType) { - exportOptions.method = buildOpts.packageType; - } + var bundleIdentifier = projectFile.parse(locations).getPackageName(); + var exportOptions = {'compileBitcode': false, 'method': 'development'}; - if (buildOpts.developmentTeam) { - exportOptions.teamID = buildOpts.developmentTeam; - } + if (buildOpts.packageType) { + exportOptions.method = buildOpts.packageType; + } - var exportOptionsPlist = plist.build(exportOptions); - var exportOptionsPath = path.join(projectPath, 'exportOptions.plist'); + if (buildOpts.iCloudContainerEnvironment) { + exportOptions.iCloudContainerEnvironment = buildOpts.iCloudContainerEnvironment; + } - var buildOutputDir = path.join(projectPath, 'build', 'device'); + if (buildOpts.developmentTeam) { + exportOptions.teamID = buildOpts.developmentTeam; + } + if (buildOpts.provisioningProfile && bundleIdentifier) { + exportOptions.provisioningProfiles = { [ bundleIdentifier ]: String(buildOpts.provisioningProfile) }; + exportOptions.signingStyle = 'manual'; + } - function checkSystemRuby() { - var ruby_cmd = shell.which('ruby'); + if (buildOpts.codeSignIdentity) { + exportOptions.signingCertificate = buildOpts.codeSignIdentity; + } - if (ruby_cmd != '/usr/bin/ruby') { - events.emit('warn', 'Non-system Ruby in use. This may cause packaging to fail.\n' + - 'If you use RVM, please run `rvm use system`.\n' + - 'If you use chruby, please run `chruby system`.'); - } - } + var exportOptionsPlist = plist.build(exportOptions); + var exportOptionsPath = path.join(projectPath, 'exportOptions.plist'); - function packageArchive() { - var xcodearchiveArgs = getXcodeArchiveArgs(projectName, projectPath, buildOutputDir, exportOptionsPath); - return spawn('xcodebuild', xcodearchiveArgs, projectPath); - } + var buildOutputDir = path.join(projectPath, 'build', 'device'); + + function checkSystemRuby () { + var ruby_cmd = shell.which('ruby'); + + if (ruby_cmd !== '/usr/bin/ruby') { + events.emit('warn', 'Non-system Ruby in use. This may cause packaging to fail.\n' + + 'If you use RVM, please run `rvm use system`.\n' + + 'If you use chruby, please run `chruby system`.'); + } + } + + function packageArchive () { + var xcodearchiveArgs = getXcodeArchiveArgs(projectName, projectPath, buildOutputDir, exportOptionsPath); + return spawn('xcodebuild', xcodearchiveArgs, projectPath); + } - return Q.nfcall(fs.writeFile, exportOptionsPath, exportOptionsPlist, 'utf-8') + return Q.nfcall(fs.writeFile, exportOptionsPath, exportOptionsPlist, 'utf-8') .then(checkSystemRuby) .then(packageArchive); - }); + }); }; /** @@ -218,7 +240,7 @@ return require('./list-devices').run() * @param {String} projectPath Path where to search project * @return {Promise} Promise either fulfilled with project name or rejected */ -function findXCodeProjectIn(projectPath) { +function findXCodeProjectIn (projectPath) { // 'Searching for Xcode project in ' + projectPath); var xcodeProjFiles = shell.ls(projectPath).filter(function (name) { return path.extname(name) === '.xcodeproj'; @@ -228,7 +250,7 @@ function findXCodeProjectIn(projectPath) { return Q.reject('No Xcode project found in ' + projectPath); } if (xcodeProjFiles.length > 1) { - events.emit('warn','Found multiple .xcodeproj directories in \n' + + events.emit('warn', 'Found multiple .xcodeproj directories in \n' + projectPath + '\nUsing first one'); } @@ -248,7 +270,7 @@ module.exports.findXCodeProjectIn = findXCodeProjectIn; * @param {String} emulatorTarget Target for emulator (rather than default) * @return {Array} Array of arguments that could be passed directly to spawn method */ -function getXcodeBuildArgs(projectName, projectPath, configuration, isDevice, buildFlags, emulatorTarget) { +function getXcodeBuildArgs (projectName, projectPath, configuration, isDevice, buildFlags, emulatorTarget) { var xcodebuildArgs; var options; var buildActions; @@ -260,16 +282,16 @@ function getXcodeBuildArgs(projectName, projectPath, configuration, isDevice, bu if (typeof buildFlags === 'string' || buildFlags instanceof String) { parseBuildFlag(buildFlags, customArgs); } else { // buildFlags is an Array of strings - buildFlags.forEach( function(flag) { + buildFlags.forEach(function (flag) { parseBuildFlag(flag, customArgs); }); } } - + if (isDevice) { options = [ '-xcconfig', customArgs.xcconfig || path.join(__dirname, '..', 'build-' + configuration.toLowerCase() + '.xcconfig'), - '-workspace', customArgs.workspace || projectName + '.xcworkspace', + '-workspace', customArgs.workspace || projectName + '.xcworkspace', '-scheme', customArgs.scheme || projectName, '-configuration', customArgs.configuration || configuration, '-destination', customArgs.destination || 'generic/platform=iOS', @@ -309,7 +331,6 @@ function getXcodeBuildArgs(projectName, projectPath, configuration, isDevice, bu return xcodebuildArgs; } - /** * Returns array of arguments for xcodebuild * @param {String} projectName Name of xcode project @@ -318,16 +339,16 @@ function getXcodeBuildArgs(projectName, projectPath, configuration, isDevice, bu * @param {String} exportOptionsPath Path to the exportOptions.plist file * @return {Array} Array of arguments that could be passed directly to spawn method */ -function getXcodeArchiveArgs(projectName, projectPath, outputPath, exportOptionsPath) { - return [ - '-exportArchive', - '-archivePath', projectName + '.xcarchive', - '-exportOptionsPlist', exportOptionsPath, - '-exportPath', outputPath - ]; +function getXcodeArchiveArgs (projectName, projectPath, outputPath, exportOptionsPath) { + return [ + '-exportArchive', + '-archivePath', projectName + '.xcarchive', + '-exportOptionsPlist', exportOptionsPath, + '-exportPath', outputPath + ]; } -function parseBuildFlag(buildFlag, args) { +function parseBuildFlag (buildFlag, args) { var matched; for (var key in buildFlagMatchers) { var found = buildFlag.match(buildFlagMatchers[key]); @@ -342,7 +363,8 @@ function parseBuildFlag(buildFlag, args) { if (!matched) { // If the flag starts with a '-' then it is an xcodebuild built-in option or a // user-defined setting. The regex makes sure that we don't split a user-defined - // setting that is wrapped in quotes. + // setting that is wrapped in quotes. + /* eslint-disable no-useless-escape */ if (buildFlag[0] === '-' && !buildFlag.match(/^.*=(\".*\")|(\'.*\')$/)) { args.otherFlags = args.otherFlags.concat(buildFlag.split(' ')); events.emit('warn', util.format('Adding xcodebuildArg: %s', buildFlag.split(' '))); @@ -354,7 +376,7 @@ function parseBuildFlag(buildFlag, args) { } // help/usage function -module.exports.help = function help() { +module.exports.help = function help () { console.log(''); console.log('Usage: build [--debug | --release] [--archs=\"<list of architectures...>\"]'); console.log(' [--device | --simulator] [--codeSignIdentity=\"<identity>\"]'); @@ -365,6 +387,7 @@ module.exports.help = function help() { console.log(' --debug : Builds project in debug mode. (Default)'); console.log(' --release : Builds project in release mode.'); console.log(' -r : Shortcut :: builds project in release mode.'); + /* eslint-enable no-useless-escape */ // TODO: add support for building different archs // console.log(" --archs : Builds project binaries for specific chip architectures (`anycpu`, `arm`, `x86`, `x64`)."); console.log(' --device, --simulator'); diff --git a/StoneIsland/platforms/ios/cordova/lib/check_reqs.js b/StoneIsland/platforms/ios/cordova/lib/check_reqs.js index ae21f989..21a22081 100755 --- a/StoneIsland/platforms/ios/cordova/lib/check_reqs.js +++ b/StoneIsland/platforms/ios/cordova/lib/check_reqs.js @@ -17,29 +17,33 @@ under the License. */ -var Q = require('q'), - shell = require('shelljs'), - util = require('util'), - versions = require('./versions'); +'use strict'; -var XCODEBUILD_MIN_VERSION = '7.0.0'; -var XCODEBUILD_NOT_FOUND_MESSAGE = +const Q = require('q'); +const shell = require('shelljs'); +const util = require('util'); +const versions = require('./versions'); + +const SUPPORTED_OS_PLATFORMS = [ 'darwin' ]; + +const XCODEBUILD_MIN_VERSION = '7.0.0'; +const XCODEBUILD_NOT_FOUND_MESSAGE = 'Please install version ' + XCODEBUILD_MIN_VERSION + ' or greater from App Store'; -var IOS_DEPLOY_MIN_VERSION = '1.9.0'; -var IOS_DEPLOY_NOT_FOUND_MESSAGE = +const IOS_DEPLOY_MIN_VERSION = '1.9.2'; +const IOS_DEPLOY_NOT_FOUND_MESSAGE = 'Please download, build and install version ' + IOS_DEPLOY_MIN_VERSION + ' or greater' + ' from https://github.com/phonegap/ios-deploy into your path, or do \'npm install -g ios-deploy\''; -var COCOAPODS_MIN_VERSION = '1.0.1'; -var COCOAPODS_NOT_FOUND_MESSAGE = +const COCOAPODS_MIN_VERSION = '1.0.1'; +const COCOAPODS_NOT_FOUND_MESSAGE = 'Please install version ' + COCOAPODS_MIN_VERSION + ' or greater from https://cocoapods.org/'; -var COCOAPODS_NOT_SYNCED_MESSAGE = +const COCOAPODS_NOT_SYNCED_MESSAGE = 'The CocoaPods repo has not been synced yet, this will take a long time (approximately 500MB as of Sept 2016). Please run `pod setup` first to sync the repo.'; -var COCOAPODS_SYNCED_MIN_SIZE = 475; // in megabytes -var COCOAPODS_SYNC_ERROR_MESSAGE = +const COCOAPODS_SYNCED_MIN_SIZE = 475; // in megabytes +const COCOAPODS_SYNC_ERROR_MESSAGE = 'The CocoaPods repo has been created, but there appears to be a sync error. The repo size should be at least ' + COCOAPODS_SYNCED_MIN_SIZE + '. Please run `pod setup --verbose` to sync the repo.'; -var COCOAPODS_REPO_NOT_FOUND_MESSAGE = 'The CocoaPods repo at ~/.cocoapods was not found.'; +const COCOAPODS_REPO_NOT_FOUND_MESSAGE = 'The CocoaPods repo at ~/.cocoapods was not found.'; /** * Checks if xcode util is available @@ -59,13 +63,25 @@ module.exports.check_ios_deploy = function () { module.exports.check_os = function () { // Build iOS apps available for OSX platform only, so we reject on others platforms - return process.platform === 'darwin' ? + return os_platform_is_supported() ? Q.resolve(process.platform) : - Q.reject('Cordova tooling for iOS requires Apple OS X'); + Q.reject('Cordova tooling for iOS requires Apple macOS'); }; -function check_cocoapod_tool() { - return checkTool('pod', COCOAPODS_MIN_VERSION, COCOAPODS_NOT_FOUND_MESSAGE, 'CocoaPods'); +function os_platform_is_supported () { + return (SUPPORTED_OS_PLATFORMS.indexOf(process.platform) !== -1); +} + +function check_cocoapod_tool (toolChecker) { + toolChecker = toolChecker || checkTool; + if (os_platform_is_supported()) { // CB-12856 + return toolChecker('pod', COCOAPODS_MIN_VERSION, COCOAPODS_NOT_FOUND_MESSAGE, 'CocoaPods'); + } else { + return Q.resolve({ + 'ignore': true, + 'ignoreMessage': `CocoaPods check and installation ignored on ${process.platform}` + }); + } } /** @@ -74,47 +90,48 @@ function check_cocoapod_tool() { */ module.exports.check_cocoapods_repo_size = function () { return check_cocoapod_tool() - .then(function() { - // check size of ~/.cocoapods repo - var commandString = util.format('du -sh %s/.cocoapods', process.env.HOME); - var command = shell.exec(commandString, { silent:true }); - if (command.code !== 0) { // error, perhaps not found - return Q.reject(util.format('%s (%s)', COCOAPODS_REPO_NOT_FOUND_MESSAGE, command.output)); - } else { // success, parse output + .then(function (toolOptions) { + // check size of ~/.cocoapods repo + let commandString = util.format('du -sh %s/.cocoapods', process.env.HOME); + let command = shell.exec(commandString, { silent: true }); // command.output is e.g "750M path/to/.cocoapods", we just scan the number - return Q.resolve(parseFloat(command.output)); - } - }) - .then(function(repoSize) { - if (COCOAPODS_SYNCED_MIN_SIZE > repoSize) { - return Q.reject(COCOAPODS_SYNC_ERROR_MESSAGE); - } else { - return Q.resolve(); - } - }); + let size = toolOptions.ignore ? 0 : parseFloat(command.output); + + if (toolOptions.ignore || command.code === 0) { // success, parse output + return Q.resolve(size, toolOptions); + } else { // error, perhaps not found + return Q.reject(util.format('%s (%s)', COCOAPODS_REPO_NOT_FOUND_MESSAGE, command.output)); + } + }) + .then(function (repoSize, toolOptions) { + if (toolOptions.ignore || COCOAPODS_SYNCED_MIN_SIZE <= repoSize) { // success, expected size + return Q.resolve(toolOptions); + } else { + return Q.reject(COCOAPODS_SYNC_ERROR_MESSAGE); + } + }); }; /** * Checks if cocoapods is available, and whether the repo is synced (because it takes a long time to download) * @return {Promise} Returns a promise either resolved or rejected */ -module.exports.check_cocoapods = function () { - return check_cocoapod_tool() - // check whether the cocoapods repo has been synced through `pod repo` command - // a value of '0 repos' means it hasn't been synced - .then(function() { - var code = shell.exec('pod repo | grep -e "^0 repos"', { silent:true }).code; - return Q.resolve(code !== 0); // non-zero means it is synced (has 1 repo at least) - }) - .then(function(repoIsSynced) { - if (repoIsSynced) { - // return check_cocoapods_repo_size(); - // we could check the repo size above, but it takes too long. - return Q.resolve(); - } else { - return Q.reject(COCOAPODS_NOT_SYNCED_MESSAGE); - } - }); +module.exports.check_cocoapods = function (toolChecker) { + return check_cocoapod_tool(toolChecker) + // check whether the cocoapods repo has been synced through `pod repo` command + // a value of '0 repos' means it hasn't been synced + .then(function (toolOptions) { + let code = shell.exec('pod repo | grep -e "^0 repos"', { silent: true }).code; + let repoIsSynced = (code !== 0); + + if (toolOptions.ignore || repoIsSynced) { + // return check_cocoapods_repo_size(); + // we could check the repo size above, but it takes too long. + return Q.resolve(toolOptions); + } else { + return Q.reject(COCOAPODS_NOT_SYNCED_MESSAGE); + } + }); }; /** @@ -129,15 +146,16 @@ function checkTool (tool, minVersion, message, toolFriendlyName) { toolFriendlyName = toolFriendlyName || tool; // Check whether tool command is available at all - var tool_command = shell.which(tool); + let tool_command = shell.which(tool); if (!tool_command) { return Q.reject(toolFriendlyName + ' was not found. ' + (message || '')); } + // check if tool version is greater than specified one return versions.get_tool_version(tool).then(function (version) { version = version.trim(); return versions.compareVersions(version, minVersion) >= 0 ? - Q.resolve(version) : + Q.resolve({ 'version': version }) : Q.reject('Cordova needs ' + toolFriendlyName + ' version ' + minVersion + ' or greater, you have version ' + version + '. ' + (message || '')); }); @@ -150,7 +168,7 @@ function checkTool (tool, minVersion, message, toolFriendlyName) { * @param {Boolean} isFatal Marks the requirement as fatal. If such requirement will fail * next requirements' checks will be skipped. */ -var Requirement = function (id, name, isFatal) { +let Requirement = function (id, name, isFatal) { this.id = id; this.name = name; this.installed = false; @@ -164,19 +182,19 @@ var Requirement = function (id, name, isFatal) { * * @return Promise<Requirement[]> Array of requirements. Due to implementation, promise is always fulfilled. */ -module.exports.check_all = function() { +module.exports.check_all = function () { - var requirements = [ - new Requirement('os', 'Apple OS X', true), + const requirements = [ + new Requirement('os', 'Apple macOS', true), new Requirement('xcode', 'Xcode'), new Requirement('ios-deploy', 'ios-deploy'), new Requirement('CocoaPods', 'CocoaPods') ]; - var result = []; - var fatalIsHit = false; + let result = []; + let fatalIsHit = false; - var checkFns = [ + let checkFns = [ module.exports.check_os, module.exports.check_xcodebuild, module.exports.check_ios_deploy, @@ -190,21 +208,21 @@ module.exports.check_all = function() { // we don't need to check others if (fatalIsHit) return Q(); - var requirement = requirements[idx]; + let requirement = requirements[idx]; return checkFn() - .then(function (version) { - requirement.installed = true; - requirement.metadata.version = version; - result.push(requirement); - }, function (err) { - if (requirement.isFatal) fatalIsHit = true; - requirement.metadata.reason = err; - result.push(requirement); - }); + .then(function (version) { + requirement.installed = true; + requirement.metadata.version = version; + result.push(requirement); + }, function (err) { + if (requirement.isFatal) fatalIsHit = true; + requirement.metadata.reason = err; + result.push(requirement); + }); }); }, Q()) - .then(function () { - // When chain is completed, return requirements array to upstream API - return result; - }); + .then(function () { + // When chain is completed, return requirements array to upstream API + return result; + }); }; diff --git a/StoneIsland/platforms/ios/cordova/lib/clean.js b/StoneIsland/platforms/ios/cordova/lib/clean.js index 7c8cf56e..20e8ac66 100755 --- a/StoneIsland/platforms/ios/cordova/lib/clean.js +++ b/StoneIsland/platforms/ios/cordova/lib/clean.js @@ -6,9 +6,9 @@ * 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 @@ -17,16 +17,14 @@ * under the License. */ -/*jshint node: true*/ - -var Q = require('q'), - path = require('path'), - shell = require('shelljs'), - spawn = require('./spawn'); +var Q = require('q'); +var path = require('path'); +var shell = require('shelljs'); +var spawn = require('./spawn'); var projectPath = path.join(__dirname, '..', '..'); -module.exports.run = function() { +module.exports.run = function () { var projectName = shell.ls(projectPath).filter(function (name) { return path.extname(name) === '.xcodeproj'; })[0]; @@ -36,9 +34,9 @@ module.exports.run = function() { } return spawn('xcodebuild', ['-project', projectName, '-configuration', 'Debug', '-alltargets', 'clean'], projectPath) - .then(function () { - return spawn('xcodebuild', ['-project', projectName, '-configuration', 'Release', '-alltargets', 'clean'], projectPath); - }).then(function () { - return shell.rm('-rf', path.join(projectPath, 'build')); - }); + .then(function () { + return spawn('xcodebuild', ['-project', projectName, '-configuration', 'Release', '-alltargets', 'clean'], projectPath); + }).then(function () { + return shell.rm('-rf', path.join(projectPath, 'build')); + }); }; diff --git a/StoneIsland/platforms/ios/cordova/lib/copy-www-build-step.js b/StoneIsland/platforms/ios/cordova/lib/copy-www-build-step.js index 7caa200f..e05aacf2 100755 --- a/StoneIsland/platforms/ios/cordova/lib/copy-www-build-step.js +++ b/StoneIsland/platforms/ios/cordova/lib/copy-www-build-step.js @@ -24,19 +24,19 @@ // This script should not be called directly. // It is called as a build step from Xcode. -var BUILT_PRODUCTS_DIR = process.env.BUILT_PRODUCTS_DIR, - FULL_PRODUCT_NAME = process.env.FULL_PRODUCT_NAME, - COPY_HIDDEN = process.env.COPY_HIDDEN, - PROJECT_FILE_PATH = process.env.PROJECT_FILE_PATH; +var BUILT_PRODUCTS_DIR = process.env.BUILT_PRODUCTS_DIR; +var FULL_PRODUCT_NAME = process.env.FULL_PRODUCT_NAME; +var COPY_HIDDEN = process.env.COPY_HIDDEN; +var PROJECT_FILE_PATH = process.env.PROJECT_FILE_PATH; -var path = require('path'), - fs = require('fs'), - shell = require('shelljs'), - srcDir = 'www', - dstDir = path.join(BUILT_PRODUCTS_DIR, FULL_PRODUCT_NAME), - dstWwwDir = path.join(dstDir, 'www'); +var path = require('path'); +var fs = require('fs'); +var shell = require('shelljs'); +var srcDir = 'www'; +var dstDir = path.join(BUILT_PRODUCTS_DIR, FULL_PRODUCT_NAME); +var dstWwwDir = path.join(dstDir, 'www'); -if(!BUILT_PRODUCTS_DIR) { +if (!BUILT_PRODUCTS_DIR) { console.error('The script is meant to be run as an Xcode build step and relies on env variables set by Xcode.'); process.exit(1); } @@ -57,13 +57,13 @@ shell.rm('-rf', path.join(dstDir, 'embedded.mobileprovision')); // Copy www dir recursively var code; -if(!!COPY_HIDDEN) { +if (COPY_HIDDEN) { code = shell.exec('rsync -Lra "' + srcDir + '" "' + dstDir + '"').code; } else { code = shell.exec('rsync -Lra --exclude="- .*" "' + srcDir + '" "' + dstDir + '"').code; } -if(code !== 0) { +if (code !== 0) { console.error('Error occured on copying www. Code: ' + code); process.exit(3); } diff --git a/StoneIsland/platforms/ios/cordova/lib/list-devices b/StoneIsland/platforms/ios/cordova/lib/list-devices index 3fa3e6da..047d5950 100755 --- a/StoneIsland/platforms/ios/cordova/lib/list-devices +++ b/StoneIsland/platforms/ios/cordova/lib/list-devices @@ -19,7 +19,6 @@ under the License. */ -/*jshint node: true*/ var Q = require('q'), exec = require('child_process').exec; diff --git a/StoneIsland/platforms/ios/cordova/lib/list-emulator-build-targets b/StoneIsland/platforms/ios/cordova/lib/list-emulator-build-targets index d17fc8ca..c0d566fb 100755 --- a/StoneIsland/platforms/ios/cordova/lib/list-emulator-build-targets +++ b/StoneIsland/platforms/ios/cordova/lib/list-emulator-build-targets @@ -19,7 +19,6 @@ under the License. */ -/*jshint node: true*/ var Q = require('q'), exec = require('child_process').exec; diff --git a/StoneIsland/platforms/ios/cordova/lib/list-emulator-images b/StoneIsland/platforms/ios/cordova/lib/list-emulator-images index 87a5ad27..d8be5766 100755 --- a/StoneIsland/platforms/ios/cordova/lib/list-emulator-images +++ b/StoneIsland/platforms/ios/cordova/lib/list-emulator-images @@ -19,7 +19,6 @@ under the License. */ -/*jshint node: true*/ var Q = require('q'), iossim = require('ios-sim'), diff --git a/StoneIsland/platforms/ios/cordova/lib/list-started-emulators b/StoneIsland/platforms/ios/cordova/lib/list-started-emulators index 1269e47a..710fa2f7 100755 --- a/StoneIsland/platforms/ios/cordova/lib/list-started-emulators +++ b/StoneIsland/platforms/ios/cordova/lib/list-started-emulators @@ -19,7 +19,6 @@ under the License. */ -/*jshint node: true*/ var Q = require('q'), exec = require('child_process').exec; diff --git a/StoneIsland/platforms/ios/cordova/lib/plugman/pluginHandlers.js b/StoneIsland/platforms/ios/cordova/lib/plugman/pluginHandlers.js index 416aba96..1f6920fa 100755 --- a/StoneIsland/platforms/ios/cordova/lib/plugman/pluginHandlers.js +++ b/StoneIsland/platforms/ios/cordova/lib/plugman/pluginHandlers.js @@ -30,27 +30,27 @@ var keep_these_frameworks = [ ]; var handlers = { - 'source-file':{ - install:function(obj, plugin, project, options) { + 'source-file': { + install: function (obj, plugin, project, options) { installHelper('source-file', obj, plugin.dir, project.projectDir, plugin.id, options, project); }, - uninstall:function(obj, plugin, project, options) { + uninstall: function (obj, plugin, project, options) { uninstallHelper('source-file', obj, project.projectDir, plugin.id, options, project); } }, - 'header-file':{ - install:function(obj, plugin, project, options) { + 'header-file': { + install: function (obj, plugin, project, options) { installHelper('header-file', obj, plugin.dir, project.projectDir, plugin.id, options, project); }, - uninstall:function(obj, plugin, project, options) { + uninstall: function (obj, plugin, project, options) { uninstallHelper('header-file', obj, project.projectDir, plugin.id, options, project); } }, - 'resource-file':{ - install:function(obj, plugin, project, options) { - var src = obj.src, - target = obj.target, - srcFile = path.resolve(plugin.dir, src); + 'resource-file': { + install: function (obj, plugin, project, options) { + var src = obj.src; + var target = obj.target; + var srcFile = path.resolve(plugin.dir, src); if (!target) { target = path.basename(src); @@ -67,9 +67,9 @@ var handlers = { var link = !!(options && options.link); copyFile(plugin.dir, src, project.projectDir, destFile, link); }, - uninstall:function(obj, plugin, project, options) { - var src = obj.src, - target = obj.target; + uninstall: function (obj, plugin, project, options) { + var src = obj.src; + var target = obj.target; if (!target) { target = path.basename(src); @@ -80,19 +80,19 @@ var handlers = { shell.rm('-rf', destFile); } }, - 'framework':{ // CB-5238 custom frameworks only - install:function(obj, plugin, project, options) { - var src = obj.src, - custom = !!(obj.custom), // convert to boolean (if truthy/falsy) - embed = !!(obj.embed), // convert to boolean (if truthy/falsy) - link = !embed; // either link or embed can be true, but not both. the other has to be false - + 'framework': { // CB-5238 custom frameworks only + install: function (obj, plugin, project, options) { + var src = obj.src; + var custom = !!(obj.custom); // convert to boolean (if truthy/falsy) + var embed = !!(obj.embed); // convert to boolean (if truthy/falsy) + var link = !embed; // either link or embed can be true, but not both. the other has to be false + if (!custom) { var keepFrameworks = keep_these_frameworks; if (keepFrameworks.indexOf(src) < 0) { if (obj.type === 'podspec') { - //podspec handled in Api.js + // podspec handled in Api.js } else { project.frameworks[src] = project.frameworks[src] || 0; project.frameworks[src]++; @@ -104,8 +104,8 @@ var handlers = { } return; } - var srcFile = path.resolve(plugin.dir, src), - targetDir = path.resolve(project.plugins_dir, plugin.id, path.basename(src)); + var srcFile = path.resolve(plugin.dir, src); + var targetDir = path.resolve(project.plugins_dir, plugin.id, path.basename(src)); if (!fs.existsSync(srcFile)) throw new CordovaError('Cannot find framework "' + srcFile + '" for plugin ' + plugin.id + ' in iOS platform'); if (fs.existsSync(targetDir)) throw new CordovaError('Framework "' + targetDir + '" for plugin ' + plugin.id + ' already exists in iOS platform'); var symlink = !!(options && options.link); @@ -123,23 +123,23 @@ var handlers = { project.xcode.addFramework(project_relative, opt); events.emit('verbose', util.format('Custom framework added to project. %s -> %s', src, JSON.stringify(opt))); }, - uninstall:function(obj, plugin, project, options) { + uninstall: function (obj, plugin, project, options) { var src = obj.src; - if (!obj.custom) { //CB-9825 cocoapod integration for plugins + if (!obj.custom) { // CB-9825 cocoapod integration for plugins var keepFrameworks = keep_these_frameworks; if (keepFrameworks.indexOf(src) < 0) { if (obj.type === 'podspec') { var podsJSON = require(path.join(project.projectDir, 'pods.json')); - if(podsJSON[src]) { - if(podsJSON[src].count > 1) { + if (podsJSON[src]) { + if (podsJSON[src].count > 1) { podsJSON[src].count = podsJSON[src].count - 1; } else { delete podsJSON[src]; } } } else { - //this should be refactored + // this should be refactored project.frameworks[src] = project.frameworks[src] || 1; project.frameworks[src]--; if (project.frameworks[src] < 1) { @@ -153,8 +153,8 @@ var handlers = { return; } - var targetDir = fixPathSep(path.resolve(project.plugins_dir, plugin.id, path.basename(src))), - pbxFile = project.xcode.removeFramework(targetDir, {customFramework: true}); + var targetDir = fixPathSep(path.resolve(project.plugins_dir, plugin.id, path.basename(src))); + var pbxFile = project.xcode.removeFramework(targetDir, {customFramework: true}); if (pbxFile) { project.xcode.removeFromPbxEmbedFrameworksBuildPhase(pbxFile); } @@ -162,15 +162,15 @@ var handlers = { } }, 'lib-file': { - install:function(obj, plugin, project, options) { + install: function (obj, plugin, project, options) { events.emit('verbose', '<lib-file> install is not supported for iOS plugins'); }, - uninstall:function(obj, plugin, project, options) { + uninstall: function (obj, plugin, project, options) { events.emit('verbose', '<lib-file> uninstall is not supported for iOS plugins'); } }, - 'asset':{ - install:function(obj, plugin, project, options) { + 'asset': { + install: function (obj, plugin, project, options) { if (!obj.src) { throw new CordovaError(generateAttributeError('src', 'asset', plugin.id)); } @@ -181,7 +181,7 @@ var handlers = { copyFile(plugin.dir, obj.src, project.www, obj.target); if (options && options.usePlatformWww) copyFile(plugin.dir, obj.src, project.platformWww, obj.target); }, - uninstall:function(obj, plugin, project, options) { + uninstall: function (obj, plugin, project, options) { var target = obj.target; if (!target) { @@ -200,7 +200,7 @@ var handlers = { install: function (obj, plugin, project, options) { // Copy the plugin's files into the www directory. var moduleSource = path.resolve(plugin.dir, obj.src); - var moduleName = plugin.id + '.' + (obj.name || path.basename(obj.src, path.extname (obj.src))); + var moduleName = plugin.id + '.' + (obj.name || path.basename(obj.src, path.extname(obj.src))); // Read in the file, prepend the cordova.define, and write it back out. var scriptContent = fs.readFileSync(moduleSource, 'utf-8').replace(/^\ufeff/, ''); // Window BOM @@ -234,7 +234,7 @@ module.exports.getInstaller = function (type) { events.emit('warn', '<' + type + '> is not supported for iOS plugins'); }; -module.exports.getUninstaller = function(type) { +module.exports.getUninstaller = function (type) { if (handlers[type] && handlers[type].uninstall) { return handlers[type].uninstall; } @@ -242,7 +242,7 @@ module.exports.getUninstaller = function(type) { events.emit('warn', '<' + type + '> is not supported for iOS plugins'); }; -function installHelper(type, obj, plugin_dir, project_dir, plugin_id, options, project) { +function installHelper (type, obj, plugin_dir, project_dir, plugin_id, options, project) { var srcFile = path.resolve(plugin_dir, obj.src); var targetDir = path.resolve(project.plugins_dir, plugin_id, obj.targetDir || ''); var destFile = path.join(targetDir, path.basename(obj.src)); @@ -271,19 +271,19 @@ function installHelper(type, obj, plugin_dir, project_dir, plugin_id, options, p project_ref = 'Plugins/' + fixPathSep(path.relative(project.plugins_dir, destFile)); } - if (type == 'header-file') { + if (type === 'header-file') { project.xcode.addHeaderFile(project_ref); } else if (obj.framework) { var opt = { weak: obj.weak }; var project_relative = path.join(path.basename(project.xcode_path), project_ref); project.xcode.addFramework(project_relative, opt); - project.xcode.addToLibrarySearchPaths({path:project_ref}); + project.xcode.addToLibrarySearchPaths({path: project_ref}); } else { - project.xcode.addSourceFile(project_ref, obj.compilerFlags ? {compilerFlags:obj.compilerFlags} : {}); + project.xcode.addSourceFile(project_ref, obj.compilerFlags ? {compilerFlags: obj.compilerFlags} : {}); } } -function uninstallHelper(type, obj, project_dir, plugin_id, options, project) { +function uninstallHelper (type, obj, project_dir, plugin_id, options, project) { var targetDir = path.resolve(project.plugins_dir, plugin_id, obj.targetDir || ''); var destFile = path.join(targetDir, path.basename(obj.src)); @@ -298,19 +298,19 @@ function uninstallHelper(type, obj, project_dir, plugin_id, options, project) { shell.rm('-rf', targetDir); - if (type == 'header-file') { + if (type === 'header-file') { project.xcode.removeHeaderFile(project_ref); } else if (obj.framework) { var project_relative = path.join(path.basename(project.xcode_path), project_ref); project.xcode.removeFramework(project_relative); - project.xcode.removeFromLibrarySearchPaths({path:project_ref}); + project.xcode.removeFromLibrarySearchPaths({path: project_ref}); } else { project.xcode.removeSourceFile(project_ref); } } -var pathSepFix = new RegExp(path.sep.replace(/\\/,'\\\\'),'g'); -function fixPathSep(file) { +var pathSepFix = new RegExp(path.sep.replace(/\\/, '\\\\'), 'g'); +function fixPathSep (file) { return file.replace(pathSepFix, '/'); } @@ -321,14 +321,12 @@ function copyFile (plugin_dir, src, project_dir, dest, link) { // check that src path is inside plugin directory var real_path = fs.realpathSync(src); var real_plugin_path = fs.realpathSync(plugin_dir); - if (real_path.indexOf(real_plugin_path) !== 0) - throw new CordovaError('File "' + src + '" is located outside the plugin directory "' + plugin_dir + '"'); + if (real_path.indexOf(real_plugin_path) !== 0) { throw new CordovaError('File "' + src + '" is located outside the plugin directory "' + plugin_dir + '"'); } dest = path.resolve(project_dir, dest); // check that dest path is located in project directory - if (dest.indexOf(project_dir) !== 0) - throw new CordovaError('Destination "' + dest + '" for source file "' + src + '" is located outside the project'); + if (dest.indexOf(project_dir) !== 0) { throw new CordovaError('Destination "' + dest + '" for source file "' + src + '" is located outside the project'); } shell.mkdir('-p', path.dirname(dest)); @@ -345,24 +343,22 @@ function copyFile (plugin_dir, src, project_dir, dest, link) { // Same as copy file but throws error if target exists function copyNewFile (plugin_dir, src, project_dir, dest, link) { var target_path = path.resolve(project_dir, dest); - if (fs.existsSync(target_path)) - throw new CordovaError('"' + target_path + '" already exists!'); + if (fs.existsSync(target_path)) { throw new CordovaError('"' + target_path + '" already exists!'); } copyFile(plugin_dir, src, project_dir, dest, !!link); } -function linkFileOrDirTree(src, dest) { +function linkFileOrDirTree (src, dest) { if (fs.existsSync(dest)) { shell.rm('-Rf', dest); } if (fs.statSync(src).isDirectory()) { shell.mkdir('-p', dest); - fs.readdirSync(src).forEach(function(entry) { + fs.readdirSync(src).forEach(function (entry) { linkFileOrDirTree(path.join(src, entry), path.join(dest, entry)); }); - } - else { + } else { fs.linkSync(src, dest); } } @@ -388,8 +384,8 @@ function removeFileAndParents (baseDir, destFile, stopper) { // check if directory is empty var curDir = path.dirname(file); - while(curDir !== path.resolve(baseDir, stopper)) { - if(fs.existsSync(curDir) && fs.readdirSync(curDir).length === 0) { + while (curDir !== path.resolve(baseDir, stopper)) { + if (fs.existsSync(curDir) && fs.readdirSync(curDir).length === 0) { fs.rmdirSync(curDir); curDir = path.resolve(curDir, '..'); } else { @@ -399,6 +395,6 @@ function removeFileAndParents (baseDir, destFile, stopper) { } } -function generateAttributeError(attribute, element, id) { +function generateAttributeError (attribute, element, id) { return 'Required attribute "' + attribute + '" not specified in <' + element + '> element from plugin: ' + id; } diff --git a/StoneIsland/platforms/ios/cordova/lib/prepare.js b/StoneIsland/platforms/ios/cordova/lib/prepare.js index c02c187f..17bbfeb7 100755 --- a/StoneIsland/platforms/ios/cordova/lib/prepare.js +++ b/StoneIsland/platforms/ios/cordova/lib/prepare.js @@ -37,15 +37,13 @@ var FileUpdater = require('cordova-common').FileUpdater; var projectFile = require('./projectFile'); // launch storyboard and related constants -var LAUNCHIMAGE_BUILD_SETTING = 'ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME'; +var LAUNCHIMAGE_BUILD_SETTING = 'ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME'; var LAUNCHIMAGE_BUILD_SETTING_VALUE = 'LaunchImage'; var UI_LAUNCH_STORYBOARD_NAME = 'UILaunchStoryboardName'; var CDV_LAUNCH_STORYBOARD_NAME = 'CDVLaunchScreen'; var IMAGESET_COMPACT_SIZE_CLASS = 'compact'; var CDV_ANY_SIZE_CLASS = 'any'; -/*jshint sub:true*/ - module.exports.prepare = function (cordovaProject, options) { var self = this; @@ -56,19 +54,19 @@ module.exports.prepare = function (cordovaProject, options) { // Update own www dir with project's www assets and plugins' assets and js-files return Q.when(updateWww(cordovaProject, this.locations)) - .then(function () { - // update project according to config.xml changes. - return updateProject(self._config, self.locations); - }) - .then(function () { - updateIcons(cordovaProject, self.locations); - updateSplashScreens(cordovaProject, self.locations); - updateLaunchStoryboardImages(cordovaProject, self.locations); - updateFileResources(cordovaProject, self.locations); - }) - .then(function () { - events.emit('verbose', 'Prepared iOS project successfully'); - }); + .then(function () { + // update project according to config.xml changes. + return updateProject(self._config, self.locations); + }) + .then(function () { + updateIcons(cordovaProject, self.locations); + updateSplashScreens(cordovaProject, self.locations); + updateLaunchStoryboardImages(cordovaProject, self.locations); + updateFileResources(cordovaProject, self.locations); + }) + .then(function () { + events.emit('verbose', 'Prepared iOS project successfully'); + }); }; module.exports.clean = function (options) { @@ -109,7 +107,7 @@ module.exports.clean = function (options) { * represents current project's configuration. When returned, the * configuration is already dumped to appropriate config.xml file. */ -function updateConfigFile(sourceConfig, configMunger, locations) { +function updateConfigFile (sourceConfig, configMunger, locations) { events.emit('verbose', 'Generating platform-specific config.xml from defaults for iOS at ' + locations.configXml); // First cleanup current config and merge project's one into own @@ -124,7 +122,7 @@ function updateConfigFile(sourceConfig, configMunger, locations) { // Merge changes from app's config.xml into platform's one var config = new ConfigParser(locations.configXml); xmlHelpers.mergeXml(sourceConfig.doc.getroot(), - config.doc.getroot(), 'ios', /*clobber=*/true); + config.doc.getroot(), 'ios', /* clobber= */true); config.write(); return config; @@ -133,7 +131,7 @@ function updateConfigFile(sourceConfig, configMunger, locations) { /** * Logs all file operations via the verbose event stream, indented. */ -function logFileOp(message) { +function logFileOp (message) { events.emit('verbose', ' ' + message); } @@ -146,7 +144,7 @@ function logFileOp(message) { * @param {boolean} destinations An object that contains destinations * paths for www files. */ -function updateWww(cordovaProject, destinations) { +function updateWww (cordovaProject, destinations) { var sourceDirs = [ path.relative(cordovaProject.root, cordovaProject.locations.www), path.relative(cordovaProject.root, destinations.platformWww) @@ -169,7 +167,7 @@ function updateWww(cordovaProject, destinations) { /** * Cleans all files from the platform 'www' directory. */ -function cleanWww(projectRoot, locations) { +function cleanWww (projectRoot, locations) { var targetDir = path.relative(projectRoot, locations.www); events.emit('verbose', 'Cleaning ' + targetDir); @@ -185,7 +183,7 @@ function cleanWww(projectRoot, locations) { * be used to update project * @param {Object} locations A map of locations for this platform (In/Out) */ -function updateProject(platformConfig, locations) { +function updateProject (platformConfig, locations) { // CB-6992 it is necessary to normalize characters // because node and shell scripts handles unicode symbols differently @@ -193,6 +191,7 @@ function updateProject(platformConfig, locations) { var name = unorm.nfd(platformConfig.name()); var pkg = platformConfig.getAttribute('ios-CFBundleIdentifier') || platformConfig.packageName(); var version = platformConfig.version(); + var displayName = platformConfig.shortName && platformConfig.shortName(); var originalName = path.basename(locations.xcodeCordovaProj); @@ -210,6 +209,10 @@ function updateProject(platformConfig, locations) { infoPlist['CFBundleDevelopmentRegion'] = platformConfig.getAttribute('defaultlocale'); } + if (displayName) { + infoPlist['CFBundleDisplayName'] = displayName; + } + // replace Info.plist ATS entries according to <access> and <allow-navigation> config.xml entries var ats = writeATSEntries(platformConfig); if (Object.keys(ats).length > 0) { @@ -222,16 +225,16 @@ function updateProject(platformConfig, locations) { updateProjectPlistForLaunchStoryboard(platformConfig, infoPlist); var info_contents = plist.build(infoPlist); - info_contents = info_contents.replace(/<string>[\s\r\n]*<\/string>/g,'<string></string>'); + info_contents = info_contents.replace(/<string>[\s\r\n]*<\/string>/g, '<string></string>'); fs.writeFileSync(plistFile, info_contents, 'utf-8'); events.emit('verbose', 'Wrote out iOS Bundle Identifier "' + pkg + '" and iOS Bundle Version "' + version + '" to ' + plistFile); - return handleBuildSettings(platformConfig, locations, infoPlist).then(function() { - if (name == originalName) { + return handleBuildSettings(platformConfig, locations, infoPlist).then(function () { + if (name === originalName) { events.emit('verbose', 'iOS Product Name has not changed (still "' + originalName + '")'); return Q(); } else { // CB-11712 <name> was changed, we don't support it' - var errorString = + var errorString = 'The product name change (<name> tag) in config.xml is not supported dynamically.\n' + 'To change your product name, you have to remove, then add your ios platform again.\n' + 'Make sure you save your plugins beforehand using `cordova plugin save`.\n' + @@ -245,43 +248,43 @@ function updateProject(platformConfig, locations) { }); } -function handleOrientationSettings(platformConfig, infoPlist) { +function handleOrientationSettings (platformConfig, infoPlist) { switch (getOrientationValue(platformConfig)) { - case 'portrait': - infoPlist['UIInterfaceOrientation'] = [ 'UIInterfaceOrientationPortrait' ]; - infoPlist['UISupportedInterfaceOrientations'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationPortraitUpsideDown' ]; - infoPlist['UISupportedInterfaceOrientations~ipad'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationPortraitUpsideDown' ]; - break; - case 'landscape': - infoPlist['UIInterfaceOrientation'] = [ 'UIInterfaceOrientationLandscapeLeft' ]; - infoPlist['UISupportedInterfaceOrientations'] = [ 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; - infoPlist['UISupportedInterfaceOrientations~ipad'] = [ 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; - break; - case 'all': - infoPlist['UIInterfaceOrientation'] = [ 'UIInterfaceOrientationPortrait' ]; - infoPlist['UISupportedInterfaceOrientations'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationPortraitUpsideDown', 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; - infoPlist['UISupportedInterfaceOrientations~ipad'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationPortraitUpsideDown', 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; - break; - case 'default': - infoPlist['UISupportedInterfaceOrientations'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; - infoPlist['UISupportedInterfaceOrientations~ipad'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationPortraitUpsideDown', 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; - delete infoPlist['UIInterfaceOrientation']; + case 'portrait': + infoPlist['UIInterfaceOrientation'] = [ 'UIInterfaceOrientationPortrait' ]; + infoPlist['UISupportedInterfaceOrientations'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationPortraitUpsideDown' ]; + infoPlist['UISupportedInterfaceOrientations~ipad'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationPortraitUpsideDown' ]; + break; + case 'landscape': + infoPlist['UIInterfaceOrientation'] = [ 'UIInterfaceOrientationLandscapeLeft' ]; + infoPlist['UISupportedInterfaceOrientations'] = [ 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; + infoPlist['UISupportedInterfaceOrientations~ipad'] = [ 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; + break; + case 'all': + infoPlist['UIInterfaceOrientation'] = [ 'UIInterfaceOrientationPortrait' ]; + infoPlist['UISupportedInterfaceOrientations'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationPortraitUpsideDown', 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; + infoPlist['UISupportedInterfaceOrientations~ipad'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationPortraitUpsideDown', 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; + break; + case 'default': + infoPlist['UISupportedInterfaceOrientations'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; + infoPlist['UISupportedInterfaceOrientations~ipad'] = [ 'UIInterfaceOrientationPortrait', 'UIInterfaceOrientationPortraitUpsideDown', 'UIInterfaceOrientationLandscapeLeft', 'UIInterfaceOrientationLandscapeRight' ]; + delete infoPlist['UIInterfaceOrientation']; } } -function handleBuildSettings(platformConfig, locations, infoPlist) { +function handleBuildSettings (platformConfig, locations, infoPlist) { var targetDevice = parseTargetDevicePreference(platformConfig.getPreference('target-device', 'ios')); var deploymentTarget = platformConfig.getPreference('deployment-target', 'ios'); var needUpdatedBuildSettingsForLaunchStoryboard = checkIfBuildSettingsNeedUpdatedForLaunchStoryboard(platformConfig, infoPlist); - // no build settings provided and we don't need to update build settings for launch storyboards, + // no build settings provided and we don't need to update build settings for launch storyboards, // then we don't need to parse and update .pbxproj file if (!targetDevice && !deploymentTarget && !needUpdatedBuildSettingsForLaunchStoryboard) { return Q(); } - var proj = new xcode.project(locations.pbxproj); + var proj = new xcode.project(locations.pbxproj); /* eslint new-cap : 0 */ try { proj.parseSync(); @@ -306,26 +309,37 @@ function handleBuildSettings(platformConfig, locations, infoPlist) { return Q(); } -function mapIconResources(icons, iconsDir) { +function mapIconResources (icons, iconsDir) { // See https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconMatrix.html // for launch images sizes reference. var platformIcons = [ + {dest: 'icon-20.png', width: 20, height: 20}, + {dest: 'icon-20@2x.png', width: 40, height: 40}, + {dest: 'icon-20@3x.png', width: 60, height: 60}, + {dest: 'icon-40.png', width: 40, height: 40}, + {dest: 'icon-50.png', width: 50, height: 50}, + {dest: 'icon-50@2x.png', width: 100, height: 100}, {dest: 'icon-60@2x.png', width: 120, height: 120}, {dest: 'icon-60@3x.png', width: 180, height: 180}, + {dest: 'icon-72.png', width: 72, height: 72}, + {dest: 'icon-72@2x.png', width: 144, height: 144}, {dest: 'icon-76.png', width: 76, height: 76}, {dest: 'icon-76@2x.png', width: 152, height: 152}, + {dest: 'icon-83.5@2x.png', width: 167, height: 167}, + {dest: 'icon-1024.png', width: 1024, height: 1024}, {dest: 'icon-small.png', width: 29, height: 29}, {dest: 'icon-small@2x.png', width: 58, height: 58}, - {dest: 'icon-40.png', width: 40, height: 40}, - {dest: 'icon-40@2x.png', width: 80, height: 80}, {dest: 'icon-small@3x.png', width: 87, height: 87}, {dest: 'icon.png', width: 57, height: 57}, {dest: 'icon@2x.png', width: 114, height: 114}, - {dest: 'icon-72.png', width: 72, height: 72}, - {dest: 'icon-72@2x.png', width: 144, height: 144}, - {dest: 'icon-50.png', width: 50, height: 50}, - {dest: 'icon-50@2x.png', width: 100, height: 100}, - {dest: 'icon-83.5@2x.png', width: 167, height: 167} + {dest: 'AppIcon24x24@2x.png', width: 48, height: 48}, + {dest: 'AppIcon27.5x27.5@2x.png', width: 55, height: 55}, + {dest: 'AppIcon29x29@2x.png', width: 58, height: 58}, + {dest: 'AppIcon29x29@3x.png', width: 87, height: 87}, + {dest: 'AppIcon40x40@2x.png', width: 80, height: 80}, + {dest: 'AppIcon44x44@2x.png', width: 88, height: 88}, + {dest: 'AppIcon86x86@2x.png', width: 172, height: 172}, + {dest: 'AppIcon98x98@2x.png', width: 196, height: 196} ]; var pathMap = {}; @@ -339,7 +353,7 @@ function mapIconResources(icons, iconsDir) { return pathMap; } -function getIconsDir(projectRoot, platformProjDir) { +function getIconsDir (projectRoot, platformProjDir) { var iconsDir; var xcassetsExists = folderExists(path.join(projectRoot, platformProjDir, 'Images.xcassets/')); @@ -352,7 +366,7 @@ function getIconsDir(projectRoot, platformProjDir) { return iconsDir; } -function updateIcons(cordovaProject, locations) { +function updateIcons (cordovaProject, locations) { var icons = cordovaProject.projectConfig.getIcons('ios'); if (icons.length === 0) { @@ -368,7 +382,7 @@ function updateIcons(cordovaProject, locations) { resourceMap, { rootDir: cordovaProject.root }, logFileOp); } -function cleanIcons(projectRoot, projectConfig, locations) { +function cleanIcons (projectRoot, projectConfig, locations) { var icons = projectConfig.getIcons('ios'); if (icons.length > 0) { var platformProjDir = path.relative(projectRoot, locations.xcodeCordovaProj); @@ -385,7 +399,7 @@ function cleanIcons(projectRoot, projectConfig, locations) { } } -function mapSplashScreenResources(splashScreens, splashScreensDir) { +function mapSplashScreenResources (splashScreens, splashScreensDir) { var platformSplashScreens = [ {dest: 'Default~iphone.png', width: 320, height: 480}, {dest: 'Default@2x~iphone.png', width: 640, height: 960}, @@ -410,7 +424,7 @@ function mapSplashScreenResources(splashScreens, splashScreensDir) { return pathMap; } -function getSplashScreensDir(projectRoot, platformProjDir) { +function getSplashScreensDir (projectRoot, platformProjDir) { var splashScreensDir; var xcassetsExists = folderExists(path.join(projectRoot, platformProjDir, 'Images.xcassets/')); @@ -423,7 +437,7 @@ function getSplashScreensDir(projectRoot, platformProjDir) { return splashScreensDir; } -function updateSplashScreens(cordovaProject, locations) { +function updateSplashScreens (cordovaProject, locations) { var splashScreens = cordovaProject.projectConfig.getSplashScreens('ios'); if (splashScreens.length === 0) { @@ -439,7 +453,7 @@ function updateSplashScreens(cordovaProject, locations) { resourceMap, { rootDir: cordovaProject.root }, logFileOp); } -function cleanSplashScreens(projectRoot, projectConfig, locations) { +function cleanSplashScreens (projectRoot, projectConfig, locations) { var splashScreens = projectConfig.getSplashScreens('ios'); if (splashScreens.length > 0) { var platformProjDir = path.relative(projectRoot, locations.xcodeCordovaProj); @@ -456,7 +470,7 @@ function cleanSplashScreens(projectRoot, projectConfig, locations) { } } -function updateFileResources(cordovaProject, locations) { +function updateFileResources (cordovaProject, locations) { const platformDir = path.relative(cordovaProject.root, locations.root); const files = cordovaProject.projectConfig.getFileResources('ios'); @@ -469,9 +483,9 @@ function updateFileResources(cordovaProject, locations) { } let resourceMap = {}; - files.forEach(function(res) { - let src = res.src, - target = res.target; + files.forEach(function (res) { + let src = res.src; + let target = res.target; if (!target) { target = src; @@ -480,8 +494,7 @@ function updateFileResources(cordovaProject, locations) { let targetPath = path.join(project.resources_dir, target); targetPath = path.relative(cordovaProject.root, targetPath); - const resfile = path.join('Resources', path.relative(project.resources_dir, targetPath)); - project.xcode.addResourceFile(resfile); + project.xcode.addResourceFile(target); resourceMap[targetPath] = src; }); @@ -493,18 +506,18 @@ function updateFileResources(cordovaProject, locations) { project.write(); } -function cleanFileResources(projectRoot, projectConfig, locations) { +function cleanFileResources (projectRoot, projectConfig, locations) { const platformDir = path.relative(projectRoot, locations.root); - const files = projectConfig.getFileResources('ios'); + const files = projectConfig.getFileResources('ios', true); if (files.length > 0) { events.emit('verbose', 'Cleaning resource files at ' + platformDir); const project = projectFile.parse(locations); var resourceMap = {}; - files.forEach(function(res) { - let src = res.src, - target = res.target; + files.forEach(function (res) { + let src = res.src; + let target = res.target; if (!target) { target = src; @@ -519,7 +532,7 @@ function cleanFileResources(projectRoot, projectConfig, locations) { }); FileUpdater.updatePaths( - resourceMap, { rootDir: projectRoot, all: true}, logFileOp); + resourceMap, {rootDir: projectRoot, all: true}, logFileOp); project.write(); } @@ -531,9 +544,9 @@ function cleanFileResources(projectRoot, projectConfig, locations) { * combinations are returned, but not all will have a `filename` property. If the latter isn't present, * the device won't attempt to load an image matching the same traits. If the filename is present, * the device will try to load the image if it corresponds to the traits. - * + * * The resulting return looks like this: - * + * * [ * { * idiom: 'universal|ipad|iphone', @@ -545,12 +558,12 @@ function cleanFileResources(projectRoot, projectConfig, locations) { * target: undefined|'path/to/asset/library/Default@scale~idiom~widthheight.png' * }, ... * ] - * + * * @param {Array<Object>} splashScreens splash screens as defined in config.xml for this platform * @param {string} launchStoryboardImagesDir project-root/Images.xcassets/LaunchStoryboard.imageset/ * @return {Array<Object>} */ -function mapLaunchStoryboardContents(splashScreens, launchStoryboardImagesDir) { +function mapLaunchStoryboardContents (splashScreens, launchStoryboardImagesDir) { var platformLaunchStoryboardImages = []; var idioms = ['universal', 'ipad', 'iphone']; var scalesForIdiom = { @@ -562,8 +575,8 @@ function mapLaunchStoryboardContents(splashScreens, launchStoryboardImagesDir) { idioms.forEach(function (idiom) { scalesForIdiom[idiom].forEach(function (scale) { - sizes.forEach(function(width) { - sizes.forEach(function(height) { + sizes.forEach(function (width) { + sizes.forEach(function (height) { var item = { idiom: idiom, scale: scale, @@ -572,7 +585,7 @@ function mapLaunchStoryboardContents(splashScreens, launchStoryboardImagesDir) { }; /* examples of the search pattern: - * scale ~ idiom ~ width height + * scale ~ idiom ~ width height * @2x ~ universal ~ any any * @3x ~ iphone ~ com any * @2x ~ ipad ~ com any @@ -605,20 +618,20 @@ function mapLaunchStoryboardContents(splashScreens, launchStoryboardImagesDir) { /** * Returns a dictionary representing the source and destination paths for the launch storyboard images - * that need to be copied. - * + * that need to be copied. + * * The resulting return looks like this: - * + * * { * 'target-path': 'source-path', * ... * } - * + * * @param {Array<Object>} splashScreens splash screens as defined in config.xml for this platform * @param {string} launchStoryboardImagesDir project-root/Images.xcassets/LaunchStoryboard.imageset/ * @return {Object} */ -function mapLaunchStoryboardResources(splashScreens, launchStoryboardImagesDir) { +function mapLaunchStoryboardResources (splashScreens, launchStoryboardImagesDir) { var platformLaunchStoryboardImages = mapLaunchStoryboardContents(splashScreens, launchStoryboardImagesDir); var pathMap = {}; platformLaunchStoryboardImages.forEach(function (item) { @@ -630,10 +643,10 @@ function mapLaunchStoryboardResources(splashScreens, launchStoryboardImagesDir) } /** - * Builds the object that represents the contents.json file for the LaunchStoryboard image set. - * + * Builds the object that represents the contents.json file for the LaunchStoryboard image set. + * * The resulting return looks like this: - * + * * { * images: [ * { @@ -648,15 +661,15 @@ function mapLaunchStoryboardResources(splashScreens, launchStoryboardImagesDir) * version: 1 * } * } - * + * * A bit of minor logic is used to map from the array of images returned from mapLaunchStoryboardContents * to the format requried by Xcode. - * + * * @param {Array<Object>} splashScreens splash screens as defined in config.xml for this platform * @param {string} launchStoryboardImagesDir project-root/Images.xcassets/LaunchStoryboard.imageset/ * @return {Object} */ -function getLaunchStoryboardContentsJSON(splashScreens, launchStoryboardImagesDir) { +function getLaunchStoryboardContentsJSON (splashScreens, launchStoryboardImagesDir) { var platformLaunchStoryboardImages = mapLaunchStoryboardContents(splashScreens, launchStoryboardImagesDir); var contentsJSON = { @@ -666,14 +679,14 @@ function getLaunchStoryboardContentsJSON(splashScreens, launchStoryboardImagesDi version: 1 } }; - contentsJSON.images = platformLaunchStoryboardImages.map(function(item) { + contentsJSON.images = platformLaunchStoryboardImages.map(function (item) { var newItem = { idiom: item.idiom, scale: item.scale }; // Xcode doesn't want any size class property if the class is "any" - // If our size class is "com", Xcode wants "compact". + // If our size class is "com", Xcode wants "compact". if (item.width !== CDV_ANY_SIZE_CLASS) { newItem['width-class'] = IMAGESET_COMPACT_SIZE_CLASS; } @@ -681,7 +694,7 @@ function getLaunchStoryboardContentsJSON(splashScreens, launchStoryboardImagesDi newItem['height-class'] = IMAGESET_COMPACT_SIZE_CLASS; } - // Xcode doesn't want a filename property if there's no image for these traits + // Xcode doesn't want a filename property if there's no image for these traits if (item.filename) { newItem.filename = item.filename; } @@ -692,14 +705,14 @@ function getLaunchStoryboardContentsJSON(splashScreens, launchStoryboardImagesDi /** * Determines if the project's build settings may need to be updated for launch storyboard support - * + * */ -function checkIfBuildSettingsNeedUpdatedForLaunchStoryboard(platformConfig, infoPlist) { +function checkIfBuildSettingsNeedUpdatedForLaunchStoryboard (platformConfig, infoPlist) { var hasLaunchStoryboardImages = platformHasLaunchStoryboardImages(platformConfig); var hasLegacyLaunchImages = platformHasLegacyLaunchImages(platformConfig); var currentLaunchStoryboard = infoPlist[UI_LAUNCH_STORYBOARD_NAME]; - if (hasLaunchStoryboardImages && currentLaunchStoryboard == CDV_LAUNCH_STORYBOARD_NAME && !hasLegacyLaunchImages) { + if (hasLaunchStoryboardImages && currentLaunchStoryboard === CDV_LAUNCH_STORYBOARD_NAME && !hasLegacyLaunchImages) { // don't need legacy launch images if we are using our launch storyboard // so we do need to update the project file events.emit('verbose', 'Need to update build settings because project is using our launch storyboard.'); @@ -714,12 +727,12 @@ function checkIfBuildSettingsNeedUpdatedForLaunchStoryboard(platformConfig, info return false; } -function updateBuildSettingsForLaunchStoryboard(proj, platformConfig, infoPlist) { +function updateBuildSettingsForLaunchStoryboard (proj, platformConfig, infoPlist) { var hasLaunchStoryboardImages = platformHasLaunchStoryboardImages(platformConfig); var hasLegacyLaunchImages = platformHasLegacyLaunchImages(platformConfig); var currentLaunchStoryboard = infoPlist[UI_LAUNCH_STORYBOARD_NAME]; - if (hasLaunchStoryboardImages && currentLaunchStoryboard == CDV_LAUNCH_STORYBOARD_NAME && !hasLegacyLaunchImages) { + if (hasLaunchStoryboardImages && currentLaunchStoryboard === CDV_LAUNCH_STORYBOARD_NAME && !hasLegacyLaunchImages) { // don't need legacy launch images if we are using our launch storyboard events.emit('verbose', 'Removed ' + LAUNCHIMAGE_BUILD_SETTING + ' because project is using our launch storyboard.'); proj.removeBuildProperty(LAUNCHIMAGE_BUILD_SETTING); @@ -732,7 +745,7 @@ function updateBuildSettingsForLaunchStoryboard(proj, platformConfig, infoPlist) } } -function splashScreensHaveLaunchStoryboardImages(contentsJSON) { +function splashScreensHaveLaunchStoryboardImages (contentsJSON) { /* do we have any launch images do we have for our launch storyboard? * Again, for old Node versions, the below code is equivalent to this: * return !!contentsJSON.images.find(function (item) { @@ -744,13 +757,13 @@ function splashScreensHaveLaunchStoryboardImages(contentsJSON) { }, undefined); } -function platformHasLaunchStoryboardImages(platformConfig) { +function platformHasLaunchStoryboardImages (platformConfig) { var splashScreens = platformConfig.getSplashScreens('ios'); - var contentsJSON = getLaunchStoryboardContentsJSON(splashScreens, ''); // note: we don't need a file path here; we're just counting + var contentsJSON = getLaunchStoryboardContentsJSON(splashScreens, ''); // note: we don't need a file path here; we're just counting return splashScreensHaveLaunchStoryboardImages(contentsJSON); } -function platformHasLegacyLaunchImages(platformConfig) { +function platformHasLegacyLaunchImages (platformConfig) { var splashScreens = platformConfig.getSplashScreens('ios'); return !!splashScreens.reduce(function (p, c) { return (c.width !== undefined || c.height !== undefined) ? c : p; @@ -760,13 +773,13 @@ function platformHasLegacyLaunchImages(platformConfig) { /** * Updates the project's plist based upon our launch storyboard images. If there are no images, then we should * fall back to the regular launch images that might be supplied (that is, our app will be scaled on an iPad Pro), - * and if there are some images, we need to alter the UILaunchStoryboardName property to point to + * and if there are some images, we need to alter the UILaunchStoryboardName property to point to * CDVLaunchScreen. - * + * * There's some logic here to avoid overwriting changes the user might have made to their plist if they are using * their own launch storyboard. */ -function updateProjectPlistForLaunchStoryboard(platformConfig, infoPlist) { +function updateProjectPlistForLaunchStoryboard (platformConfig, infoPlist) { var currentLaunchStoryboard = infoPlist[UI_LAUNCH_STORYBOARD_NAME]; events.emit('verbose', 'Current launch storyboard ' + currentLaunchStoryboard); @@ -794,11 +807,11 @@ function updateProjectPlistForLaunchStoryboard(platformConfig, infoPlist) { /** * Returns the directory for the Launch Storyboard image set, if image sets are being used. If they aren't * being used, returns null. - * + * * @param {string} projectRoot The project's root directory * @param {string} platformProjDir The platform's project directory */ -function getLaunchStoryboardImagesDir(projectRoot, platformProjDir) { +function getLaunchStoryboardImagesDir (projectRoot, platformProjDir) { var launchStoryboardImagesDir; var xcassetsExists = folderExists(path.join(projectRoot, platformProjDir, 'Images.xcassets/')); @@ -814,11 +827,11 @@ function getLaunchStoryboardImagesDir(projectRoot, platformProjDir) { /** * Update the images for the Launch Storyboard and updates the image set's contents.json file appropriately. - * + * * @param {Object} cordovaProject The cordova project * @param {Object} locations A dictionary containing useful location paths */ -function updateLaunchStoryboardImages(cordovaProject, locations) { +function updateLaunchStoryboardImages (cordovaProject, locations) { var splashScreens = cordovaProject.projectConfig.getSplashScreens('ios'); var platformProjDir = path.relative(cordovaProject.root, locations.xcodeCordovaProj); var launchStoryboardImagesDir = getLaunchStoryboardImagesDir(cordovaProject.root, platformProjDir); @@ -830,10 +843,10 @@ function updateLaunchStoryboardImages(cordovaProject, locations) { events.emit('verbose', 'Updating launch storyboard images at ' + launchStoryboardImagesDir); FileUpdater.updatePaths( resourceMap, { rootDir: cordovaProject.root }, logFileOp); - + events.emit('verbose', 'Updating Storyboard image set contents.json'); fs.writeFileSync(path.join(cordovaProject.root, launchStoryboardImagesDir, 'Contents.json'), - JSON.stringify(contentsJSON, null, 2)); + JSON.stringify(contentsJSON, null, 2)); } } @@ -842,10 +855,10 @@ function updateLaunchStoryboardImages(cordovaProject, locations) { * file appropriately. * * @param {string} projectRoot Path to the project root - * @param {Object} projectConfig The project's config.xml + * @param {Object} projectConfig The project's config.xml * @param {Object} locations A dictionary containing useful location paths */ -function cleanLaunchStoryboardImages(projectRoot, projectConfig, locations) { +function cleanLaunchStoryboardImages (projectRoot, projectConfig, locations) { var splashScreens = projectConfig.getSplashScreens('ios'); var platformProjDir = path.relative(projectRoot, locations.xcodeCordovaProj); var launchStoryboardImagesDir = getLaunchStoryboardImagesDir(projectRoot, platformProjDir); @@ -863,13 +876,13 @@ function cleanLaunchStoryboardImages(projectRoot, projectConfig, locations) { resourceMap, { rootDir: projectRoot, all: true }, logFileOp); // delete filename from contents.json - contentsJSON.images.forEach(function(image) { + contentsJSON.images.forEach(function (image) { image.filename = undefined; }); events.emit('verbose', 'Updating Storyboard image set contents.json'); fs.writeFileSync(path.join(projectRoot, launchStoryboardImagesDir, 'Contents.json'), - JSON.stringify(contentsJSON, null, 2)); + JSON.stringify(contentsJSON, null, 2)); } } @@ -882,7 +895,7 @@ function cleanLaunchStoryboardImages(projectRoot, projectConfig, locations) { * @return {String} Global/platform-specific orientation in lower-case * (or empty string if both are undefined). */ -function getOrientationValue(platformConfig) { +function getOrientationValue (platformConfig) { var ORIENTATION_DEFAULT = 'default'; @@ -894,7 +907,7 @@ function getOrientationValue(platformConfig) { orientation = orientation.toLowerCase(); // Check if the given global orientation is supported - if (['default', 'portrait','landscape', 'all'].indexOf(orientation) >= 0) { + if (['default', 'portrait', 'landscape', 'all'].indexOf(orientation) >= 0) { return orientation; } @@ -920,48 +933,49 @@ function getOrientationValue(platformConfig) { // (Apple already enforces this in ATS) NSAllowsArbitraryLoadsInWebContent, // boolean (default: false) NSAllowsLocalNetworking, // boolean (default: false) - NSAllowsArbitraryLoadsInMedia, // boolean (default:false) + NSAllowsArbitraryLoadsForMedia, // boolean (default:false) + } */ -function processAccessAndAllowNavigationEntries(config) { +function processAccessAndAllowNavigationEntries (config) { var accesses = config.getAccesses(); var allow_navigations = config.getAllowNavigations(); return allow_navigations - // we concat allow_navigations and accesses, after processing accesses - .concat(accesses.map(function(obj) { - // map accesses to a common key interface using 'href', not origin - obj.href = obj.origin; - delete obj.origin; - return obj; - })) - // we reduce the array to an object with all the entries processed (key is Hostname) - .reduce(function(previousReturn, currentElement) { - var options = { - minimum_tls_version : currentElement.minimum_tls_version, - requires_forward_secrecy : currentElement.requires_forward_secrecy, - requires_certificate_transparency : currentElement.requires_certificate_transparency, - allows_arbitrary_loads_in_media : currentElement.allows_arbitrary_loads_in_media, - allows_arbitrary_loads_in_web_content : currentElement.allows_arbitrary_loads_in_web_content, - allows_local_networking : currentElement.allows_local_networking - }; - var obj = parseWhitelistUrlForATS(currentElement.href, options); + // we concat allow_navigations and accesses, after processing accesses + .concat(accesses.map(function (obj) { + // map accesses to a common key interface using 'href', not origin + obj.href = obj.origin; + delete obj.origin; + return obj; + })) + // we reduce the array to an object with all the entries processed (key is Hostname) + .reduce(function (previousReturn, currentElement) { + var options = { + minimum_tls_version: currentElement.minimum_tls_version, + requires_forward_secrecy: currentElement.requires_forward_secrecy, + requires_certificate_transparency: currentElement.requires_certificate_transparency, + allows_arbitrary_loads_for_media: currentElement.allows_arbitrary_loads_in_media || currentElement.allows_arbitrary_loads_for_media, + allows_arbitrary_loads_in_web_content: currentElement.allows_arbitrary_loads_in_web_content, + allows_local_networking: currentElement.allows_local_networking + }; + var obj = parseWhitelistUrlForATS(currentElement.href, options); - if (obj) { - // we 'union' duplicate entries - var item = previousReturn[obj.Hostname]; - if (!item) { - item = {}; - } - for(var o in obj) { - if (obj.hasOwnProperty(o)) { - item[o] = obj[o]; + if (obj) { + // we 'union' duplicate entries + var item = previousReturn[obj.Hostname]; + if (!item) { + item = {}; + } + for (var o in obj) { + if (obj.hasOwnProperty(o)) { + item[o] = obj[o]; + } } + previousReturn[obj.Hostname] = item; } - previousReturn[obj.Hostname] = item; - } - return previousReturn; - }, {}); + return previousReturn; + }, {}); } /* @@ -979,12 +993,12 @@ function processAccessAndAllowNavigationEntries(config) { // (Apple already enforces this in ATS) NSAllowsArbitraryLoadsInWebContent, // boolean (default: false) NSAllowsLocalNetworking, // boolean (default: false) - NSAllowsArbitraryLoadsInMedia, // boolean (default:false) + NSAllowsArbitraryLoadsForMedia, // boolean (default:false) } null is returned if the URL cannot be parsed, or is to be skipped for ATS. */ -function parseWhitelistUrlForATS(url, options) { +function parseWhitelistUrlForATS (url, options) { var href = URL.parse(url); var retObj = {}; retObj.Hostname = href.hostname; @@ -1000,9 +1014,9 @@ function parseWhitelistUrlForATS(url, options) { retObj.NSAllowsArbitraryLoadsInWebContent = true; } - val = (options.allows_arbitrary_loads_in_media === 'true'); - if (options.allows_arbitrary_loads_in_media && val) { // default is false - retObj.NSAllowsArbitraryLoadsInMedia = true; + val = (options.allows_arbitrary_loads_for_media === 'true'); + if (options.allows_arbitrary_loads_for_media && val) { // default is false + retObj.NSAllowsArbitraryLoadsForMedia = true; } val = (options.allows_local_networking === 'true'); @@ -1049,25 +1063,23 @@ function parseWhitelistUrlForATS(url, options) { // if the scheme is HTTP, we set NSExceptionAllowsInsecureHTTPLoads to YES. Default is NO if (href.protocol === 'http:') { retObj.NSExceptionAllowsInsecureHTTPLoads = true; - } - else if (!href.protocol && href.pathname.indexOf('*:/') === 0) { // wilcard in protocol + } else if (!href.protocol && href.pathname.indexOf('*:/') === 0) { // wilcard in protocol retObj.NSExceptionAllowsInsecureHTTPLoads = true; } return retObj; } - /* App Transport Security (ATS) writer from <access> and <allow-navigation> tags in config.xml */ -function writeATSEntries(config) { - var pObj = processAccessAndAllowNavigationEntries(config); +function writeATSEntries (config) { + var pObj = processAccessAndAllowNavigationEntries(config); var ats = {}; - for(var hostname in pObj) { + for (var hostname in pObj) { if (pObj.hasOwnProperty(hostname)) { var entry = pObj[hostname]; @@ -1082,19 +1094,19 @@ function writeATSEntries(config) { if (entry.NSAllowsArbitraryLoadsInWebContent) { ats['NSAllowsArbitraryLoadsInWebContent'] = true; } - if (entry.NSAllowsArbitraryLoadsInMedia) { - ats['NSAllowsArbitraryLoadsInMedia'] = true; + if (entry.NSAllowsArbitraryLoadsForMedia) { + ats['NSAllowsArbitraryLoadsForMedia'] = true; } if (entry.NSAllowsLocalNetworking) { ats['NSAllowsLocalNetworking'] = true; } - + continue; } var exceptionDomain = {}; - for(var key in entry) { + for (var key in entry) { if (entry.hasOwnProperty(key) && key !== 'Hostname') { exceptionDomain[key] = entry[key]; } @@ -1111,7 +1123,7 @@ function writeATSEntries(config) { return ats; } -function folderExists(folderPath) { +function folderExists (folderPath) { try { var stat = fs.statSync(folderPath); return stat && stat.isDirectory(); @@ -1122,14 +1134,14 @@ function folderExists(folderPath) { // Construct a default value for CFBundleVersion as the version with any // -rclabel stripped=. -function default_CFBundleVersion(version) { +function default_CFBundleVersion (version) { return version.split('-')[0]; } // Converts cordova specific representation of target device to XCode value -function parseTargetDevicePreference(value) { +function parseTargetDevicePreference (value) { if (!value) return null; - var map = { 'universal': '"1,2"', 'handset': '"1"', 'tablet': '"2"'}; + var map = {'universal': '"1,2"', 'handset': '"1"', 'tablet': '"2"'}; if (map[value.toLowerCase()]) { return map[value.toLowerCase()]; } diff --git a/StoneIsland/platforms/ios/cordova/lib/projectFile.js b/StoneIsland/platforms/ios/cordova/lib/projectFile.js index aab38639..8a3f7e51 100755 --- a/StoneIsland/platforms/ios/cordova/lib/projectFile.js +++ b/StoneIsland/platforms/ios/cordova/lib/projectFile.js @@ -17,8 +17,6 @@ under the License. */ -/*jshint node: true*/ - var xcode = require('xcode'); var plist = require('plist'); var _ = require('underscore'); @@ -31,7 +29,7 @@ var CordovaError = require('cordova-common').CordovaError; var cachedProjectFiles = {}; -function parseProjectFile(locations) { +function parseProjectFile (locations) { var project_dir = locations.root; var pbxPath = locations.pbxproj; @@ -62,24 +60,24 @@ function parseProjectFile(locations) { var resourcesDir = path.resolve(xcode_dir, 'Resources'); cachedProjectFiles[project_dir] = { - plugins_dir:pluginsDir, - resources_dir:resourcesDir, - xcode:xcodeproj, - xcode_path:xcode_dir, + plugins_dir: pluginsDir, + resources_dir: resourcesDir, + xcode: xcodeproj, + xcode_path: xcode_dir, pbx: pbxPath, projectDir: project_dir, platformWww: path.join(project_dir, 'platform_www'), www: path.join(project_dir, 'www'), write: function () { fs.writeFileSync(pbxPath, xcodeproj.writeSync()); - if (Object.keys(this.frameworks).length === 0){ + if (Object.keys(this.frameworks).length === 0) { // If there is no framework references remain in the project, just remove this file shell.rm('-rf', frameworks_file); return; } fs.writeFileSync(frameworks_file, JSON.stringify(this.frameworks, null, 4)); }, - getPackageName: function() { + getPackageName: function () { return plist.parse(fs.readFileSync(plist_file, 'utf8')).CFBundleIdentifier; }, getInstaller: function (name) { @@ -93,7 +91,7 @@ function parseProjectFile(locations) { return cachedProjectFiles[project_dir]; } -function purgeProjectFileCache(project_dir) { +function purgeProjectFileCache (project_dir) { delete cachedProjectFiles[project_dir]; } @@ -115,7 +113,7 @@ xcode.project.prototype.addToPbxEmbedFrameworksBuildPhase = function (file) { xcode.project.prototype.removeFromPbxEmbedFrameworksBuildPhase = function (file) { var sources = this.pbxEmbedFrameworksBuildPhaseObj(file.target); if (sources) { - sources.files = _.reject(sources.files, function(file){ + sources.files = _.reject(sources.files, function (file) { return file.comment === longComment(file); }); } @@ -124,13 +122,13 @@ xcode.project.prototype.removeFromPbxEmbedFrameworksBuildPhase = function (file) // special handlers to add frameworks to the 'Embed Frameworks' build phase, needed for custom frameworks // see CB-9517. should probably be moved to node-xcode. var util = require('util'); -function pbxBuildPhaseObj(file) { +function pbxBuildPhaseObj (file) { var obj = Object.create(null); obj.value = file.uuid; obj.comment = longComment(file); return obj; } -function longComment(file) { +function longComment (file) { return util.format('%s in %s', file.basename, file.group); } diff --git a/StoneIsland/platforms/ios/cordova/lib/run.js b/StoneIsland/platforms/ios/cordova/lib/run.js index 0caadf06..3a6246e1 100755 --- a/StoneIsland/platforms/ios/cordova/lib/run.js +++ b/StoneIsland/platforms/ios/cordova/lib/run.js @@ -17,14 +17,12 @@ under the License. */ -/*jshint node: true*/ - -var Q = require('q'), - path = require('path'), - iossim = require('ios-sim'), - build = require('./build'), - spawn = require('./spawn'), - check_reqs = require('./check_reqs'); +var Q = require('q'); +var path = require('path'); +var iossim = require('ios-sim'); +var build = require('./build'); +var spawn = require('./spawn'); +var check_reqs = require('./check_reqs'); var events = require('cordova-common').events; @@ -40,109 +38,117 @@ module.exports.run = function (runOptions) { // support for CB-8168 `cordova/run --list` if (runOptions.list) { - if (runOptions.device) return listDevices(); - if (runOptions.emulator) return listEmulators(); + if (runOptions.device) return module.exports.listDevices(); + if (runOptions.emulator) return module.exports.listEmulators(); // if no --device or --emulator flag is specified, list both devices and emulators - return listDevices().then(function () { - return listEmulators(); + return module.exports.listDevices().then(function () { + return module.exports.listEmulators(); }); } var useDevice = !!runOptions.device; return require('./list-devices').run() - .then(function (devices) { - if (devices.length > 0 && !(runOptions.emulator)) { - useDevice = true; - // we also explicitly set device flag in options as we pass - // those parameters to other api (build as an example) - runOptions.device = true; - return check_reqs.check_ios_deploy(); - } - }).then(function () { - if (!runOptions.nobuild) { - return build.run(runOptions); - } else { - return Q.resolve(); - } - }).then(function () { - return build.findXCodeProjectIn(projectPath); - }).then(function (projectName) { - var appPath = path.join(projectPath, 'build', 'emulator', projectName + '.app'); - var buildOutputDir = path.join(projectPath, 'build', 'device'); + .then(function (devices) { + if (devices.length > 0 && !(runOptions.emulator)) { + useDevice = true; + // we also explicitly set device flag in options as we pass + // those parameters to other api (build as an example) + runOptions.device = true; + return check_reqs.check_ios_deploy(); + } + }).then(function () { + if (!runOptions.nobuild) { + return build.run(runOptions); + } else { + return Q.resolve(); + } + }).then(function () { + return build.findXCodeProjectIn(projectPath); + }).then(function (projectName) { + var appPath = path.join(projectPath, 'build', 'emulator', projectName + '.app'); + var buildOutputDir = path.join(projectPath, 'build', 'device'); - // select command to run and arguments depending whether - // we're running on device/emulator - if (useDevice) { - return checkDeviceConnected() - .then(function() { - // Unpack IPA - var ipafile = path.join(buildOutputDir, projectName + '.ipa'); + // select command to run and arguments depending whether + // we're running on device/emulator + if (useDevice) { + return module.exports.checkDeviceConnected() + .then(function () { + // Unpack IPA + var ipafile = path.join(buildOutputDir, projectName + '.ipa'); - // unpack the existing platform/ios/build/device/appname.ipa (zipfile), will create a Payload folder - return spawn('unzip', [ '-o', '-qq', ipafile ], buildOutputDir); - }) - .then(function() { - // Uncompress IPA (zip file) - var appFileInflated = path.join(buildOutputDir, 'Payload', projectName + '.app'); - var appFile = path.join(buildOutputDir, projectName + '.app'); - var payloadFolder = path.join(buildOutputDir, 'Payload'); + // unpack the existing platform/ios/build/device/appname.ipa (zipfile), will create a Payload folder + return spawn('unzip', [ '-o', '-qq', ipafile ], buildOutputDir); + }) + .then(function () { + // Uncompress IPA (zip file) + var appFileInflated = path.join(buildOutputDir, 'Payload', projectName + '.app'); + var appFile = path.join(buildOutputDir, projectName + '.app'); + var payloadFolder = path.join(buildOutputDir, 'Payload'); - // delete the existing platform/ios/build/device/appname.app - return spawn('rm', [ '-rf', appFile ], buildOutputDir) - .then(function() { - // move the platform/ios/build/device/Payload/appname.app to parent - return spawn('mv', [ '-f', appFileInflated, buildOutputDir ], buildOutputDir); + // delete the existing platform/ios/build/device/appname.app + return spawn('rm', [ '-rf', appFile ], buildOutputDir) + .then(function () { + // move the platform/ios/build/device/Payload/appname.app to parent + return spawn('mv', [ '-f', appFileInflated, buildOutputDir ], buildOutputDir); + }) + .then(function () { + // delete the platform/ios/build/device/Payload folder + return spawn('rm', [ '-rf', payloadFolder ], buildOutputDir); + }); }) - .then(function() { - // delete the platform/ios/build/device/Payload folder - return spawn('rm', [ '-rf', payloadFolder ], buildOutputDir); + .then(function () { + appPath = path.join(projectPath, 'build', 'device', projectName + '.app'); + var extraArgs = []; + if (runOptions.argv) { + // argv.slice(2) removes node and run.js, filterSupportedArgs removes the run.js args + extraArgs = module.exports.filterSupportedArgs(runOptions.argv.slice(2)); + } + return module.exports.deployToDevice(appPath, runOptions.target, extraArgs); + }, function () { + // if device connection check failed use emulator then + return module.exports.deployToSim(appPath, runOptions.target); }); - }) - .then(function() { - appPath = path.join(projectPath, 'build', 'device', projectName + '.app'); - var extraArgs = []; - if (runOptions.argv) { - // argv.slice(2) removes node and run.js, filterSupportedArgs removes the run.js args - extraArgs = filterSupportedArgs(runOptions.argv.slice(2)); - } - return deployToDevice(appPath, runOptions.target, extraArgs); - }, function () { - // if device connection check failed use emulator then - return deployToSim(appPath, runOptions.target); - }); - } else { - return deployToSim(appPath, runOptions.target); - } - }); + } else { + return module.exports.deployToSim(appPath, runOptions.target); + } + }); }; +module.exports.filterSupportedArgs = filterSupportedArgs; +module.exports.checkDeviceConnected = checkDeviceConnected; +module.exports.deployToDevice = deployToDevice; +module.exports.deployToSim = deployToSim; +module.exports.startSim = startSim; +module.exports.listDevices = listDevices; +module.exports.listEmulators = listEmulators; + /** * Filters the args array and removes supported args for the 'run' command. * * @return {Array} array with unsupported args for the 'run' command */ -function filterSupportedArgs(args) { - var filtered = []; - var sargs = ['--device', '--emulator', '--nobuild', '--list', '--target', '--debug', '--release']; - var re = new RegExp(sargs.join('|')); +function filterSupportedArgs (args) { + var filtered = []; + var sargs = ['--device', '--emulator', '--nobuild', '--list', '--target', '--debug', '--release']; + var re = new RegExp(sargs.join('|')); - args.forEach(function(element) { - // supported args not found, we add - // we do a regex search because --target can be "--target=XXX" - if (element.search(re) == -1) { - filtered.push(element); - } - }, this); + args.forEach(function (element) { + // supported args not found, we add + // we do a regex search because --target can be "--target=XXX" + if (element.search(re) === -1) { + filtered.push(element); + } + }, this); - return filtered; + return filtered; } /** * Checks if any iOS device is connected * @return {Promise} Fullfilled when any device is connected, rejected otherwise */ -function checkDeviceConnected() { +function checkDeviceConnected () { return spawn('ios-deploy', ['-c', '-t', '1']); } @@ -152,7 +158,7 @@ function checkDeviceConnected() { * @param {String} appPath Path to application package * @return {Promise} Resolves when deploy succeeds otherwise rejects */ -function deployToDevice(appPath, target, extraArgs) { +function deployToDevice (appPath, target, extraArgs) { // Deploying to device... if (target) { return spawn('ios-deploy', ['--justlaunch', '-d', '-b', appPath, '-i', target].concat(extraArgs)); @@ -167,51 +173,51 @@ function deployToDevice(appPath, target, extraArgs) { * @param {String} target Target device type * @return {Promise} Resolves when deploy succeeds otherwise rejects */ -function deployToSim(appPath, target) { +function deployToSim (appPath, target) { // Select target device for emulator. Default is 'iPhone-6' if (!target) { return require('./list-emulator-images').run() - .then(function (emulators) { - if (emulators.length > 0) { - target = emulators[0]; - } - emulators.forEach(function (emulator) { - if (emulator.indexOf('iPhone') === 0) { - target = emulator; + .then(function (emulators) { + if (emulators.length > 0) { + target = emulators[0]; } + emulators.forEach(function (emulator) { + if (emulator.indexOf('iPhone') === 0) { + target = emulator; + } + }); + events.emit('log', 'No target specified for emulator. Deploying to ' + target + ' simulator'); + return startSim(appPath, target); }); - events.emit('log','No target specified for emulator. Deploying to ' + target + ' simulator'); - return startSim(appPath, target); - }); } else { return startSim(appPath, target); } } -function startSim(appPath, target) { +function startSim (appPath, target) { var logPath = path.join(cordovaPath, 'console.log'); return iossim.launch(appPath, 'com.apple.CoreSimulator.SimDeviceType.' + target, logPath, '--exit'); } -function listDevices() { +function listDevices () { return require('./list-devices').run() - .then(function (devices) { - events.emit('log','Available iOS Devices:'); - devices.forEach(function (device) { - events.emit('log','\t' + device); + .then(function (devices) { + events.emit('log', 'Available iOS Devices:'); + devices.forEach(function (device) { + events.emit('log', '\t' + device); + }); }); - }); } -function listEmulators() { +function listEmulators () { return require('./list-emulator-images').run() - .then(function (emulators) { - events.emit('log','Available iOS Simulators:'); - emulators.forEach(function (emulator) { - events.emit('log','\t' + emulator); + .then(function (emulators) { + events.emit('log', 'Available iOS Simulators:'); + emulators.forEach(function (emulator) { + events.emit('log', '\t' + emulator); + }); }); - }); } module.exports.help = function () { @@ -230,7 +236,7 @@ module.exports.help = function () { console.log('Examples:'); console.log(' run'); console.log(' run --device'); - console.log(' run --emulator --target=\"iPhone-6-Plus\"'); + console.log(' run --emulator --target=\"iPhone-6-Plus\"'); /* eslint no-useless-escape : 0 */ console.log(' run --device --release'); console.log(' run --emulator --debug'); console.log(''); diff --git a/StoneIsland/platforms/ios/cordova/lib/spawn.js b/StoneIsland/platforms/ios/cordova/lib/spawn.js index 2162b9c7..b5a56852 100755 --- a/StoneIsland/platforms/ios/cordova/lib/spawn.js +++ b/StoneIsland/platforms/ios/cordova/lib/spawn.js @@ -17,32 +17,30 @@ under the License. */ -/*jshint node: true*/ - -var Q = require('q'), - proc = require('child_process'); +var Q = require('q'); +var proc = require('child_process'); /** - * Run specified command with arguments + * Run specified command with arguments * @param {String} cmd Command * @param {Array} args Array of arguments that should be passed to command * @param {String} opt_cwd Working directory for command * @param {String} opt_verbosity Verbosity level for command stdout output, "verbose" by default * @return {Promise} Promise either fullfilled or rejected with error code */ -module.exports = function(cmd, args, opt_cwd) { +module.exports = function (cmd, args, opt_cwd) { var d = Q.defer(); try { var child = proc.spawn(cmd, args, {cwd: opt_cwd, stdio: 'inherit'}); - child.on('exit', function(code) { + child.on('exit', function (code) { if (code) { d.reject('Error code ' + code + ' for command: ' + cmd + ' with args: ' + args); } else { d.resolve(); } }); - } catch(e) { + } catch (e) { d.reject(e); } return d.promise; diff --git a/StoneIsland/platforms/ios/cordova/lib/versions.js b/StoneIsland/platforms/ios/cordova/lib/versions.js index da31d4fa..c6a41b83 100755 --- a/StoneIsland/platforms/ios/cordova/lib/versions.js +++ b/StoneIsland/platforms/ios/cordova/lib/versions.js @@ -19,53 +19,51 @@ under the License. */ -var child_process = require('child_process'), - Q = require('q'); +var child_process = require('child_process'); +var Q = require('q'); -exports.get_apple_ios_version = function() { +exports.get_apple_ios_version = function () { var d = Q.defer(); - child_process.exec('xcodebuild -showsdks', function(error, stdout, stderr) { + child_process.exec('xcodebuild -showsdks', function (error, stdout, stderr) { if (error) { d.reject(stderr); - } - else { + } else { d.resolve(stdout); } }); - return d.promise.then(function(output) { - var regex = /[0-9]*\.[0-9]*/, - versions = [], - regexIOS = /^iOS \d+/; + return d.promise.then(function (output) { + var regex = /[0-9]*\.[0-9]*/; + var versions = []; + var regexIOS = /^iOS \d+/; output = output.split('\n'); for (var i = 0; i < output.length; i++) { if (output[i].trim().match(regexIOS)) { versions[versions.length] = parseFloat(output[i].match(regex)[0]); - } + } } versions.sort(); console.log(versions[0]); return Q(); - }, function(stderr) { + }, function (stderr) { return Q.reject(stderr); }); }; -exports.get_apple_osx_version = function() { +exports.get_apple_osx_version = function () { var d = Q.defer(); - child_process.exec('xcodebuild -showsdks', function(error, stdout, stderr) { + child_process.exec('xcodebuild -showsdks', function (error, stdout, stderr) { if (error) { d.reject(stderr); - } - else { + } else { d.resolve(stdout); } }); - return d.promise.then(function(output) { - var regex = /[0-9]*\.[0-9]*/, - versions = [], - regexOSX = /^OS X \d+/; + return d.promise.then(function (output) { + var regex = /[0-9]*\.[0-9]*/; + var versions = []; + var regexOSX = /^OS X \d+/; output = output.split('\n'); for (var i = 0; i < output.length; i++) { if (output[i].trim().match(regexOSX)) { @@ -75,14 +73,14 @@ exports.get_apple_osx_version = function() { versions.sort(); console.log(versions[0]); return Q(); - }, function(stderr) { + }, function (stderr) { return Q.reject(stderr); }); }; -exports.get_apple_xcode_version = function() { +exports.get_apple_xcode_version = function () { var d = Q.defer(); - child_process.exec('xcodebuild -version', function(error, stdout, stderr) { + child_process.exec('xcodebuild -version', function (error, stdout, stderr) { var versionMatch = /Xcode (.*)/.exec(stdout); if (error || !versionMatch) { d.reject(stderr); @@ -98,9 +96,9 @@ exports.get_apple_xcode_version = function() { * @return {Promise} Promise that either resolved with ios-deploy version * or rejected in case of error */ -exports.get_ios_deploy_version = function() { +exports.get_ios_deploy_version = function () { var d = Q.defer(); - child_process.exec('ios-deploy --version', function(error, stdout, stderr) { + child_process.exec('ios-deploy --version', function (error, stdout, stderr) { if (error) { d.reject(stderr); } else { @@ -115,9 +113,9 @@ exports.get_ios_deploy_version = function() { * @return {Promise} Promise that either resolved with pod version * or rejected in case of error */ -exports.get_cocoapods_version = function() { +exports.get_cocoapods_version = function () { var d = Q.defer(); - child_process.exec('pod --version', function(error, stdout, stderr) { + child_process.exec('pod --version', function (error, stdout, stderr) { if (error) { d.reject(stderr); } else { @@ -132,9 +130,9 @@ exports.get_cocoapods_version = function() { * @return {Promise} Promise that either resolved with ios-sim version * or rejected in case of error */ -exports.get_ios_sim_version = function() { +exports.get_ios_sim_version = function () { var d = Q.defer(); - child_process.exec('ios-sim --version', function(error, stdout, stderr) { + child_process.exec('ios-sim --version', function (error, stdout, stderr) { if (error) { d.reject(stderr); } else { @@ -152,11 +150,11 @@ exports.get_ios_sim_version = function() { */ exports.get_tool_version = function (toolName) { switch (toolName) { - case 'xcodebuild': return exports.get_apple_xcode_version(); - case 'ios-sim': return exports.get_ios_sim_version(); - case 'ios-deploy': return exports.get_ios_deploy_version(); - case 'pod': return exports.get_cocoapods_version(); - default: return Q.reject(toolName + ' is not valid tool name. Valid names are: \'xcodebuild\', \'ios-sim\', \'ios-deploy\', and \'pod\''); + case 'xcodebuild': return exports.get_apple_xcode_version(); + case 'ios-sim': return exports.get_ios_sim_version(); + case 'ios-deploy': return exports.get_ios_deploy_version(); + case 'pod': return exports.get_cocoapods_version(); + default: return Q.reject(toolName + ' is not valid tool name. Valid names are: \'xcodebuild\', \'ios-sim\', \'ios-deploy\', and \'pod\''); } }; diff --git a/StoneIsland/platforms/ios/cordova/node_modules/nopt/package.json b/StoneIsland/platforms/ios/cordova/node_modules/nopt/package.json index 6d6a39a7..3784dfb3 100755 --- a/StoneIsland/platforms/ios/cordova/node_modules/nopt/package.json +++ b/StoneIsland/platforms/ios/cordova/node_modules/nopt/package.json @@ -1,47 +1,27 @@ { - "_args": [ - [ - { - "raw": "nopt@^3.0.6", - "scope": null, - "escapedName": "nopt", - "name": "nopt", - "rawSpec": "^3.0.6", - "spec": ">=3.0.6 <4.0.0", - "type": "range" - }, - "/Users/shazron/Documents/git/apache/cordova-ios" - ] - ], - "_from": "nopt@>=3.0.6 <4.0.0", + "_from": "nopt@^3.0.6", "_id": "nopt@3.0.6", "_inBundle": true, - "_inCache": true, + "_integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "_location": "/cordova-ios/nopt", - "_nodeVersion": "4.2.1", - "_npmUser": { - "name": "othiym23", - "email": "ogd@aoaioxxysz.net" - }, - "_npmVersion": "2.14.10", "_phantomChildren": {}, "_requested": { + "type": "range", + "registry": true, "raw": "nopt@^3.0.6", - "scope": null, - "escapedName": "nopt", "name": "nopt", + "escapedName": "nopt", "rawSpec": "^3.0.6", - "spec": ">=3.0.6 <4.0.0", - "type": "range" + "saveSpec": null, + "fetchSpec": "^3.0.6" }, "_requiredBy": [ "/cordova-ios" ], "_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "_shasum": "c6465dbf08abcd4db359317f79ac68a646b28ff9", - "_shrinkwrap": null, "_spec": "nopt@^3.0.6", - "_where": "/Users/shazron/Documents/git/apache/cordova-ios", + "_where": "/Users/spindori/Documents/Cordova/cordova-ios", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me", @@ -53,38 +33,19 @@ "bugs": { "url": "https://github.com/npm/nopt/issues" }, + "bundleDependencies": false, "dependencies": { "abbrev": "1" }, + "deprecated": false, "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.", "devDependencies": { "tap": "^1.2.0" }, - "directories": {}, - "dist": { - "shasum": "c6465dbf08abcd4db359317f79ac68a646b28ff9", - "tarball": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" - }, - "gitHead": "10a750c9bb99c1950160353459e733ac2aa18cb6", "homepage": "https://github.com/npm/nopt#readme", "license": "ISC", "main": "lib/nopt.js", - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - }, - { - "name": "othiym23", - "email": "ogd@aoaioxxysz.net" - }, - { - "name": "zkat", - "email": "kat@sykosomatic.org" - } - ], "name": "nopt", - "optionalDependencies": {}, "repository": { "type": "git", "url": "git+https://github.com/npm/nopt.git" diff --git a/StoneIsland/platforms/ios/cordova/node_modules/q/LICENSE b/StoneIsland/platforms/ios/cordova/node_modules/q/LICENSE index 8a706b59..9ce1ea59 100755 --- a/StoneIsland/platforms/ios/cordova/node_modules/q/LICENSE +++ b/StoneIsland/platforms/ios/cordova/node_modules/q/LICENSE @@ -1,4 +1,4 @@ -Copyright 2009–2014 Kristopher Michael Kowal. All rights reserved. +Copyright 2009–2017 Kristopher Michael Kowal. All rights reserved. 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 diff --git a/StoneIsland/platforms/ios/cordova/node_modules/q/package.json b/StoneIsland/platforms/ios/cordova/node_modules/q/package.json index 49ad3b60..30e1b1b8 100755 --- a/StoneIsland/platforms/ios/cordova/node_modules/q/package.json +++ b/StoneIsland/platforms/ios/cordova/node_modules/q/package.json @@ -1,48 +1,28 @@ { - "_args": [ - [ - { - "raw": "q@^1.4.1", - "scope": null, - "escapedName": "q", - "name": "q", - "rawSpec": "^1.4.1", - "spec": ">=1.4.1 <2.0.0", - "type": "range" - }, - "/Users/shazron/Documents/git/apache/cordova-ios" - ] - ], - "_from": "q@>=1.4.1 <2.0.0", - "_id": "q@1.4.1", + "_from": "q@^1.4.1", + "_id": "q@1.5.0", "_inBundle": true, - "_inCache": true, + "_integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", "_location": "/cordova-ios/q", - "_nodeVersion": "1.8.1", - "_npmUser": { - "name": "kriskowal", - "email": "kris.kowal@cixar.com" - }, - "_npmVersion": "2.8.3", "_phantomChildren": {}, "_requested": { + "type": "range", + "registry": true, "raw": "q@^1.4.1", - "scope": null, - "escapedName": "q", "name": "q", + "escapedName": "q", "rawSpec": "^1.4.1", - "spec": ">=1.4.1 <2.0.0", - "type": "range" + "saveSpec": null, + "fetchSpec": "^1.4.1" }, "_requiredBy": [ "/cordova-ios", "/cordova-ios/cordova-common" ], - "_resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "_shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e", - "_shrinkwrap": null, + "_resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "_shasum": "dd01bac9d06d30e6f219aecb8253ee9ebdc308f1", "_spec": "q@^1.4.1", - "_where": "/Users/shazron/Documents/git/apache/cordova-ios", + "_where": "/Users/spindori/Documents/Cordova/cordova-ios", "author": { "name": "Kris Kowal", "email": "kris@cixar.com", @@ -51,6 +31,7 @@ "bugs": { "url": "http://github.com/kriskowal/q/issues" }, + "bundleDependencies": false, "contributors": [ { "name": "Kris Kowal", @@ -69,6 +50,7 @@ } ], "dependencies": {}, + "deprecated": false, "description": "A library for promises (CommonJS/Promises/A,B,D)", "devDependencies": { "cover": "*", @@ -84,10 +66,6 @@ "directories": { "test": "./spec" }, - "dist": { - "shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e", - "tarball": "https://registry.npmjs.org/q/-/q-1.4.1.tgz" - }, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -97,7 +75,6 @@ "q.js", "queue.js" ], - "gitHead": "d373079d3620152e3d60e82f27265a09ee0e81bd", "homepage": "https://github.com/kriskowal/q", "keywords": [ "q", @@ -113,23 +90,9 @@ "browser", "node" ], - "license": { - "type": "MIT", - "url": "http://github.com/kriskowal/q/raw/master/LICENSE" - }, + "license": "MIT", "main": "q.js", - "maintainers": [ - { - "name": "kriskowal", - "email": "kris.kowal@cixar.com" - }, - { - "name": "domenic", - "email": "domenic@domenicdenicola.com" - } - ], "name": "q", - "optionalDependencies": {}, "overlay": { "teleport": { "dependencies": { @@ -147,8 +110,8 @@ "lint": "jshint q.js", "minify": "grunt", "prepublish": "grunt", - "test": "jasmine-node spec && promises-aplus-tests spec/aplus-adapter", + "test": "npm ls -s && jasmine-node spec && promises-aplus-tests spec/aplus-adapter && npm run -s lint", "test-browser": "opener spec/q-spec.html" }, - "version": "1.4.1" + "version": "1.5.0" } diff --git a/StoneIsland/platforms/ios/cordova/node_modules/q/q.js b/StoneIsland/platforms/ios/cordova/node_modules/q/q.js index cf5339e3..14dc24a6 100755 --- a/StoneIsland/platforms/ios/cordova/node_modules/q/q.js +++ b/StoneIsland/platforms/ios/cordova/node_modules/q/q.js @@ -1,8 +1,8 @@ // vim:ts=4:sts=4:sw=4: /*! * - * Copyright 2009-2012 Kris Kowal under the terms of the MIT - * license found at http://github.com/kriskowal/q/raw/master/LICENSE + * Copyright 2009-2017 Kris Kowal under the terms of the MIT + * license found at https://github.com/kriskowal/q/blob/v1/LICENSE * * With parts by Tyler Close * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found @@ -190,7 +190,7 @@ var nextTick =(function () { // `setTimeout`. In this case `setImmediate` is preferred because // it is faster. Browserify's `process.toString()` yields // "[object Object]", while in a real Node environment - // `process.nextTick()` yields "[object process]". + // `process.toString()` yields "[object process]". isNodeJS = true; requestTick = function () { @@ -327,6 +327,11 @@ var object_create = Object.create || function (prototype) { return new Type(); }; +var object_defineProperty = Object.defineProperty || function (obj, prop, descriptor) { + obj[prop] = descriptor.value; + return obj; +}; + var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty); var object_keys = Object.keys || function (object) { @@ -377,19 +382,20 @@ function makeStackTraceLong(error, promise) { promise.stack && typeof error === "object" && error !== null && - error.stack && - error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1 + error.stack ) { var stacks = []; for (var p = promise; !!p; p = p.source) { - if (p.stack) { + if (p.stack && (!error.__minimumStackCounter__ || error.__minimumStackCounter__ > p.stackCounter)) { + object_defineProperty(error, "__minimumStackCounter__", {value: p.stackCounter, configurable: true}); stacks.unshift(p.stack); } } stacks.unshift(error.stack); var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n"); - error.stack = filterStackString(concatedStacks); + var stack = filterStackString(concatedStacks); + object_defineProperty(error, "stack", {value: stack, configurable: true}); } } @@ -516,6 +522,14 @@ Q.nextTick = nextTick; */ Q.longStackSupport = false; +/** + * The counter is used to determine the stopping point for building + * long stack traces. In makeStackTraceLong we walk backwards through + * the linked list of promises, only stacks which were created before + * the rejection are concatenated. + */ +var longStackCounter = 1; + // enable long stacks if Q_DEBUG is set if (typeof process === "object" && process && process.env && process.env.Q_DEBUG) { Q.longStackSupport = true; @@ -588,6 +602,7 @@ function defer() { // At the same time, cut off the first line; it's always just // "[object Promise]\n", as per the `toString`. promise.stack = e.stack.substring(e.stack.indexOf("\n") + 1); + promise.stackCounter = longStackCounter++; } } @@ -597,7 +612,12 @@ function defer() { function become(newPromise) { resolvedPromise = newPromise; - promise.source = newPromise; + + if (Q.longStackSupport && hasStacks) { + // Only hold a reference to the new promise if long stacks + // are enabled to reduce memory usage + promise.source = newPromise; + } array_reduce(messages, function (undefined, message) { Q.nextTick(function () { @@ -725,7 +745,7 @@ Promise.prototype.join = function (that) { // TODO: "===" should be Object.is or equiv return x; } else { - throw new Error("Can't join: not the same: " + x + " " + y); + throw new Error("Q can't join: not the same: " + x + " " + y); } }); }; @@ -1622,13 +1642,12 @@ function any(promises) { function onFulfilled(result) { deferred.resolve(result); } - function onRejected() { + function onRejected(err) { pendingCount--; if (pendingCount === 0) { - deferred.reject(new Error( - "Can't get fulfillment value from any promise, all " + - "promises were rejected." - )); + err.message = ("Q can't get fulfillment value from any promise, all " + + "promises were rejected. Last error message: " + err.message); + deferred.reject(err); } } function onProgress(progress) { @@ -1752,6 +1771,9 @@ Q["finally"] = function (object, callback) { Promise.prototype.fin = // XXX legacy Promise.prototype["finally"] = function (callback) { + if (!callback || typeof callback.apply !== "function") { + throw new Error("Q can't apply finally callback"); + } callback = Q(callback); return this.then(function (value) { return callback.fcall().then(function () { @@ -1915,6 +1937,9 @@ Promise.prototype.nfcall = function (/*...args*/) { */ Q.nfbind = Q.denodeify = function (callback /*...args*/) { + if (callback === undefined) { + throw new Error("Q can't wrap an undefined function"); + } var baseArgs = array_slice(arguments, 1); return function () { var nodeArgs = baseArgs.concat(array_slice(arguments)); diff --git a/StoneIsland/platforms/ios/cordova/node_modules/shelljs/package.json b/StoneIsland/platforms/ios/cordova/node_modules/shelljs/package.json index 43438d32..24c80764 100755 --- a/StoneIsland/platforms/ios/cordova/node_modules/shelljs/package.json +++ b/StoneIsland/platforms/ios/cordova/node_modules/shelljs/package.json @@ -1,38 +1,19 @@ { - "_args": [ - [ - { - "raw": "shelljs@^0.5.3", - "scope": null, - "escapedName": "shelljs", - "name": "shelljs", - "rawSpec": "^0.5.3", - "spec": ">=0.5.3 <0.6.0", - "type": "range" - }, - "/Users/shazron/Documents/git/apache/cordova-ios" - ] - ], - "_from": "shelljs@>=0.5.3 <0.6.0", + "_from": "shelljs@^0.5.3", "_id": "shelljs@0.5.3", "_inBundle": true, - "_inCache": true, + "_integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=", "_location": "/cordova-ios/shelljs", - "_nodeVersion": "1.2.0", - "_npmUser": { - "name": "artur", - "email": "arturadib@gmail.com" - }, - "_npmVersion": "2.5.1", "_phantomChildren": {}, "_requested": { + "type": "range", + "registry": true, "raw": "shelljs@^0.5.3", - "scope": null, - "escapedName": "shelljs", "name": "shelljs", + "escapedName": "shelljs", "rawSpec": "^0.5.3", - "spec": ">=0.5.3 <0.6.0", - "type": "range" + "saveSpec": null, + "fetchSpec": "^0.5.3" }, "_requiredBy": [ "/cordova-ios", @@ -40,9 +21,8 @@ ], "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", "_shasum": "c54982b996c76ef0c1e6b59fbdc5825f5b713113", - "_shrinkwrap": null, "_spec": "shelljs@^0.5.3", - "_where": "/Users/shazron/Documents/git/apache/cordova-ios", + "_where": "/Users/spindori/Documents/Cordova/cordova-ios", "author": { "name": "Artur Adib", "email": "arturadib@gmail.com" @@ -53,20 +33,16 @@ "bugs": { "url": "https://github.com/arturadib/shelljs/issues" }, + "bundleDependencies": false, "dependencies": {}, + "deprecated": false, "description": "Portable Unix shell commands for Node.js", "devDependencies": { "jshint": "~2.1.11" }, - "directories": {}, - "dist": { - "shasum": "c54982b996c76ef0c1e6b59fbdc5825f5b713113", - "tarball": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz" - }, "engines": { "node": ">=0.8.0" }, - "gitHead": "22d0975040b9b8234755dc6e692d6869436e8485", "homepage": "http://github.com/arturadib/shelljs", "keywords": [ "unix", @@ -78,12 +54,6 @@ ], "license": "BSD*", "main": "./shell.js", - "maintainers": [ - { - "name": "artur", - "email": "arturadib@gmail.com" - } - ], "name": "shelljs", "optionalDependencies": {}, "repository": { diff --git a/StoneIsland/platforms/ios/cordova/version b/StoneIsland/platforms/ios/cordova/version index 7b7d0c06..979cba13 100755 --- a/StoneIsland/platforms/ios/cordova/version +++ b/StoneIsland/platforms/ios/cordova/version @@ -26,7 +26,7 @@ */ // Coho updates this line -var VERSION="4.4.0"; +var VERSION="4.5.2"; module.exports.version = VERSION; diff --git a/StoneIsland/platforms/ios/exportOptions.plist b/StoneIsland/platforms/ios/exportOptions.plist deleted file mode 100644 index 00b0541e..00000000 --- a/StoneIsland/platforms/ios/exportOptions.plist +++ /dev/null @@ -1,10 +0,0 @@ -<?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>compileBitcode</key> - <false/> - <key>method</key> - <string>development</string> - </dict> -</plist>
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/frameworks.json b/StoneIsland/platforms/ios/frameworks.json index 5ef6c006..8c96a67b 100644 --- a/StoneIsland/platforms/ios/frameworks.json +++ b/StoneIsland/platforms/ios/frameworks.json @@ -5,5 +5,7 @@ "CoreTelephony.framework": 1, "Social.framework": 1, "MessageUI.framework": 1, - "WebKit.framework": 1 + "AddressBook.framework": 1, + "libsqlite3.tbd": 1, + "libz.tbd": 1 }
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/ios.json b/StoneIsland/platforms/ios/ios.json index cfaa5218..a801018b 100644 --- a/StoneIsland/platforms/ios/ios.json +++ b/StoneIsland/platforms/ios/ios.json @@ -1,350 +1,319 @@ { - "prepare_queue": { - "installed": [], - "uninstalled": [] - }, - "config_munge": { - "files": { - "*-Info.plist": { - "parents": { - "CFBundleName": [ - { - "xml": "<string>Stone Island</string>", - "count": 1 - } - ], - "CFBundleDisplayName": [ - { - "xml": "<string>Stone Island</string>", - "count": 1 - } - ], - "CFBundleURLTypes": [ - { - "xml": "<array><dict><key>CFBundleURLSchemes</key><array><string>stoneisland</string></array></dict></array>", - "count": 1 - } - ], - "NSLocationWhenInUseUsageDescription": [ - { - "xml": "<string />", - "count": 1 - } - ], - "UIBackgroundModes": [ - { - "xml": "<array><string>remote-notification</string></array>", - "count": 1 - } - ] - } + "prepare_queue": { + "installed": [], + "uninstalled": [] + }, + "config_munge": { + "files": { + "*-Info.plist": { + "parents": { + "CFBundleName": [ + { + "xml": "<string>Stone Island</string>", + "count": 1 + } + ], + "CFBundleDisplayName": [ + { + "xml": "<string>Stone Island</string>", + "count": 1 + } + ], + "CFBundleURLTypes": [ + { + "xml": "<array><dict><key>CFBundleURLSchemes</key><array><string>stoneisland</string></array></dict></array>", + "count": 1 + } + ], + "NSLocationWhenInUseUsageDescription": [ + { + "xml": "<string />", + "count": 1 + } + ], + "UIBackgroundModes": [ + { + "xml": "<array><string>remote-notification</string></array>", + "count": 1 + } + ], + "GCM_SENDER_ID": [ + { + "xml": "<string>85075801930</string>", + "count": 1 + } + ], + "IS_GCM_ENABLED": [ + { + "xml": "<true />", + "count": 1 + } + ] + } + }, + "config.xml": { + "parents": { + "/*": [ + { + "xml": "<feature name=\"Device\"><param name=\"ios-package\" value=\"CDVDevice\" /></feature>", + "count": 1 + }, + { + "xml": "<feature name=\"Notification\"><param name=\"ios-package\" value=\"CDVNotification\" /></feature>", + "count": 1 + }, + { + "xml": "<feature name=\"Geolocation\"><param name=\"ios-package\" value=\"CDVLocation\" /></feature>", + "count": 1 + }, + { + "xml": "<feature name=\"InAppBrowser\"><param name=\"ios-package\" value=\"CDVInAppBrowser\" /></feature>", + "count": 1 + }, + { + "xml": "<feature name=\"NetworkStatus\"><param name=\"ios-package\" value=\"CDVConnection\" /></feature>", + "count": 1 }, - "config.xml": { - "parents": { - "/*": [ - { - "xml": "<feature name=\"Console\"><param name=\"ios-package\" value=\"CDVLogger\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"Device\"><param name=\"ios-package\" value=\"CDVDevice\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"Notification\"><param name=\"ios-package\" value=\"CDVNotification\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"Geolocation\"><param name=\"ios-package\" value=\"CDVLocation\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"InAppBrowser\"><param name=\"ios-package\" value=\"CDVInAppBrowser\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"NetworkStatus\"><param name=\"ios-package\" value=\"CDVConnection\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"SplashScreen\"><param name=\"ios-package\" value=\"CDVSplashScreen\" /><param name=\"onload\" value=\"true\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"StatusBar\"><param name=\"ios-package\" value=\"CDVStatusBar\" /><param name=\"onload\" value=\"true\" /></feature>", - "count": 1 - }, - { - "xml": "<preference name=\"StatusBarOverlaysWebView\" value=\"true\" />", - "count": 1 - }, - { - "xml": "<preference name=\"StatusBarStyle\" value=\"lightcontent\" />", - "count": 1 - }, - { - "xml": "<feature name=\"SocialSharing\"><param name=\"ios-package\" value=\"SocialSharing\" /><param name=\"onload\" value=\"true\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"Keyboard\"><param name=\"ios-package\" onload=\"true\" value=\"IonicKeyboard\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"PushNotification\"><param name=\"ios-package\" value=\"PushPlugin\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"CDVWKWebViewEngine\"><param name=\"ios-package\" value=\"CDVWKWebViewEngine\" /></feature>", - "count": 1 - }, - { - "xml": "<preference name=\"CordovaWebViewEngine\" value=\"CDVWKWebViewEngine\" />", - "count": 1 - } - ] - } + { + "xml": "<feature name=\"SplashScreen\"><param name=\"ios-package\" value=\"CDVSplashScreen\" /><param name=\"onload\" value=\"true\" /></feature>", + "count": 1 }, - "*-Debug.plist": { - "parents": { - "aps-environment": [ - { - "xml": "<string>development</string>", - "count": 1 - } - ] - } + { + "xml": "<feature name=\"StatusBar\"><param name=\"ios-package\" value=\"CDVStatusBar\" /><param name=\"onload\" value=\"true\" /></feature>", + "count": 1 }, - "*-Release.plist": { - "parents": { - "aps-environment": [ - { - "xml": "<string>production</string>", - "count": 1 - } - ] - } + { + "xml": "<preference name=\"StatusBarOverlaysWebView\" value=\"true\" />", + "count": 1 + }, + { + "xml": "<preference name=\"StatusBarStyle\" value=\"lightcontent\" />", + "count": 1 + }, + { + "xml": "<feature name=\"SocialSharing\"><param name=\"ios-package\" value=\"SocialSharing\" /><param name=\"onload\" value=\"true\" /></feature>", + "count": 1 + }, + { + "xml": "<feature name=\"Keyboard\"><param name=\"ios-package\" onload=\"true\" value=\"IonicKeyboard\" /></feature>", + "count": 1 + }, + { + "xml": "<feature name=\"PushNotification\"><param name=\"ios-package\" value=\"PushPlugin\" /></feature>", + "count": 1 } + ] } - }, - "installed_plugins": { - "cordova-plugin-app-name": { - "APP_NAME": "Stone Island", - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-compat": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-console": { - "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": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-geolocation": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-inappbrowser": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-network-information": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-splashscreen": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-statusbar": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-whitelist": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-x-socialsharing": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "ionic-plugin-keyboard": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "phonegap-plugin-push": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-wkwebview-engine": { - "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "*-Debug.plist": { + "parents": { + "aps-environment": [ + { + "xml": "<string>development</string>", + "count": 1 + } + ] } - }, - "dependent_plugins": {}, - "modules": [ - { - "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-customurlscheme.LaunchMyApp", - "file": "plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js", - "pluginId": "cordova-plugin-customurlscheme", - "clobbers": [ - "window.plugins.launchmyapp" - ] - }, - { - "id": "cordova-plugin-device.device", - "file": "plugins/cordova-plugin-device/www/device.js", - "pluginId": "cordova-plugin-device", - "clobbers": [ - "device" - ] - }, - { - "id": "cordova-plugin-dialogs.notification", - "file": "plugins/cordova-plugin-dialogs/www/notification.js", - "pluginId": "cordova-plugin-dialogs", - "merges": [ - "navigator.notification" - ] - }, - { - "id": "cordova-plugin-geolocation.Coordinates", - "file": "plugins/cordova-plugin-geolocation/www/Coordinates.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "Coordinates" - ] - }, - { - "id": "cordova-plugin-geolocation.PositionError", - "file": "plugins/cordova-plugin-geolocation/www/PositionError.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "PositionError" - ] - }, - { - "id": "cordova-plugin-geolocation.Position", - "file": "plugins/cordova-plugin-geolocation/www/Position.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "Position" - ] - }, - { - "id": "cordova-plugin-geolocation.geolocation", - "file": "plugins/cordova-plugin-geolocation/www/geolocation.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "navigator.geolocation" - ] - }, - { - "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", - "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-statusbar.statusbar", - "file": "plugins/cordova-plugin-statusbar/www/statusbar.js", - "pluginId": "cordova-plugin-statusbar", - "clobbers": [ - "window.StatusBar" - ] - }, - { - "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": "ionic-plugin-keyboard.keyboard", - "file": "plugins/ionic-plugin-keyboard/www/ios/keyboard.js", - "pluginId": "ionic-plugin-keyboard", - "clobbers": [ - "cordova.plugins.Keyboard" - ], - "runs": true - }, - { - "id": "phonegap-plugin-push.PushNotification", - "file": "plugins/phonegap-plugin-push/www/push.js", - "pluginId": "phonegap-plugin-push", - "clobbers": [ - "PushNotification" - ] - }, - { - "id": "cordova-plugin-wkwebview-engine.ios-wkwebview-exec", - "file": "plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js", - "pluginId": "cordova-plugin-wkwebview-engine", - "clobbers": [ - "cordova.exec" - ] + }, + "*-Release.plist": { + "parents": { + "aps-environment": [ + { + "xml": "<string>production</string>", + "count": 1 + } + ] } - ], - "plugin_metadata": { - "cordova-plugin-app-name": "1.0.4", - "cordova-plugin-compat": "1.1.0", - "cordova-plugin-console": "1.0.4", - "cordova-plugin-customurlscheme": "4.2.0", - "cordova-plugin-device": "1.1.3", - "cordova-plugin-dialogs": "1.3.0", - "cordova-plugin-geolocation": "2.4.0", - "cordova-plugin-inappbrowser": "1.5.0", - "cordova-plugin-network-information": "1.3.0", - "cordova-plugin-splashscreen": "4.0.0", - "cordova-plugin-statusbar": "2.2.3", - "cordova-plugin-whitelist": "1.3.0", - "cordova-plugin-x-socialsharing": "5.1.3", - "ionic-plugin-keyboard": "2.2.1", - "phonegap-plugin-push": "2.0.0", - "cordova-plugin-wkwebview-engine": "1.1.3" + } + } + }, + "installed_plugins": { + "cordova-plugin-app-name": { + "APP_NAME": "Stone Island", + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-compat": { + "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": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-geolocation": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-inappbrowser": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-network-information": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-splashscreen": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-statusbar": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-whitelist": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-x-socialsharing": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "ionic-plugin-keyboard": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "phonegap-plugin-push": { + "SENDER_ID": "85075801930", + "PACKAGE_NAME": "us.okfoc.stoneisland" + } + }, + "dependent_plugins": {}, + "modules": [ + { + "id": "cordova-plugin-customurlscheme.LaunchMyApp", + "file": "plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js", + "pluginId": "cordova-plugin-customurlscheme", + "clobbers": [ + "window.plugins.launchmyapp" + ] + }, + { + "id": "cordova-plugin-device.device", + "file": "plugins/cordova-plugin-device/www/device.js", + "pluginId": "cordova-plugin-device", + "clobbers": [ + "device" + ] + }, + { + "id": "cordova-plugin-dialogs.notification", + "file": "plugins/cordova-plugin-dialogs/www/notification.js", + "pluginId": "cordova-plugin-dialogs", + "merges": [ + "navigator.notification" + ] + }, + { + "id": "cordova-plugin-geolocation.Coordinates", + "file": "plugins/cordova-plugin-geolocation/www/Coordinates.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "Coordinates" + ] + }, + { + "id": "cordova-plugin-geolocation.PositionError", + "file": "plugins/cordova-plugin-geolocation/www/PositionError.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "PositionError" + ] + }, + { + "id": "cordova-plugin-geolocation.Position", + "file": "plugins/cordova-plugin-geolocation/www/Position.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "Position" + ] + }, + { + "id": "cordova-plugin-geolocation.geolocation", + "file": "plugins/cordova-plugin-geolocation/www/geolocation.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "navigator.geolocation" + ] + }, + { + "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", + "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-statusbar.statusbar", + "file": "plugins/cordova-plugin-statusbar/www/statusbar.js", + "pluginId": "cordova-plugin-statusbar", + "clobbers": [ + "window.StatusBar" + ] + }, + { + "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": "ionic-plugin-keyboard.keyboard", + "file": "plugins/ionic-plugin-keyboard/www/ios/keyboard.js", + "pluginId": "ionic-plugin-keyboard", + "clobbers": [ + "cordova.plugins.Keyboard" + ], + "runs": true + }, + { + "id": "phonegap-plugin-push.PushNotification", + "file": "plugins/phonegap-plugin-push/www/push.js", + "pluginId": "phonegap-plugin-push", + "clobbers": [ + "PushNotification" + ] } + ], + "plugin_metadata": { + "cordova-plugin-app-name": "1.0.4", + "cordova-plugin-compat": "1.1.0", + "cordova-plugin-customurlscheme": "4.2.0", + "cordova-plugin-device": "1.1.3", + "cordova-plugin-dialogs": "1.3.0", + "cordova-plugin-geolocation": "2.4.0", + "cordova-plugin-inappbrowser": "1.5.0", + "cordova-plugin-network-information": "1.3.0", + "cordova-plugin-splashscreen": "4.0.3", + "cordova-plugin-statusbar": "2.2.3", + "cordova-plugin-whitelist": "1.3.0", + "cordova-plugin-x-socialsharing": "5.1.3", + "ionic-plugin-keyboard": "2.2.1", + "phonegap-plugin-push": "1.9.2" + } }
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/platform_www/cordova-js-src/platform.js b/StoneIsland/platforms/ios/platform_www/cordova-js-src/platform.js index 36529ba5..2345fa5b 100644 --- a/StoneIsland/platforms/ios/platform_www/cordova-js-src/platform.js +++ b/StoneIsland/platforms/ios/platform_www/cordova-js-src/platform.js @@ -21,8 +21,11 @@ module.exports = { id: 'ios', - bootstrap: function() { + bootstrap: function () { + // Attach the console polyfill that is iOS-only to window.console + // see the file under plugin/ios/console.js + require('cordova/modulemapper').clobbers('cordova/plugin/ios/console', 'window.console'); + require('cordova/channel').onNativeReady.fire(); } }; - diff --git a/StoneIsland/plugins/cordova-plugin-console/www/console-via-logger.js b/StoneIsland/platforms/ios/platform_www/cordova-js-src/plugin/ios/console.js index ffee3263..6224fb44 100644 --- a/StoneIsland/plugins/cordova-plugin-console/www/console-via-logger.js +++ b/StoneIsland/platforms/ios/platform_www/cordova-js-src/plugin/ios/console.js @@ -21,7 +21,7 @@ //------------------------------------------------------------------------------ -var logger = require("./logger"); +var logger = require('cordova/plugin/ios/logger'); //------------------------------------------------------------------------------ // object that we're exporting diff --git a/StoneIsland/plugins/cordova-plugin-console/www/logger.js b/StoneIsland/platforms/ios/platform_www/cordova-js-src/plugin/ios/logger.js index 430d887d..430d887d 100644 --- a/StoneIsland/plugins/cordova-plugin-console/www/logger.js +++ b/StoneIsland/platforms/ios/platform_www/cordova-js-src/plugin/ios/logger.js diff --git a/StoneIsland/platforms/ios/platform_www/cordova.js b/StoneIsland/platforms/ios/platform_www/cordova.js index 3540a020..a320f5ee 100644 --- a/StoneIsland/platforms/ios/platform_www/cordova.js +++ b/StoneIsland/platforms/ios/platform_www/cordova.js @@ -1,5 +1,5 @@ // Platform: ios -// 7c5fcc5a5adfbf3fb8ceaf36fbdd4bd970bd9c20 +// ff66178b108b93be36a1aafe341af17381a727a3 /* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file @@ -19,35 +19,33 @@ under the License. */ ;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '4.4.0'; +var PLATFORM_VERSION_BUILD_LABEL = '4.5.2'; // file: src/scripts/require.js -/*jshint -W079 */ -/*jshint -W020 */ +/* jshint -W079 */ +/* jshint -W020 */ -var require, - define; +var require; +var define; (function () { - var modules = {}, + var modules = {}; // Stack of moduleIds currently being built. - requireStack = [], + var requireStack = []; // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; + var inProgressModules = {}; + var SEPARATOR = '.'; - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; + function build (module) { + var factory = module.factory; + var localRequire = function (id) { + var resultantId = id; + // Its a relative path, so lop off the last portion and add the id (minus "./") + if (id.charAt(0) === '.') { + resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); + } + return require(resultantId); + }; module.exports = {}; delete module.factory; factory(localRequire, module.exports, module); @@ -56,10 +54,10 @@ var require, require = function (id) { if (!modules[id]) { - throw "module " + id + " not found"; + throw 'module ' + id + ' not found'; } else if (id in inProgressModules) { var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; + throw 'Cycle in require graph: ' + cycle; } if (modules[id].factory) { try { @@ -76,7 +74,7 @@ var require, define = function (id, factory) { if (modules[id]) { - throw "module " + id + " already defined"; + throw 'module ' + id + ' already defined'; } modules[id] = { @@ -92,8 +90,8 @@ var require, define.moduleMap = modules; })(); -//Export for use in node -if (typeof module === "object" && typeof require === "function") { +// Export for use in node +if (typeof module === 'object' && typeof require === 'function') { module.exports.require = require; module.exports.define = define; } @@ -103,15 +101,13 @@ define("cordova", function(require, exports, module) { // Workaround for Windows 10 in hosted environment case // http://www.w3.org/html/wg/drafts/html/master/browsers.html#named-access-on-the-window-object -if (window.cordova && !(window.cordova instanceof HTMLElement)) { - throw new Error("cordova already defined"); +if (window.cordova && !(window.cordova instanceof HTMLElement)) { // eslint-disable-line no-undef + throw new Error('cordova already defined'); } - var channel = require('cordova/channel'); var platform = require('cordova/platform'); - /** * Intercept calls to addEventListener + removeEventListener and handle deviceready, * resume, and pause events. @@ -124,48 +120,48 @@ var m_window_removeEventListener = window.removeEventListener; /** * Houses custom event handlers to intercept on document + window event listeners. */ -var documentEventHandlers = {}, - windowEventHandlers = {}; +var documentEventHandlers = {}; +var windowEventHandlers = {}; -document.addEventListener = function(evt, handler, capture) { +document.addEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { + if (typeof documentEventHandlers[e] !== 'undefined') { documentEventHandlers[e].subscribe(handler); } else { m_document_addEventListener.call(document, evt, handler, capture); } }; -window.addEventListener = function(evt, handler, capture) { +window.addEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { + if (typeof windowEventHandlers[e] !== 'undefined') { windowEventHandlers[e].subscribe(handler); } else { m_window_addEventListener.call(window, evt, handler, capture); } }; -document.removeEventListener = function(evt, handler, capture) { +document.removeEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { + if (typeof documentEventHandlers[e] !== 'undefined') { documentEventHandlers[e].unsubscribe(handler); } else { m_document_removeEventListener.call(document, evt, handler, capture); } }; -window.removeEventListener = function(evt, handler, capture) { +window.removeEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { + if (typeof windowEventHandlers[e] !== 'undefined') { windowEventHandlers[e].unsubscribe(handler); } else { m_window_removeEventListener.call(window, evt, handler, capture); } }; -function createEvent(type, data) { +function createEvent (type, data) { var event = document.createEvent('Events'); event.initEvent(type, false, false); if (data) { @@ -178,29 +174,32 @@ function createEvent(type, data) { return event; } - +/* eslint-disable no-undef */ var cordova = { - define:define, - require:require, - version:PLATFORM_VERSION_BUILD_LABEL, - platformVersion:PLATFORM_VERSION_BUILD_LABEL, - platformId:platform.id, + define: define, + require: require, + version: PLATFORM_VERSION_BUILD_LABEL, + platformVersion: PLATFORM_VERSION_BUILD_LABEL, + platformId: platform.id, + + /* eslint-enable no-undef */ + /** * Methods to add/remove your own addEventListener hijacking on document + window. */ - addWindowEventHandler:function(event) { + addWindowEventHandler: function (event) { return (windowEventHandlers[event] = channel.create(event)); }, - addStickyDocumentEventHandler:function(event) { + addStickyDocumentEventHandler: function (event) { return (documentEventHandlers[event] = channel.createSticky(event)); }, - addDocumentEventHandler:function(event) { + addDocumentEventHandler: function (event) { return (documentEventHandlers[event] = channel.create(event)); }, - removeWindowEventHandler:function(event) { + removeWindowEventHandler: function (event) { delete windowEventHandlers[event]; }, - removeDocumentEventHandler:function(event) { + removeDocumentEventHandler: function (event) { delete documentEventHandlers[event]; }, /** @@ -208,24 +207,23 @@ var cordova = { * * @return object */ - getOriginalHandlers: function() { + getOriginalHandlers: function () { return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; + 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; }, /** * Method to fire event from native code * bNoDetach is required for events which cause an exception which needs to be caught in native code */ - fireDocumentEvent: function(type, data, bNoDetach) { + fireDocumentEvent: function (type, data, bNoDetach) { var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { + if (typeof documentEventHandlers[type] !== 'undefined') { + if (bNoDetach) { documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { + } else { + setTimeout(function () { // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { + if (type === 'deviceready') { document.dispatchEvent(evt); } documentEventHandlers[type].fire(evt); @@ -235,10 +233,10 @@ var cordova = { document.dispatchEvent(evt); } }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { + fireWindowEvent: function (type, data) { + var evt = createEvent(type, data); + if (typeof windowEventHandlers[type] !== 'undefined') { + setTimeout(function () { windowEventHandlers[type].fire(evt); }, 0); } else { @@ -252,7 +250,7 @@ var cordova = { // Randomize the starting callbackId to avoid collisions after refreshing or navigating. // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, + callbacks: {}, callbackStatus: { NO_RESULT: 0, OK: 1, @@ -269,14 +267,14 @@ var cordova = { /** * Called by native code when returning successful result from an action. */ - callbackSuccess: function(callbackId, args) { + callbackSuccess: function (callbackId, args) { cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); }, /** * Called by native code when returning error result from an action. */ - callbackError: function(callbackId, args) { + callbackError: function (callbackId, args) { // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. // Derive success from status. cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); @@ -285,11 +283,11 @@ var cordova = { /** * Called by native code when returning the result from an action. */ - callbackFromNative: function(callbackId, isSuccess, status, args, keepCallback) { + callbackFromNative: function (callbackId, isSuccess, status, args, keepCallback) { try { var callback = cordova.callbacks[callbackId]; if (callback) { - if (isSuccess && status == cordova.callbackStatus.OK) { + if (isSuccess && status === cordova.callbackStatus.OK) { callback.success && callback.success.apply(null, args); } else if (!isSuccess) { callback.fail && callback.fail.apply(null, args); @@ -306,26 +304,24 @@ var cordova = { delete cordova.callbacks[callbackId]; } } - } - catch (err) { - var msg = "Error in " + (isSuccess ? "Success" : "Error") + " callbackId: " + callbackId + " : " + err; + } catch (err) { + var msg = 'Error in ' + (isSuccess ? 'Success' : 'Error') + ' callbackId: ' + callbackId + ' : ' + err; console && console.log && console.log(msg); - cordova.fireWindowEvent("cordovacallbackerror", { 'message': msg }); + cordova.fireWindowEvent('cordovacallbackerror', { 'message': msg }); throw err; } }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { + addConstructor: function (func) { + channel.onCordovaReady.subscribe(function () { try { func(); - } catch(e) { - console.log("Failed to run constructor: " + e); + } catch (e) { + console.log('Failed to run constructor: ' + e); } }); } }; - module.exports = cordova; }); @@ -346,29 +342,29 @@ var typeMap = { 'O': 'Object' }; -function extractParamName(callee, argIndex) { +function extractParamName (callee, argIndex) { return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; } -function checkArgs(spec, functionName, args, opt_callee) { +function checkArgs (spec, functionName, args, opt_callee) { if (!moduleExports.enableChecks) { return; } var errMsg = null; var typeName; for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; + var c = spec.charAt(i); + var cUpper = c.toUpperCase(); + var arg = args[i]; // Asterix means allow anything. - if (c == '*') { + if (c === '*') { continue; } typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { + if ((arg === null || arg === undefined) && c === cUpper) { continue; } - if (typeName != typeMap[cUpper]) { + if (typeName !== typeMap[cUpper]) { errMsg = 'Expected ' + typeMap[cUpper]; break; } @@ -377,14 +373,14 @@ function checkArgs(spec, functionName, args, opt_callee) { errMsg += ', but got ' + typeName + '.'; errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { + if (typeof jasmine === 'undefined') { console.error(errMsg); } throw TypeError(errMsg); } } -function getValue(value, defaultValue) { +function getValue (value, defaultValue) { return value === undefined ? defaultValue : value; } @@ -392,7 +388,6 @@ moduleExports.checkArgs = checkArgs; moduleExports.getValue = getValue; moduleExports.enableChecks = true; - }); // file: src/common/base64.js @@ -400,58 +395,58 @@ define("cordova/base64", function(require, exports, module) { var base64 = exports; -base64.fromArrayBuffer = function(arrayBuffer) { +base64.fromArrayBuffer = function (arrayBuffer) { var array = new Uint8Array(arrayBuffer); return uint8ToBase64(array); }; -base64.toArrayBuffer = function(str) { - var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary'); +base64.toArrayBuffer = function (str) { + var decodedStr = typeof atob !== 'undefined' ? atob(str) : Buffer.from(str, 'base64').toString('binary'); // eslint-disable-line no-undef var arrayBuffer = new ArrayBuffer(decodedStr.length); var array = new Uint8Array(arrayBuffer); - for (var i=0, len=decodedStr.length; i < len; i++) { + for (var i = 0, len = decodedStr.length; i < len; i++) { array[i] = decodedStr.charCodeAt(i); } return arrayBuffer; }; -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ /* This code is based on the performance tests at http://jsperf.com/b64tests * This 12-bit-at-a-time algorithm was the best performing version on all * platforms tested. */ -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var b64_6bit = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var b64_12bit; -var b64_12bitTable = function() { +var b64_12bitTable = function () { b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; + for (var i = 0; i < 64; i++) { + for (var j = 0; j < 64; j++) { + b64_12bit[i * 64 + j] = b64_6bit[i] + b64_6bit[j]; } } - b64_12bitTable = function() { return b64_12bit; }; + b64_12bitTable = function () { return b64_12bit; }; return b64_12bit; }; -function uint8ToBase64(rawData) { +function uint8ToBase64 (rawData) { var numBytes = rawData.byteLength; - var output=""; + var output = ''; var segment; var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; + for (var i = 0; i < numBytes - 2; i += 3) { + segment = (rawData[i] << 16) + (rawData[i + 1] << 8) + rawData[i + 2]; output += table[segment >> 12]; output += table[segment & 0xfff]; } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); + if (numBytes - i === 2) { + segment = (rawData[i] << 16) + (rawData[i + 1] << 8); output += table[segment >> 12]; output += b64_6bit[(segment & 0xfff) >> 6]; output += '='; - } else if (numBytes - i == 1) { + } else if (numBytes - i === 1) { segment = (rawData[i] << 16); output += table[segment >> 12]; output += '=='; @@ -466,7 +461,7 @@ define("cordova/builder", function(require, exports, module) { var utils = require('cordova/utils'); -function each(objects, func, context) { +function each (objects, func, context) { for (var prop in objects) { if (objects.hasOwnProperty(prop)) { func.apply(context, [objects[prop], prop]); @@ -474,7 +469,7 @@ function each(objects, func, context) { } } -function clobber(obj, key, value) { +function clobber (obj, key, value) { exports.replaceHookForTesting(obj, key); var needsProperty = false; try { @@ -484,15 +479,15 @@ function clobber(obj, key, value) { } // Getters can only be overridden by getters. if (needsProperty || obj[key] !== value) { - utils.defineGetter(obj, key, function() { + utils.defineGetter(obj, key, function () { return value; }); } } -function assignOrWrapInDeprecateGetter(obj, key, value, message) { +function assignOrWrapInDeprecateGetter (obj, key, value, message) { if (message) { - utils.defineGetter(obj, key, function() { + utils.defineGetter(obj, key, function () { console.log(message); delete obj[key]; clobber(obj, key, value); @@ -503,7 +498,7 @@ function assignOrWrapInDeprecateGetter(obj, key, value, message) { } } -function include(parent, objects, clobber, merge) { +function include (parent, objects, clobber, merge) { each(objects, function (obj, key) { try { var result = obj.path ? require(obj.path) : {}; @@ -523,7 +518,7 @@ function include(parent, objects, clobber, merge) { result = parent[key]; } else { // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { + if (typeof parent[key] === 'undefined') { assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); } else { // Set result to what already exists, so we can build children into it if they exist. @@ -534,7 +529,7 @@ function include(parent, objects, clobber, merge) { if (obj.children) { include(result, obj.children, clobber, merge); } - } catch(e) { + } catch (e) { utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); } }); @@ -547,7 +542,7 @@ function include(parent, objects, clobber, merge) { * @param target Object to merge properties into. * @param src Object to merge properties from. */ -function recursiveMerge(target, src) { +function recursiveMerge (target, src) { for (var prop in src) { if (src.hasOwnProperty(prop)) { if (target.prototype && target.prototype.constructor === target) { @@ -564,26 +559,26 @@ function recursiveMerge(target, src) { } } -exports.buildIntoButDoNotClobber = function(objects, target) { +exports.buildIntoButDoNotClobber = function (objects, target) { include(target, objects, false, false); }; -exports.buildIntoAndClobber = function(objects, target) { +exports.buildIntoAndClobber = function (objects, target) { include(target, objects, true, false); }; -exports.buildIntoAndMerge = function(objects, target) { +exports.buildIntoAndMerge = function (objects, target) { include(target, objects, true, true); }; exports.recursiveMerge = recursiveMerge; exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; +exports.replaceHookForTesting = function () {}; }); // file: src/common/channel.js define("cordova/channel", function(require, exports, module) { -var utils = require('cordova/utils'), - nextGuid = 1; +var utils = require('cordova/utils'); +var nextGuid = 1; /** * Custom pub-sub "channel" that can have functions subscribed to it @@ -623,7 +618,7 @@ var utils = require('cordova/utils'), * @constructor * @param type String the channel name */ -var Channel = function(type, sticky) { +var Channel = function (type, sticky) { this.type = type; // Map of guid -> function. this.handlers = {}; @@ -636,72 +631,73 @@ var Channel = function(type, sticky) { // Function that is called when the first listener is subscribed, or when // the last listener is unsubscribed. this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); +}; +var channel = { + /** + * Calls the provided function only after all of the channels specified + * have been fired. All channels must be sticky channels. + */ + join: function (h, c) { + var len = c.length; + var i = len; + var f = function () { + if (!(--i)) h(); + }; + for (var j = 0; j < len; j++) { + if (c[j].state === 0) { + throw Error('Can only use join with sticky channels.'); } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, + c[j].subscribe(f); + } + if (!len) h(); + }, + /* eslint-disable no-return-assign */ + create: function (type) { + return channel[type] = new Channel(type, false); + }, + createSticky: function (type) { + return channel[type] = new Channel(type, true); + }, + /* eslint-enable no-return-assign */ + /** + * cordova Channels that must fire before "deviceready" is fired. + */ + deviceReadyChannelsArray: [], + deviceReadyChannelsMap: {}, - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, + /** + * Indicate that a feature needs to be initialized before it is ready to be used. + * This holds up Cordova's "deviceready" event until the feature has been initialized + * and Cordova.initComplete(feature) is called. + * + * @param feature {String} The unique feature name + */ + waitForInitialization: function (feature) { + if (feature) { + var c = channel[feature] || this.createSticky(feature); + this.deviceReadyChannelsMap[feature] = c; + this.deviceReadyChannelsArray.push(c); + } + }, - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } + /** + * Indicate that initialization code has completed and the feature is ready to be used. + * + * @param feature {String} The unique feature name + */ + initializationComplete: function (feature) { + var c = this.deviceReadyChannelsMap[feature]; + if (c) { + c.fire(); } - }; + } +}; -function checkSubscriptionArgument(argument) { - if (typeof argument !== "function" && typeof argument.handleEvent !== "function") { +function checkSubscriptionArgument (argument) { + if (typeof argument !== 'function' && typeof argument.handleEvent !== 'function') { throw new Error( - "Must provide a function or an EventListener object " + - "implementing the handleEvent interface." + 'Must provide a function or an EventListener object ' + + 'implementing the handleEvent interface.' ); } } @@ -713,11 +709,11 @@ function checkSubscriptionArgument(argument) { * and a guid that can be used to stop subscribing to the channel. * Returns the guid. */ -Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { +Channel.prototype.subscribe = function (eventListenerOrFunction, eventListener) { checkSubscriptionArgument(eventListenerOrFunction); var handleEvent, guid; - if (eventListenerOrFunction && typeof eventListenerOrFunction === "object") { + if (eventListenerOrFunction && typeof eventListenerOrFunction === 'object') { // Received an EventListener object implementing the handleEvent interface handleEvent = eventListenerOrFunction.handleEvent; eventListener = eventListenerOrFunction; @@ -726,13 +722,13 @@ Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { handleEvent = eventListenerOrFunction; } - if (this.state == 2) { + if (this.state === 2) { handleEvent.apply(eventListener || this, this.fireArgs); return; } guid = eventListenerOrFunction.observer_guid; - if (typeof eventListener === "object") { + if (typeof eventListener === 'object') { handleEvent = utils.close(eventListener, handleEvent); } @@ -747,7 +743,7 @@ Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { if (!this.handlers[guid]) { this.handlers[guid] = handleEvent; this.numHandlers++; - if (this.numHandlers == 1) { + if (this.numHandlers === 1) { this.onHasSubscribersChange && this.onHasSubscribersChange(); } } @@ -756,11 +752,11 @@ Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { /** * Unsubscribes the function with the given guid from the channel. */ -Channel.prototype.unsubscribe = function(eventListenerOrFunction) { +Channel.prototype.unsubscribe = function (eventListenerOrFunction) { checkSubscriptionArgument(eventListenerOrFunction); var handleEvent, guid, handler; - if (eventListenerOrFunction && typeof eventListenerOrFunction === "object") { + if (eventListenerOrFunction && typeof eventListenerOrFunction === 'object') { // Received an EventListener object implementing the handleEvent interface handleEvent = eventListenerOrFunction.handleEvent; } else { @@ -782,11 +778,11 @@ Channel.prototype.unsubscribe = function(eventListenerOrFunction) { /** * Calls all functions subscribed to this channel. */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); +Channel.prototype.fire = function (e) { + var fail = false; // eslint-disable-line no-unused-vars + var fireArgs = Array.prototype.slice.call(arguments); // Apply stickiness. - if (this.state == 1) { + if (this.state === 1) { this.state = 2; this.fireArgs = fireArgs; } @@ -800,7 +796,7 @@ Channel.prototype.fire = function(e) { for (var i = 0; i < toCall.length; ++i) { toCall[i].apply(this, fireArgs); } - if (this.state == 2 && this.numHandlers) { + if (this.state === 2 && this.numHandlers) { this.numHandlers = 0; this.handlers = {}; this.onHasSubscribersChange && this.onHasSubscribersChange(); @@ -808,7 +804,6 @@ Channel.prototype.fire = function(e) { } }; - // defining them here so they are ready super fast! // DOM event that is received when the web page is loaded and parsed. channel.createSticky('onDOMContentLoaded'); @@ -841,7 +836,7 @@ module.exports = channel; }); -// file: /Users/shazron/Documents/git/apache/cordova-ios/cordova-js-src/exec.js +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/exec.js define("cordova/exec", function(require, exports, module) { /*global require, module, atob, document */ @@ -1091,31 +1086,31 @@ module.exports = execProxy; // file: src/common/exec/proxy.js define("cordova/exec/proxy", function(require, exports, module) { - // internal map of proxy function var CommandProxyMap = {}; module.exports = { // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); + add: function (id, proxyObj) { + console.log('adding proxy for ' + id); CommandProxyMap[id] = proxyObj; return proxyObj; }, // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { + remove: function (id) { var proxy = CommandProxyMap[id]; delete CommandProxyMap[id]; CommandProxyMap[id] = null; return proxy; }, - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); + get: function (service, action) { + return (CommandProxyMap[service] ? CommandProxyMap[service][action] : null); } }; + }); // file: src/common/init.js @@ -1130,16 +1125,16 @@ var utils = require('cordova/utils'); var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; -function logUnfiredChannels(arr) { +function logUnfiredChannels (arr) { for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { + if (arr[i].state !== 2) { console.log('Channel not fired: ' + arr[i].type); } } } -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { +window.setTimeout(function () { + if (channel.onDeviceReady.state !== 2) { console.log('deviceready has not fired after 5 seconds.'); logUnfiredChannels(platformInitChannelsArray); logUnfiredChannels(channel.deviceReadyChannelsArray); @@ -1148,20 +1143,19 @@ window.setTimeout(function() { // Replace navigator before any modules are required(), to ensure it happens as soon as possible. // We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; +function replaceNavigator (origNavigator) { + var CordovaNavigator = function () {}; CordovaNavigator.prototype = origNavigator; var newNavigator = new CordovaNavigator(); // This work-around really only applies to new APIs that are newer than Function.bind. // Without it, APIs such as getGamepads() break. if (CordovaNavigator.bind) { for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { + if (typeof origNavigator[key] === 'function') { newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { + } else { + (function (k) { + utils.defineGetterSetter(newNavigator, key, function () { return origNavigator[k]; }); })(key); @@ -1177,12 +1171,12 @@ if (window.navigator) { if (!window.console) { window.console = { - log: function(){} + log: function () {} }; } if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); + window.console.warn = function (msg) { + this.log('warn: ' + msg); }; } @@ -1193,10 +1187,10 @@ channel.onActivated = cordova.addDocumentEventHandler('activated'); channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); // Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { +if (document.readyState === 'complete' || document.readyState === 'interactive') { channel.onDOMContentLoaded.fire(); } else { - document.addEventListener('DOMContentLoaded', function() { + document.addEventListener('DOMContentLoaded', function () { channel.onDOMContentLoaded.fire(); }, false); } @@ -1217,8 +1211,8 @@ platform.bootstrap && platform.bootstrap(); // Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. // The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { +setTimeout(function () { + pluginloader.load(function () { channel.onPluginsReady.fire(); }); }, 0); @@ -1226,7 +1220,7 @@ setTimeout(function() { /** * Create all cordova objects once native side is ready. */ -channel.join(function() { +channel.join(function () { modulemapper.mapModules(window); platform.initialize && platform.initialize(); @@ -1237,13 +1231,12 @@ channel.join(function() { // Fire onDeviceReady event once page has fully loaded, all // constructors have run and cordova info has been received from native // side. - channel.join(function() { + channel.join(function () { require('cordova').fireDocumentEvent('deviceready'); }, channel.deviceReadyChannelsArray); }, platformInitChannelsArray); - }); // file: src/common/init_b.js @@ -1261,16 +1254,16 @@ var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeRea // setting exec cordova.exec = require('cordova/exec'); -function logUnfiredChannels(arr) { +function logUnfiredChannels (arr) { for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { + if (arr[i].state !== 2) { console.log('Channel not fired: ' + arr[i].type); } } } -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { +window.setTimeout(function () { + if (channel.onDeviceReady.state !== 2) { console.log('deviceready has not fired after 5 seconds.'); logUnfiredChannels(platformInitChannelsArray); logUnfiredChannels(channel.deviceReadyChannelsArray); @@ -1279,20 +1272,19 @@ window.setTimeout(function() { // Replace navigator before any modules are required(), to ensure it happens as soon as possible. // We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; +function replaceNavigator (origNavigator) { + var CordovaNavigator = function () {}; CordovaNavigator.prototype = origNavigator; var newNavigator = new CordovaNavigator(); // This work-around really only applies to new APIs that are newer than Function.bind. // Without it, APIs such as getGamepads() break. if (CordovaNavigator.bind) { for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { + if (typeof origNavigator[key] === 'function') { newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { + } else { + (function (k) { + utils.defineGetterSetter(newNavigator, key, function () { return origNavigator[k]; }); })(key); @@ -1307,12 +1299,12 @@ if (window.navigator) { if (!window.console) { window.console = { - log: function(){} + log: function () {} }; } if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); + window.console.warn = function (msg) { + this.log('warn: ' + msg); }; } @@ -1323,10 +1315,10 @@ channel.onActivated = cordova.addDocumentEventHandler('activated'); channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); // Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { +if (document.readyState === 'complete' || document.readyState === 'interactive') { channel.onDOMContentLoaded.fire(); } else { - document.addEventListener('DOMContentLoaded', function() { + document.addEventListener('DOMContentLoaded', function () { channel.onDOMContentLoaded.fire(); }, false); } @@ -1343,8 +1335,8 @@ platform.bootstrap && platform.bootstrap(); // Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. // The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { +setTimeout(function () { + pluginloader.load(function () { channel.onPluginsReady.fire(); }); }, 0); @@ -1352,7 +1344,7 @@ setTimeout(function() { /** * Create all cordova objects once native side is ready. */ -channel.join(function() { +channel.join(function () { modulemapper.mapModules(window); platform.initialize && platform.initialize(); @@ -1363,7 +1355,7 @@ channel.join(function() { // Fire onDeviceReady event once page has fully loaded, all // constructors have run and cordova info has been received from native // side. - channel.join(function() { + channel.join(function () { require('cordova').fireDocumentEvent('deviceready'); }, channel.deviceReadyChannelsArray); @@ -1374,17 +1366,17 @@ channel.join(function() { // file: src/common/modulemapper.js define("cordova/modulemapper", function(require, exports, module) { -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; +var builder = require('cordova/builder'); +var moduleMap = define.moduleMap; // eslint-disable-line no-undef +var symbolList; +var deprecationMap; -exports.reset = function() { +exports.reset = function () { symbolList = []; deprecationMap = {}; }; -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { +function addEntry (strategy, moduleName, symbolPath, opt_deprecationMessage) { if (!(moduleName in moduleMap)) { throw new Error('Module ' + moduleName + ' does not exist.'); } @@ -1395,35 +1387,35 @@ function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { } // Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.clobbers = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('c', moduleName, symbolPath, opt_deprecationMessage); }; -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.merges = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('m', moduleName, symbolPath, opt_deprecationMessage); }; -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.defaults = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('d', moduleName, symbolPath, opt_deprecationMessage); }; -exports.runs = function(moduleName) { +exports.runs = function (moduleName) { addEntry('r', moduleName, null); }; -function prepareNamespace(symbolPath, context) { +function prepareNamespace (symbolPath, context) { if (!symbolPath) { return context; } var parts = symbolPath.split('.'); var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { + for (var i = 0, part; part = parts[i]; ++i) { // eslint-disable-line no-cond-assign cur = cur[part] = cur[part] || {}; } return cur; } -exports.mapModules = function(context) { +exports.mapModules = function (context) { var origSymbols = {}; context.CDV_origSymbols = origSymbols; for (var i = 0, len = symbolList.length; i < len; i += 3) { @@ -1431,7 +1423,7 @@ exports.mapModules = function(context) { var moduleName = symbolList[i + 1]; var module = require(moduleName); // <runs/> - if (strategy == 'r') { + if (strategy === 'r') { continue; } var symbolPath = symbolList[i + 2]; @@ -1443,9 +1435,9 @@ exports.mapModules = function(context) { var parentObj = prepareNamespace(namespace, context); var target = parentObj[lastName]; - if (strategy == 'm' && target) { + if (strategy === 'm' && target) { builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { + } else if ((strategy === 'd' && !target) || (strategy !== 'd')) { if (!(symbolPath in origSymbols)) { origSymbols[symbolPath] = target; } @@ -1454,7 +1446,7 @@ exports.mapModules = function(context) { } }; -exports.getOriginalSymbol = function(context, symbolPath) { +exports.getOriginalSymbol = function (context, symbolPath) { var origSymbols = context.CDV_origSymbols; if (origSymbols && (symbolPath in origSymbols)) { return origSymbols[symbolPath]; @@ -1469,22 +1461,21 @@ exports.getOriginalSymbol = function(context, symbolPath) { exports.reset(); - }); // file: src/common/modulemapper_b.js define("cordova/modulemapper_b", function(require, exports, module) { -var builder = require('cordova/builder'), - symbolList = [], - deprecationMap; +var builder = require('cordova/builder'); +var symbolList = []; +var deprecationMap; -exports.reset = function() { +exports.reset = function () { symbolList = []; deprecationMap = {}; }; -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { +function addEntry (strategy, moduleName, symbolPath, opt_deprecationMessage) { symbolList.push(strategy, moduleName, symbolPath); if (opt_deprecationMessage) { deprecationMap[symbolPath] = opt_deprecationMessage; @@ -1492,35 +1483,35 @@ function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { } // Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.clobbers = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('c', moduleName, symbolPath, opt_deprecationMessage); }; -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.merges = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('m', moduleName, symbolPath, opt_deprecationMessage); }; -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.defaults = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('d', moduleName, symbolPath, opt_deprecationMessage); }; -exports.runs = function(moduleName) { +exports.runs = function (moduleName) { addEntry('r', moduleName, null); }; -function prepareNamespace(symbolPath, context) { +function prepareNamespace (symbolPath, context) { if (!symbolPath) { return context; } var parts = symbolPath.split('.'); var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { + for (var i = 0, part; part = parts[i]; ++i) { // eslint-disable-line no-cond-assign cur = cur[part] = cur[part] || {}; } return cur; } -exports.mapModules = function(context) { +exports.mapModules = function (context) { var origSymbols = {}; context.CDV_origSymbols = origSymbols; for (var i = 0, len = symbolList.length; i < len; i += 3) { @@ -1528,7 +1519,7 @@ exports.mapModules = function(context) { var moduleName = symbolList[i + 1]; var module = require(moduleName); // <runs/> - if (strategy == 'r') { + if (strategy === 'r') { continue; } var symbolPath = symbolList[i + 2]; @@ -1540,9 +1531,9 @@ exports.mapModules = function(context) { var parentObj = prepareNamespace(namespace, context); var target = parentObj[lastName]; - if (strategy == 'm' && target) { + if (strategy === 'm' && target) { builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { + } else if ((strategy === 'd' && !target) || (strategy !== 'd')) { if (!(symbolPath in origSymbols)) { origSymbols[symbolPath] = target; } @@ -1551,7 +1542,7 @@ exports.mapModules = function(context) { } }; -exports.getOriginalSymbol = function(context, symbolPath) { +exports.getOriginalSymbol = function (context, symbolPath) { var origSymbols = context.CDV_origSymbols; if (origSymbols && (symbolPath in origSymbols)) { return origSymbols[symbolPath]; @@ -1566,19 +1557,531 @@ exports.getOriginalSymbol = function(context, symbolPath) { exports.reset(); - }); -// file: /Users/shazron/Documents/git/apache/cordova-ios/cordova-js-src/platform.js +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/platform.js define("cordova/platform", function(require, exports, module) { module.exports = { id: 'ios', - bootstrap: function() { + bootstrap: function () { + // Attach the console polyfill that is iOS-only to window.console + // see the file under plugin/ios/console.js + require('cordova/modulemapper').clobbers('cordova/plugin/ios/console', 'window.console'); + require('cordova/channel').onNativeReady.fire(); } }; +}); + +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/plugin/ios/console.js +define("cordova/plugin/ios/console", function(require, exports, module) { + +//------------------------------------------------------------------------------ + +var logger = require('cordova/plugin/ios/logger'); + +//------------------------------------------------------------------------------ +// 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]); + } +} + +}); + +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/plugin/ios/logger.js +define("cordova/plugin/ios/logger", function(require, exports, module) { + +//------------------------------------------------------------------------------ +// 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 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); }); @@ -1586,12 +2089,11 @@ module.exports = { define("cordova/pluginloader", function(require, exports, module) { var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); // Helper function to inject a <script> tag. // Exported for testing. -exports.injectScript = function(url, onload, onerror) { - var script = document.createElement("script"); +exports.injectScript = function (url, onload, onerror) { + var script = document.createElement('script'); // onload fires even when script fails loads with an error. script.onload = onload; // onerror fires for malformed URLs. @@ -1600,13 +2102,13 @@ exports.injectScript = function(url, onload, onerror) { document.head.appendChild(script); }; -function injectIfNecessary(id, url, onload, onerror) { +function injectIfNecessary (id, url, onload, onerror) { onerror = onerror || onload; - if (id in define.moduleMap) { + if (id in define.moduleMap) { // eslint-disable-line no-undef onload(); } else { - exports.injectScript(url, function() { - if (id in define.moduleMap) { + exports.injectScript(url, function () { + if (id in define.moduleMap) { // eslint-disable-line no-undef onload(); } else { onerror(); @@ -1615,9 +2117,9 @@ function injectIfNecessary(id, url, onload, onerror) { } } -function onScriptLoadingComplete(moduleList, finishPluginLoading) { +function onScriptLoadingComplete (moduleList, finishPluginLoading) { // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { + for (var i = 0, module; module = moduleList[i]; i++) { // eslint-disable-line no-cond-assign if (module.clobbers && module.clobbers.length) { for (var j = 0; j < module.clobbers.length; j++) { modulemapper.clobbers(module.id, module.clobbers[j]); @@ -1643,7 +2145,7 @@ function onScriptLoadingComplete(moduleList, finishPluginLoading) { // See plugman's plugin_loader.js for the details of this object. // This function is only called if the really is a plugins array that isn't empty. // Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { +function handlePluginsObject (path, moduleList, finishPluginLoading) { // Now inject the scripts. var scriptCounter = moduleList.length; @@ -1651,7 +2153,7 @@ function handlePluginsObject(path, moduleList, finishPluginLoading) { finishPluginLoading(); return; } - function scriptLoadedCallback() { + function scriptLoadedCallback () { if (!--scriptCounter) { onScriptLoadingComplete(moduleList, finishPluginLoading); } @@ -1662,13 +2164,13 @@ function handlePluginsObject(path, moduleList, finishPluginLoading) { } } -function findCordovaPath() { +function findCordovaPath () { var path = null; var scripts = document.getElementsByTagName('script'); var term = '/cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { + for (var n = scripts.length - 1; n > -1; n--) { var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007). - if (src.indexOf(term) == (src.length - term.length)) { + if (src.indexOf(term) === (src.length - term.length)) { path = src.substring(0, src.length - term.length) + '/'; break; } @@ -1679,19 +2181,18 @@ function findCordovaPath() { // Tries to load all plugins' js-modules. // This is an async process, but onDeviceReady is blocked on onPluginsReady. // onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { +exports.load = function (callback) { var pathPrefix = findCordovaPath(); if (pathPrefix === null) { console.log('Could not find cordova.js script tag. Plugin loading may fail.'); pathPrefix = ''; } - injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() { - var moduleList = require("cordova/plugin_list"); + injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function () { + var moduleList = require('cordova/plugin_list'); handlePluginsObject(pathPrefix, moduleList, callback); }, callback); }; - }); // file: src/common/pluginloader_b.js @@ -1701,14 +2202,14 @@ var modulemapper = require('cordova/modulemapper'); // Handler for the cordova_plugins.js content. // See plugman's plugin_loader.js for the details of this object. -function handlePluginsObject(moduleList) { +function handlePluginsObject (moduleList) { // if moduleList is not defined or empty, we've nothing to do if (!moduleList || !moduleList.length) { return; } // Loop through all the modules and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { + for (var i = 0, module; module = moduleList[i]; i++) { // eslint-disable-line no-cond-assign if (module.clobbers && module.clobbers.length) { for (var j = 0; j < module.clobbers.length; j++) { modulemapper.clobbers(module.id, module.clobbers[j]); @@ -1732,31 +2233,28 @@ function handlePluginsObject(moduleList) { // but the method accepts callback to be compatible with non-browserify flow. // onDeviceReady is blocked on onPluginsReady. onPluginsReady is fired when there are // no plugins to load, or they are all done. -exports.load = function(callback) { - var moduleList = require("cordova/plugin_list"); +exports.load = function (callback) { + var moduleList = require('cordova/plugin_list'); handlePluginsObject(moduleList); callback(); }; - }); // file: src/common/urlutil.js define("cordova/urlutil", function(require, exports, module) { - /** * For already absolute URLs, returns what is passed in. * For relative URLs, converts them to absolute ones. */ -exports.makeAbsolute = function makeAbsolute(url) { +exports.makeAbsolute = function makeAbsolute (url) { var anchorEl = document.createElement('a'); anchorEl.href = url; return anchorEl.href; }; - }); // file: src/common/utils.js @@ -1767,7 +2265,7 @@ var utils = exports; /** * Defines a property getter / setter for obj[key]. */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { +utils.defineGetterSetter = function (obj, key, getFunc, opt_setFunc) { if (Object.defineProperty) { var desc = { get: getFunc, @@ -1790,13 +2288,13 @@ utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { */ utils.defineGetter = utils.defineGetterSetter; -utils.arrayIndexOf = function(a, item) { +utils.arrayIndexOf = function (a, item) { if (a.indexOf) { return a.indexOf(item); } var len = a.length; for (var i = 0; i < len; ++i) { - if (a[i] == item) { + if (a[i] === item) { return i; } } @@ -1806,15 +2304,15 @@ utils.arrayIndexOf = function(a, item) { /** * Returns whether the item was found in the array. */ -utils.arrayRemove = function(a, item) { +utils.arrayRemove = function (a, item) { var index = utils.arrayIndexOf(a, item); - if (index != -1) { + if (index !== -1) { a.splice(index, 1); } - return index != -1; + return index !== -1; }; -utils.typeName = function(val) { +utils.typeName = function (val) { return Object.prototype.toString.call(val).slice(8, -1); }; @@ -1822,39 +2320,39 @@ utils.typeName = function(val) { * Returns an indication of whether the argument is an array or not */ utils.isArray = Array.isArray || - function(a) {return utils.typeName(a) == 'Array';}; + function (a) { return utils.typeName(a) === 'Array'; }; /** * Returns an indication of whether the argument is a Date or not */ -utils.isDate = function(d) { +utils.isDate = function (d) { return (d instanceof Date); }; /** * Does a deep clone of the object. */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { +utils.clone = function (obj) { + if (!obj || typeof obj === 'function' || utils.isDate(obj) || typeof obj !== 'object') { return obj; } var retVal, i; - if(utils.isArray(obj)){ + if (utils.isArray(obj)) { retVal = []; - for(i = 0; i < obj.length; ++i){ + for (i = 0; i < obj.length; ++i) { retVal.push(utils.clone(obj[i])); } return retVal; } retVal = {}; - for(i in obj){ + for (i in obj) { // https://issues.apache.org/jira/browse/CB-11522 'unknown' type may be returned in // custom protocol activation case on Windows Phone 8.1 causing "No such interface supported" exception // on cloning. - if((!(i in retVal) || retVal[i] != obj[i]) && typeof obj[i] != 'undefined' && typeof obj[i] != 'unknown') { + if ((!(i in retVal) || retVal[i] !== obj[i]) && typeof obj[i] !== 'undefined' && typeof obj[i] !== 'unknown') { // eslint-disable-line valid-typeof retVal[i] = utils.clone(obj[i]); } } @@ -1864,20 +2362,20 @@ utils.clone = function(obj) { /** * Returns a wrapped version of the function */ -utils.close = function(context, func, params) { - return function() { +utils.close = function (context, func, params) { + return function () { var args = params || arguments; return func.apply(context, args); }; }; -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { +// ------------------------------------------------------------------------------ +function UUIDcreatePart (length) { + var uuidpart = ''; + for (var i = 0; i < length; i++) { var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; + if (uuidchar.length === 1) { + uuidchar = '0' + uuidchar; } uuidpart += uuidchar; } @@ -1887,7 +2385,7 @@ function UUIDcreatePart(length) { /** * Create a UUID */ -utils.createUUID = function() { +utils.createUUID = function () { return UUIDcreatePart(4) + '-' + UUIDcreatePart(2) + '-' + UUIDcreatePart(2) + '-' + @@ -1895,16 +2393,15 @@ utils.createUUID = function() { UUIDcreatePart(6); }; - /** * Extends a child object from a parent object using classical inheritance * pattern. */ -utils.extend = (function() { +utils.extend = (function () { // proxy used to establish prototype chain - var F = function() {}; + var F = function () {}; // extend Child from Parent - return function(Child, Parent) { + return function (Child, Parent) { F.prototype = Parent.prototype; Child.prototype = new F(); @@ -1916,7 +2413,7 @@ utils.extend = (function() { /** * Alerts a message in any available way: alert or console.log. */ -utils.alert = function(msg) { +utils.alert = function (msg) { if (window.alert) { window.alert(msg); } else if (console && console.log) { @@ -1924,10 +2421,6 @@ utils.alert = function(msg) { } }; - - - - }); window.cordova = require('cordova'); diff --git a/StoneIsland/platforms/ios/platform_www/cordova_plugins.js b/StoneIsland/platforms/ios/platform_www/cordova_plugins.js index 770af107..e6ad8b23 100644 --- a/StoneIsland/platforms/ios/platform_www/cordova_plugins.js +++ b/StoneIsland/platforms/ios/platform_www/cordova_plugins.js @@ -1,172 +1,146 @@ cordova.define('cordova/plugin_list', function(require, exports, module) { 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-customurlscheme.LaunchMyApp", - "file": "plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js", - "pluginId": "cordova-plugin-customurlscheme", - "clobbers": [ - "window.plugins.launchmyapp" - ] - }, - { - "id": "cordova-plugin-device.device", - "file": "plugins/cordova-plugin-device/www/device.js", - "pluginId": "cordova-plugin-device", - "clobbers": [ - "device" - ] - }, - { - "id": "cordova-plugin-dialogs.notification", - "file": "plugins/cordova-plugin-dialogs/www/notification.js", - "pluginId": "cordova-plugin-dialogs", - "merges": [ - "navigator.notification" - ] - }, - { - "id": "cordova-plugin-geolocation.Coordinates", - "file": "plugins/cordova-plugin-geolocation/www/Coordinates.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "Coordinates" - ] - }, - { - "id": "cordova-plugin-geolocation.PositionError", - "file": "plugins/cordova-plugin-geolocation/www/PositionError.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "PositionError" - ] - }, - { - "id": "cordova-plugin-geolocation.Position", - "file": "plugins/cordova-plugin-geolocation/www/Position.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "Position" - ] - }, - { - "id": "cordova-plugin-geolocation.geolocation", - "file": "plugins/cordova-plugin-geolocation/www/geolocation.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "navigator.geolocation" - ] - }, - { - "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", - "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-statusbar.statusbar", - "file": "plugins/cordova-plugin-statusbar/www/statusbar.js", - "pluginId": "cordova-plugin-statusbar", - "clobbers": [ - "window.StatusBar" - ] - }, - { - "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": "ionic-plugin-keyboard.keyboard", - "file": "plugins/ionic-plugin-keyboard/www/ios/keyboard.js", - "pluginId": "ionic-plugin-keyboard", - "clobbers": [ - "cordova.plugins.Keyboard" - ], - "runs": true - }, - { - "id": "phonegap-plugin-push.PushNotification", - "file": "plugins/phonegap-plugin-push/www/push.js", - "pluginId": "phonegap-plugin-push", - "clobbers": [ - "PushNotification" - ] - }, - { - "id": "cordova-plugin-wkwebview-engine.ios-wkwebview-exec", - "file": "plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js", - "pluginId": "cordova-plugin-wkwebview-engine", - "clobbers": [ - "cordova.exec" - ] - } + { + "id": "cordova-plugin-customurlscheme.LaunchMyApp", + "file": "plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js", + "pluginId": "cordova-plugin-customurlscheme", + "clobbers": [ + "window.plugins.launchmyapp" + ] + }, + { + "id": "cordova-plugin-device.device", + "file": "plugins/cordova-plugin-device/www/device.js", + "pluginId": "cordova-plugin-device", + "clobbers": [ + "device" + ] + }, + { + "id": "cordova-plugin-dialogs.notification", + "file": "plugins/cordova-plugin-dialogs/www/notification.js", + "pluginId": "cordova-plugin-dialogs", + "merges": [ + "navigator.notification" + ] + }, + { + "id": "cordova-plugin-geolocation.Coordinates", + "file": "plugins/cordova-plugin-geolocation/www/Coordinates.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "Coordinates" + ] + }, + { + "id": "cordova-plugin-geolocation.PositionError", + "file": "plugins/cordova-plugin-geolocation/www/PositionError.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "PositionError" + ] + }, + { + "id": "cordova-plugin-geolocation.Position", + "file": "plugins/cordova-plugin-geolocation/www/Position.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "Position" + ] + }, + { + "id": "cordova-plugin-geolocation.geolocation", + "file": "plugins/cordova-plugin-geolocation/www/geolocation.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "navigator.geolocation" + ] + }, + { + "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", + "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-statusbar.statusbar", + "file": "plugins/cordova-plugin-statusbar/www/statusbar.js", + "pluginId": "cordova-plugin-statusbar", + "clobbers": [ + "window.StatusBar" + ] + }, + { + "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": "ionic-plugin-keyboard.keyboard", + "file": "plugins/ionic-plugin-keyboard/www/ios/keyboard.js", + "pluginId": "ionic-plugin-keyboard", + "clobbers": [ + "cordova.plugins.Keyboard" + ], + "runs": true + }, + { + "id": "phonegap-plugin-push.PushNotification", + "file": "plugins/phonegap-plugin-push/www/push.js", + "pluginId": "phonegap-plugin-push", + "clobbers": [ + "PushNotification" + ] + } ]; module.exports.metadata = // TOP OF METADATA { - "cordova-plugin-app-name": "1.0.4", - "cordova-plugin-compat": "1.1.0", - "cordova-plugin-console": "1.0.4", - "cordova-plugin-customurlscheme": "4.2.0", - "cordova-plugin-device": "1.1.3", - "cordova-plugin-dialogs": "1.3.0", - "cordova-plugin-geolocation": "2.4.0", - "cordova-plugin-inappbrowser": "1.5.0", - "cordova-plugin-network-information": "1.3.0", - "cordova-plugin-splashscreen": "4.0.0", - "cordova-plugin-statusbar": "2.2.3", - "cordova-plugin-whitelist": "1.3.0", - "cordova-plugin-x-socialsharing": "5.1.3", - "ionic-plugin-keyboard": "2.2.1", - "phonegap-plugin-push": "2.0.0", - "cordova-plugin-wkwebview-engine": "1.1.3" + "cordova-plugin-app-name": "1.0.4", + "cordova-plugin-compat": "1.1.0", + "cordova-plugin-customurlscheme": "4.2.0", + "cordova-plugin-device": "1.1.3", + "cordova-plugin-dialogs": "1.3.0", + "cordova-plugin-geolocation": "2.4.0", + "cordova-plugin-inappbrowser": "1.5.0", + "cordova-plugin-network-information": "1.3.0", + "cordova-plugin-splashscreen": "4.0.3", + "cordova-plugin-statusbar": "2.2.3", + "cordova-plugin-whitelist": "1.3.0", + "cordova-plugin-x-socialsharing": "5.1.3", + "ionic-plugin-keyboard": "2.2.1", + "phonegap-plugin-push": "1.9.2" }; // 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 deleted file mode 100644 index 0ecd9cc3..00000000 --- a/StoneIsland/platforms/ios/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"); - -//------------------------------------------------------------------------------ -// 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/ios/platform_www/plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js deleted file mode 100644 index 3a141228..00000000 --- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js +++ /dev/null @@ -1,179 +0,0 @@ -cordova.define("cordova-plugin-wkwebview-engine.ios-wkwebview-exec", 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. - * -*/ - -/** - * Creates the exec bridge used to notify the native code of - * commands. - */ -var cordova = require('cordova'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'); - -function massageArgsJsToNative(args) { - if (!args || utils.typeName(args) != 'Array') { - return args; - } - var ret = []; - args.forEach(function(arg, i) { - if (utils.typeName(arg) == 'ArrayBuffer') { - ret.push({ - 'CDVType': 'ArrayBuffer', - 'data': base64.fromArrayBuffer(arg) - }); - } else { - ret.push(arg); - } - }); - return ret; -} - -function massageMessageNativeToJs(message) { - if (message.CDVType == 'ArrayBuffer') { - var stringToArrayBuffer = function(str) { - var ret = new Uint8Array(str.length); - for (var i = 0; i < str.length; i++) { - ret[i] = str.charCodeAt(i); - } - return ret.buffer; - }; - var base64ToArrayBuffer = function(b64) { - return stringToArrayBuffer(atob(b64)); - }; - message = base64ToArrayBuffer(message.data); - } - return message; -} - -function convertMessageToArgsNativeToJs(message) { - var args = []; - if (!message || !message.hasOwnProperty('CDVType')) { - args.push(message); - } else if (message.CDVType == 'MultiPart') { - message.messages.forEach(function(e) { - args.push(massageMessageNativeToJs(e)); - }); - } else { - args.push(massageMessageNativeToJs(message)); - } - return args; -} - -var iOSExec = function() { - - // detect change in bridge, if there is a change, we forward to new bridge - - // if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.cordova && window.webkit.messageHandlers.cordova.postMessage) { - // bridgeMode = jsToNativeModes.WK_WEBVIEW_BINDING; - // } - - var successCallback, failCallback, service, action, actionArgs; - var callbackId = null; - if (typeof arguments[0] !== "string") { - // FORMAT ONE - successCallback = arguments[0]; - failCallback = arguments[1]; - service = arguments[2]; - action = arguments[3]; - actionArgs = arguments[4]; - - // Since we need to maintain backwards compatibility, we have to pass - // an invalid callbackId even if no callback was provided since plugins - // will be expecting it. The Cordova.exec() implementation allocates - // an invalid callbackId and passes it even if no callbacks were given. - callbackId = 'INVALID'; - } else { - throw new Error('The old format of this exec call has been removed (deprecated since 2.1). Change to: ' + - 'cordova.exec(null, null, \'Service\', \'action\', [ arg1, arg2 ]);'); - } - - // If actionArgs is not provided, default to an empty array - actionArgs = actionArgs || []; - - // Register the callbacks and add the callbackId to the positional - // arguments if given. - if (successCallback || failCallback) { - callbackId = service + cordova.callbackId++; - cordova.callbacks[callbackId] = - {success:successCallback, fail:failCallback}; - } - - actionArgs = massageArgsJsToNative(actionArgs); - - // CB-10133 DataClone DOM Exception 25 guard (fast function remover) - var command = [callbackId, service, action, JSON.parse(JSON.stringify(actionArgs))]; - window.webkit.messageHandlers.cordova.postMessage(command); - -}; - -iOSExec.nativeCallback = function(callbackId, status, message, keepCallback, debug) { - - var success = status === 0 || status === 1; - var args = convertMessageToArgsNativeToJs(message); - setTimeout(function(){ - cordova.callbackFromNative(callbackId, success, status, args, keepCallback); - }, 0); -}; - -// for backwards compatibility -iOSExec.nativeEvalAndFetch = function(func) { - try { - func(); - } catch (e) { - console.log(e); - } -}; - -// Proxy the exec for bridge changes. See CB-10106 - -function cordovaExec() { - var cexec = require('cordova/exec'); - var cexec_valid = (typeof cexec.nativeFetchMessages === 'function') && (typeof cexec.nativeEvalAndFetch === 'function') && (typeof cexec.nativeCallback === 'function'); - return (cexec_valid && execProxy !== cexec)? cexec : iOSExec; -} - -function execProxy() { - cordovaExec().apply(null, arguments); -} - -execProxy.nativeFetchMessages = function() { - return cordovaExec().nativeFetchMessages.apply(null, arguments); -}; - -execProxy.nativeEvalAndFetch = function() { - return cordovaExec().nativeEvalAndFetch.apply(null, arguments); -}; - -execProxy.nativeCallback = function() { - return cordovaExec().nativeCallback.apply(null, arguments); -}; - -module.exports = execProxy; - -if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.cordova && window.webkit.messageHandlers.cordova.postMessage) { - // unregister the old bridge - cordova.define.remove('cordova/exec'); - // redefine bridge to our new bridge - cordova.define("cordova/exec", function(require, exports, module) { - module.exports = execProxy; - }); -} -}); 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 index 7234d474..a5315486 100644 --- 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 @@ -1,16 +1,4 @@ cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) { -/** -* This file has been generated by Babel. -* -* DO NOT EDIT IT DIRECTLY -* -* Edit the JS source file src/js/push.js -**/'use strict'; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - /* global cordova:false */ /* globals window */ @@ -20,358 +8,322 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var exec = cordova.require('cordova/exec'); -var PushNotification = function () { - /** - * PushNotification constructor. - * - * @param {Object} options to initiate Push Notifications. - * @return {PushNotification} instance that can be monitored and cancelled. - */ - function PushNotification(options) { - var _this = this; - - _classCallCheck(this, PushNotification); +/** + * PushNotification constructor. + * + * @param {Object} options to initiate Push Notifications. + * @return {PushNotification} instance that can be monitored and cancelled. + */ - this.handlers = { - registration: [], - notification: [], - error: [] +var PushNotification = function(options) { + this._handlers = { + 'registration': [], + 'notification': [], + 'error': [] }; // require options parameter if (typeof options === 'undefined') { - throw new Error('The options argument is required.'); + throw new Error('The options argument is required.'); } // store the options to this object instance this.options = options; // triggered on registration and notification - var success = function success(result) { - if (result && typeof result.registrationId !== 'undefined') { - _this.emit('registration', result); - } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { - var executeFuctionOrEmitEventByName = function executeFuctionOrEmitEventByName(functionName, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } + var that = this; + var success = function(result) { + if (result && typeof result.registrationId !== 'undefined') { + that.emit('registration', result); + } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { + var executeFuctionOrEmitEventByName = function(callbackName, context, arg) { + var namespaces = callbackName.split('.'); + var func = namespaces.pop(); + for (var i = 0; i < namespaces.length; i++) { + context = context[namespaces[i]]; + } - var namespaces = functionName.split('.'); - var func = namespaces.pop(); - for (var i = 0; i < namespaces.length; i++) { - context = context[namespaces[i]]; - } + if (typeof context[func] === 'function') { + context[func].call(context, arg); + } else { + that.emit(callbackName, arg); + } + }; - if (typeof context[func] === 'function') { - context[func].call(context, args); - } else { - _this.emit(functionName, args); - } - }; - - executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); - } else if (result) { - _this.emit('notification', result); - } + executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); + } else if (result) { + that.emit('notification', result); + } }; // triggered on error - var fail = function fail(msg) { - var e = typeof msg === 'string' ? new Error(msg) : msg; - _this.emit('error', e); + 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]); + setTimeout(function() { + exec(success, fail, 'PushNotification', 'init', [options]); }, 10); - } - - /** - * Unregister from push notifications - */ - +}; - _createClass(PushNotification, [{ - key: 'unregister', - value: function unregister(successCallback) { - var _this2 = this; +/** + * Unregister from push notifications + */ - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var options = arguments[2]; +PushNotification.prototype.unregister = function(successCallback, errorCallback, options) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof 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'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.unregister failure: success callback parameter must be a function'); return; - } + } - var cleanHandlersAndPassThrough = function cleanHandlersAndPassThrough() { + var that = this; + var cleanHandlersAndPassThrough = function() { if (!options) { - _this2.handlers = { - registration: [], - notification: [], - error: [] - }; + that._handlers = { + 'registration': [], + 'notification': [], + 'error': [] + }; } successCallback(); - }; - - exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); - } + }; - /** - * subscribe to a topic - * @param {String} topic topic to subscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ + exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); +}; - }, { - key: 'subscribe', - value: function subscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; +/** + * subscribe to a topic + * @param {String} topic topic to subscribe + * @param {Function} successCallback success callback + * @param {Function} errorCallback error callback + * @return {void} + */ +PushNotification.prototype.subscribe = function(topic, successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'failure parameter not a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.subscribe failure: failure parameter not a function'); return; - } + } - if (typeof successCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'success callback parameter must be a function'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.subscribe failure: success callback parameter must be a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); } - /** - * unsubscribe to a topic - * @param {String} topic topic to unsubscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ + exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); +}; - }, { - key: 'unsubscribe', - value: function unsubscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; +/** + * unsubscribe to a topic + * @param {String} topic topic to unsubscribe + * @param {Function} successCallback success callback + * @param {Function} errorCallback error callback + * @return {void} + */ +PushNotification.prototype.unsubscribe = function(topic, successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { + if (typeof errorCallback !== 'function') { console.log('PushNotification.unsubscribe failure: failure parameter not a function'); return; - } + } - if (typeof successCallback !== 'function') { - console.log('PushNotification.unsubscribe failure: ' + 'success callback parameter must be a function'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.unsubscribe failure: success callback parameter must be a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); } - /** - * Call this to set the application icon badge - */ + exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); +}; - }, { - key: 'setApplicationIconBadgeNumber', - value: function setApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var badge = arguments[2]; +/** + * Call this to set the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: failure ' + 'parameter not a function'); - return; - } +PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: success ' + 'callback parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{ badge: badge }]); + if (typeof successCallback !== 'function') { + console.log('PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function'); + return; } - /** - * Get the application icon badge - */ + exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{badge: badge}]); +}; - }, { - key: 'getApplicationIconBadgeNumber', - value: function getApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; +/** + * Get the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: failure ' + 'parameter not a function'); - return; - } +PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: success ' + 'callback parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); + if (typeof successCallback !== 'function') { + console.log('PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function'); + return; } - /** - * Clear all notifications - */ + exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); +}; - }, { - key: 'clearAllNotifications', - value: function clearAllNotifications() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; +/** + * Get the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: failure parameter ' + 'not a function'); - return; - } +PushNotification.prototype.clearAllNotifications = function(successCallback, errorCallback) { + if (!successCallback) { successCallback = function() {}; } + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: success callback ' + 'parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.clearAllNotifications failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); + if (typeof successCallback !== 'function') { + console.log('PushNotification.clearAllNotifications failure: success callback parameter must be a function'); + return; } - /** - * 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. - */ - }, { - key: 'on', - value: function on(eventName, callback) { - if (!this.handlers.hasOwnProperty(eventName)) { - this.handlers[eventName] = []; - } - this.handlers[eventName].push(callback); + exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); +}; + +/** + * Listen for an event. + * + * Any event is supported, but the following are built-in: + * + * - 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] = []; } + this._handlers[eventName].push(callback); +}; - /** - * Remove event listener. - * - * @param {String} eventName to match subscription. - * @param {Function} handle function associated with event. - */ +/** + * Remove event listener. + * + * @param {String} eventName to match subscription. + * @param {Function} handle function associated with event. + */ - }, { - key: 'off', - value: function off(eventName, handle) { - if (this.handlers.hasOwnProperty(eventName)) { - var handleIndex = this.handlers[eventName].indexOf(handle); +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); + 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. - */ - - }, { - key: 'emit', - value: function emit() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } +/** + * 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. + */ - var eventName = args.shift(); +PushNotification.prototype.emit = function() { + var args = Array.prototype.slice.call(arguments); + var eventName = args.shift(); - if (!this.handlers.hasOwnProperty(eventName)) { + if (!this._handlers.hasOwnProperty(eventName)) { return false; - } + } - for (var i = 0, length = this.handlers[eventName].length; i < length; i++) { - var callback = this.handlers[eventName][i]; + for (var i = 0, length = this._handlers[eventName].length; i < length; i++) { + var callback = this._handlers[eventName][i]; if (typeof callback === 'function') { - callback.apply(undefined, args); + callback.apply(undefined,args); } else { - console.log('event handler: ' + eventName + ' must be a function'); + console.log('event handler: ' + eventName + ' must be a function'); } - } - - return true; } - }, { - key: 'finish', - value: function finish() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'handler'; - if (typeof successCallback !== 'function') { + return true; +}; + +PushNotification.prototype.finish = function(successCallback, errorCallback, id) { + if (!successCallback) { successCallback = function() {}; } + if (!errorCallback) { errorCallback = function() {}; } + if (!id) { id = 'handler'; } + + if (typeof successCallback !== 'function') { console.log('finish failure: success callback parameter must be a function'); return; - } + } - if (typeof errorCallback !== 'function') { + if (typeof errorCallback !== 'function') { console.log('finish failure: failure parameter not a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); } - }]); - return PushNotification; -}(); + exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); +}; /*! * 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 - */ + /** + * 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); + }, - init: function init(options) { - return new PushNotification(options); - }, + hasPermission: function(successCallback, errorCallback) { + exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); + }, - hasPermission: function hasPermission(successCallback, errorCallback) { - exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); - }, + /** + * PushNotification Object. + * + * Expose the PushNotification object for direct use + * and testing. Typically, you should use the + * .init helper method. + */ - /** - * PushNotification Object. - * - * Expose the PushNotification object for direct use - * and testing. Typically, you should use the - * .init helper method. - */ - PushNotification: PushNotification + PushNotification: PushNotification }; + }); diff --git a/StoneIsland/platforms/ios/pods.json b/StoneIsland/platforms/ios/pods.json index 4fe84812..7c0157c5 100644 --- a/StoneIsland/platforms/ios/pods.json +++ b/StoneIsland/platforms/ios/pods.json @@ -1,8 +1,14 @@ { - "FirebaseMessaging": { - "name": "FirebaseMessaging", + "GoogleCloudMessaging": { + "name": "GoogleCloudMessaging", "type": "podspec", - "spec": "~> 2.0.0", + "spec": "~> 1.2.0", + "count": 1 + }, + "GGLInstanceID": { + "name": "GGLInstanceID", + "type": "podspec", + "spec": "~> 1.2.1", "count": 1 } }
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/www/cordova-js-src/platform.js b/StoneIsland/platforms/ios/www/cordova-js-src/platform.js index 36529ba5..2345fa5b 100644 --- a/StoneIsland/platforms/ios/www/cordova-js-src/platform.js +++ b/StoneIsland/platforms/ios/www/cordova-js-src/platform.js @@ -21,8 +21,11 @@ module.exports = { id: 'ios', - bootstrap: function() { + bootstrap: function () { + // Attach the console polyfill that is iOS-only to window.console + // see the file under plugin/ios/console.js + require('cordova/modulemapper').clobbers('cordova/plugin/ios/console', 'window.console'); + require('cordova/channel').onNativeReady.fire(); } }; - diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/console-via-logger.js b/StoneIsland/platforms/ios/www/cordova-js-src/plugin/ios/console.js index 0ecd9cc3..6224fb44 100644 --- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/console-via-logger.js +++ b/StoneIsland/platforms/ios/www/cordova-js-src/plugin/ios/console.js @@ -1,4 +1,3 @@ -cordova.define("cordova-plugin-console.console", function(require, exports, module) { /* * * Licensed to the Apache Software Foundation (ASF) under one @@ -22,7 +21,7 @@ cordova.define("cordova-plugin-console.console", function(require, exports, modu //------------------------------------------------------------------------------ -var logger = require("./logger"); +var logger = require('cordova/plugin/ios/logger'); //------------------------------------------------------------------------------ // object that we're exporting @@ -185,5 +184,3 @@ for (var key in console) { console[key] = wrappedOrigCall(WinConsole[key], console[key]); } } - -}); diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/logger.js b/StoneIsland/platforms/ios/www/cordova-js-src/plugin/ios/logger.js index deb07b57..430d887d 100644 --- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/logger.js +++ b/StoneIsland/platforms/ios/www/cordova-js-src/plugin/ios/logger.js @@ -1,4 +1,3 @@ -cordova.define("cordova-plugin-console.logger", function(require, exports, module) { /* * * Licensed to the Apache Software Foundation (ASF) under one @@ -353,5 +352,3 @@ logger.__onDeviceReady = function() { // add a deviceready event to log queued messages document.addEventListener("deviceready", logger.__onDeviceReady, false); - -}); diff --git a/StoneIsland/platforms/ios/www/cordova.js b/StoneIsland/platforms/ios/www/cordova.js index 3540a020..a320f5ee 100644 --- a/StoneIsland/platforms/ios/www/cordova.js +++ b/StoneIsland/platforms/ios/www/cordova.js @@ -1,5 +1,5 @@ // Platform: ios -// 7c5fcc5a5adfbf3fb8ceaf36fbdd4bd970bd9c20 +// ff66178b108b93be36a1aafe341af17381a727a3 /* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file @@ -19,35 +19,33 @@ under the License. */ ;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '4.4.0'; +var PLATFORM_VERSION_BUILD_LABEL = '4.5.2'; // file: src/scripts/require.js -/*jshint -W079 */ -/*jshint -W020 */ +/* jshint -W079 */ +/* jshint -W020 */ -var require, - define; +var require; +var define; (function () { - var modules = {}, + var modules = {}; // Stack of moduleIds currently being built. - requireStack = [], + var requireStack = []; // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; + var inProgressModules = {}; + var SEPARATOR = '.'; - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; + function build (module) { + var factory = module.factory; + var localRequire = function (id) { + var resultantId = id; + // Its a relative path, so lop off the last portion and add the id (minus "./") + if (id.charAt(0) === '.') { + resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); + } + return require(resultantId); + }; module.exports = {}; delete module.factory; factory(localRequire, module.exports, module); @@ -56,10 +54,10 @@ var require, require = function (id) { if (!modules[id]) { - throw "module " + id + " not found"; + throw 'module ' + id + ' not found'; } else if (id in inProgressModules) { var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; + throw 'Cycle in require graph: ' + cycle; } if (modules[id].factory) { try { @@ -76,7 +74,7 @@ var require, define = function (id, factory) { if (modules[id]) { - throw "module " + id + " already defined"; + throw 'module ' + id + ' already defined'; } modules[id] = { @@ -92,8 +90,8 @@ var require, define.moduleMap = modules; })(); -//Export for use in node -if (typeof module === "object" && typeof require === "function") { +// Export for use in node +if (typeof module === 'object' && typeof require === 'function') { module.exports.require = require; module.exports.define = define; } @@ -103,15 +101,13 @@ define("cordova", function(require, exports, module) { // Workaround for Windows 10 in hosted environment case // http://www.w3.org/html/wg/drafts/html/master/browsers.html#named-access-on-the-window-object -if (window.cordova && !(window.cordova instanceof HTMLElement)) { - throw new Error("cordova already defined"); +if (window.cordova && !(window.cordova instanceof HTMLElement)) { // eslint-disable-line no-undef + throw new Error('cordova already defined'); } - var channel = require('cordova/channel'); var platform = require('cordova/platform'); - /** * Intercept calls to addEventListener + removeEventListener and handle deviceready, * resume, and pause events. @@ -124,48 +120,48 @@ var m_window_removeEventListener = window.removeEventListener; /** * Houses custom event handlers to intercept on document + window event listeners. */ -var documentEventHandlers = {}, - windowEventHandlers = {}; +var documentEventHandlers = {}; +var windowEventHandlers = {}; -document.addEventListener = function(evt, handler, capture) { +document.addEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { + if (typeof documentEventHandlers[e] !== 'undefined') { documentEventHandlers[e].subscribe(handler); } else { m_document_addEventListener.call(document, evt, handler, capture); } }; -window.addEventListener = function(evt, handler, capture) { +window.addEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { + if (typeof windowEventHandlers[e] !== 'undefined') { windowEventHandlers[e].subscribe(handler); } else { m_window_addEventListener.call(window, evt, handler, capture); } }; -document.removeEventListener = function(evt, handler, capture) { +document.removeEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { + if (typeof documentEventHandlers[e] !== 'undefined') { documentEventHandlers[e].unsubscribe(handler); } else { m_document_removeEventListener.call(document, evt, handler, capture); } }; -window.removeEventListener = function(evt, handler, capture) { +window.removeEventListener = function (evt, handler, capture) { var e = evt.toLowerCase(); // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { + if (typeof windowEventHandlers[e] !== 'undefined') { windowEventHandlers[e].unsubscribe(handler); } else { m_window_removeEventListener.call(window, evt, handler, capture); } }; -function createEvent(type, data) { +function createEvent (type, data) { var event = document.createEvent('Events'); event.initEvent(type, false, false); if (data) { @@ -178,29 +174,32 @@ function createEvent(type, data) { return event; } - +/* eslint-disable no-undef */ var cordova = { - define:define, - require:require, - version:PLATFORM_VERSION_BUILD_LABEL, - platformVersion:PLATFORM_VERSION_BUILD_LABEL, - platformId:platform.id, + define: define, + require: require, + version: PLATFORM_VERSION_BUILD_LABEL, + platformVersion: PLATFORM_VERSION_BUILD_LABEL, + platformId: platform.id, + + /* eslint-enable no-undef */ + /** * Methods to add/remove your own addEventListener hijacking on document + window. */ - addWindowEventHandler:function(event) { + addWindowEventHandler: function (event) { return (windowEventHandlers[event] = channel.create(event)); }, - addStickyDocumentEventHandler:function(event) { + addStickyDocumentEventHandler: function (event) { return (documentEventHandlers[event] = channel.createSticky(event)); }, - addDocumentEventHandler:function(event) { + addDocumentEventHandler: function (event) { return (documentEventHandlers[event] = channel.create(event)); }, - removeWindowEventHandler:function(event) { + removeWindowEventHandler: function (event) { delete windowEventHandlers[event]; }, - removeDocumentEventHandler:function(event) { + removeDocumentEventHandler: function (event) { delete documentEventHandlers[event]; }, /** @@ -208,24 +207,23 @@ var cordova = { * * @return object */ - getOriginalHandlers: function() { + getOriginalHandlers: function () { return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; + 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; }, /** * Method to fire event from native code * bNoDetach is required for events which cause an exception which needs to be caught in native code */ - fireDocumentEvent: function(type, data, bNoDetach) { + fireDocumentEvent: function (type, data, bNoDetach) { var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { + if (typeof documentEventHandlers[type] !== 'undefined') { + if (bNoDetach) { documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { + } else { + setTimeout(function () { // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { + if (type === 'deviceready') { document.dispatchEvent(evt); } documentEventHandlers[type].fire(evt); @@ -235,10 +233,10 @@ var cordova = { document.dispatchEvent(evt); } }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { + fireWindowEvent: function (type, data) { + var evt = createEvent(type, data); + if (typeof windowEventHandlers[type] !== 'undefined') { + setTimeout(function () { windowEventHandlers[type].fire(evt); }, 0); } else { @@ -252,7 +250,7 @@ var cordova = { // Randomize the starting callbackId to avoid collisions after refreshing or navigating. // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, + callbacks: {}, callbackStatus: { NO_RESULT: 0, OK: 1, @@ -269,14 +267,14 @@ var cordova = { /** * Called by native code when returning successful result from an action. */ - callbackSuccess: function(callbackId, args) { + callbackSuccess: function (callbackId, args) { cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); }, /** * Called by native code when returning error result from an action. */ - callbackError: function(callbackId, args) { + callbackError: function (callbackId, args) { // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. // Derive success from status. cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); @@ -285,11 +283,11 @@ var cordova = { /** * Called by native code when returning the result from an action. */ - callbackFromNative: function(callbackId, isSuccess, status, args, keepCallback) { + callbackFromNative: function (callbackId, isSuccess, status, args, keepCallback) { try { var callback = cordova.callbacks[callbackId]; if (callback) { - if (isSuccess && status == cordova.callbackStatus.OK) { + if (isSuccess && status === cordova.callbackStatus.OK) { callback.success && callback.success.apply(null, args); } else if (!isSuccess) { callback.fail && callback.fail.apply(null, args); @@ -306,26 +304,24 @@ var cordova = { delete cordova.callbacks[callbackId]; } } - } - catch (err) { - var msg = "Error in " + (isSuccess ? "Success" : "Error") + " callbackId: " + callbackId + " : " + err; + } catch (err) { + var msg = 'Error in ' + (isSuccess ? 'Success' : 'Error') + ' callbackId: ' + callbackId + ' : ' + err; console && console.log && console.log(msg); - cordova.fireWindowEvent("cordovacallbackerror", { 'message': msg }); + cordova.fireWindowEvent('cordovacallbackerror', { 'message': msg }); throw err; } }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { + addConstructor: function (func) { + channel.onCordovaReady.subscribe(function () { try { func(); - } catch(e) { - console.log("Failed to run constructor: " + e); + } catch (e) { + console.log('Failed to run constructor: ' + e); } }); } }; - module.exports = cordova; }); @@ -346,29 +342,29 @@ var typeMap = { 'O': 'Object' }; -function extractParamName(callee, argIndex) { +function extractParamName (callee, argIndex) { return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; } -function checkArgs(spec, functionName, args, opt_callee) { +function checkArgs (spec, functionName, args, opt_callee) { if (!moduleExports.enableChecks) { return; } var errMsg = null; var typeName; for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; + var c = spec.charAt(i); + var cUpper = c.toUpperCase(); + var arg = args[i]; // Asterix means allow anything. - if (c == '*') { + if (c === '*') { continue; } typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { + if ((arg === null || arg === undefined) && c === cUpper) { continue; } - if (typeName != typeMap[cUpper]) { + if (typeName !== typeMap[cUpper]) { errMsg = 'Expected ' + typeMap[cUpper]; break; } @@ -377,14 +373,14 @@ function checkArgs(spec, functionName, args, opt_callee) { errMsg += ', but got ' + typeName + '.'; errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { + if (typeof jasmine === 'undefined') { console.error(errMsg); } throw TypeError(errMsg); } } -function getValue(value, defaultValue) { +function getValue (value, defaultValue) { return value === undefined ? defaultValue : value; } @@ -392,7 +388,6 @@ moduleExports.checkArgs = checkArgs; moduleExports.getValue = getValue; moduleExports.enableChecks = true; - }); // file: src/common/base64.js @@ -400,58 +395,58 @@ define("cordova/base64", function(require, exports, module) { var base64 = exports; -base64.fromArrayBuffer = function(arrayBuffer) { +base64.fromArrayBuffer = function (arrayBuffer) { var array = new Uint8Array(arrayBuffer); return uint8ToBase64(array); }; -base64.toArrayBuffer = function(str) { - var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary'); +base64.toArrayBuffer = function (str) { + var decodedStr = typeof atob !== 'undefined' ? atob(str) : Buffer.from(str, 'base64').toString('binary'); // eslint-disable-line no-undef var arrayBuffer = new ArrayBuffer(decodedStr.length); var array = new Uint8Array(arrayBuffer); - for (var i=0, len=decodedStr.length; i < len; i++) { + for (var i = 0, len = decodedStr.length; i < len; i++) { array[i] = decodedStr.charCodeAt(i); } return arrayBuffer; }; -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ /* This code is based on the performance tests at http://jsperf.com/b64tests * This 12-bit-at-a-time algorithm was the best performing version on all * platforms tested. */ -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var b64_6bit = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var b64_12bit; -var b64_12bitTable = function() { +var b64_12bitTable = function () { b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; + for (var i = 0; i < 64; i++) { + for (var j = 0; j < 64; j++) { + b64_12bit[i * 64 + j] = b64_6bit[i] + b64_6bit[j]; } } - b64_12bitTable = function() { return b64_12bit; }; + b64_12bitTable = function () { return b64_12bit; }; return b64_12bit; }; -function uint8ToBase64(rawData) { +function uint8ToBase64 (rawData) { var numBytes = rawData.byteLength; - var output=""; + var output = ''; var segment; var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; + for (var i = 0; i < numBytes - 2; i += 3) { + segment = (rawData[i] << 16) + (rawData[i + 1] << 8) + rawData[i + 2]; output += table[segment >> 12]; output += table[segment & 0xfff]; } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); + if (numBytes - i === 2) { + segment = (rawData[i] << 16) + (rawData[i + 1] << 8); output += table[segment >> 12]; output += b64_6bit[(segment & 0xfff) >> 6]; output += '='; - } else if (numBytes - i == 1) { + } else if (numBytes - i === 1) { segment = (rawData[i] << 16); output += table[segment >> 12]; output += '=='; @@ -466,7 +461,7 @@ define("cordova/builder", function(require, exports, module) { var utils = require('cordova/utils'); -function each(objects, func, context) { +function each (objects, func, context) { for (var prop in objects) { if (objects.hasOwnProperty(prop)) { func.apply(context, [objects[prop], prop]); @@ -474,7 +469,7 @@ function each(objects, func, context) { } } -function clobber(obj, key, value) { +function clobber (obj, key, value) { exports.replaceHookForTesting(obj, key); var needsProperty = false; try { @@ -484,15 +479,15 @@ function clobber(obj, key, value) { } // Getters can only be overridden by getters. if (needsProperty || obj[key] !== value) { - utils.defineGetter(obj, key, function() { + utils.defineGetter(obj, key, function () { return value; }); } } -function assignOrWrapInDeprecateGetter(obj, key, value, message) { +function assignOrWrapInDeprecateGetter (obj, key, value, message) { if (message) { - utils.defineGetter(obj, key, function() { + utils.defineGetter(obj, key, function () { console.log(message); delete obj[key]; clobber(obj, key, value); @@ -503,7 +498,7 @@ function assignOrWrapInDeprecateGetter(obj, key, value, message) { } } -function include(parent, objects, clobber, merge) { +function include (parent, objects, clobber, merge) { each(objects, function (obj, key) { try { var result = obj.path ? require(obj.path) : {}; @@ -523,7 +518,7 @@ function include(parent, objects, clobber, merge) { result = parent[key]; } else { // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { + if (typeof parent[key] === 'undefined') { assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); } else { // Set result to what already exists, so we can build children into it if they exist. @@ -534,7 +529,7 @@ function include(parent, objects, clobber, merge) { if (obj.children) { include(result, obj.children, clobber, merge); } - } catch(e) { + } catch (e) { utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); } }); @@ -547,7 +542,7 @@ function include(parent, objects, clobber, merge) { * @param target Object to merge properties into. * @param src Object to merge properties from. */ -function recursiveMerge(target, src) { +function recursiveMerge (target, src) { for (var prop in src) { if (src.hasOwnProperty(prop)) { if (target.prototype && target.prototype.constructor === target) { @@ -564,26 +559,26 @@ function recursiveMerge(target, src) { } } -exports.buildIntoButDoNotClobber = function(objects, target) { +exports.buildIntoButDoNotClobber = function (objects, target) { include(target, objects, false, false); }; -exports.buildIntoAndClobber = function(objects, target) { +exports.buildIntoAndClobber = function (objects, target) { include(target, objects, true, false); }; -exports.buildIntoAndMerge = function(objects, target) { +exports.buildIntoAndMerge = function (objects, target) { include(target, objects, true, true); }; exports.recursiveMerge = recursiveMerge; exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; +exports.replaceHookForTesting = function () {}; }); // file: src/common/channel.js define("cordova/channel", function(require, exports, module) { -var utils = require('cordova/utils'), - nextGuid = 1; +var utils = require('cordova/utils'); +var nextGuid = 1; /** * Custom pub-sub "channel" that can have functions subscribed to it @@ -623,7 +618,7 @@ var utils = require('cordova/utils'), * @constructor * @param type String the channel name */ -var Channel = function(type, sticky) { +var Channel = function (type, sticky) { this.type = type; // Map of guid -> function. this.handlers = {}; @@ -636,72 +631,73 @@ var Channel = function(type, sticky) { // Function that is called when the first listener is subscribed, or when // the last listener is unsubscribed. this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); +}; +var channel = { + /** + * Calls the provided function only after all of the channels specified + * have been fired. All channels must be sticky channels. + */ + join: function (h, c) { + var len = c.length; + var i = len; + var f = function () { + if (!(--i)) h(); + }; + for (var j = 0; j < len; j++) { + if (c[j].state === 0) { + throw Error('Can only use join with sticky channels.'); } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, + c[j].subscribe(f); + } + if (!len) h(); + }, + /* eslint-disable no-return-assign */ + create: function (type) { + return channel[type] = new Channel(type, false); + }, + createSticky: function (type) { + return channel[type] = new Channel(type, true); + }, + /* eslint-enable no-return-assign */ + /** + * cordova Channels that must fire before "deviceready" is fired. + */ + deviceReadyChannelsArray: [], + deviceReadyChannelsMap: {}, - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, + /** + * Indicate that a feature needs to be initialized before it is ready to be used. + * This holds up Cordova's "deviceready" event until the feature has been initialized + * and Cordova.initComplete(feature) is called. + * + * @param feature {String} The unique feature name + */ + waitForInitialization: function (feature) { + if (feature) { + var c = channel[feature] || this.createSticky(feature); + this.deviceReadyChannelsMap[feature] = c; + this.deviceReadyChannelsArray.push(c); + } + }, - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } + /** + * Indicate that initialization code has completed and the feature is ready to be used. + * + * @param feature {String} The unique feature name + */ + initializationComplete: function (feature) { + var c = this.deviceReadyChannelsMap[feature]; + if (c) { + c.fire(); } - }; + } +}; -function checkSubscriptionArgument(argument) { - if (typeof argument !== "function" && typeof argument.handleEvent !== "function") { +function checkSubscriptionArgument (argument) { + if (typeof argument !== 'function' && typeof argument.handleEvent !== 'function') { throw new Error( - "Must provide a function or an EventListener object " + - "implementing the handleEvent interface." + 'Must provide a function or an EventListener object ' + + 'implementing the handleEvent interface.' ); } } @@ -713,11 +709,11 @@ function checkSubscriptionArgument(argument) { * and a guid that can be used to stop subscribing to the channel. * Returns the guid. */ -Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { +Channel.prototype.subscribe = function (eventListenerOrFunction, eventListener) { checkSubscriptionArgument(eventListenerOrFunction); var handleEvent, guid; - if (eventListenerOrFunction && typeof eventListenerOrFunction === "object") { + if (eventListenerOrFunction && typeof eventListenerOrFunction === 'object') { // Received an EventListener object implementing the handleEvent interface handleEvent = eventListenerOrFunction.handleEvent; eventListener = eventListenerOrFunction; @@ -726,13 +722,13 @@ Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { handleEvent = eventListenerOrFunction; } - if (this.state == 2) { + if (this.state === 2) { handleEvent.apply(eventListener || this, this.fireArgs); return; } guid = eventListenerOrFunction.observer_guid; - if (typeof eventListener === "object") { + if (typeof eventListener === 'object') { handleEvent = utils.close(eventListener, handleEvent); } @@ -747,7 +743,7 @@ Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { if (!this.handlers[guid]) { this.handlers[guid] = handleEvent; this.numHandlers++; - if (this.numHandlers == 1) { + if (this.numHandlers === 1) { this.onHasSubscribersChange && this.onHasSubscribersChange(); } } @@ -756,11 +752,11 @@ Channel.prototype.subscribe = function(eventListenerOrFunction, eventListener) { /** * Unsubscribes the function with the given guid from the channel. */ -Channel.prototype.unsubscribe = function(eventListenerOrFunction) { +Channel.prototype.unsubscribe = function (eventListenerOrFunction) { checkSubscriptionArgument(eventListenerOrFunction); var handleEvent, guid, handler; - if (eventListenerOrFunction && typeof eventListenerOrFunction === "object") { + if (eventListenerOrFunction && typeof eventListenerOrFunction === 'object') { // Received an EventListener object implementing the handleEvent interface handleEvent = eventListenerOrFunction.handleEvent; } else { @@ -782,11 +778,11 @@ Channel.prototype.unsubscribe = function(eventListenerOrFunction) { /** * Calls all functions subscribed to this channel. */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); +Channel.prototype.fire = function (e) { + var fail = false; // eslint-disable-line no-unused-vars + var fireArgs = Array.prototype.slice.call(arguments); // Apply stickiness. - if (this.state == 1) { + if (this.state === 1) { this.state = 2; this.fireArgs = fireArgs; } @@ -800,7 +796,7 @@ Channel.prototype.fire = function(e) { for (var i = 0; i < toCall.length; ++i) { toCall[i].apply(this, fireArgs); } - if (this.state == 2 && this.numHandlers) { + if (this.state === 2 && this.numHandlers) { this.numHandlers = 0; this.handlers = {}; this.onHasSubscribersChange && this.onHasSubscribersChange(); @@ -808,7 +804,6 @@ Channel.prototype.fire = function(e) { } }; - // defining them here so they are ready super fast! // DOM event that is received when the web page is loaded and parsed. channel.createSticky('onDOMContentLoaded'); @@ -841,7 +836,7 @@ module.exports = channel; }); -// file: /Users/shazron/Documents/git/apache/cordova-ios/cordova-js-src/exec.js +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/exec.js define("cordova/exec", function(require, exports, module) { /*global require, module, atob, document */ @@ -1091,31 +1086,31 @@ module.exports = execProxy; // file: src/common/exec/proxy.js define("cordova/exec/proxy", function(require, exports, module) { - // internal map of proxy function var CommandProxyMap = {}; module.exports = { // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); + add: function (id, proxyObj) { + console.log('adding proxy for ' + id); CommandProxyMap[id] = proxyObj; return proxyObj; }, // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { + remove: function (id) { var proxy = CommandProxyMap[id]; delete CommandProxyMap[id]; CommandProxyMap[id] = null; return proxy; }, - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); + get: function (service, action) { + return (CommandProxyMap[service] ? CommandProxyMap[service][action] : null); } }; + }); // file: src/common/init.js @@ -1130,16 +1125,16 @@ var utils = require('cordova/utils'); var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; -function logUnfiredChannels(arr) { +function logUnfiredChannels (arr) { for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { + if (arr[i].state !== 2) { console.log('Channel not fired: ' + arr[i].type); } } } -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { +window.setTimeout(function () { + if (channel.onDeviceReady.state !== 2) { console.log('deviceready has not fired after 5 seconds.'); logUnfiredChannels(platformInitChannelsArray); logUnfiredChannels(channel.deviceReadyChannelsArray); @@ -1148,20 +1143,19 @@ window.setTimeout(function() { // Replace navigator before any modules are required(), to ensure it happens as soon as possible. // We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; +function replaceNavigator (origNavigator) { + var CordovaNavigator = function () {}; CordovaNavigator.prototype = origNavigator; var newNavigator = new CordovaNavigator(); // This work-around really only applies to new APIs that are newer than Function.bind. // Without it, APIs such as getGamepads() break. if (CordovaNavigator.bind) { for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { + if (typeof origNavigator[key] === 'function') { newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { + } else { + (function (k) { + utils.defineGetterSetter(newNavigator, key, function () { return origNavigator[k]; }); })(key); @@ -1177,12 +1171,12 @@ if (window.navigator) { if (!window.console) { window.console = { - log: function(){} + log: function () {} }; } if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); + window.console.warn = function (msg) { + this.log('warn: ' + msg); }; } @@ -1193,10 +1187,10 @@ channel.onActivated = cordova.addDocumentEventHandler('activated'); channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); // Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { +if (document.readyState === 'complete' || document.readyState === 'interactive') { channel.onDOMContentLoaded.fire(); } else { - document.addEventListener('DOMContentLoaded', function() { + document.addEventListener('DOMContentLoaded', function () { channel.onDOMContentLoaded.fire(); }, false); } @@ -1217,8 +1211,8 @@ platform.bootstrap && platform.bootstrap(); // Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. // The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { +setTimeout(function () { + pluginloader.load(function () { channel.onPluginsReady.fire(); }); }, 0); @@ -1226,7 +1220,7 @@ setTimeout(function() { /** * Create all cordova objects once native side is ready. */ -channel.join(function() { +channel.join(function () { modulemapper.mapModules(window); platform.initialize && platform.initialize(); @@ -1237,13 +1231,12 @@ channel.join(function() { // Fire onDeviceReady event once page has fully loaded, all // constructors have run and cordova info has been received from native // side. - channel.join(function() { + channel.join(function () { require('cordova').fireDocumentEvent('deviceready'); }, channel.deviceReadyChannelsArray); }, platformInitChannelsArray); - }); // file: src/common/init_b.js @@ -1261,16 +1254,16 @@ var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeRea // setting exec cordova.exec = require('cordova/exec'); -function logUnfiredChannels(arr) { +function logUnfiredChannels (arr) { for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { + if (arr[i].state !== 2) { console.log('Channel not fired: ' + arr[i].type); } } } -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { +window.setTimeout(function () { + if (channel.onDeviceReady.state !== 2) { console.log('deviceready has not fired after 5 seconds.'); logUnfiredChannels(platformInitChannelsArray); logUnfiredChannels(channel.deviceReadyChannelsArray); @@ -1279,20 +1272,19 @@ window.setTimeout(function() { // Replace navigator before any modules are required(), to ensure it happens as soon as possible. // We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; +function replaceNavigator (origNavigator) { + var CordovaNavigator = function () {}; CordovaNavigator.prototype = origNavigator; var newNavigator = new CordovaNavigator(); // This work-around really only applies to new APIs that are newer than Function.bind. // Without it, APIs such as getGamepads() break. if (CordovaNavigator.bind) { for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { + if (typeof origNavigator[key] === 'function') { newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { + } else { + (function (k) { + utils.defineGetterSetter(newNavigator, key, function () { return origNavigator[k]; }); })(key); @@ -1307,12 +1299,12 @@ if (window.navigator) { if (!window.console) { window.console = { - log: function(){} + log: function () {} }; } if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); + window.console.warn = function (msg) { + this.log('warn: ' + msg); }; } @@ -1323,10 +1315,10 @@ channel.onActivated = cordova.addDocumentEventHandler('activated'); channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); // Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { +if (document.readyState === 'complete' || document.readyState === 'interactive') { channel.onDOMContentLoaded.fire(); } else { - document.addEventListener('DOMContentLoaded', function() { + document.addEventListener('DOMContentLoaded', function () { channel.onDOMContentLoaded.fire(); }, false); } @@ -1343,8 +1335,8 @@ platform.bootstrap && platform.bootstrap(); // Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. // The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { +setTimeout(function () { + pluginloader.load(function () { channel.onPluginsReady.fire(); }); }, 0); @@ -1352,7 +1344,7 @@ setTimeout(function() { /** * Create all cordova objects once native side is ready. */ -channel.join(function() { +channel.join(function () { modulemapper.mapModules(window); platform.initialize && platform.initialize(); @@ -1363,7 +1355,7 @@ channel.join(function() { // Fire onDeviceReady event once page has fully loaded, all // constructors have run and cordova info has been received from native // side. - channel.join(function() { + channel.join(function () { require('cordova').fireDocumentEvent('deviceready'); }, channel.deviceReadyChannelsArray); @@ -1374,17 +1366,17 @@ channel.join(function() { // file: src/common/modulemapper.js define("cordova/modulemapper", function(require, exports, module) { -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; +var builder = require('cordova/builder'); +var moduleMap = define.moduleMap; // eslint-disable-line no-undef +var symbolList; +var deprecationMap; -exports.reset = function() { +exports.reset = function () { symbolList = []; deprecationMap = {}; }; -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { +function addEntry (strategy, moduleName, symbolPath, opt_deprecationMessage) { if (!(moduleName in moduleMap)) { throw new Error('Module ' + moduleName + ' does not exist.'); } @@ -1395,35 +1387,35 @@ function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { } // Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.clobbers = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('c', moduleName, symbolPath, opt_deprecationMessage); }; -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.merges = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('m', moduleName, symbolPath, opt_deprecationMessage); }; -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.defaults = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('d', moduleName, symbolPath, opt_deprecationMessage); }; -exports.runs = function(moduleName) { +exports.runs = function (moduleName) { addEntry('r', moduleName, null); }; -function prepareNamespace(symbolPath, context) { +function prepareNamespace (symbolPath, context) { if (!symbolPath) { return context; } var parts = symbolPath.split('.'); var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { + for (var i = 0, part; part = parts[i]; ++i) { // eslint-disable-line no-cond-assign cur = cur[part] = cur[part] || {}; } return cur; } -exports.mapModules = function(context) { +exports.mapModules = function (context) { var origSymbols = {}; context.CDV_origSymbols = origSymbols; for (var i = 0, len = symbolList.length; i < len; i += 3) { @@ -1431,7 +1423,7 @@ exports.mapModules = function(context) { var moduleName = symbolList[i + 1]; var module = require(moduleName); // <runs/> - if (strategy == 'r') { + if (strategy === 'r') { continue; } var symbolPath = symbolList[i + 2]; @@ -1443,9 +1435,9 @@ exports.mapModules = function(context) { var parentObj = prepareNamespace(namespace, context); var target = parentObj[lastName]; - if (strategy == 'm' && target) { + if (strategy === 'm' && target) { builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { + } else if ((strategy === 'd' && !target) || (strategy !== 'd')) { if (!(symbolPath in origSymbols)) { origSymbols[symbolPath] = target; } @@ -1454,7 +1446,7 @@ exports.mapModules = function(context) { } }; -exports.getOriginalSymbol = function(context, symbolPath) { +exports.getOriginalSymbol = function (context, symbolPath) { var origSymbols = context.CDV_origSymbols; if (origSymbols && (symbolPath in origSymbols)) { return origSymbols[symbolPath]; @@ -1469,22 +1461,21 @@ exports.getOriginalSymbol = function(context, symbolPath) { exports.reset(); - }); // file: src/common/modulemapper_b.js define("cordova/modulemapper_b", function(require, exports, module) { -var builder = require('cordova/builder'), - symbolList = [], - deprecationMap; +var builder = require('cordova/builder'); +var symbolList = []; +var deprecationMap; -exports.reset = function() { +exports.reset = function () { symbolList = []; deprecationMap = {}; }; -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { +function addEntry (strategy, moduleName, symbolPath, opt_deprecationMessage) { symbolList.push(strategy, moduleName, symbolPath); if (opt_deprecationMessage) { deprecationMap[symbolPath] = opt_deprecationMessage; @@ -1492,35 +1483,35 @@ function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { } // Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.clobbers = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('c', moduleName, symbolPath, opt_deprecationMessage); }; -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.merges = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('m', moduleName, symbolPath, opt_deprecationMessage); }; -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { +exports.defaults = function (moduleName, symbolPath, opt_deprecationMessage) { addEntry('d', moduleName, symbolPath, opt_deprecationMessage); }; -exports.runs = function(moduleName) { +exports.runs = function (moduleName) { addEntry('r', moduleName, null); }; -function prepareNamespace(symbolPath, context) { +function prepareNamespace (symbolPath, context) { if (!symbolPath) { return context; } var parts = symbolPath.split('.'); var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { + for (var i = 0, part; part = parts[i]; ++i) { // eslint-disable-line no-cond-assign cur = cur[part] = cur[part] || {}; } return cur; } -exports.mapModules = function(context) { +exports.mapModules = function (context) { var origSymbols = {}; context.CDV_origSymbols = origSymbols; for (var i = 0, len = symbolList.length; i < len; i += 3) { @@ -1528,7 +1519,7 @@ exports.mapModules = function(context) { var moduleName = symbolList[i + 1]; var module = require(moduleName); // <runs/> - if (strategy == 'r') { + if (strategy === 'r') { continue; } var symbolPath = symbolList[i + 2]; @@ -1540,9 +1531,9 @@ exports.mapModules = function(context) { var parentObj = prepareNamespace(namespace, context); var target = parentObj[lastName]; - if (strategy == 'm' && target) { + if (strategy === 'm' && target) { builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { + } else if ((strategy === 'd' && !target) || (strategy !== 'd')) { if (!(symbolPath in origSymbols)) { origSymbols[symbolPath] = target; } @@ -1551,7 +1542,7 @@ exports.mapModules = function(context) { } }; -exports.getOriginalSymbol = function(context, symbolPath) { +exports.getOriginalSymbol = function (context, symbolPath) { var origSymbols = context.CDV_origSymbols; if (origSymbols && (symbolPath in origSymbols)) { return origSymbols[symbolPath]; @@ -1566,19 +1557,531 @@ exports.getOriginalSymbol = function(context, symbolPath) { exports.reset(); - }); -// file: /Users/shazron/Documents/git/apache/cordova-ios/cordova-js-src/platform.js +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/platform.js define("cordova/platform", function(require, exports, module) { module.exports = { id: 'ios', - bootstrap: function() { + bootstrap: function () { + // Attach the console polyfill that is iOS-only to window.console + // see the file under plugin/ios/console.js + require('cordova/modulemapper').clobbers('cordova/plugin/ios/console', 'window.console'); + require('cordova/channel').onNativeReady.fire(); } }; +}); + +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/plugin/ios/console.js +define("cordova/plugin/ios/console", function(require, exports, module) { + +//------------------------------------------------------------------------------ + +var logger = require('cordova/plugin/ios/logger'); + +//------------------------------------------------------------------------------ +// 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]); + } +} + +}); + +// file: /Users/spindori/Documents/Cordova/cordova-ios/cordova-js-src/plugin/ios/logger.js +define("cordova/plugin/ios/logger", function(require, exports, module) { + +//------------------------------------------------------------------------------ +// 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 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); }); @@ -1586,12 +2089,11 @@ module.exports = { define("cordova/pluginloader", function(require, exports, module) { var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); // Helper function to inject a <script> tag. // Exported for testing. -exports.injectScript = function(url, onload, onerror) { - var script = document.createElement("script"); +exports.injectScript = function (url, onload, onerror) { + var script = document.createElement('script'); // onload fires even when script fails loads with an error. script.onload = onload; // onerror fires for malformed URLs. @@ -1600,13 +2102,13 @@ exports.injectScript = function(url, onload, onerror) { document.head.appendChild(script); }; -function injectIfNecessary(id, url, onload, onerror) { +function injectIfNecessary (id, url, onload, onerror) { onerror = onerror || onload; - if (id in define.moduleMap) { + if (id in define.moduleMap) { // eslint-disable-line no-undef onload(); } else { - exports.injectScript(url, function() { - if (id in define.moduleMap) { + exports.injectScript(url, function () { + if (id in define.moduleMap) { // eslint-disable-line no-undef onload(); } else { onerror(); @@ -1615,9 +2117,9 @@ function injectIfNecessary(id, url, onload, onerror) { } } -function onScriptLoadingComplete(moduleList, finishPluginLoading) { +function onScriptLoadingComplete (moduleList, finishPluginLoading) { // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { + for (var i = 0, module; module = moduleList[i]; i++) { // eslint-disable-line no-cond-assign if (module.clobbers && module.clobbers.length) { for (var j = 0; j < module.clobbers.length; j++) { modulemapper.clobbers(module.id, module.clobbers[j]); @@ -1643,7 +2145,7 @@ function onScriptLoadingComplete(moduleList, finishPluginLoading) { // See plugman's plugin_loader.js for the details of this object. // This function is only called if the really is a plugins array that isn't empty. // Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { +function handlePluginsObject (path, moduleList, finishPluginLoading) { // Now inject the scripts. var scriptCounter = moduleList.length; @@ -1651,7 +2153,7 @@ function handlePluginsObject(path, moduleList, finishPluginLoading) { finishPluginLoading(); return; } - function scriptLoadedCallback() { + function scriptLoadedCallback () { if (!--scriptCounter) { onScriptLoadingComplete(moduleList, finishPluginLoading); } @@ -1662,13 +2164,13 @@ function handlePluginsObject(path, moduleList, finishPluginLoading) { } } -function findCordovaPath() { +function findCordovaPath () { var path = null; var scripts = document.getElementsByTagName('script'); var term = '/cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { + for (var n = scripts.length - 1; n > -1; n--) { var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007). - if (src.indexOf(term) == (src.length - term.length)) { + if (src.indexOf(term) === (src.length - term.length)) { path = src.substring(0, src.length - term.length) + '/'; break; } @@ -1679,19 +2181,18 @@ function findCordovaPath() { // Tries to load all plugins' js-modules. // This is an async process, but onDeviceReady is blocked on onPluginsReady. // onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { +exports.load = function (callback) { var pathPrefix = findCordovaPath(); if (pathPrefix === null) { console.log('Could not find cordova.js script tag. Plugin loading may fail.'); pathPrefix = ''; } - injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() { - var moduleList = require("cordova/plugin_list"); + injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function () { + var moduleList = require('cordova/plugin_list'); handlePluginsObject(pathPrefix, moduleList, callback); }, callback); }; - }); // file: src/common/pluginloader_b.js @@ -1701,14 +2202,14 @@ var modulemapper = require('cordova/modulemapper'); // Handler for the cordova_plugins.js content. // See plugman's plugin_loader.js for the details of this object. -function handlePluginsObject(moduleList) { +function handlePluginsObject (moduleList) { // if moduleList is not defined or empty, we've nothing to do if (!moduleList || !moduleList.length) { return; } // Loop through all the modules and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { + for (var i = 0, module; module = moduleList[i]; i++) { // eslint-disable-line no-cond-assign if (module.clobbers && module.clobbers.length) { for (var j = 0; j < module.clobbers.length; j++) { modulemapper.clobbers(module.id, module.clobbers[j]); @@ -1732,31 +2233,28 @@ function handlePluginsObject(moduleList) { // but the method accepts callback to be compatible with non-browserify flow. // onDeviceReady is blocked on onPluginsReady. onPluginsReady is fired when there are // no plugins to load, or they are all done. -exports.load = function(callback) { - var moduleList = require("cordova/plugin_list"); +exports.load = function (callback) { + var moduleList = require('cordova/plugin_list'); handlePluginsObject(moduleList); callback(); }; - }); // file: src/common/urlutil.js define("cordova/urlutil", function(require, exports, module) { - /** * For already absolute URLs, returns what is passed in. * For relative URLs, converts them to absolute ones. */ -exports.makeAbsolute = function makeAbsolute(url) { +exports.makeAbsolute = function makeAbsolute (url) { var anchorEl = document.createElement('a'); anchorEl.href = url; return anchorEl.href; }; - }); // file: src/common/utils.js @@ -1767,7 +2265,7 @@ var utils = exports; /** * Defines a property getter / setter for obj[key]. */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { +utils.defineGetterSetter = function (obj, key, getFunc, opt_setFunc) { if (Object.defineProperty) { var desc = { get: getFunc, @@ -1790,13 +2288,13 @@ utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { */ utils.defineGetter = utils.defineGetterSetter; -utils.arrayIndexOf = function(a, item) { +utils.arrayIndexOf = function (a, item) { if (a.indexOf) { return a.indexOf(item); } var len = a.length; for (var i = 0; i < len; ++i) { - if (a[i] == item) { + if (a[i] === item) { return i; } } @@ -1806,15 +2304,15 @@ utils.arrayIndexOf = function(a, item) { /** * Returns whether the item was found in the array. */ -utils.arrayRemove = function(a, item) { +utils.arrayRemove = function (a, item) { var index = utils.arrayIndexOf(a, item); - if (index != -1) { + if (index !== -1) { a.splice(index, 1); } - return index != -1; + return index !== -1; }; -utils.typeName = function(val) { +utils.typeName = function (val) { return Object.prototype.toString.call(val).slice(8, -1); }; @@ -1822,39 +2320,39 @@ utils.typeName = function(val) { * Returns an indication of whether the argument is an array or not */ utils.isArray = Array.isArray || - function(a) {return utils.typeName(a) == 'Array';}; + function (a) { return utils.typeName(a) === 'Array'; }; /** * Returns an indication of whether the argument is a Date or not */ -utils.isDate = function(d) { +utils.isDate = function (d) { return (d instanceof Date); }; /** * Does a deep clone of the object. */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { +utils.clone = function (obj) { + if (!obj || typeof obj === 'function' || utils.isDate(obj) || typeof obj !== 'object') { return obj; } var retVal, i; - if(utils.isArray(obj)){ + if (utils.isArray(obj)) { retVal = []; - for(i = 0; i < obj.length; ++i){ + for (i = 0; i < obj.length; ++i) { retVal.push(utils.clone(obj[i])); } return retVal; } retVal = {}; - for(i in obj){ + for (i in obj) { // https://issues.apache.org/jira/browse/CB-11522 'unknown' type may be returned in // custom protocol activation case on Windows Phone 8.1 causing "No such interface supported" exception // on cloning. - if((!(i in retVal) || retVal[i] != obj[i]) && typeof obj[i] != 'undefined' && typeof obj[i] != 'unknown') { + if ((!(i in retVal) || retVal[i] !== obj[i]) && typeof obj[i] !== 'undefined' && typeof obj[i] !== 'unknown') { // eslint-disable-line valid-typeof retVal[i] = utils.clone(obj[i]); } } @@ -1864,20 +2362,20 @@ utils.clone = function(obj) { /** * Returns a wrapped version of the function */ -utils.close = function(context, func, params) { - return function() { +utils.close = function (context, func, params) { + return function () { var args = params || arguments; return func.apply(context, args); }; }; -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { +// ------------------------------------------------------------------------------ +function UUIDcreatePart (length) { + var uuidpart = ''; + for (var i = 0; i < length; i++) { var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; + if (uuidchar.length === 1) { + uuidchar = '0' + uuidchar; } uuidpart += uuidchar; } @@ -1887,7 +2385,7 @@ function UUIDcreatePart(length) { /** * Create a UUID */ -utils.createUUID = function() { +utils.createUUID = function () { return UUIDcreatePart(4) + '-' + UUIDcreatePart(2) + '-' + UUIDcreatePart(2) + '-' + @@ -1895,16 +2393,15 @@ utils.createUUID = function() { UUIDcreatePart(6); }; - /** * Extends a child object from a parent object using classical inheritance * pattern. */ -utils.extend = (function() { +utils.extend = (function () { // proxy used to establish prototype chain - var F = function() {}; + var F = function () {}; // extend Child from Parent - return function(Child, Parent) { + return function (Child, Parent) { F.prototype = Parent.prototype; Child.prototype = new F(); @@ -1916,7 +2413,7 @@ utils.extend = (function() { /** * Alerts a message in any available way: alert or console.log. */ -utils.alert = function(msg) { +utils.alert = function (msg) { if (window.alert) { window.alert(msg); } else if (console && console.log) { @@ -1924,10 +2421,6 @@ utils.alert = function(msg) { } }; - - - - }); window.cordova = require('cordova'); diff --git a/StoneIsland/platforms/ios/www/cordova_plugins.js b/StoneIsland/platforms/ios/www/cordova_plugins.js index 770af107..e6ad8b23 100644 --- a/StoneIsland/platforms/ios/www/cordova_plugins.js +++ b/StoneIsland/platforms/ios/www/cordova_plugins.js @@ -1,172 +1,146 @@ cordova.define('cordova/plugin_list', function(require, exports, module) { 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-customurlscheme.LaunchMyApp", - "file": "plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js", - "pluginId": "cordova-plugin-customurlscheme", - "clobbers": [ - "window.plugins.launchmyapp" - ] - }, - { - "id": "cordova-plugin-device.device", - "file": "plugins/cordova-plugin-device/www/device.js", - "pluginId": "cordova-plugin-device", - "clobbers": [ - "device" - ] - }, - { - "id": "cordova-plugin-dialogs.notification", - "file": "plugins/cordova-plugin-dialogs/www/notification.js", - "pluginId": "cordova-plugin-dialogs", - "merges": [ - "navigator.notification" - ] - }, - { - "id": "cordova-plugin-geolocation.Coordinates", - "file": "plugins/cordova-plugin-geolocation/www/Coordinates.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "Coordinates" - ] - }, - { - "id": "cordova-plugin-geolocation.PositionError", - "file": "plugins/cordova-plugin-geolocation/www/PositionError.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "PositionError" - ] - }, - { - "id": "cordova-plugin-geolocation.Position", - "file": "plugins/cordova-plugin-geolocation/www/Position.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "Position" - ] - }, - { - "id": "cordova-plugin-geolocation.geolocation", - "file": "plugins/cordova-plugin-geolocation/www/geolocation.js", - "pluginId": "cordova-plugin-geolocation", - "clobbers": [ - "navigator.geolocation" - ] - }, - { - "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", - "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-statusbar.statusbar", - "file": "plugins/cordova-plugin-statusbar/www/statusbar.js", - "pluginId": "cordova-plugin-statusbar", - "clobbers": [ - "window.StatusBar" - ] - }, - { - "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": "ionic-plugin-keyboard.keyboard", - "file": "plugins/ionic-plugin-keyboard/www/ios/keyboard.js", - "pluginId": "ionic-plugin-keyboard", - "clobbers": [ - "cordova.plugins.Keyboard" - ], - "runs": true - }, - { - "id": "phonegap-plugin-push.PushNotification", - "file": "plugins/phonegap-plugin-push/www/push.js", - "pluginId": "phonegap-plugin-push", - "clobbers": [ - "PushNotification" - ] - }, - { - "id": "cordova-plugin-wkwebview-engine.ios-wkwebview-exec", - "file": "plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js", - "pluginId": "cordova-plugin-wkwebview-engine", - "clobbers": [ - "cordova.exec" - ] - } + { + "id": "cordova-plugin-customurlscheme.LaunchMyApp", + "file": "plugins/cordova-plugin-customurlscheme/www/ios/LaunchMyApp.js", + "pluginId": "cordova-plugin-customurlscheme", + "clobbers": [ + "window.plugins.launchmyapp" + ] + }, + { + "id": "cordova-plugin-device.device", + "file": "plugins/cordova-plugin-device/www/device.js", + "pluginId": "cordova-plugin-device", + "clobbers": [ + "device" + ] + }, + { + "id": "cordova-plugin-dialogs.notification", + "file": "plugins/cordova-plugin-dialogs/www/notification.js", + "pluginId": "cordova-plugin-dialogs", + "merges": [ + "navigator.notification" + ] + }, + { + "id": "cordova-plugin-geolocation.Coordinates", + "file": "plugins/cordova-plugin-geolocation/www/Coordinates.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "Coordinates" + ] + }, + { + "id": "cordova-plugin-geolocation.PositionError", + "file": "plugins/cordova-plugin-geolocation/www/PositionError.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "PositionError" + ] + }, + { + "id": "cordova-plugin-geolocation.Position", + "file": "plugins/cordova-plugin-geolocation/www/Position.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "Position" + ] + }, + { + "id": "cordova-plugin-geolocation.geolocation", + "file": "plugins/cordova-plugin-geolocation/www/geolocation.js", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "navigator.geolocation" + ] + }, + { + "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", + "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-statusbar.statusbar", + "file": "plugins/cordova-plugin-statusbar/www/statusbar.js", + "pluginId": "cordova-plugin-statusbar", + "clobbers": [ + "window.StatusBar" + ] + }, + { + "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": "ionic-plugin-keyboard.keyboard", + "file": "plugins/ionic-plugin-keyboard/www/ios/keyboard.js", + "pluginId": "ionic-plugin-keyboard", + "clobbers": [ + "cordova.plugins.Keyboard" + ], + "runs": true + }, + { + "id": "phonegap-plugin-push.PushNotification", + "file": "plugins/phonegap-plugin-push/www/push.js", + "pluginId": "phonegap-plugin-push", + "clobbers": [ + "PushNotification" + ] + } ]; module.exports.metadata = // TOP OF METADATA { - "cordova-plugin-app-name": "1.0.4", - "cordova-plugin-compat": "1.1.0", - "cordova-plugin-console": "1.0.4", - "cordova-plugin-customurlscheme": "4.2.0", - "cordova-plugin-device": "1.1.3", - "cordova-plugin-dialogs": "1.3.0", - "cordova-plugin-geolocation": "2.4.0", - "cordova-plugin-inappbrowser": "1.5.0", - "cordova-plugin-network-information": "1.3.0", - "cordova-plugin-splashscreen": "4.0.0", - "cordova-plugin-statusbar": "2.2.3", - "cordova-plugin-whitelist": "1.3.0", - "cordova-plugin-x-socialsharing": "5.1.3", - "ionic-plugin-keyboard": "2.2.1", - "phonegap-plugin-push": "2.0.0", - "cordova-plugin-wkwebview-engine": "1.1.3" + "cordova-plugin-app-name": "1.0.4", + "cordova-plugin-compat": "1.1.0", + "cordova-plugin-customurlscheme": "4.2.0", + "cordova-plugin-device": "1.1.3", + "cordova-plugin-dialogs": "1.3.0", + "cordova-plugin-geolocation": "2.4.0", + "cordova-plugin-inappbrowser": "1.5.0", + "cordova-plugin-network-information": "1.3.0", + "cordova-plugin-splashscreen": "4.0.3", + "cordova-plugin-statusbar": "2.2.3", + "cordova-plugin-whitelist": "1.3.0", + "cordova-plugin-x-socialsharing": "5.1.3", + "ionic-plugin-keyboard": "2.2.1", + "phonegap-plugin-push": "1.9.2" }; // BOTTOM OF METADATA });
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/www/index.html b/StoneIsland/platforms/ios/www/index.html index a7c6bacb..6d52433c 100755 --- a/StoneIsland/platforms/ios/www/index.html +++ b/StoneIsland/platforms/ios/www/index.html @@ -16,7 +16,7 @@ <meta name="format-detection" content="telephone=no"> <meta name="msapplication-tap-highlight" content="no"> - <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, viewport-fit=cover"> + <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height"> <link rel="stylesheet" type="text/css" href="css/fonts/fonts.css"> <link rel="stylesheet" type="text/css" href="css/fonts/ionicons.css"> <link rel="stylesheet" type="text/css" href="css/vendor/flickity.css"> diff --git a/StoneIsland/platforms/ios/www/js/index.js b/StoneIsland/platforms/ios/www/js/index.js index 72358e0e..eb3b32b9 100755 --- a/StoneIsland/platforms/ios/www/js/index.js +++ b/StoneIsland/platforms/ios/www/js/index.js @@ -83,6 +83,10 @@ var app = (function(){ image.src = "./img/compass-logo.png" } + if (is_iphone_x) { + StatusBar.hide() + } + app.view = null app.router = new SiteRouter () diff --git a/StoneIsland/platforms/ios/www/js/vendor/util.js b/StoneIsland/platforms/ios/www/js/vendor/util.js index d45c4b98..27bdf008 100755 --- a/StoneIsland/platforms/ios/www/js/vendor/util.js +++ b/StoneIsland/platforms/ios/www/js/vendor/util.js @@ -174,6 +174,7 @@ var browser = (function( ua ) { var is_iphone = (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) var is_ipad = (navigator.userAgent.match(/iPad/i)) var is_ios = is_iphone || is_ipad +var is_iphone_x = isIphoneX() var is_android = (navigator.userAgent.match(/Android/i)) var is_mobile = is_iphone || is_ipad || is_android var is_desktop = ! is_mobile; @@ -185,6 +186,14 @@ else { document.body.parentNode.classList.add("ios") } +function isIphoneX() { + return ( + is_iphone && + !is_ipad && + (window.innerHeight === 812 || window.innerWidth === 812) + ); +} + function selectElementContents(el) { if (window.getSelection && document.createRange) { var sel = window.getSelection(); 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 deleted file mode 100644 index deb07b57..00000000 --- a/StoneIsland/platforms/ios/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 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/ios/www/plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js deleted file mode 100644 index 3a141228..00000000 --- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js +++ /dev/null @@ -1,179 +0,0 @@ -cordova.define("cordova-plugin-wkwebview-engine.ios-wkwebview-exec", 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. - * -*/ - -/** - * Creates the exec bridge used to notify the native code of - * commands. - */ -var cordova = require('cordova'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'); - -function massageArgsJsToNative(args) { - if (!args || utils.typeName(args) != 'Array') { - return args; - } - var ret = []; - args.forEach(function(arg, i) { - if (utils.typeName(arg) == 'ArrayBuffer') { - ret.push({ - 'CDVType': 'ArrayBuffer', - 'data': base64.fromArrayBuffer(arg) - }); - } else { - ret.push(arg); - } - }); - return ret; -} - -function massageMessageNativeToJs(message) { - if (message.CDVType == 'ArrayBuffer') { - var stringToArrayBuffer = function(str) { - var ret = new Uint8Array(str.length); - for (var i = 0; i < str.length; i++) { - ret[i] = str.charCodeAt(i); - } - return ret.buffer; - }; - var base64ToArrayBuffer = function(b64) { - return stringToArrayBuffer(atob(b64)); - }; - message = base64ToArrayBuffer(message.data); - } - return message; -} - -function convertMessageToArgsNativeToJs(message) { - var args = []; - if (!message || !message.hasOwnProperty('CDVType')) { - args.push(message); - } else if (message.CDVType == 'MultiPart') { - message.messages.forEach(function(e) { - args.push(massageMessageNativeToJs(e)); - }); - } else { - args.push(massageMessageNativeToJs(message)); - } - return args; -} - -var iOSExec = function() { - - // detect change in bridge, if there is a change, we forward to new bridge - - // if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.cordova && window.webkit.messageHandlers.cordova.postMessage) { - // bridgeMode = jsToNativeModes.WK_WEBVIEW_BINDING; - // } - - var successCallback, failCallback, service, action, actionArgs; - var callbackId = null; - if (typeof arguments[0] !== "string") { - // FORMAT ONE - successCallback = arguments[0]; - failCallback = arguments[1]; - service = arguments[2]; - action = arguments[3]; - actionArgs = arguments[4]; - - // Since we need to maintain backwards compatibility, we have to pass - // an invalid callbackId even if no callback was provided since plugins - // will be expecting it. The Cordova.exec() implementation allocates - // an invalid callbackId and passes it even if no callbacks were given. - callbackId = 'INVALID'; - } else { - throw new Error('The old format of this exec call has been removed (deprecated since 2.1). Change to: ' + - 'cordova.exec(null, null, \'Service\', \'action\', [ arg1, arg2 ]);'); - } - - // If actionArgs is not provided, default to an empty array - actionArgs = actionArgs || []; - - // Register the callbacks and add the callbackId to the positional - // arguments if given. - if (successCallback || failCallback) { - callbackId = service + cordova.callbackId++; - cordova.callbacks[callbackId] = - {success:successCallback, fail:failCallback}; - } - - actionArgs = massageArgsJsToNative(actionArgs); - - // CB-10133 DataClone DOM Exception 25 guard (fast function remover) - var command = [callbackId, service, action, JSON.parse(JSON.stringify(actionArgs))]; - window.webkit.messageHandlers.cordova.postMessage(command); - -}; - -iOSExec.nativeCallback = function(callbackId, status, message, keepCallback, debug) { - - var success = status === 0 || status === 1; - var args = convertMessageToArgsNativeToJs(message); - setTimeout(function(){ - cordova.callbackFromNative(callbackId, success, status, args, keepCallback); - }, 0); -}; - -// for backwards compatibility -iOSExec.nativeEvalAndFetch = function(func) { - try { - func(); - } catch (e) { - console.log(e); - } -}; - -// Proxy the exec for bridge changes. See CB-10106 - -function cordovaExec() { - var cexec = require('cordova/exec'); - var cexec_valid = (typeof cexec.nativeFetchMessages === 'function') && (typeof cexec.nativeEvalAndFetch === 'function') && (typeof cexec.nativeCallback === 'function'); - return (cexec_valid && execProxy !== cexec)? cexec : iOSExec; -} - -function execProxy() { - cordovaExec().apply(null, arguments); -} - -execProxy.nativeFetchMessages = function() { - return cordovaExec().nativeFetchMessages.apply(null, arguments); -}; - -execProxy.nativeEvalAndFetch = function() { - return cordovaExec().nativeEvalAndFetch.apply(null, arguments); -}; - -execProxy.nativeCallback = function() { - return cordovaExec().nativeCallback.apply(null, arguments); -}; - -module.exports = execProxy; - -if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.cordova && window.webkit.messageHandlers.cordova.postMessage) { - // unregister the old bridge - cordova.define.remove('cordova/exec'); - // redefine bridge to our new bridge - cordova.define("cordova/exec", function(require, exports, module) { - module.exports = execProxy; - }); -} -}); 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 index 7234d474..a5315486 100644 --- a/StoneIsland/platforms/ios/www/plugins/phonegap-plugin-push/www/push.js +++ b/StoneIsland/platforms/ios/www/plugins/phonegap-plugin-push/www/push.js @@ -1,16 +1,4 @@ cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) { -/** -* This file has been generated by Babel. -* -* DO NOT EDIT IT DIRECTLY -* -* Edit the JS source file src/js/push.js -**/'use strict'; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - /* global cordova:false */ /* globals window */ @@ -20,358 +8,322 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var exec = cordova.require('cordova/exec'); -var PushNotification = function () { - /** - * PushNotification constructor. - * - * @param {Object} options to initiate Push Notifications. - * @return {PushNotification} instance that can be monitored and cancelled. - */ - function PushNotification(options) { - var _this = this; - - _classCallCheck(this, PushNotification); +/** + * PushNotification constructor. + * + * @param {Object} options to initiate Push Notifications. + * @return {PushNotification} instance that can be monitored and cancelled. + */ - this.handlers = { - registration: [], - notification: [], - error: [] +var PushNotification = function(options) { + this._handlers = { + 'registration': [], + 'notification': [], + 'error': [] }; // require options parameter if (typeof options === 'undefined') { - throw new Error('The options argument is required.'); + throw new Error('The options argument is required.'); } // store the options to this object instance this.options = options; // triggered on registration and notification - var success = function success(result) { - if (result && typeof result.registrationId !== 'undefined') { - _this.emit('registration', result); - } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { - var executeFuctionOrEmitEventByName = function executeFuctionOrEmitEventByName(functionName, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } + var that = this; + var success = function(result) { + if (result && typeof result.registrationId !== 'undefined') { + that.emit('registration', result); + } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { + var executeFuctionOrEmitEventByName = function(callbackName, context, arg) { + var namespaces = callbackName.split('.'); + var func = namespaces.pop(); + for (var i = 0; i < namespaces.length; i++) { + context = context[namespaces[i]]; + } - var namespaces = functionName.split('.'); - var func = namespaces.pop(); - for (var i = 0; i < namespaces.length; i++) { - context = context[namespaces[i]]; - } + if (typeof context[func] === 'function') { + context[func].call(context, arg); + } else { + that.emit(callbackName, arg); + } + }; - if (typeof context[func] === 'function') { - context[func].call(context, args); - } else { - _this.emit(functionName, args); - } - }; - - executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); - } else if (result) { - _this.emit('notification', result); - } + executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); + } else if (result) { + that.emit('notification', result); + } }; // triggered on error - var fail = function fail(msg) { - var e = typeof msg === 'string' ? new Error(msg) : msg; - _this.emit('error', e); + 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]); + setTimeout(function() { + exec(success, fail, 'PushNotification', 'init', [options]); }, 10); - } - - /** - * Unregister from push notifications - */ - +}; - _createClass(PushNotification, [{ - key: 'unregister', - value: function unregister(successCallback) { - var _this2 = this; +/** + * Unregister from push notifications + */ - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var options = arguments[2]; +PushNotification.prototype.unregister = function(successCallback, errorCallback, options) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof 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'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.unregister failure: success callback parameter must be a function'); return; - } + } - var cleanHandlersAndPassThrough = function cleanHandlersAndPassThrough() { + var that = this; + var cleanHandlersAndPassThrough = function() { if (!options) { - _this2.handlers = { - registration: [], - notification: [], - error: [] - }; + that._handlers = { + 'registration': [], + 'notification': [], + 'error': [] + }; } successCallback(); - }; - - exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); - } + }; - /** - * subscribe to a topic - * @param {String} topic topic to subscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ + exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); +}; - }, { - key: 'subscribe', - value: function subscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; +/** + * subscribe to a topic + * @param {String} topic topic to subscribe + * @param {Function} successCallback success callback + * @param {Function} errorCallback error callback + * @return {void} + */ +PushNotification.prototype.subscribe = function(topic, successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'failure parameter not a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.subscribe failure: failure parameter not a function'); return; - } + } - if (typeof successCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'success callback parameter must be a function'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.subscribe failure: success callback parameter must be a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); } - /** - * unsubscribe to a topic - * @param {String} topic topic to unsubscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ + exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); +}; - }, { - key: 'unsubscribe', - value: function unsubscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; +/** + * unsubscribe to a topic + * @param {String} topic topic to unsubscribe + * @param {Function} successCallback success callback + * @param {Function} errorCallback error callback + * @return {void} + */ +PushNotification.prototype.unsubscribe = function(topic, successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { + if (typeof errorCallback !== 'function') { console.log('PushNotification.unsubscribe failure: failure parameter not a function'); return; - } + } - if (typeof successCallback !== 'function') { - console.log('PushNotification.unsubscribe failure: ' + 'success callback parameter must be a function'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.unsubscribe failure: success callback parameter must be a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); } - /** - * Call this to set the application icon badge - */ + exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); +}; - }, { - key: 'setApplicationIconBadgeNumber', - value: function setApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var badge = arguments[2]; +/** + * Call this to set the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: failure ' + 'parameter not a function'); - return; - } +PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: success ' + 'callback parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{ badge: badge }]); + if (typeof successCallback !== 'function') { + console.log('PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function'); + return; } - /** - * Get the application icon badge - */ + exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{badge: badge}]); +}; - }, { - key: 'getApplicationIconBadgeNumber', - value: function getApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; +/** + * Get the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: failure ' + 'parameter not a function'); - return; - } +PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: success ' + 'callback parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); + if (typeof successCallback !== 'function') { + console.log('PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function'); + return; } - /** - * Clear all notifications - */ + exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); +}; - }, { - key: 'clearAllNotifications', - value: function clearAllNotifications() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; +/** + * Get the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: failure parameter ' + 'not a function'); - return; - } +PushNotification.prototype.clearAllNotifications = function(successCallback, errorCallback) { + if (!successCallback) { successCallback = function() {}; } + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: success callback ' + 'parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.clearAllNotifications failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); + if (typeof successCallback !== 'function') { + console.log('PushNotification.clearAllNotifications failure: success callback parameter must be a function'); + return; } - /** - * 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. - */ - }, { - key: 'on', - value: function on(eventName, callback) { - if (!this.handlers.hasOwnProperty(eventName)) { - this.handlers[eventName] = []; - } - this.handlers[eventName].push(callback); + exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); +}; + +/** + * Listen for an event. + * + * Any event is supported, but the following are built-in: + * + * - 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] = []; } + this._handlers[eventName].push(callback); +}; - /** - * Remove event listener. - * - * @param {String} eventName to match subscription. - * @param {Function} handle function associated with event. - */ +/** + * Remove event listener. + * + * @param {String} eventName to match subscription. + * @param {Function} handle function associated with event. + */ - }, { - key: 'off', - value: function off(eventName, handle) { - if (this.handlers.hasOwnProperty(eventName)) { - var handleIndex = this.handlers[eventName].indexOf(handle); +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); + 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. - */ - - }, { - key: 'emit', - value: function emit() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } +/** + * 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. + */ - var eventName = args.shift(); +PushNotification.prototype.emit = function() { + var args = Array.prototype.slice.call(arguments); + var eventName = args.shift(); - if (!this.handlers.hasOwnProperty(eventName)) { + if (!this._handlers.hasOwnProperty(eventName)) { return false; - } + } - for (var i = 0, length = this.handlers[eventName].length; i < length; i++) { - var callback = this.handlers[eventName][i]; + for (var i = 0, length = this._handlers[eventName].length; i < length; i++) { + var callback = this._handlers[eventName][i]; if (typeof callback === 'function') { - callback.apply(undefined, args); + callback.apply(undefined,args); } else { - console.log('event handler: ' + eventName + ' must be a function'); + console.log('event handler: ' + eventName + ' must be a function'); } - } - - return true; } - }, { - key: 'finish', - value: function finish() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'handler'; - if (typeof successCallback !== 'function') { + return true; +}; + +PushNotification.prototype.finish = function(successCallback, errorCallback, id) { + if (!successCallback) { successCallback = function() {}; } + if (!errorCallback) { errorCallback = function() {}; } + if (!id) { id = 'handler'; } + + if (typeof successCallback !== 'function') { console.log('finish failure: success callback parameter must be a function'); return; - } + } - if (typeof errorCallback !== 'function') { + if (typeof errorCallback !== 'function') { console.log('finish failure: failure parameter not a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); } - }]); - return PushNotification; -}(); + exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); +}; /*! * 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 - */ + /** + * 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); + }, - init: function init(options) { - return new PushNotification(options); - }, + hasPermission: function(successCallback, errorCallback) { + exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); + }, - hasPermission: function hasPermission(successCallback, errorCallback) { - exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); - }, + /** + * PushNotification Object. + * + * Expose the PushNotification object for direct use + * and testing. Typically, you should use the + * .init helper method. + */ - /** - * PushNotification Object. - * - * Expose the PushNotification object for direct use - * and testing. Typically, you should use the - * .init helper method. - */ - PushNotification: PushNotification + PushNotification: PushNotification }; + }); diff --git a/StoneIsland/platforms/platforms.json b/StoneIsland/platforms/platforms.json index 32ab0905..8be1a814 100755 --- a/StoneIsland/platforms/platforms.json +++ b/StoneIsland/platforms/platforms.json @@ -1,4 +1,4 @@ { - "android": "6.2.3", - "ios": "4.4.0" + "android": "6.2.3", + "ios": "4.5.2" }
\ No newline at end of file diff --git a/StoneIsland/plugins/android.json b/StoneIsland/plugins/android.json index 7bd5deb4..13cf41ff 100755 --- a/StoneIsland/plugins/android.json +++ b/StoneIsland/plugins/android.json @@ -1,66 +1,61 @@ { - "prepare_queue": { - "installed": [], - "uninstalled": [] + "prepare_queue": { + "installed": [], + "uninstalled": [] + }, + "config_munge": { + "files": {} + }, + "installed_plugins": { + "cordova-plugin-inappbrowser": { + "PACKAGE_NAME": "us.okfoc.stoneisland" }, - "config_munge": { - "files": {} + "cordova-plugin-x-socialsharing": { + "PACKAGE_NAME": "us.okfoc.stoneisland" }, - "installed_plugins": { - "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-whitelist": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-console": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-device": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-network-information": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-dialogs": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-splashscreen": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-geolocation": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "ionic-plugin-keyboard": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-statusbar": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-app-name": { - "APP_NAME": "Stone Island", - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "phonegap-plugin-push": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-wkwebview-engine": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - } + "cordova-plugin-customurlscheme": { + "URL_SCHEME": "stoneisland", + "ANDROID_SCHEME": " ", + "ANDROID_HOST": " ", + "ANDROID_PATHPREFIX": "/", + "PACKAGE_NAME": "us.okfoc.stoneisland" }, - "dependent_plugins": { - "cordova-plugin-compat": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - } + "cordova-plugin-whitelist": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-device": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-network-information": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-dialogs": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-geolocation": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "ionic-plugin-keyboard": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-statusbar": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-app-name": { + "APP_NAME": "Stone Island", + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-splashscreen": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "phonegap-plugin-push": { + "SENDER_ID": "85075801930", + "PACKAGE_NAME": "us.okfoc.stoneisland" + } + }, + "dependent_plugins": { + "cordova-plugin-compat": { + "PACKAGE_NAME": "us.okfoc.stoneisland" } + } }
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-console/CONTRIBUTING.md b/StoneIsland/plugins/cordova-plugin-console/CONTRIBUTING.md deleted file mode 100644 index 4c8e6a5e..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/CONTRIBUTING.md +++ /dev/null @@ -1,37 +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. -# ---> - -# Contributing to Apache Cordova - -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 -[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). - - Have a Jira issue open that corresponds to your contribution. - - Run the tests so your patch doesn't break existing functionality. - -We look forward to your contributions! diff --git a/StoneIsland/plugins/cordova-plugin-console/LICENSE b/StoneIsland/plugins/cordova-plugin-console/LICENSE deleted file mode 100644 index 7a4a3ea2..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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.
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-console/NOTICE b/StoneIsland/plugins/cordova-plugin-console/NOTICE deleted file mode 100644 index 8ec56a52..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/NOTICE +++ /dev/null @@ -1,5 +0,0 @@ -Apache Cordova -Copyright 2012 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). diff --git a/StoneIsland/plugins/cordova-plugin-console/README.md b/StoneIsland/plugins/cordova-plugin-console/README.md deleted file mode 100644 index ebd09398..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/README.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -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 -# 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. ---> - -|Android|iOS| Windows 8.1 Store | Windows 8.1 Phone | Windows 10 Store | Travis CI | -|:-:|:-:|:-:|:-:|:-:|:-:| -|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-console/)|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-console/)|[](http://cordova-ci.cloudapp.net:8080/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-phone,PLUGIN=cordova-plugin-console/)|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-console/)|[](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 -you are happy with how console.log() works for you, then you probably -don't need this plugin. - -This plugin defines a global `console` object. - -Although the object is in the global scope, features provided by this plugin -are not available until after the `deviceready` event. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - 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 - -### Android Quirks - -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 deleted file mode 100644 index 76cc093b..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/RELEASENOTES.md +++ /dev/null @@ -1,104 +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. -# ---> -# Release Notes - -### 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 - -### 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 - -### 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** - -### 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 - -### 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](https://issues.apache.org/jira/browse/CB-6460): Update license headers -* Add NOTICE file - -### 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.6 (Jan 02, 2014) -* [CB-5658](https://issues.apache.org/jira/browse/CB-5658) Add doc/index.md for Console plugin - -### 0.2.5 (Dec 4, 2013) -* add ubuntu platform - -### 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.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. - - diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/de/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/de/README.md deleted file mode 100644 index 933c1b7a..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/de/README.md +++ /dev/null @@ -1,43 +0,0 @@ -<!--- -# 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-console - -[](https://travis-ci.org/apache/cordova-plugin-console) - -Dieses Plugin stellt sicher, dass der Befehl console.log() so hilfreich ist, wie er sein kann. Es fügt zusätzliche Funktion für iOS, Ubuntu, Windows Phone 8 und Windows. Teilweise kann es vorkommen, dass der Befehl console.log() nicht korrekt erkannt wird, und es zu Fehlern bzw. zu nicht angezeigten Logs in der Console kommt. Wenn Sie mit der derzeitigen Funktionsweise zufrieden sind, kann es sein, dass Sie dieses Plugin nicht benötigen. - -Dieses Plugin wird ein global-`console`-Objekt definiert. - -Obwohl das Objekt im globalen Gültigkeitsbereich ist, stehen Features von diesem Plugin nicht bis nach dem `deviceready`-Ereignis. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## Installation - - cordova plugin add cordova-plugin-console - - -### Android Eigenarten - -Auf einigen Plattformen als Android fungieren console.log() auf mehrere Argumente wie console.log ("1", "2", "3"). Android wird jedoch nur auf das erste Argument fungieren. Nachfolgende Argumente zu console.log() werden ignoriert. Dieses Plugin ist nicht die Verantwortung dafür, es ist eine Einschränkung von Android selbst.
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/de/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/de/index.md deleted file mode 100644 index 95517827..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/de/index.md +++ /dev/null @@ -1,41 +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. ---> - -# cordova-plugin-console - -Dieses Plugin stellt sicher, dass der Befehl console.log() so hilfreich ist, wie er sein kann. Es fügt zusätzliche Funktion für iOS, Ubuntu, Windows Phone 8 und Windows 8 hinzu. Teilweise kann es vorkommen, dass der Befehl console.log() nicht korrekt erkannt wird, und es zu Fehlern bzw. zu nicht angezeigten Logs in der Console kommt. Wenn Sie mit der derzeitigen Funktionsweise zufrieden sind, kann es sein, dass Sie dieses Plugin nicht benötigen. - -Dieses Plugin wird ein global-`console`-Objekt definiert. - -Obwohl das Objekt im globalen Gültigkeitsbereich ist, stehen Features von diesem Plugin nicht bis nach dem `deviceready`-Ereignis. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## Installation - - cordova plugin add cordova-plugin-console - - -### Android Eigenarten - -Auf einigen Plattformen als Android fungieren console.log() auf mehrere Argumente wie console.log ("1", "2", "3"). Android wird jedoch nur auf das erste Argument fungieren. Nachfolgende Argumente zu console.log() werden ignoriert. Dieses Plugin ist nicht die Verantwortung dafür, es ist eine Einschränkung von Android selbst. diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/es/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/es/README.md deleted file mode 100644 index b089d639..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/es/README.md +++ /dev/null @@ -1,41 +0,0 @@ -<!--- -# 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-console - -[](https://travis-ci.org/apache/cordova-plugin-console) - -Este plugin es para asegurarse de que console.log() es tan útil como puede ser. Agrega la función adicional para iOS, Ubuntu, Windows Phone 8 y Windows. Si estás contento con cómo funciona console.log() para ti, entonces probablemente no necesitas este plugin. - -Este plugin define un global `console` objeto. - -Aunque el objeto está en el ámbito global, características proporcionadas por este plugin no están disponibles hasta después de la `deviceready` evento. - - document.addEventListener ("deviceready", onDeviceReady, false); - function onDeviceReady() {console.log ("console.log funciona bien");} - - -## Instalación - - cordova plugin add cordova-plugin-console - - -### Rarezas Android - -En algunas plataformas que no sean Android, console.log() actuará en varios argumentos, como console.log ("1", "2", "3"). Sin embargo, Android actuará sólo en el primer argumento. Se omitirá posteriores argumentos para console.log(). Este plugin no es la causa de eso, es una limitación propia de Android.
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/es/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/es/index.md deleted file mode 100644 index e6b8e684..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/es/index.md +++ /dev/null @@ -1,39 +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. ---> - -# cordova-plugin-console - -Este plugin es para asegurarse de que console.log() es tan útil como puede ser. Añade función adicional para iOS, Windows Phone 8, Ubuntu y Windows 8. Si estás contento con cómo funciona console.log() para ti, entonces probablemente no necesitas este plugin. - -Este plugin define un global `console` objeto. - -Aunque el objeto está en el ámbito global, características proporcionadas por este plugin no están disponibles hasta después de la `deviceready` evento. - - document.addEventListener ("deviceready", onDeviceReady, false); - function onDeviceReady() {console.log ("console.log funciona bien");} - - -## Instalación - - Cordova plugin agregar cordova-plugin-console - - -### Rarezas Android - -En algunas plataformas que no sean Android, console.log() actuará en varios argumentos, como console.log ("1", "2", "3"). Sin embargo, Android actuará sólo en el primer argumento. Se omitirá posteriores argumentos para console.log(). Este plugin no es la causa de eso, es una limitación propia de Android. diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/fr/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/fr/README.md deleted file mode 100644 index 74207ac4..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/fr/README.md +++ /dev/null @@ -1,41 +0,0 @@ -<!--- -# 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-console - -[](https://travis-ci.org/apache/cordova-plugin-console) - -Ce plugin est destiné à faire en sorte que console.log() est aussi utile que possible. Il ajoute une fonction supplémentaire pour iOS, Ubuntu, Windows Phone 8 et Windows. Si vous êtes satisfait du fonctionnement de console.log() pour vous, alors vous avez probablement pas besoin ce plugin. - -Ce plugin définit un global `console` objet. - -Bien que l'objet est dans la portée globale, les fonctions offertes par ce plugin ne sont pas disponibles jusqu'après la `deviceready` événement. - - document.addEventListener (« deviceready », onDeviceReady, false) ; - function onDeviceReady() {console.log ("console.log fonctionne bien");} - - -## Installation - - cordova plugin add cordova-plugin-console - - -### Quirks Android - -Sur certaines plateformes autres que Android, console.log() va agir sur plusieurs arguments, tels que console.log ("1", "2", "3"). Toutefois, Android doit agir uniquement sur le premier argument. Les arguments suivants à console.log() seront ignorées. Ce plugin n'est pas la cause de cela, il s'agit d'une limitation d'Android lui-même.
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/fr/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/fr/index.md deleted file mode 100644 index d0dbba55..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/fr/index.md +++ /dev/null @@ -1,39 +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. ---> - -# cordova-plugin-console - -Ce plugin est destiné à faire en sorte que console.log() est aussi utile que possible. Il ajoute une fonction supplémentaire pour iOS, Ubuntu, Windows Phone 8 et Windows 8. Si vous êtes satisfait du fonctionnement de console.log() pour vous, alors vous avez probablement pas besoin ce plugin. - -Ce plugin définit un global `console` objet. - -Bien que l'objet est dans la portée globale, les fonctions offertes par ce plugin ne sont pas disponibles jusqu'après la `deviceready` événement. - - document.addEventListener (« deviceready », onDeviceReady, false) ; - function onDeviceReady() {console.log ("console.log fonctionne bien");} - - -## Installation - - Cordova plugin ajouter cordova-plugin-console - - -### Quirks Android - -Sur certaines plateformes autres que Android, console.log() va agir sur plusieurs arguments, tels que console.log ("1", "2", "3"). Toutefois, Android doit agir uniquement sur le premier argument. Les arguments suivants à console.log() seront ignorées. Ce plugin n'est pas la cause de cela, il s'agit d'une limitation d'Android lui-même. diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/it/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/it/README.md deleted file mode 100644 index 5394d551..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/it/README.md +++ /dev/null @@ -1,43 +0,0 @@ -<!--- -# 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-console - -[](https://travis-ci.org/apache/cordova-plugin-console) - -Questo plugin è intesa a garantire che console.log() è tanto utile quanto può essere. Aggiunge una funzione aggiuntiva per iOS, Ubuntu, Windows Phone 8 e Windows. Se sei soddisfatto di come console.log() funziona per voi, quindi probabilmente non è necessario questo plugin. - -Questo plugin definisce un oggetto globale `console`. - -Sebbene l'oggetto sia in ambito globale, funzionalità fornite da questo plugin non sono disponibili fino a dopo l'evento `deviceready`. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## Installazione - - cordova plugin add cordova-plugin-console - - -### Stranezze Android - -Su alcune piattaforme diverse da Android, console.log() agirà su più argomenti, come ad esempio console ("1", "2", "3"). Tuttavia, Android agirà solo sul primo argomento. Argomenti successivi a console.log() verranno ignorati. Questo plugin non è la causa di ciò, è una limitazione di Android stesso.
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/it/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/it/index.md deleted file mode 100644 index f0625b39..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/it/index.md +++ /dev/null @@ -1,41 +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. ---> - -# cordova-plugin-console - -Questo plugin è intesa a garantire che console.log() è tanto utile quanto può essere. Aggiunge una funzione aggiuntiva per iOS, Ubuntu, Windows 8 e Windows Phone 8. Se sei soddisfatto di come console.log() funziona per voi, quindi probabilmente non è necessario questo plugin. - -Questo plugin definisce un oggetto globale `console`. - -Sebbene l'oggetto sia in ambito globale, funzionalità fornite da questo plugin non sono disponibili fino a dopo l'evento `deviceready`. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## Installazione - - cordova plugin add cordova-plugin-console - - -### Stranezze Android - -Su alcune piattaforme diverse da Android, console.log() agirà su più argomenti, come ad esempio console ("1", "2", "3"). Tuttavia, Android agirà solo sul primo argomento. Argomenti successivi a console.log() verranno ignorati. Questo plugin non è la causa di ciò, è una limitazione di Android stesso. diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/ja/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/ja/README.md deleted file mode 100644 index 059c373c..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/ja/README.md +++ /dev/null @@ -1,43 +0,0 @@ -<!--- -# 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-console - -[](https://travis-ci.org/apache/cordova-plugin-console) - -このプラグインは、その console.log() がすることができます便利なことを確認するものです。 それは iOS、Ubuntu、Windows Phone 8 は、Windows に追加の関数を追加します。 場合はあなたのための console.log() の作品に満足しているし、おそらく必要はありませんこのプラグイン。 - -このプラグインでは、グローバル ・ `console` オブジェクトを定義します。 - -オブジェクトは、グローバル スコープでですが、このプラグインによって提供される機能は、`deviceready` イベントの後まで使用できません。 - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## インストール - - cordova plugin add cordova-plugin-console - - -### Android の癖 - -アンドロイド以外のいくつかのプラットフォームで console.log() は console.log (「1」、「2」、「3」) など、複数の引数に動作します。 しかし、アンドロイドは、最初の引数でのみ動作します。 console.log() に後続の引数は無視されます。 このプラグインが原因ではない、それは Android の自体の制限です。
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/ja/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/ja/index.md deleted file mode 100644 index 413593ce..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/ja/index.md +++ /dev/null @@ -1,41 +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. ---> - -# cordova-plugin-console - -このプラグインは、その console.log() がすることができます便利なことを確認するものです。 それは、iOS、Ubuntu、Windows Phone 8 および Windows 8 の追加関数を追加します。 場合はあなたのための console.log() の作品に満足しているし、おそらく必要はありませんこのプラグイン。 - -このプラグインでは、グローバル ・ `console` オブジェクトを定義します。 - -オブジェクトは、グローバル スコープでですが、このプラグインによって提供される機能は、`deviceready` イベントの後まで使用できません。 - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## インストール - - cordova plugin add cordova-plugin-console - - -### Android の癖 - -アンドロイド以外のいくつかのプラットフォームで console.log() は console.log (「1」、「2」、「3」) など、複数の引数に動作します。 しかし、アンドロイドは、最初の引数でのみ動作します。 console.log() に後続の引数は無視されます。 このプラグインが原因ではない、それは Android の自体の制限です。 diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/ko/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/ko/README.md deleted file mode 100644 index d03ee5aa..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/ko/README.md +++ /dev/null @@ -1,43 +0,0 @@ -<!--- -# 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-console - -[](https://travis-ci.org/apache/cordova-plugin-console) - -이 플러그인을 console.log()로 수 유용 되도록 의미입니다. 그것은 iOS, 우분투, Windows Phone 8, 및 창에 대 한 추가 기능을 추가합니다. Console.log() 당신을 위해 작동 하는 어떻게 행복 한 경우에, 그때 당신은 아마 필요 하지 않습니다이 플러그인. - -이 플러그인 글로벌 `console` 개체를 정의합니다. - -개체가 전역 범위에 있지만,이 플러그인에 의해 제공 되는 기능 하지 사용할 수 있습니다까지 `deviceready` 이벤트 후. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## 설치 - - cordova plugin add cordova-plugin-console - - -### 안 드 로이드 단점 - -안 드 로이드 이외의 일부 플랫폼에서 console.log() console.log ("1", "2", "3")와 같이 여러 인수에 작동할 것 이다. 그러나, 안 드 로이드는 첫 번째 인수에만 작동할 것 이다. Console.log() 후속 인수는 무시 됩니다. 이 플러그인의 원인이 되지 않습니다, 그리고 그것은 안 드 로이드 자체의 한계입니다.
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/ko/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/ko/index.md deleted file mode 100644 index ca631e44..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/ko/index.md +++ /dev/null @@ -1,41 +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. ---> - -# cordova-plugin-console - -이 플러그인을 console.log()로 수 유용 되도록 의미입니다. IOS, 우분투, Windows Phone 8 및 윈도우 8에 대 한 추가 기능을 추가 하 고 합니다. Console.log() 당신을 위해 작동 하는 어떻게 행복 한 경우에, 그때 당신은 아마 필요 하지 않습니다이 플러그인. - -이 플러그인 글로벌 `console` 개체를 정의합니다. - -개체가 전역 범위에 있지만,이 플러그인에 의해 제공 되는 기능 하지 사용할 수 있습니다까지 `deviceready` 이벤트 후. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## 설치 - - cordova plugin add cordova-plugin-console - - -### 안 드 로이드 단점 - -안 드 로이드 이외의 일부 플랫폼에서 console.log() console.log ("1", "2", "3")와 같이 여러 인수에 작동할 것 이다. 그러나, 안 드 로이드는 첫 번째 인수에만 작동할 것 이다. Console.log() 후속 인수는 무시 됩니다. 이 플러그인의 원인이 되지 않습니다, 그리고 그것은 안 드 로이드 자체의 한계입니다. diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/pl/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/pl/README.md deleted file mode 100644 index 78ab9d2c..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/pl/README.md +++ /dev/null @@ -1,43 +0,0 @@ -<!--- -# 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-console - -[](https://travis-ci.org/apache/cordova-plugin-console) - -Ten plugin jest przeznaczona do zapewnienia, że console.log() jest tak przydatne, jak to może być. To dodaje dodatkową funkcję dla iOS, Ubuntu, Windows Phone 8 i Windows. Jeśli jesteś zadowolony z jak console.log() pracuje dla Ciebie, wtedy prawdopodobnie nie potrzebują tej wtyczki. - -Ten plugin definiuje obiekt globalny `console`. - -Mimo, że obiekt jest w globalnym zasięgu, funkcji oferowanych przez ten plugin nie są dostępne dopiero po turnieju `deviceready`. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## Instalacja - - cordova plugin add cordova-plugin-console - - -### Dziwactwa Androida - -Na niektórych platformach innych niż Android console.log() będzie działać na wielu argumentów, takich jak console.log ("1", "2", "3"). Jednak Android będzie działać tylko na pierwszy argument. Kolejne argumenty do console.log() będą ignorowane. Ten plugin nie jest przyczyną, że, jest to ograniczenie Androida, sam.
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/pl/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/pl/index.md deleted file mode 100644 index 922b577c..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/pl/index.md +++ /dev/null @@ -1,41 +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. ---> - -# cordova-plugin-console - -Ten plugin jest przeznaczona do zapewnienia, że console.log() jest tak przydatne, jak to może być. To dodaje dodatkową funkcję dla iOS, Ubuntu, Windows Phone 8 i Windows 8. Jeśli jesteś zadowolony z jak console.log() pracuje dla Ciebie, wtedy prawdopodobnie nie potrzebują tej wtyczki. - -Ten plugin definiuje obiekt globalny `console`. - -Mimo, że obiekt jest w globalnym zasięgu, funkcji oferowanych przez ten plugin nie są dostępne dopiero po turnieju `deviceready`. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## Instalacja - - cordova plugin add cordova-plugin-console - - -### Dziwactwa Androida - -Na niektórych platformach innych niż Android console.log() będzie działać na wielu argumentów, takich jak console.log ("1", "2", "3"). Jednak Android będzie działać tylko na pierwszy argument. Kolejne argumenty do console.log() będą ignorowane. Ten plugin nie jest przyczyną, że, jest to ograniczenie Androida, sam. diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/ru/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/ru/index.md deleted file mode 100644 index 3cfe15dc..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/ru/index.md +++ /dev/null @@ -1,31 +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. ---> - -# cordova-plugin-console - -Этот плагин предназначен для обеспечения как полезным, поскольку это может быть что console.log(). Он добавляет дополнительные функции для iOS, Ubuntu, Windows Phone 8 и Windows 8. Если вы не довольны как console.log() работает для вас, то вы вероятно не нужен этот плагин. - -## Установка - - cordova plugin add cordova-plugin-console - - -### Особенности Android - -На некоторых платформах, отличных от Android console.log() будет действовать на нескольких аргументов, например console.log («1», «2», «3»). Тем не менее Android будет действовать только на первого аргумента. Последующие аргументы для console.log() будет игнорироваться. Этот плагин не является причиной этого, это ограничение Android сам. diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/zh/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/zh/README.md deleted file mode 100644 index ce27c3e1..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/zh/README.md +++ /dev/null @@ -1,43 +0,0 @@ -<!--- -# 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-console - -[](https://travis-ci.org/apache/cordova-plugin-console) - -這個外掛程式是為了確保該 console.log() 是一樣有用,它可以是。 它將添加附加功能的 iOS,Ubuntu,Windows Phone 8 和視窗。 如果你是快樂與 console.log() 是如何為你工作,那麼可能不需要這個外掛程式。 - -這個外掛程式定義了一個全域 `console` 物件。 - -儘管物件是在全球範圍內,提供這個外掛程式的功能不可用直到 `deviceready` 事件之後。 - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## 安裝 - - cordova plugin add cordova-plugin-console - - -### Android 的怪癖 - -在一些平臺上除了 Android,console.log() 亦會根據多個參數,如 console.log ("1"、"2"、"3")。 然而,安卓系統只亦會根據第一個參數。 對 console.log() 的後續參數將被忽略。 這個外掛程式不是的原因,它是一個 android 作業系統本身的限制。
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/zh/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/zh/index.md deleted file mode 100644 index e18a141b..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/doc/zh/index.md +++ /dev/null @@ -1,41 +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. ---> - -# cordova-plugin-console - -這個外掛程式是為了確保該 console.log() 是一樣有用,它可以是。 它將添加附加功能的 iOS、 Ubuntu,Windows Phone 8 和 Windows 8。 如果你是快樂與 console.log() 是如何為你工作,那麼可能不需要這個外掛程式。 - -這個外掛程式定義了一個全域 `console` 物件。 - -儘管物件是在全球範圍內,提供這個外掛程式的功能不可用直到 `deviceready` 事件之後。 - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log("console.log works well"); - } - - -## 安裝 - - cordova plugin add cordova-plugin-console - - -### Android 的怪癖 - -在一些平臺上除了 Android,console.log() 亦會根據多個參數,如 console.log ("1"、"2"、"3")。 然而,安卓系統只亦會根據第一個參數。 對 console.log() 的後續參數將被忽略。 這個外掛程式不是的原因,它是一個 android 作業系統本身的限制。 diff --git a/StoneIsland/plugins/cordova-plugin-console/package.json b/StoneIsland/plugins/cordova-plugin-console/package.json deleted file mode 100644 index 39dc7614..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "cordova-plugin-console", - "version": "1.0.4", - "description": "Cordova Console Plugin", - "cordova": { - "id": "cordova-plugin-console", - "platforms": [ - "ios", - "ubuntu", - "wp7", - "wp8", - "windows8", - "windows" - ] - }, - "repository": { - "type": "git", - "url": "https://github.com/apache/cordova-plugin-console" - }, - "keywords": [ - "cordova", - "console", - "ecosystem:cordova", - "cordova-ios", - "cordova-ubuntu", - "cordova-wp7", - "cordova-wp8", - "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", - "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 deleted file mode 100644 index b2fb3f06..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/plugin.xml +++ /dev/null @@ -1,127 +0,0 @@ -<?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://apache.org/cordova/ns/plugins/1.0" - id="cordova-plugin-console" - version="1.0.4"> - - <name>Console</name> - <description>Cordova Console Plugin</description> - <license>Apache 2.0</license> - <keywords>cordova,console</keywords> - <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> - - <!-- ios --> - <platform name="ios"> - - <config-file target="config.xml" parent="/*"> - <feature name="Console"> - <param name="ios-package" value="CDVLogger"/> - </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" /> - - </platform> - - <!-- 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" /> - - </platform> - - <!-- wp7 --> - <platform name="wp7"> - <config-file target="config.xml" parent="/*"> - <feature name="Console"> - <param name="wp-package" value="DebugConsole"/> - </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> - - <!-- wp8 --> - <platform name="wp8"> - <config-file target="config.xml" parent="/*"> - <feature name="Console"> - <param name="wp-package" value="DebugConsole"/> - </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 deleted file mode 100644 index 7cfb3063..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.h +++ /dev/null @@ -1,26 +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 <Cordova/CDVPlugin.h> - -@interface CDVLogger : CDVPlugin - -- (void)logLevel:(CDVInvokedUrlCommand*)command; - -@end diff --git a/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.cpp b/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.cpp deleted file mode 100644 index 9de09f43..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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. - */ - -#include "console.h" - -#include <iostream> - -Console::Console(Cordova *cordova) : CPlugin(cordova) { -} - -void Console::logLevel(int scId, int ecId, QString level, QString message) { - Q_UNUSED(scId) - Q_UNUSED(ecId) - - if (level != "LOG") - std::cout << "[" << level.toStdString() << "] "; - std::cout << message.toStdString() << std::endl; -} diff --git a/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.h b/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.h deleted file mode 100644 index 3f3d1634..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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. - */ - -#ifndef CONSOLE_H_FDSVCXGFRS -#define CONSOLE_H_FDSVCXGFRS - -#include <cplugin.h> - -#include <QtCore> - -class Console : public CPlugin { - Q_OBJECT -public: - explicit Console(Cordova *cordova); - - virtual const QString fullName() override { - return Console::fullID(); - } - - virtual const QString shortName() override { - return "Console"; - } - - static const QString fullID() { - return "Console"; - } - -public slots: - void logLevel(int scId, int ecId, QString level, QString message); -}; - -#endif diff --git a/StoneIsland/plugins/cordova-plugin-console/src/wp/DebugConsole.cs b/StoneIsland/plugins/cordova-plugin-console/src/wp/DebugConsole.cs deleted file mode 100644 index 9bb5476d..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/src/wp/DebugConsole.cs +++ /dev/null @@ -1,47 +0,0 @@ -/* - 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 System.Diagnostics; - -namespace WPCordovaClassLib.Cordova.Commands -{ - public class DebugConsole : BaseCommand - { - public void logLevel(string options) - { - string[] args = JSON.JsonHelper.Deserialize<string[]>(options); - string level = args[0]; - string msg = args[1]; - - if (level.Equals("LOG")) - { - Debug.WriteLine(msg); - } - else - { - Debug.WriteLine(level + ": " + msg); - } - } - } -} diff --git a/StoneIsland/plugins/cordova-plugin-console/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-console/tests/plugin.xml deleted file mode 100644 index cce2c53f..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/tests/plugin.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?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://apache.org/cordova/ns/plugins/1.0" - 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.4"> - <name>Cordova Console Plugin Tests</name> - <license>Apache 2.0</license> - - <js-module src="tests.js" name="tests"> - </js-module> -</plugin> diff --git a/StoneIsland/plugins/cordova-plugin-console/tests/tests.js b/StoneIsland/plugins/cordova-plugin-console/tests/tests.js deleted file mode 100644 index 74765d98..00000000 --- a/StoneIsland/plugins/cordova-plugin-console/tests/tests.js +++ /dev/null @@ -1,43 +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. - * -*/ - -/* 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'); - }); - }); -}; - -exports.defineManualTests = function (contentEl, createActionButton) {}; diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/README.md b/StoneIsland/plugins/cordova-plugin-splashscreen/README.md index 6a6faaf9..b2b8c19d 100644 --- a/StoneIsland/plugins/cordova-plugin-splashscreen/README.md +++ b/StoneIsland/plugins/cordova-plugin-splashscreen/README.md @@ -21,9 +21,9 @@ description: Control the splash screen for your app. # under the License. --> -|Android|iOS| Windows 8.1 Store | Windows 8.1 Phone | Windows 10 Store | Travis CI | -|:-:|:-:|:-:|:-:|:-:|:-:| -|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-splashscreen/)|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-splashscreen/)|[](http://cordova-ci.cloudapp.net:8080/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-phone,PLUGIN=cordova-plugin-splashscreen/)|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-splashscreen/)|[](https://travis-ci.org/apache/cordova-plugin-splashscreen)| +|Android 4.4|Android 5.1|Android 6.0|iOS 9.3|iOS 10.0|Windows 10 Store|Travis CI| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android-4.4,PLUGIN=cordova-plugin-splashscreen/)|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android-5.1,PLUGIN=cordova-plugin-splashscreen/)|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android-6.0,PLUGIN=cordova-plugin-splashscreen/)|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios-9.3,PLUGIN=cordova-plugin-splashscreen/)|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios-10.0,PLUGIN=cordova-plugin-splashscreen/)|[](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-splashscreen/)|[](https://travis-ci.org/apache/cordova-plugin-splashscreen)| # cordova-plugin-splashscreen @@ -51,6 +51,230 @@ Report issues with this plugin on the [Apache Cordova issue tracker][Apache Cord __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. +### iOS-specific information + +There are two mechanisms for displaying a launch screen on iOS: + +1. Legacy launch images: images are sized exactly for the device's screen size. Does not support the iPad Pro 12.9's native resolution or split-screen/slide-over multitasking. + +2. Launch storyboard images: Images are sized based on scale, idiom, and size classes. Supports all devices, and can be used with split-screen/slide-over multitasking. + +Apple is moving away from legacy launch images. There is no official support for providing a native-resolution launch image for the iPad Pro 12.9 or for providing launch images that work with split-screen multitasking or slide-over. If your app doesn't need to support these contexts, then you can continue to use legacy launch images for as long as you like. + +The preferred method of providing launch images is to use a launch storyboard. For native app developers, the ideal launch storyboard is an unpopulated version of the app's user interface at launch. For non-native app developers who don't wish to learn Interface Builder, however, this plugin simulates the legacy launch image method as much as is feasible. + +#### Legacy launch images + +If you choose to use legacy launch images, you will use the following syntax in `config.xml`: + +``` + <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"/> +``` + +Technically the filename for the `src` attribute can be anything you want; the filenames are used because they match what will be used when your project is compiled. The width and height attributes determine which launch images are displayed on which devices as follows: + +| width | height | device (orientation) | +|:-----------:|:------------:|:-------------------------:| +| 320 | 480 | All non-retina iPhones and iPods | +| 640 | 960 | iPhone 4/4s/5/5s (portrait) | +| 750 | 1334 | iPhone 6/6s/7 (portrait) | +| 1242 | 2208 | iPhone 6+/6s+/7+ (portrait) | +| 2208 | 1242 | iPhone 6+/6s+/7+ (landscape) | +| 768 | 1024 | All non-retina iPads (portrait) | +| 1024 | 768 | All non-retina iPads (landscape) | +| 1536 | 2048 | All retina iPads (portrait) | +| 2048 | 1536 | All retina iPads (landscape) | + +Note: It is vitally important that the source image actually matches the size specified in the `width` and `height` attributes. If it does not, the device may fail to render it properly, if at all. + +#### Launch storyboard images + +In order to support newer form factors and split-screen/slide-over multitasking, you should use launch storyboard images. These are similar to the legacy launch images above, but there are crucial differences: + + - images are not specific to a given device. + + - images are scaled to fill the available viewport (while maintaining the aspect ratio). + + - the outer edges of the images will be cropped, and the amount will vary based on device an viewport. + + - there is no need to provide an image for each possible device, viewport, and orientation; iOS will choose the best image for the situation automatically. + +##### Designing launch storyboard images + +The key to designing a launch storyboard image is understanding that the edges of the image will almost certainly be cropped. Therefore, one should not place any important information near the edges of any images provided to the launch storyboard. Only the center is a safe area, and this all but guarantees that following Apple's advice of presenting an unpopulated user interface will not work well. + +Instead, the following tips should enable you to create a launch image that works across a multitude of form factors, viewports, and orientations: + + - Important graphics (logos, icons, titles) should be centered. The safe bounding region will vary, so you will need to test to ensure that the important graphics are never cropped. Better yet, don't supply any important graphics in the first place. + + - You _can_ fine-tune the placement and size of these graphics, but you don't have the same fine-grained control as you did with legacy launch images. + + - Use a simple color wash. If you use two colors, you'll want one color to fill the top half of the image, and the second to fill the bottom half. If you use a gradient, you'll probably want to ensure that the middle of the gradient lines up with the center of the image. + + - Don't worry about pixel perfection -- because the images are scaled, there's almost no chance the images will be perfectly fit to the pixel grid. Since all supported iOS devices use retina screens, users will be hard pressed to notice it anyway. + +It is important to understand the concept of scale, idiom, and size class traits in order to use launch storyboard images effectively. Of the images supplied to the launch storyboard, iOS will choose the image that best matches the device and viewport and render that image. It is possible to supply only one launch image if so desired, but it is also possible to fine-tune the displayed launch image based on traits. When fine-tuning, one can ignore traits that aren't targeted or supported by the app. + +> Note: If you are using launch storyboard images, there is no need to include legacy images. If you do, the legacy images will be copied, but not used. + +##### Scale + +| scale | devices | +|:-----------:|:----------------------:| +| 1x | All non-retina devices | +| 2x | Most retina devices | +| 3x | iPhone 6+/6s+,7s+ | + +In general, you'll want to supply 2x and 3x images. Cordova only supports retina devices now, so there's no point in supplying 1x images. + +##### Idioms + +| idiom | devices | +|:-----------:|:-------------:| +| ipad | All iPads | +| iphone | All iPhones and iPod Touches | +| universal | All devices | + +You only need to provide universal images unless you need to fine-tune for a specific device idiom. + +##### Size classes + +There are two size classes applies to both screen axes. Narrow viewports are considered to be the "compact" size class, and remaining viewports are considered "regular". When supplying images to Xcode, however, one must choose between "any & compact" and "any & regular". To stay consistent with the native terminology, this feature will match based on "any" and "compact". `any` will match regular-sized viewports. + +Note: this feature uses `com` as an abbreviation for "compact" classes. + +The following classes are supported by this feature: + +| width | height | orientation | +|:-----------:|:------------:|:-----------------:| +| any | any | any | +| com | any | portrait | +| any | com | landscape (wide) | +| com | com | landscape (narrow)| + +To see the complete list of size classes associated with devices and viewports, see <http://www.sizeclasses.com>. + +##### Single-image launch screen + +If your launch image is simple, you may be able to avoid creating a lot of different launch images and supply only one. The launch image needs to meet the following requirements: + + - the image should be square + + - the image should be large enough to fit on an iPad Pro 12.9": 2732x2732 + + - anything important should fit within the center + + Keep in mind that the image will be cropped, possibly quite severely, depending upon the viewport. + +Once the image is created, you can include it in your project by adding the following to `config.xml`: + +``` + <splash src="res/screen/ios/Default@2x~universal~anyany.png" /> +``` + +Because only one image is provided, iOS will utilize it in every context. + +##### Multi-image launch screen + +If a single launch image won't meet your needs, you will probably need to supply at least six images, if not more. Furthermore, keep in mind that it will not be possible to fine tune the image to a specific device, but only to a device class, display factor, and viewport size. + +If you don't need to target images to a specific idiom, you should create six images, as follows: + +| scale | idiom | width | height | size | filename | +|:-----------:|:-----------:|:-----------:|:------------:|:----------:|:--------------:| +| 2x* | universal | any | any | 2732x2732 | `Default@2x~universal~anyany.png` | +| 2x | universal | com | any | 1278x2732 | `Default@2x~universal~comany.png` | +| 2x | universal | com | com | 1334x750 | `Default@2x~universal~comcom.png` | +| 3x* | universal | any | any | 2208x2208 | `Default@3x~universal~anyany.png` | +| 3x | universal | any | com | 2208x1242 | `Default@3x~universal~anycom.png` | +| 3x | universal | com | any | 1242x2208 | `Default@3x~universal~comany.png` | + +\* this image is required in order for iOS utilize the other images within this scale and idiom. + +> Note: If the 3x sizes look small too you, that's because there's only one device class that currently has a 3x density: the iPhone 6+/6s+/7+. + +The above looks like the following snippet when present in `config.xml`: + +``` + <splash src="res/screen/ios/Default@2x~universal~anyany.png" /> + <splash src="res/screen/ios/Default@2x~universal~comany.png" /> + <splash src="res/screen/ios/Default@2x~universal~comcom.png" /> + <splash src="res/screen/ios/Default@3x~universal~anyany.png" /> + <splash src="res/screen/ios/Default@3x~universal~anycom.png" /> + <splash src="res/screen/ios/Default@3x~universal~comany.png" /> +``` + +Should one need to further fine tune based upon device idiom, one can do so. This might look like so: + +| scale | idiom | width | height | size | filename | +|:-----------:|:-----------:|:-----------:|:------------:|:----------:|:--------------:| +| 2x* | iphone | any | any | 1334x1334 | `Default@2x~iphone~anyany.png` | +| 2x | iphone | com | any | 750x1334 | `Default@2x~iphone~comany.png` | +| 2x | iphone | com | com | 1334x750 | `Default@2x~iphone~comcom.png` | +| 3x* | iphone | any | any | 2208x2208 | `Default@3x~iphone~anyany.png` | +| 3x | iphone | any | com | 2208x1242 | `Default@3x~iphone~anycom.png` | +| 3x | iphone | com | any | 1242x2208 | `Default@3x~iphone~comany.png` | +| 2x* | ipad | any | any | 2732x2732 | `Default@2x~ipad~anyany.png` | +| 2x | ipad | com | any | 1278x2732 | `Default@2x~ipad~comany.png` | + +\* this image is required in order for iOS utilize the other images within this scale and idiom. + +The above looks like the following in `config.xml`: + +``` + <splash src="res/screen/ios/Default@2x~iphone~anyany.png" /> + <splash src="res/screen/ios/Default@2x~iphone~comany.png" /> + <splash src="res/screen/ios/Default@2x~iphone~comcom.png" /> + <splash src="res/screen/ios/Default@3x~iphone~anyany.png" /> + <splash src="res/screen/ios/Default@3x~iphone~anycom.png" /> + <splash src="res/screen/ios/Default@3x~iphone~comany.png" /> + <splash src="res/screen/ios/Default@2x~ipad~anyany.png" /> + <splash src="res/screen/ios/Default@2x~ipad~comany.png" /> +``` + +##### Quirks and Known Issues + +1. **App on target may not reflect changes to images** + Once you run the app on a target, iOS caches the launch image. Unfortunately, when you chance the images, iOS does _not_ invalidate the cache, which means you'll still see the old launch image. You should either: delete the app, or reset content & settings (simulator). + +2. **Simulator may not show expected images when launched from CLI** + When Xcode deploys to a specific simulator, it only copies the assets that match the simulator's characteristics. For example, if you try to run an app on the iPhone 6s Plus simulator, only @3x launch images are copied. When compiling from the CLI, however, the default is to assume an iPhone 5s, which means only @2x launch images are copied. Unless your launch images are markedly different, chances are good the difference would go unnoticed, but this does mean that the only accurate method of testing is to test on a physical device. + +3. **`anyany` must be provided for other variations to be used** + If you don't provide an `anyany` version of the launch image for a specific scale and idiom, the other variations (like `anycom`, `comany`, and `comcom`) will ignored. + +## Windows-specific information + +Splash screen images can be defined using the [MRT](https://cordova.apache.org/docs/en/dev/config_ref/images.html#windows) concept. +If you specify src="res/windows/splashscreen.png" the following files will be copied into the application's images folder: +`res/windows/splashscreen.png` | `res/windows/splashscreen.scale-100.png`, `res/windows/splashscreen.scale-125.png`, etc. +The following are supported: + +| Scale, % | Project | Width | Height | Filename | +|:------------:|:-------------------:|:-----------:|:------------:|:---------------------------------:| +| 100 | Windows 10/8.1 | 620 | 300 | `splashscreen.png` \| `splashscreen.scale-100.png` | +| 125 | Windows 10 | 775 | 375 | `splashscreen.scale-125.png` | +| 150 | Windows 10 | 930 | 450 | `splashscreen.scale-150.png` | +| 200 | Windows 10 | 1240 | 600 | `splashscreen.scale-200.png` | +| 400 | Windows 10 | 2480 | 1200 | `splashscreen.scale-400.png` | +| 140 | Windows 8.1 | 868 | 420 | `splashscreen.scale-140.png` | +| 180 | Windows 8.1 | 1116 | 540 | `splashscreen.scale-180.png` | +| 100 | Windows Phone 8.1 | 480 | 800 | `splashscreenphone.png` \| `splashscreenphone.scale-100.png` | +| 140 | Windows Phone 8.1 | 672 | 1120 | `splashscreenphone.scale-140.png` | +| 240 | Windows Phone 8.1 | 1152 | 1920 | `splashscreenphone.scale-240.png` | + +__Note__: SplashScreens size for Windows 10 project should not exceed 200 KBytes. +__Note__: Supported formats are `.png`, `.jpg`, `.jpeg`. Mixing of the extensions within a target is not supported. I.e. you can have `splashscreen.jpg` and `splashscreenphone.png` but not `splashscreen.scale-100.png`, `splashscreen.scale-400.jpg`. +__Note__: You may need to reopen Visual Studio solution after changing the images and doing a `cordova prepare` for the changes to take effect. + ## Example Configuration In the top-level `config.xml` file (not the one in `platforms`), add configuration elements like those specified here. @@ -89,7 +313,9 @@ projectRoot </platform> <platform name="ios"> - <!-- images are determined by width and height. The following are supported --> + <!-- There are two mechanisms for showing launch images. + -- Legacy method (supports all devices except iPad Pro 12.9): + -- Note: 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"/> @@ -100,13 +326,31 @@ projectRoot <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"/> + <!-- Storyboard method (supports all devices): + -- Important: If you use the storyboard method, legacy images are + -- copied but ignored. + -- Note: images are determined by scale, idiom, and size traits. The following + -- are suggested based on current device form factors --> + <splash src="res/screen/ios/Default@2x~universal~anyany.png" /> + <splash src="res/screen/ios/Default@2x~universal~comany.png" /> + <splash src="res/screen/ios/Default@2x~universal~comcom.png" /> + <splash src="res/screen/ios/Default@3x~universal~anyany.png" /> + <splash src="res/screen/ios/Default@3x~universal~anycom.png" /> + <splash src="res/screen/ios/Default@3x~universal~comany.png" /> + </platform> +<!-- Configuration using MRT concept (Recommended, see "Windows-specific information" section for details): --> <platform name="windows"> - <!-- images are determined by width and height. The following are supported --> + <splash src="res/screen/windows/splashscreen.png" target="SplashScreen"/> + <splash src="res/screen/windows/splashscreenphone.png" target="SplashScreenPhone"/> +</platform> + +<!-- Configuration using image size: --> +<!--<platform name="windows"> <splash src="res/screen/windows/splashscreen.png" width="620" height="300"/> <splash src="res/screen/windows/splashscreenphone.png" width="1152" height="1920"/> -</platform> +</platform>--> <platform name="blackberry10"> <!-- Add a rim:splash element for each resolution and locale you wish --> @@ -140,6 +384,9 @@ To disable the splashscreen add the following preference to `config.xml`: <preference name="SplashScreenDelay" value="0"/> ``` +**Windows Quirk**: You should disable the splashscreen in case you are updating the entire document body dynamically (f.e. with a SPA router) to avoid affecting UI/controls. +Note that you should also directly reference `WinJS/base.js` in the page HTML in this case to avoid the issues with activation context ([CB-11658](https://issues.apache.org/jira/browse/CB-11658)). + **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 diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-splashscreen/RELEASENOTES.md index f264fe6d..9f153bea 100644 --- a/StoneIsland/plugins/cordova-plugin-splashscreen/RELEASENOTES.md +++ b/StoneIsland/plugins/cordova-plugin-splashscreen/RELEASENOTES.md @@ -20,6 +20,25 @@ --> # Release Notes +### 4.0.3 (Apr 27, 2017) +* [CB-12622](https://issues.apache.org/jira/browse/CB-12622) Added **Android 6.0** build badge to `README` +* [CB-12685](https://issues.apache.org/jira/browse/CB-12685) added `package.json` to tests folder + +### 4.0.2 (Feb 28, 2017) +* [CB-12353](https://issues.apache.org/jira/browse/CB-12353) Corrected merges usage in `plugin.xml` +* [CB-12369](https://issues.apache.org/jira/browse/CB-12369) Add plugin typings from `DefinitelyTyped` +* [CB-12363](https://issues.apache.org/jira/browse/CB-12363) Added build badges for **iOS 9.3** and **iOS 10.0** +* [CB-12230](https://issues.apache.org/jira/browse/CB-12230) Removed **Windows 8.1** build badges + +### 4.0.1 (Dec 07, 2016) +* [CB-12224](https://issues.apache.org/jira/browse/CB-12224) Updated version and RELEASENOTES.md for release 4.0.1 +* [CB-11751](https://issues.apache.org/jira/browse/CB-11751) 'extendedSplashScreen' is undefined Document that splashscreen needs to be disabled on Windows in case of updating entire document body +* [CB-9287](https://issues.apache.org/jira/browse/CB-9287) Not enough Icons and Splashscreens for **Windows 8.1** and Windows Phone 8.1 +* [CB-11917](https://issues.apache.org/jira/browse/CB-11917) - Remove pull request template checklist item: "iCLA has been submitted…" +* [CB-11830](https://issues.apache.org/jira/browse/CB-11830) (iOS) Fix doc typos in PR#114 +* [CB-11829](https://issues.apache.org/jira/browse/CB-11829) (iOS) Support for CB-9762; docs (CB-11830) +* [CB-11832](https://issues.apache.org/jira/browse/CB-11832) Incremented plugin version. + ### 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 @@ -83,7 +102,7 @@ * [CB-3562](https://issues.apache.org/jira/browse/CB-3562): Disable screen rotation for iPhone when splash screen is shown. (closes #47) * [CB-8988](https://issues.apache.org/jira/browse/CB-8988): Fix rotation on iOS/iPad (closes #46) * [CB-8904](https://issues.apache.org/jira/browse/CB-8904): Don't reset the static variable when it's destroyed, otherwise we might as well just have a member variable -* Removed wp7 from plugin.xml and package.json +* Removed wp7 from `plugin.xml` and package.json * [CB-8750](https://issues.apache.org/jira/browse/CB-8750) [wp8]: Rewrite resoultion helper * [CB-8750](https://issues.apache.org/jira/browse/CB-8750) [wp8]: Allow resolution-specific splashscreen images * [CB-8758](https://issues.apache.org/jira/browse/CB-8758) [wp8]: UnauthorizedAccessException on hide() @@ -135,7 +154,7 @@ ### 0.3.3 (Sep 17, 2014) * [CB-7249](https://issues.apache.org/jira/browse/CB-7249) cordova-plugin-splashscreen documentation translation -* Renamed test dir, added nested plugin.xml +* Renamed test dir, added nested `plugin.xml` * added documentation for manual tests * [CB-7196](https://issues.apache.org/jira/browse/CB-7196) port splashscreen tests to framework @@ -181,7 +200,7 @@ * [CB-5124](https://issues.apache.org/jira/browse/CB-5124) - Remove splashscreen config.xml values from iOS Configuration Docs, move to plugin docs ### 0.2.4 (Oct 28, 2013) -* [CB-5128](https://issues.apache.org/jira/browse/CB-5128): add repo + issue tag to plugin.xml for splashscreen plugin +* [CB-5128](https://issues.apache.org/jira/browse/CB-5128): add repo + issue tag to `plugin.xml` for splashscreen plugin * [CB-5010](https://issues.apache.org/jira/browse/CB-5010) Incremented plugin version on dev branch. ### 0.2.3 (Oct 9, 2013) diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/package.json b/StoneIsland/plugins/cordova-plugin-splashscreen/package.json index 08836dc9..6d279921 100644 --- a/StoneIsland/plugins/cordova-plugin-splashscreen/package.json +++ b/StoneIsland/plugins/cordova-plugin-splashscreen/package.json @@ -1,7 +1,8 @@ { "name": "cordova-plugin-splashscreen", - "version": "4.0.0", + "version": "4.0.3", "description": "Cordova Splashscreen Plugin", + "types": "./types/index.d.ts", "cordova": { "id": "cordova-plugin-splashscreen", "platforms": [ diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/plugin.xml b/StoneIsland/plugins/cordova-plugin-splashscreen/plugin.xml index 5c1e5707..269785f9 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="4.0.0"> + version="4.0.3"> <name>Splashscreen</name> <description>Cordova Splashscreen Plugin</description> <license>Apache 2.0</license> @@ -108,14 +108,14 @@ <!-- windows8 --> <platform name="windows8"> <js-module src="www/windows/SplashScreenProxy.js" name="SplashScreenProxy"> - <merges target="" /> + <runs /> </js-module> </platform> <!-- windows --> <platform name="windows"> <js-module src="www/windows/SplashScreenProxy.js" name="SplashScreenProxy"> - <merges target="" /> + <runs /> </js-module> </platform> diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.m b/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.m index 8ad8116b..ab97055a 100644 --- a/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.m +++ b/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.m @@ -178,11 +178,26 @@ return device; } +- (BOOL) isUsingCDVLaunchScreen { + NSString* launchStoryboardName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchStoryboardName"]; + if (launchStoryboardName) { + return ([launchStoryboardName isEqualToString:@"CDVLaunchScreen"]); + } else { + return NO; + } +} + - (NSString*)getImageName:(UIInterfaceOrientation)currentOrientation delegate:(id<CDVScreenOrientationDelegate>)orientationDelegate device:(CDV_iOSDevice)device { // Use UILaunchImageFile if specified in plist. Otherwise, use Default. NSString* imageName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchImageFile"]; + // detect if we are using CB-9762 Launch Storyboard; if so, return the associated image instead + if ([self isUsingCDVLaunchScreen]) { + imageName = @"LaunchStoryboard"; + return imageName; + } + NSUInteger supportedOrientations = [orientationDelegate supportedInterfaceOrientations]; // Checks to see if the developer has locked the orientation to use only one of Portrait or Landscape @@ -334,6 +349,14 @@ - (void)updateBounds { + if ([self isUsingCDVLaunchScreen]) { + // CB-9762's launch screen expects the image to fill the screen and be scaled using AspectFill. + CGSize viewportSize = [UIApplication sharedApplication].delegate.window.bounds.size; + _imageView.frame = CGRectMake(0, 0, viewportSize.width, viewportSize.height); + _imageView.contentMode = UIViewContentModeScaleAspectFill; + return; + } + UIImage* img = _imageView.image; CGRect imgBounds = (img) ? CGRectMake(0, 0, img.size.width, img.size.height) : CGRectZero; diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/package.json b/StoneIsland/plugins/cordova-plugin-splashscreen/tests/package.json index 9cc899ae..199a6f56 100644 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/package.json +++ b/StoneIsland/plugins/cordova-plugin-splashscreen/tests/package.json @@ -1,9 +1,9 @@ { - "name": "cordova-plugin-wkwebview-engine-tests", - "version": "1.1.3-dev", + "name": "cordova-plugin-splashscreen-tests", + "version": "4.0.3-dev", "description": "", "cordova": { - "id": "cordova-plugin-wkwebview-engine-tests", + "id": "cordova-plugin-splashscreen-tests", "platforms": [] }, "keywords": [ diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-splashscreen/tests/plugin.xml index 8accd865..80f1f50e 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="4.0.0"> + version="4.0.3"> <name>Cordova Splashscreen Plugin Tests</name> <license>Apache 2.0</license> diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/types/index.d.ts b/StoneIsland/plugins/cordova-plugin-splashscreen/types/index.d.ts new file mode 100644 index 00000000..968b3400 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-splashscreen/types/index.d.ts @@ -0,0 +1,17 @@ +// Type definitions for Apache Cordova Splashscreen plugin +// Project: https://github.com/apache/cordova-plugin-splashscreen +// Definitions by: Microsoft Open Technologies Inc <http://msopentech.com> +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// +// Copyright (c) Microsoft Open Technologies Inc +// Licensed under the MIT license. + +interface Navigator { + /** This plugin displays and hides a splash screen during application launch. */ + splashscreen: { + /** Dismiss the splash screen. */ + hide(): void; + /** Displays the splash screen. */ + show(): void; + } +}
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/LICENSE b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/LICENSE deleted file mode 100644 index 7a4a3ea2..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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.
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/README.md b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/README.md deleted file mode 100644 index f5aaf819..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/README.md +++ /dev/null @@ -1,105 +0,0 @@ -<!-- -# 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. ---> - -[](https://travis-ci.org/apache/cordova-plugin-wkwebview-engine) - -Cordova WKWebView Engine -====== - -This plugin makes `Cordova` use the `WKWebView` component instead of the default `UIWebView` component, and is installable only on a system with the iOS 9.0 SDK. - -In iOS 9, Apple has fixed the [issue](http://www.openradar.me/18039024) present through iOS 8 where you cannot load locale files using file://, and must resort to using a local webserver. **However, you are still not able to use XHR from the file:// protocol without [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) enabled on your server.** - -Installation ------------ - -This plugin needs cordova-ios >4.0.0. - -To install the current release: - - cordova create wkwvtest my.project.id wkwvtest - cd wkwvtest - cordova platform add ios@4 - cordova plugin add cordova-plugin-wkwebview-engine - -To test the development version: - - cordova create wkwvtest my.project.id wkwvtest - cd wkwvtest - cordova platform add https://github.com/apache/cordova-ios.git#master - cordova plugin add https://github.com/apache/cordova-plugin-wkwebview-engine.git#master - -You also must have at least Xcode 7 (iOS 9 SDK) installed. Check your Xcode version by running: - - xcode-select --print-path - -Required Permissions ------------ -WKWebView may not fully launch (the deviceready event may not fire) unless if the following is included in config.xml. This should already be installed by Cordova in your platform config.xml when the plugin is installed. - -#### config.xml - -```xml -<feature name="CDVWKWebViewEngine"> - <param name="ios-package" value="CDVWKWebViewEngine" /> -</feature> - -<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" /> -``` - -Notes ------- -This plugin creates a shared `WKProcessPool` which ensures the cookie sharing happens correctly across `WKWebView` instances. `CDVWKProcessPoolFactory` class can be used to obtain the shared `WKProcessPool` instance if app creates `WKWebView` outside of this plugin. - -On an iOS 8 system, Apache Cordova during runtime will switch to using the UIWebView engine instead of using this plugin. If you want to use WKWebView on both iOS 8 and iOS 9 platforms, you will have to resort to using a local webserver. - -We have an [experimental plugin](https://github.com/apache/cordova-plugins/tree/wkwebview-engine-localhost) that does this. You would use that plugin instead of this one. - -Application Transport Security (ATS) in iOS 9 ------------ - -Starting with [cordova-cli 5.4.0](https://www.npmjs.com/package/cordova), it will support automatic conversion of the [<access>](http://cordova.apache.org/docs/en/edge/guide/appdev/whitelist/index.html) tags in config.xml to Application Transport Security [ATS](https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33) directives. - -Upgrade to at least version 5.4.0 of the cordova-cli to use this new functionality. - -Enabling Navigation Gestures ("Swipe Navigation") ------------ - -In order to allow swiping backwards and forwards in browser history like Safari does, you can set the following preference in your `config.xml`: - -```xml -<preference name="AllowBackForwardNavigationGestures" value="true" /> -``` - -Limitations --------- - -If you are upgrading from UIWebView, please note the limitations of using WKWebView as outlined in our [issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20labels%20%3D%20wkwebview-known-issues). - -Apple Issues -------- - -The `AllowInlineMediaPlayback` preference will not work because of this [Apple bug](http://openradar.appspot.com/radar?id=6673091526656000). This bug [has been fixed](https://issues.apache.org/jira/browse/CB-11452) in [iOS 10](https://twitter.com/shazron/status/745546355796389889). - - - -Supported Platforms -------------------- - -- iOS diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/RELEASENOTES.md deleted file mode 100644 index 5e0016ea..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/RELEASENOTES.md +++ /dev/null @@ -1,90 +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. -# ---> - -# Release Notes - -### 1.1.3 (Apr 27, 2017) -* [CB-12696](https://issues.apache.org/jira/browse/CB-12696) (iOS) Fixing some Xcode warnings -* [CB-12685](https://issues.apache.org/jira/browse/CB-12685) added `package.json` to tests folder -* [CB-12575](https://issues.apache.org/jira/browse/CB-12575) cordova-plugin-wkwebview-engine missing LICENSE file -* [CB-12519](https://issues.apache.org/jira/browse/CB-12519) added missing license header - -### 1.1.2 (Feb 28, 2017) -* [CB-12497](https://issues.apache.org/jira/browse/CB-12497) `location.href` links are silently disallowed -* [CB-12490](https://issues.apache.org/jira/browse/CB-12490) - Updated experimental plugin link -* Allow to configure navigation by gestures -* [CB-12297](https://issues.apache.org/jira/browse/CB-12297) Support `WKProcessPool` for cookie sharing -* [CB-12414](https://issues.apache.org/jira/browse/CB-12414) **iOS:** Forward error from provisional load error to standard load error - -### 1.1.1 (Dec 07, 2016) -* [CB-12224](https://issues.apache.org/jira/browse/CB-12224) Updated version and RELEASENOTES.md for release 1.1.1 -* [CB-10228](https://issues.apache.org/jira/browse/CB-10228) - AppendUserAgent not working with WKWebView -* [CB-11997](https://issues.apache.org/jira/browse/CB-11997) - Add crash recovery for iOS 8 -* [CB-11917](https://issues.apache.org/jira/browse/CB-11917) - Remove pull request template checklist item: "iCLA has been submitted…" -* [CB-11818](https://issues.apache.org/jira/browse/CB-11818) - Avoid retain cycle: WKUserContentController retains its message handler, to break it we cannot pass directly CDVWKWebViewEngine's instance -* [CB-11832](https://issues.apache.org/jira/browse/CB-11832) Incremented plugin version. - - -### 1.1.0 (Sep 08, 2016) -* [CB-11824](https://issues.apache.org/jira/browse/CB-11824) - Update tests to include objective-c tests -* [CB-11554](https://issues.apache.org/jira/browse/CB-11554) - fixed unit tests -* [CB-11815](https://issues.apache.org/jira/browse/CB-11815) (**iOS**) Fix hard-coded bridge name "cordova" -* [CB-11554](https://issues.apache.org/jira/browse/CB-11554) - too 'brutal' app reload when title is empty -* [CB-11074](https://issues.apache.org/jira/browse/CB-11074) - Ensure settings from `config.xml` are taken into consideration -* Add ability to set the deceleration rate for the scrollview to 'fast' -* [CB-11496](https://issues.apache.org/jira/browse/CB-11496) - Add obj-c unit tests for `WKWebViewConfiguration`, `WKPreference` -* [CB-11496](https://issues.apache.org/jira/browse/CB-11496) - Create Obj-C unit-tests for `wkwebview-engine` (fix linker error) -* [CB-11452](https://issues.apache.org/jira/browse/CB-11452) - Update README.md with latest news about `AllowInlineMediaPlayback` fix -* [CB-9888](https://issues.apache.org/jira/browse/CB-9888) (**iOS**) check & reload `WKWebView` -* [CB-11375](https://issues.apache.org/jira/browse/CB-11375) - `onReset` method of `CDVPlugin` is never called -* Add pull request template. -* [CB-10818](https://issues.apache.org/jira/browse/CB-10818) - Support the scroll deceleration speed preference. -* [CB-10817](https://issues.apache.org/jira/browse/CB-10817) - Will now reload the `webView` if a crash occurs - -### 1.0.3 (Apr 15, 2016) -* [CB-10636](https://issues.apache.org/jira/browse/CB-10636) Add `JSHint` for plugins - -### 1.0.2 (Feb 09, 2016) -* [CB-10269](https://issues.apache.org/jira/browse/CB-10269) - Replace cordova exec only when present in wkwebview -* [CB-10202](https://issues.apache.org/jira/browse/CB-10202) - Add README quirk about WKWebview does not work with the AllowInlineMediaPlayback preference - - -### 1.0.1 (Dec 11, 2015) - -* [CB-10190](https://issues.apache.org/jira/browse/CB-10190) - WKWebView engine is not releasing the user-agent lock - -### 1.0.0 (Dec 04, 2015) - -* [CB-10146](https://issues.apache.org/jira/browse/CB-10146) - Add to README WKWebViewEngine quirks that will affect migration from UIWebView -* [CB-10133](https://issues.apache.org/jira/browse/CB-10133) - DataClone DOM Exception 25 thrown for postMessage -* [CB-10106](https://issues.apache.org/jira/browse/CB-10106) - added bridge proxy -* [CB-10107](https://issues.apache.org/jira/browse/CB-10107) - nativeEvalAndFetch called for all bridges -* [CB-10106](https://issues.apache.org/jira/browse/CB-10106) - iOS bridges need to take into account bridge changes -* [CB-10073](https://issues.apache.org/jira/browse/CB-10073) - WKWebViewEngine should post CDVPluginResetNotification -* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated RELEASENOTES to be newest to oldest -* [CB-10002](https://issues.apache.org/jira/browse/CB-10002) - WKWebView should propagate shouldOverrideLoadWithRequest to plugins -* [CB-9979](https://issues.apache.org/jira/browse/CB-9979) [CB-9972](https://issues.apache.org/jira/browse/CB-9972) Change ATS link to new link -* [CB-9636](https://issues.apache.org/jira/browse/CB-9636) - Plugin should detect at runtime iOS 8 and use of file:// url and present an error -* [CB-8839](https://issues.apache.org/jira/browse/CB-8839) - WKWebView ignores DisallowOverscroll preference -* [CB-8556](https://issues.apache.org/jira/browse/CB-8556) - fix handleOpenURL for WKWebViewEngine plugin -* [CB-8666](https://issues.apache.org/jira/browse/CB-8666) - Update CDVWKWebViewEngine plugin to use 4.0.x branch code - - diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/package.json b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/package.json deleted file mode 100644 index 499b81b4..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "cordova-plugin-wkwebview-engine", - "version": "1.1.3", - "description": "The official Apache Cordova WKWebView Engine Plugin", - "main": "index.js", - "repository": { - "type": "git", - "url": "https://git-wip-us.apache.org/repos/asf/cordova-plugin-wkwebview-engine.git" - }, - "keywords": [ - "cordova", - "wkwebview" - ], - "scripts": { - "test": "npm run jshint && npm run objc-tests", - "objc-tests": "cd tests/ios && npm test", - "preobjc-tests": "cd tests/ios && npm install", - "jshint": "node_modules/.bin/jshint src" - }, - "author": "Apache Cordova", - "license": "Apache-2.0", - "devDependencies": { - "jshint": "^2.6.0" - } -} diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/plugin.xml b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/plugin.xml deleted file mode 100644 index ba68b7e6..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/plugin.xml +++ /dev/null @@ -1,60 +0,0 @@ -<?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://apache.org/cordova/ns/plugins/1.0" - xmlns:rim="http://www.blackberry.com/ns/widgets" - xmlns:android="http://schemas.android.com/apk/res/android" - id="cordova-plugin-wkwebview-engine" - version="1.1.3"> - <name>Cordova WKWebView Engine</name> - <description>Cordova WKWebView Engine Plugin</description> - <license>Apache 2.0</license> - <keywords>cordova,wkwebview,webview</keywords> - <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-wkwebview-engine.git</repo> - - <engines> - <engine name="cordova-ios" version=">=4.0.0-dev" /> - <engine name="apple-ios" version=">=9.0" /> - </engines> - - <!-- ios --> - <platform name="ios"> - <js-module src="src/www/ios/ios-wkwebview-exec.js" name="ios-wkwebview-exec"> - <clobbers target="cordova.exec" /> - </js-module> - - <config-file target="config.xml" parent="/*"> - <feature name="CDVWKWebViewEngine"> - <param name="ios-package" value="CDVWKWebViewEngine" /> - </feature> - <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" /> - </config-file> - - <framework src="WebKit.framework" weak="true" /> - - <header-file src="src/ios/CDVWKWebViewEngine.h" /> - <source-file src="src/ios/CDVWKWebViewEngine.m" /> - <header-file src="src/ios/CDVWKWebViewUIDelegate.h" /> - <source-file src="src/ios/CDVWKWebViewUIDelegate.m" /> - <header-file src="src/ios/CDVWKProcessPoolFactory.h" /> - <source-file src="src/ios/CDVWKProcessPoolFactory.m" /> - </platform> -</plugin> diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKProcessPoolFactory.h b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKProcessPoolFactory.h deleted file mode 100644 index f4f8816e..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKProcessPoolFactory.h +++ /dev/null @@ -1,27 +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 <WebKit/WebKit.h> - -@interface CDVWKProcessPoolFactory : NSObject -@property (nonatomic, retain) WKProcessPool* sharedPool; - -+(instancetype) sharedFactory; --(WKProcessPool*) sharedProcessPool; -@end diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKProcessPoolFactory.m b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKProcessPoolFactory.m deleted file mode 100644 index 48ac09e6..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKProcessPoolFactory.m +++ /dev/null @@ -1,49 +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 <Foundation/Foundation.h> -#import <WebKit/WebKit.h> -#import "CDVWKProcessPoolFactory.h" - -static CDVWKProcessPoolFactory *factory = nil; - -@implementation CDVWKProcessPoolFactory - -+ (instancetype)sharedFactory -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - factory = [[CDVWKProcessPoolFactory alloc] init]; - }); - - return factory; -} - -- (instancetype)init -{ - if (self = [super init]) { - _sharedPool = [[WKProcessPool alloc] init]; - } - return self; -} - -- (WKProcessPool*) sharedProcessPool { - return _sharedPool; -} -@end diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewEngine.h b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewEngine.h deleted file mode 100644 index 2fe4bc21..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewEngine.h +++ /dev/null @@ -1,27 +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 <WebKit/WebKit.h> -#import <Cordova/CDV.h> - -@interface CDVWKWebViewEngine : CDVPlugin <CDVWebViewEngineProtocol, WKScriptMessageHandler, WKNavigationDelegate> - -@property (nonatomic, strong, readonly) id <WKUIDelegate> uiDelegate; - -@end diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewEngine.m b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewEngine.m deleted file mode 100644 index e9ff2466..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewEngine.m +++ /dev/null @@ -1,480 +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 "CDVWKWebViewEngine.h" -#import "CDVWKWebViewUIDelegate.h" -#import "CDVWKProcessPoolFactory.h" -#import <Cordova/NSDictionary+CordovaPreferences.h> - -#import <objc/message.h> - -#define CDV_BRIDGE_NAME @"cordova" -#define CDV_WKWEBVIEW_FILE_URL_LOAD_SELECTOR @"loadFileURL:allowingReadAccessToURL:" - -@interface CDVWKWeakScriptMessageHandler : NSObject <WKScriptMessageHandler> - -@property (nonatomic, weak, readonly) id<WKScriptMessageHandler>scriptMessageHandler; - -- (instancetype)initWithScriptMessageHandler:(id<WKScriptMessageHandler>)scriptMessageHandler; - -@end - - -@interface CDVWKWebViewEngine () - -@property (nonatomic, strong, readwrite) UIView* engineWebView; -@property (nonatomic, strong, readwrite) id <WKUIDelegate> uiDelegate; -@property (nonatomic, weak) id <WKScriptMessageHandler> weakScriptMessageHandler; - -@end - -// see forwardingTargetForSelector: selector comment for the reason for this pragma -#pragma clang diagnostic ignored "-Wprotocol" - -@implementation CDVWKWebViewEngine - -@synthesize engineWebView = _engineWebView; - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super init]; - if (self) { - if (NSClassFromString(@"WKWebView") == nil) { - return nil; - } - - self.engineWebView = [[WKWebView alloc] initWithFrame:frame]; - } - - return self; -} - -- (WKWebViewConfiguration*) createConfigurationFromSettings:(NSDictionary*)settings -{ - WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init]; - configuration.processPool = [[CDVWKProcessPoolFactory sharedFactory] sharedProcessPool]; - if (settings == nil) { - return configuration; - } - - configuration.allowsInlineMediaPlayback = [settings cordovaBoolSettingForKey:@"AllowInlineMediaPlayback" defaultValue:NO]; - configuration.mediaPlaybackRequiresUserAction = [settings cordovaBoolSettingForKey:@"MediaPlaybackRequiresUserAction" defaultValue:YES]; - configuration.suppressesIncrementalRendering = [settings cordovaBoolSettingForKey:@"SuppressesIncrementalRendering" defaultValue:NO]; - configuration.mediaPlaybackAllowsAirPlay = [settings cordovaBoolSettingForKey:@"MediaPlaybackAllowsAirPlay" defaultValue:YES]; - return configuration; -} - -- (void)pluginInitialize -{ - // viewController would be available now. we attempt to set all possible delegates to it, by default - NSDictionary* settings = self.commandDelegate.settings; - - self.uiDelegate = [[CDVWKWebViewUIDelegate alloc] initWithTitle:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]]; - - CDVWKWeakScriptMessageHandler *weakScriptMessageHandler = [[CDVWKWeakScriptMessageHandler alloc] initWithScriptMessageHandler:self]; - - WKUserContentController* userContentController = [[WKUserContentController alloc] init]; - [userContentController addScriptMessageHandler:weakScriptMessageHandler name:CDV_BRIDGE_NAME]; - - WKWebViewConfiguration* configuration = [self createConfigurationFromSettings:settings]; - configuration.userContentController = userContentController; - - // re-create WKWebView, since we need to update configuration - WKWebView* wkWebView = [[WKWebView alloc] initWithFrame:self.engineWebView.frame configuration:configuration]; - wkWebView.UIDelegate = self.uiDelegate; - self.engineWebView = wkWebView; - - if (IsAtLeastiOSVersion(@"9.0") && [self.viewController isKindOfClass:[CDVViewController class]]) { - wkWebView.customUserAgent = ((CDVViewController*) self.viewController).userAgent; - } - - if ([self.viewController conformsToProtocol:@protocol(WKUIDelegate)]) { - wkWebView.UIDelegate = (id <WKUIDelegate>)self.viewController; - } - - if ([self.viewController conformsToProtocol:@protocol(WKNavigationDelegate)]) { - wkWebView.navigationDelegate = (id <WKNavigationDelegate>)self.viewController; - } else { - wkWebView.navigationDelegate = (id <WKNavigationDelegate>)self; - } - - if ([self.viewController conformsToProtocol:@protocol(WKScriptMessageHandler)]) { - [wkWebView.configuration.userContentController addScriptMessageHandler:(id < WKScriptMessageHandler >)self.viewController name:CDV_BRIDGE_NAME]; - } - - [self updateSettings:settings]; - - // check if content thread has died on resume - NSLog(@"%@", @"CDVWKWebViewEngine will reload WKWebView if required on resume"); - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(onAppWillEnterForeground:) - name:UIApplicationWillEnterForegroundNotification object:nil]; - - NSLog(@"Using WKWebView"); - - [self addURLObserver]; -} - -- (void)onReset { - [self addURLObserver]; -} - -static void * KVOContext = &KVOContext; - -- (void)addURLObserver { - if(!IsAtLeastiOSVersion(@"9.0")){ - [self.webView addObserver:self forKeyPath:@"URL" options:0 context:KVOContext]; - } -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context -{ - if (context == KVOContext) { - if (object == [self webView] && [keyPath isEqualToString: @"URL"] && [object valueForKeyPath:keyPath] == nil){ - NSLog(@"URL is nil. Reloading WKWebView"); - [(WKWebView*)_engineWebView reload]; - } - } else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -- (void) onAppWillEnterForeground:(NSNotification*)notification { - if ([self shouldReloadWebView]) { - NSLog(@"%@", @"CDVWKWebViewEngine reloading!"); - [(WKWebView*)_engineWebView reload]; - } -} - -- (BOOL)shouldReloadWebView -{ - WKWebView* wkWebView = (WKWebView*)_engineWebView; - return [self shouldReloadWebView:wkWebView.URL title:wkWebView.title]; -} - -- (BOOL)shouldReloadWebView:(NSURL*)location title:(NSString*)title -{ - BOOL title_is_nil = (title == nil); - BOOL location_is_blank = [[location absoluteString] isEqualToString:@"about:blank"]; - - BOOL reload = (title_is_nil || location_is_blank); - -#ifdef DEBUG - NSLog(@"%@", @"CDVWKWebViewEngine shouldReloadWebView::"); - NSLog(@"CDVWKWebViewEngine shouldReloadWebView title: %@", title); - NSLog(@"CDVWKWebViewEngine shouldReloadWebView location: %@", [location absoluteString]); - NSLog(@"CDVWKWebViewEngine shouldReloadWebView reload: %u", reload); -#endif - - return reload; -} - - -- (id)loadRequest:(NSURLRequest*)request -{ - if ([self canLoadRequest:request]) { // can load, differentiate between file urls and other schemes - if (request.URL.fileURL) { - SEL wk_sel = NSSelectorFromString(CDV_WKWEBVIEW_FILE_URL_LOAD_SELECTOR); - NSURL* readAccessUrl = [request.URL URLByDeletingLastPathComponent]; - return ((id (*)(id, SEL, id, id))objc_msgSend)(_engineWebView, wk_sel, request.URL, readAccessUrl); - } else { - return [(WKWebView*)_engineWebView loadRequest:request]; - } - } else { // can't load, print out error - NSString* errorHtml = [NSString stringWithFormat: - @"<!doctype html>" - @"<title>Error</title>" - @"<div style='font-size:2em'>" - @" <p>The WebView engine '%@' is unable to load the request: %@</p>" - @" <p>Most likely the cause of the error is that the loading of file urls is not supported in iOS %@.</p>" - @"</div>", - NSStringFromClass([self class]), - [request.URL description], - [[UIDevice currentDevice] systemVersion] - ]; - return [self loadHTMLString:errorHtml baseURL:nil]; - } -} - -- (id)loadHTMLString:(NSString*)string baseURL:(NSURL*)baseURL -{ - return [(WKWebView*)_engineWebView loadHTMLString:string baseURL:baseURL]; -} - -- (NSURL*) URL -{ - return [(WKWebView*)_engineWebView URL]; -} - -- (BOOL) canLoadRequest:(NSURLRequest*)request -{ - // See: https://issues.apache.org/jira/browse/CB-9636 - SEL wk_sel = NSSelectorFromString(CDV_WKWEBVIEW_FILE_URL_LOAD_SELECTOR); - - // if it's a file URL, check whether WKWebView has the selector (which is in iOS 9 and up only) - if (request.URL.fileURL) { - return [_engineWebView respondsToSelector:wk_sel]; - } else { - return YES; - } -} - -- (void)updateSettings:(NSDictionary*)settings -{ - WKWebView* wkWebView = (WKWebView*)_engineWebView; - - wkWebView.configuration.preferences.minimumFontSize = [settings cordovaFloatSettingForKey:@"MinimumFontSize" defaultValue:0.0]; - - /* - wkWebView.configuration.preferences.javaScriptEnabled = [settings cordovaBoolSettingForKey:@"JavaScriptEnabled" default:YES]; - wkWebView.configuration.preferences.javaScriptCanOpenWindowsAutomatically = [settings cordovaBoolSettingForKey:@"JavaScriptCanOpenWindowsAutomatically" default:NO]; - */ - - // By default, DisallowOverscroll is false (thus bounce is allowed) - BOOL bounceAllowed = !([settings cordovaBoolSettingForKey:@"DisallowOverscroll" defaultValue:NO]); - - // prevent webView from bouncing - if (!bounceAllowed) { - if ([wkWebView respondsToSelector:@selector(scrollView)]) { - ((UIScrollView*)[wkWebView scrollView]).bounces = NO; - } else { - for (id subview in wkWebView.subviews) { - if ([[subview class] isSubclassOfClass:[UIScrollView class]]) { - ((UIScrollView*)subview).bounces = NO; - } - } - } - } - - NSString* decelerationSetting = [settings cordovaSettingForKey:@"WKWebViewDecelerationSpeed"]; - if (!decelerationSetting) { - // Fallback to the UIWebView-named preference - decelerationSetting = [settings cordovaSettingForKey:@"UIWebViewDecelerationSpeed"]; - } - - if (![@"fast" isEqualToString:decelerationSetting]) { - [wkWebView.scrollView setDecelerationRate:UIScrollViewDecelerationRateNormal]; - } else { - [wkWebView.scrollView setDecelerationRate:UIScrollViewDecelerationRateFast]; - } - - wkWebView.allowsBackForwardNavigationGestures = [settings cordovaBoolSettingForKey:@"AllowBackForwardNavigationGestures" defaultValue:NO]; -} - -- (void)updateWithInfo:(NSDictionary*)info -{ - NSDictionary* scriptMessageHandlers = [info objectForKey:kCDVWebViewEngineScriptMessageHandlers]; - NSDictionary* settings = [info objectForKey:kCDVWebViewEngineWebViewPreferences]; - id navigationDelegate = [info objectForKey:kCDVWebViewEngineWKNavigationDelegate]; - id uiDelegate = [info objectForKey:kCDVWebViewEngineWKUIDelegate]; - - WKWebView* wkWebView = (WKWebView*)_engineWebView; - - if (scriptMessageHandlers && [scriptMessageHandlers isKindOfClass:[NSDictionary class]]) { - NSArray* allKeys = [scriptMessageHandlers allKeys]; - - for (NSString* key in allKeys) { - id object = [scriptMessageHandlers objectForKey:key]; - if ([object conformsToProtocol:@protocol(WKScriptMessageHandler)]) { - [wkWebView.configuration.userContentController addScriptMessageHandler:object name:key]; - } - } - } - - if (navigationDelegate && [navigationDelegate conformsToProtocol:@protocol(WKNavigationDelegate)]) { - wkWebView.navigationDelegate = navigationDelegate; - } - - if (uiDelegate && [uiDelegate conformsToProtocol:@protocol(WKUIDelegate)]) { - wkWebView.UIDelegate = uiDelegate; - } - - if (settings && [settings isKindOfClass:[NSDictionary class]]) { - [self updateSettings:settings]; - } -} - -// This forwards the methods that are in the header that are not implemented here. -// Both WKWebView and UIWebView implement the below: -// loadHTMLString:baseURL: -// loadRequest: -- (id)forwardingTargetForSelector:(SEL)aSelector -{ - return _engineWebView; -} - -- (UIView*)webView -{ - return self.engineWebView; -} - -#pragma mark WKScriptMessageHandler implementation - -- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message -{ - if (![message.name isEqualToString:CDV_BRIDGE_NAME]) { - return; - } - - CDVViewController* vc = (CDVViewController*)self.viewController; - - NSArray* jsonEntry = message.body; // NSString:callbackId, NSString:service, NSString:action, NSArray:args - CDVInvokedUrlCommand* command = [CDVInvokedUrlCommand commandFromJson:jsonEntry]; - CDV_EXEC_LOG(@"Exec(%@): Calling %@.%@", command.callbackId, command.className, command.methodName); - - if (![vc.commandQueue execute:command]) { -#ifdef DEBUG - NSError* error = nil; - NSString* commandJson = nil; - NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonEntry - options:0 - error:&error]; - - if (error == nil) { - commandJson = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - } - - static NSUInteger maxLogLength = 1024; - NSString* commandString = ([commandJson length] > maxLogLength) ? - [NSString stringWithFormat : @"%@[...]", [commandJson substringToIndex:maxLogLength]] : - commandJson; - - NSLog(@"FAILED pluginJSON = %@", commandString); -#endif - } -} - -#pragma mark WKNavigationDelegate implementation - -- (void)webView:(WKWebView*)webView didStartProvisionalNavigation:(WKNavigation*)navigation -{ - [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginResetNotification object:webView]]; -} - -- (void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation -{ - CDVViewController* vc = (CDVViewController*)self.viewController; - [CDVUserAgentUtil releaseLock:vc.userAgentLockToken]; - - [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPageDidLoadNotification object:webView]]; -} - -- (void)webView:(WKWebView*)theWebView didFailProvisionalNavigation:(WKNavigation*)navigation withError:(NSError*)error -{ - [self webView:theWebView didFailNavigation:navigation withError:error]; -} - -- (void)webView:(WKWebView*)theWebView didFailNavigation:(WKNavigation*)navigation withError:(NSError*)error -{ - CDVViewController* vc = (CDVViewController*)self.viewController; - [CDVUserAgentUtil releaseLock:vc.userAgentLockToken]; - - NSString* message = [NSString stringWithFormat:@"Failed to load webpage with error: %@", [error localizedDescription]]; - NSLog(@"%@", message); - - NSURL* errorUrl = vc.errorURL; - if (errorUrl) { - errorUrl = [NSURL URLWithString:[NSString stringWithFormat:@"?error=%@", [message stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] relativeToURL:errorUrl]; - NSLog(@"%@", [errorUrl absoluteString]); - [theWebView loadRequest:[NSURLRequest requestWithURL:errorUrl]]; - } -} - -- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView -{ - [webView reload]; -} - -- (BOOL)defaultResourcePolicyForURL:(NSURL*)url -{ - // all file:// urls are allowed - if ([url isFileURL]) { - return YES; - } - - return NO; -} - -- (void) webView: (WKWebView *) webView decidePolicyForNavigationAction: (WKNavigationAction*) navigationAction decisionHandler: (void (^)(WKNavigationActionPolicy)) decisionHandler -{ - NSURL* url = [navigationAction.request URL]; - CDVViewController* vc = (CDVViewController*)self.viewController; - - /* - * Give plugins the chance to handle the url - */ - BOOL anyPluginsResponded = NO; - BOOL shouldAllowRequest = NO; - - for (NSString* pluginName in vc.pluginObjects) { - CDVPlugin* plugin = [vc.pluginObjects objectForKey:pluginName]; - SEL selector = NSSelectorFromString(@"shouldOverrideLoadWithRequest:navigationType:"); - if ([plugin respondsToSelector:selector]) { - anyPluginsResponded = YES; - // https://issues.apache.org/jira/browse/CB-12497 - int navType = (int)navigationAction.navigationType; - if (WKNavigationTypeOther == navigationAction.navigationType) { - navType = (int)UIWebViewNavigationTypeOther; - } - shouldAllowRequest = (((BOOL (*)(id, SEL, id, int))objc_msgSend)(plugin, selector, navigationAction.request, navType)); - if (!shouldAllowRequest) { - break; - } - } - } - - if (anyPluginsResponded) { - return decisionHandler(shouldAllowRequest); - } - - /* - * Handle all other types of urls (tel:, sms:), and requests to load a url in the main webview. - */ - BOOL shouldAllowNavigation = [self defaultResourcePolicyForURL:url]; - if (shouldAllowNavigation) { - return decisionHandler(YES); - } else { - [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]]; - } - - return decisionHandler(NO); -} - -@end - -#pragma mark - CDVWKWeakScriptMessageHandler - -@implementation CDVWKWeakScriptMessageHandler - -- (instancetype)initWithScriptMessageHandler:(id<WKScriptMessageHandler>)scriptMessageHandler -{ - self = [super init]; - if (self) { - _scriptMessageHandler = scriptMessageHandler; - } - return self; -} - -- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message -{ - [self.scriptMessageHandler userContentController:userContentController didReceiveScriptMessage:message]; -} - -@end diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewUIDelegate.h b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewUIDelegate.h deleted file mode 100644 index 33a179b0..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewUIDelegate.h +++ /dev/null @@ -1,28 +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 <WebKit/WebKit.h> - -@interface CDVWKWebViewUIDelegate : NSObject <WKUIDelegate> - -@property (nonatomic, copy) NSString* title; - -- (instancetype)initWithTitle:(NSString*)title; - -@end diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewUIDelegate.m b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewUIDelegate.m deleted file mode 100644 index a7a16f2c..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewUIDelegate.m +++ /dev/null @@ -1,123 +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 "CDVWKWebViewUIDelegate.h" - -@implementation CDVWKWebViewUIDelegate - -- (instancetype)initWithTitle:(NSString*)title -{ - self = [super init]; - if (self) { - self.title = title; - } - - return self; -} - -- (void) webView:(WKWebView*)webView runJavaScriptAlertPanelWithMessage:(NSString*)message - initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void (^)(void))completionHandler -{ - UIAlertController* alert = [UIAlertController alertControllerWithTitle:self.title - message:message - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") - style:UIAlertActionStyleDefault - handler:^(UIAlertAction* action) - { - completionHandler(); - [alert dismissViewControllerAnimated:YES completion:nil]; - }]; - - [alert addAction:ok]; - - UIViewController* rootController = [UIApplication sharedApplication].delegate.window.rootViewController; - - [rootController presentViewController:alert animated:YES completion:nil]; -} - -- (void) webView:(WKWebView*)webView runJavaScriptConfirmPanelWithMessage:(NSString*)message - initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void (^)(BOOL result))completionHandler -{ - UIAlertController* alert = [UIAlertController alertControllerWithTitle:self.title - message:message - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") - style:UIAlertActionStyleDefault - handler:^(UIAlertAction* action) - { - completionHandler(YES); - [alert dismissViewControllerAnimated:YES completion:nil]; - }]; - - [alert addAction:ok]; - - UIAlertAction* cancel = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel") - style:UIAlertActionStyleDefault - handler:^(UIAlertAction* action) - { - completionHandler(NO); - [alert dismissViewControllerAnimated:YES completion:nil]; - }]; - [alert addAction:cancel]; - - UIViewController* rootController = [UIApplication sharedApplication].delegate.window.rootViewController; - - [rootController presentViewController:alert animated:YES completion:nil]; -} - -- (void) webView:(WKWebView*)webView runJavaScriptTextInputPanelWithPrompt:(NSString*)prompt - defaultText:(NSString*)defaultText initiatedByFrame:(WKFrameInfo*)frame - completionHandler:(void (^)(NSString* result))completionHandler -{ - UIAlertController* alert = [UIAlertController alertControllerWithTitle:self.title - message:prompt - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* ok = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") - style:UIAlertActionStyleDefault - handler:^(UIAlertAction* action) - { - completionHandler(((UITextField*)alert.textFields[0]).text); - [alert dismissViewControllerAnimated:YES completion:nil]; - }]; - - [alert addAction:ok]; - - UIAlertAction* cancel = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel") - style:UIAlertActionStyleDefault - handler:^(UIAlertAction* action) - { - completionHandler(nil); - [alert dismissViewControllerAnimated:YES completion:nil]; - }]; - [alert addAction:cancel]; - - [alert addTextFieldWithConfigurationHandler:^(UITextField* textField) { - textField.text = defaultText; - }]; - - UIViewController* rootController = [UIApplication sharedApplication].delegate.window.rootViewController; - - [rootController presentViewController:alert animated:YES completion:nil]; -} - -@end diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js deleted file mode 100644 index 2766acc4..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/src/www/ios/ios-wkwebview-exec.js +++ /dev/null @@ -1,177 +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. - * -*/ - -/** - * Creates the exec bridge used to notify the native code of - * commands. - */ -var cordova = require('cordova'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'); - -function massageArgsJsToNative(args) { - if (!args || utils.typeName(args) != 'Array') { - return args; - } - var ret = []; - args.forEach(function(arg, i) { - if (utils.typeName(arg) == 'ArrayBuffer') { - ret.push({ - 'CDVType': 'ArrayBuffer', - 'data': base64.fromArrayBuffer(arg) - }); - } else { - ret.push(arg); - } - }); - return ret; -} - -function massageMessageNativeToJs(message) { - if (message.CDVType == 'ArrayBuffer') { - var stringToArrayBuffer = function(str) { - var ret = new Uint8Array(str.length); - for (var i = 0; i < str.length; i++) { - ret[i] = str.charCodeAt(i); - } - return ret.buffer; - }; - var base64ToArrayBuffer = function(b64) { - return stringToArrayBuffer(atob(b64)); - }; - message = base64ToArrayBuffer(message.data); - } - return message; -} - -function convertMessageToArgsNativeToJs(message) { - var args = []; - if (!message || !message.hasOwnProperty('CDVType')) { - args.push(message); - } else if (message.CDVType == 'MultiPart') { - message.messages.forEach(function(e) { - args.push(massageMessageNativeToJs(e)); - }); - } else { - args.push(massageMessageNativeToJs(message)); - } - return args; -} - -var iOSExec = function() { - - // detect change in bridge, if there is a change, we forward to new bridge - - // if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.cordova && window.webkit.messageHandlers.cordova.postMessage) { - // bridgeMode = jsToNativeModes.WK_WEBVIEW_BINDING; - // } - - var successCallback, failCallback, service, action, actionArgs; - var callbackId = null; - if (typeof arguments[0] !== "string") { - // FORMAT ONE - successCallback = arguments[0]; - failCallback = arguments[1]; - service = arguments[2]; - action = arguments[3]; - actionArgs = arguments[4]; - - // Since we need to maintain backwards compatibility, we have to pass - // an invalid callbackId even if no callback was provided since plugins - // will be expecting it. The Cordova.exec() implementation allocates - // an invalid callbackId and passes it even if no callbacks were given. - callbackId = 'INVALID'; - } else { - throw new Error('The old format of this exec call has been removed (deprecated since 2.1). Change to: ' + - 'cordova.exec(null, null, \'Service\', \'action\', [ arg1, arg2 ]);'); - } - - // If actionArgs is not provided, default to an empty array - actionArgs = actionArgs || []; - - // Register the callbacks and add the callbackId to the positional - // arguments if given. - if (successCallback || failCallback) { - callbackId = service + cordova.callbackId++; - cordova.callbacks[callbackId] = - {success:successCallback, fail:failCallback}; - } - - actionArgs = massageArgsJsToNative(actionArgs); - - // CB-10133 DataClone DOM Exception 25 guard (fast function remover) - var command = [callbackId, service, action, JSON.parse(JSON.stringify(actionArgs))]; - window.webkit.messageHandlers.cordova.postMessage(command); - -}; - -iOSExec.nativeCallback = function(callbackId, status, message, keepCallback, debug) { - - var success = status === 0 || status === 1; - var args = convertMessageToArgsNativeToJs(message); - setTimeout(function(){ - cordova.callbackFromNative(callbackId, success, status, args, keepCallback); - }, 0); -}; - -// for backwards compatibility -iOSExec.nativeEvalAndFetch = function(func) { - try { - func(); - } catch (e) { - console.log(e); - } -}; - -// Proxy the exec for bridge changes. See CB-10106 - -function cordovaExec() { - var cexec = require('cordova/exec'); - var cexec_valid = (typeof cexec.nativeFetchMessages === 'function') && (typeof cexec.nativeEvalAndFetch === 'function') && (typeof cexec.nativeCallback === 'function'); - return (cexec_valid && execProxy !== cexec)? cexec : iOSExec; -} - -function execProxy() { - cordovaExec().apply(null, arguments); -} - -execProxy.nativeFetchMessages = function() { - return cordovaExec().nativeFetchMessages.apply(null, arguments); -}; - -execProxy.nativeEvalAndFetch = function() { - return cordovaExec().nativeEvalAndFetch.apply(null, arguments); -}; - -execProxy.nativeCallback = function() { - return cordovaExec().nativeCallback.apply(null, arguments); -}; - -module.exports = execProxy; - -if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.cordova && window.webkit.messageHandlers.cordova.postMessage) { - // unregister the old bridge - cordova.define.remove('cordova/exec'); - // redefine bridge to our new bridge - cordova.define("cordova/exec", function(require, exports, module) { - module.exports = execProxy; - }); -}
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/contents.xcworkspacedata b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index e4f97faa..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "container:CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj"> - </FileRef> -</Workspace> diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/xcshareddata/CDVWKWebViewEngineTest.xccheckout b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/xcshareddata/CDVWKWebViewEngineTest.xccheckout deleted file mode 100644 index fd8d16a8..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/xcshareddata/CDVWKWebViewEngineTest.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ -<?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>IDESourceControlProjectFavoriteDictionaryKey</key> - <false/> - <key>IDESourceControlProjectIdentifier</key> - <string>6BE9AD73-1B9F-4362-98D7-DC631BEC6185</string> - <key>IDESourceControlProjectName</key> - <string>CDVWKWebViewEngineTest</string> - <key>IDESourceControlProjectOriginsDictionary</key> - <dict> - <key>BEF5A5D0FF64801E558286389440357A9233D7DB</key> - <string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-wkwebview-engine.git</string> - </dict> - <key>IDESourceControlProjectPath</key> - <string>tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj</string> - <key>IDESourceControlProjectRelativeInstallPathDictionary</key> - <dict> - <key>BEF5A5D0FF64801E558286389440357A9233D7DB</key> - <string>../../../../..</string> - </dict> - <key>IDESourceControlProjectURL</key> - <string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-wkwebview-engine.git</string> - <key>IDESourceControlProjectVersion</key> - <integer>111</integer> - <key>IDESourceControlProjectWCCIdentifier</key> - <string>BEF5A5D0FF64801E558286389440357A9233D7DB</string> - <key>IDESourceControlProjectWCConfigurations</key> - <array> - <dict> - <key>IDESourceControlRepositoryExtensionIdentifierKey</key> - <string>public.vcs.git</string> - <key>IDESourceControlWCCIdentifierKey</key> - <string>BEF5A5D0FF64801E558286389440357A9233D7DB</string> - <key>IDESourceControlWCCName</key> - <string>cordova-plugin-wkwebview-engine</string> - </dict> - </array> -</dict> -</plist> diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme deleted file mode 100644 index 8029dc0f..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0830" - 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:node_modules/cordova-ios/CordovaLib/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:node_modules/cordova-ios/CordovaLib/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:node_modules/cordova-ios/CordovaLib/CordovaLib.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/.npmignore b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/.npmignore deleted file mode 100644 index c795b054..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/.npmignore +++ /dev/null @@ -1 +0,0 @@ -build
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineLibTests/CDVWKWebViewEngineTest.m b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineLibTests/CDVWKWebViewEngineTest.m deleted file mode 100644 index 12d95984..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineLibTests/CDVWKWebViewEngineTest.m +++ /dev/null @@ -1,240 +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 <UIKit/UIKit.h> -#import <XCTest/XCTest.h> -#import "CDVWKWebViewEngine.h" -#import "CDVWKProcessPoolFactory.h" -#import <Cordova/NSDictionary+CordovaPreferences.h> -#import <Cordova/CDVAvailability.h> - -@interface CDVWKWebViewEngineTest : XCTestCase - -@property (nonatomic, strong) CDVWKWebViewEngine* plugin; -@property (nonatomic, strong) CDVViewController* viewController; - -@end - -@interface CDVWKWebViewEngine () - -// TODO: expose private interface, if needed -- (BOOL)shouldReloadWebView; -- (BOOL)shouldReloadWebView:(NSURL*)location title:(NSString*)title; - -@end - -@interface CDVViewController () - -// expose property as readwrite, for test purposes -@property (nonatomic, readwrite, strong) NSMutableDictionary* settings; - -@end - -@implementation CDVWKWebViewEngineTest - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. - - // NOTE: no app settings are set, so it will rely on default WKWebViewConfiguration settings - self.plugin = [[CDVWKWebViewEngine alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; - self.viewController = [[CDVViewController alloc] init]; - [self.viewController registerPlugin:self.plugin withClassName:NSStringFromClass([self.plugin class])]; - - XCTAssert([self.plugin conformsToProtocol:@protocol(CDVWebViewEngineProtocol)], @"Plugin does not conform to CDVWebViewEngineProtocol"); -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void) testCanLoadRequest { - NSURLRequest* fileUrlRequest = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:@"path/to/file.html"]]; - NSURLRequest* httpUrlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://apache.org"]]; - NSURLRequest* miscUrlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"foo://bar"]]; - id<CDVWebViewEngineProtocol> webViewEngineProtocol = self.plugin; - - SEL wk_sel = NSSelectorFromString(@"loadFileURL:allowingReadAccessToURL:"); - if ([self.plugin.engineWebView respondsToSelector:wk_sel]) { - XCTAssertTrue([webViewEngineProtocol canLoadRequest:fileUrlRequest]); - } else { - XCTAssertFalse([webViewEngineProtocol canLoadRequest:fileUrlRequest]); - } - - XCTAssertTrue([webViewEngineProtocol canLoadRequest:httpUrlRequest]); - XCTAssertTrue([webViewEngineProtocol canLoadRequest:miscUrlRequest]); -} - -- (void) testUpdateInfo { - // Add -ObjC to Other Linker Flags to test project, to load Categories - // Update objc test template generator as well - - id<CDVWebViewEngineProtocol> webViewEngineProtocol = self.plugin; - WKWebView* wkWebView = (WKWebView*)self.plugin.engineWebView; - - // iOS >=10 defaults to NO, < 10 defaults to YES. - BOOL mediaPlaybackRequiresUserActionDefault = IsAtLeastiOSVersion(@"10.0")? NO : YES; - - NSDictionary* preferences = @{ - [@"MinimumFontSize" lowercaseString] : @1.1, // default is 0.0 - [@"AllowInlineMediaPlayback" lowercaseString] : @YES, // default is NO - [@"MediaPlaybackRequiresUserAction" lowercaseString] : @(!mediaPlaybackRequiresUserActionDefault), // default is NO on iOS >= 10, YES for < 10 - [@"SuppressesIncrementalRendering" lowercaseString] : @YES, // default is NO - [@"MediaPlaybackAllowsAirPlay" lowercaseString] : @NO, // default is YES - [@"DisallowOverscroll" lowercaseString] : @YES, // so bounces is to be NO. defaults to NO - [@"WKWebViewDecelerationSpeed" lowercaseString] : @"fast" // default is 'normal' - }; - NSDictionary* info = @{ - kCDVWebViewEngineWebViewPreferences : preferences - }; - [webViewEngineProtocol updateWithInfo:info]; - - // the only preference we can set, we **can** change this during runtime - XCTAssertEqualWithAccuracy(wkWebView.configuration.preferences.minimumFontSize, 1.1, 0.0001); - - // the WKWebViewConfiguration properties, we **cannot** change outside of initialization - if (IsAtLeastiOSVersion(@"10.0")) { - XCTAssertFalse(wkWebView.configuration.mediaPlaybackRequiresUserAction); - } else { - XCTAssertTrue(wkWebView.configuration.mediaPlaybackRequiresUserAction); - } - XCTAssertFalse(wkWebView.configuration.allowsInlineMediaPlayback); - XCTAssertFalse(wkWebView.configuration.suppressesIncrementalRendering); - XCTAssertTrue(wkWebView.configuration.mediaPlaybackAllowsAirPlay); - - // in the test above, DisallowOverscroll is YES, so no bounce - if ([wkWebView respondsToSelector:@selector(scrollView)]) { - XCTAssertFalse(((UIScrollView*)[wkWebView scrollView]).bounces); - } else { - for (id subview in wkWebView.subviews) { - if ([[subview class] isSubclassOfClass:[UIScrollView class]]) { - XCTAssertFalse(((UIScrollView*)subview).bounces = NO); - } - } - } - - XCTAssertTrue(wkWebView.scrollView.decelerationRate == UIScrollViewDecelerationRateFast); -} - -- (void) testConfigurationFromSettings { - // we need to re-set the plugin from the "setup" to take in the app settings we need - self.plugin = [[CDVWKWebViewEngine alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; - self.viewController = [[CDVViewController alloc] init]; - - // generate the app settings - // iOS >=10 defaults to NO, < 10 defaults to YES. - BOOL mediaPlaybackRequiresUserActionDefault = IsAtLeastiOSVersion(@"10.0")? NO : YES; - - NSDictionary* settings = @{ - [@"MinimumFontSize" lowercaseString] : @1.1, // default is 0.0 - [@"AllowInlineMediaPlayback" lowercaseString] : @YES, // default is NO - [@"MediaPlaybackRequiresUserAction" lowercaseString] : @(!mediaPlaybackRequiresUserActionDefault), // default is NO on iOS >= 10, YES for < 10 - [@"SuppressesIncrementalRendering" lowercaseString] : @YES, // default is NO - [@"MediaPlaybackAllowsAirPlay" lowercaseString] : @NO, // default is YES - [@"DisallowOverscroll" lowercaseString] : @YES, // so bounces is to be NO. defaults to NO - [@"WKWebViewDecelerationSpeed" lowercaseString] : @"fast" // default is 'normal' - }; - // this can be set because of the Category at the top of the file - self.viewController.settings = [settings mutableCopy]; - - // app settings are read after you register the plugin - [self.viewController registerPlugin:self.plugin withClassName:NSStringFromClass([self.plugin class])]; - XCTAssert([self.plugin conformsToProtocol:@protocol(CDVWebViewEngineProtocol)], @"Plugin does not conform to CDVWebViewEngineProtocol"); - - // after registering (thus plugin initialization), we can grab the webview configuration - WKWebView* wkWebView = (WKWebView*)self.plugin.engineWebView; - - // the only preference we can set, we **can** change this during runtime - XCTAssertEqualWithAccuracy(wkWebView.configuration.preferences.minimumFontSize, 1.1, 0.0001); - - // the WKWebViewConfiguration properties, we **cannot** change outside of initialization - if (IsAtLeastiOSVersion(@"10.0")) { - XCTAssertTrue(wkWebView.configuration.mediaPlaybackRequiresUserAction); - } else { - XCTAssertFalse(wkWebView.configuration.mediaPlaybackRequiresUserAction); - } - XCTAssertTrue(wkWebView.configuration.allowsInlineMediaPlayback); - XCTAssertTrue(wkWebView.configuration.suppressesIncrementalRendering); - // The test case below is in a separate test "testConfigurationWithMediaPlaybackAllowsAirPlay" (Apple bug) - // XCTAssertFalse(wkWebView.configuration.mediaPlaybackAllowsAirPlay); - - // in the test above, DisallowOverscroll is YES, so no bounce - if ([wkWebView respondsToSelector:@selector(scrollView)]) { - XCTAssertFalse(((UIScrollView*)[wkWebView scrollView]).bounces); - } else { - for (id subview in wkWebView.subviews) { - if ([[subview class] isSubclassOfClass:[UIScrollView class]]) { - XCTAssertFalse(((UIScrollView*)subview).bounces = NO); - } - } - } - - XCTAssertTrue(wkWebView.scrollView.decelerationRate == UIScrollViewDecelerationRateFast); -} - -- (void) testShouldReloadWebView { - WKWebView* wkWebView = (WKWebView*)self.plugin.engineWebView; - - NSURL* about_blank = [NSURL URLWithString:@"about:blank"]; - NSURL* real_site = [NSURL URLWithString:@"https://cordova.apache.org"]; - NSString* empty_title_document = @"<html><head><title></title></head></html>"; - - // about:blank should reload - [wkWebView loadRequest:[NSURLRequest requestWithURL:about_blank]]; - XCTAssertTrue([self.plugin shouldReloadWebView]); - - // a network location should *not* reload - [wkWebView loadRequest:[NSURLRequest requestWithURL:real_site]]; - XCTAssertFalse([self.plugin shouldReloadWebView]); - - // document with empty title should *not* reload - // baseURL:nil results in about:blank, so we use a dummy here - [wkWebView loadHTMLString:empty_title_document baseURL:[NSURL URLWithString:@"about:"]]; - XCTAssertFalse([self.plugin shouldReloadWebView]); - - // Anecdotal assertion that when the WKWebView process has died, - // the title is nil, should always reload - XCTAssertTrue([self.plugin shouldReloadWebView:about_blank title:nil]); - XCTAssertTrue([self.plugin shouldReloadWebView:real_site title:nil]); - - // about:blank should always reload - XCTAssertTrue([self.plugin shouldReloadWebView:about_blank title:@"some title"]); - - // non about:blank with a non-nil title should **not** reload - XCTAssertFalse([self.plugin shouldReloadWebView:real_site title:@""]); -} - -- (void) testConfigurationWithMediaPlaybackAllowsAirPlay { - WKWebViewConfiguration* configuration = [WKWebViewConfiguration new]; - configuration.allowsAirPlayForMediaPlayback = NO; - - WKWebView* wkWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) configuration:configuration]; - - XCTAssertFalse(configuration.allowsAirPlayForMediaPlayback); - // Uh-oh, bug in WKWebView below. Tested on iOS 9, iOS 10 beta 3 - XCTAssertFalse(wkWebView.configuration.allowsAirPlayForMediaPlayback); -} - -- (void) testWKProcessPoolFactory { - WKProcessPool* shared = [[CDVWKProcessPoolFactory sharedFactory] sharedProcessPool]; - XCTAssertTrue(shared != nil); -} - -@end diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineLibTests/Info.plist b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineLibTests/Info.plist deleted file mode 100644 index ba72822e..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineLibTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ -<?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>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>$(EXECUTABLE_NAME)</string> - <key>CFBundleIdentifier</key> - <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>$(PRODUCT_NAME)</string> - <key>CFBundlePackageType</key> - <string>BNDL</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>1</string> -</dict> -</plist> diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.pbxproj b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.pbxproj deleted file mode 100644 index 8c415505..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.pbxproj +++ /dev/null @@ -1,559 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 7E9F51AB19DA10AE00DA31AC /* CDVWKWebViewEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F51A919DA10AE00DA31AC /* CDVWKWebViewEngine.m */; }; - 7E9F51B119DA114400DA31AC /* CDVWKWebViewEngineTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F51B019DA114400DA31AC /* CDVWKWebViewEngineTest.m */; }; - 7E9F51B319DA116500DA31AC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F51B219DA116500DA31AC /* Foundation.framework */; }; - 7E9F51B519DA127E00DA31AC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F51B419DA127E00DA31AC /* UIKit.framework */; }; - 7E9F51B919DA1B1600DA31AC /* libCDVWKWebViewEngineLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F519519DA102000DA31AC /* libCDVWKWebViewEngineLib.a */; }; - 7E9F51BA19DA1B2000DA31AC /* libCordova.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F519019DA0F8300DA31AC /* libCordova.a */; }; - 7EACDCE71D234E2A00494C9E /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EACDCE61D234E2A00494C9E /* WebKit.framework */; }; - 7EACDCEB1D234FB300494C9E /* CDVWKWebViewUIDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EACDCEA1D234FB300494C9E /* CDVWKWebViewUIDelegate.m */; }; - A9CC1CED1E0D42F50083E165 /* CDVWKProcessPoolFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = A9CC1CEC1E0D42F50083E165 /* CDVWKProcessPoolFactory.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 3050280F1E2973F700CF9F12 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = D2AAC07D0554694100DB518D; - remoteInfo = CordovaLib; - }; - 7E9F518F19DA0F8300DA31AC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 68A32D7114102E1C006B237C; - remoteInfo = CordovaLib; - }; - 7E9F51AC19DA10DE00DA31AC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7E9F517219DA09CE00DA31AC /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7E9F519419DA102000DA31AC; - remoteInfo = CDVWKWebViewEngineLib; - }; - 7E9F51AE19DA10E100DA31AC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = D2AAC07D0554694100DB518D; - remoteInfo = CordovaLib; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 7E9F519319DA102000DA31AC /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CordovaLib.xcodeproj; path = "../node_modules/cordova-ios/CordovaLib/CordovaLib.xcodeproj"; sourceTree = "<group>"; }; - 7E9F519519DA102000DA31AC /* libCDVWKWebViewEngineLib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCDVWKWebViewEngineLib.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 7E9F519F19DA102000DA31AC /* CDVWKWebViewEngineLibTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CDVWKWebViewEngineLibTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 7E9F51A219DA102000DA31AC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; - 7E9F51A919DA10AE00DA31AC /* CDVWKWebViewEngine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVWKWebViewEngine.m; path = ../../../src/ios/CDVWKWebViewEngine.m; sourceTree = SOURCE_ROOT; }; - 7E9F51AA19DA10AE00DA31AC /* CDVWKWebViewEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVWKWebViewEngine.h; path = ../../../src/ios/CDVWKWebViewEngine.h; sourceTree = SOURCE_ROOT; }; - 7E9F51B019DA114400DA31AC /* CDVWKWebViewEngineTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVWKWebViewEngineTest.m; sourceTree = "<group>"; }; - 7E9F51B219DA116500DA31AC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 7E9F51B419DA127E00DA31AC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 7EACDCE61D234E2A00494C9E /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/WebKit.framework; sourceTree = DEVELOPER_DIR; }; - 7EACDCE91D234FB300494C9E /* CDVWKWebViewUIDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVWKWebViewUIDelegate.h; path = ../../../src/ios/CDVWKWebViewUIDelegate.h; sourceTree = SOURCE_ROOT; }; - 7EACDCEA1D234FB300494C9E /* CDVWKWebViewUIDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVWKWebViewUIDelegate.m; path = ../../../src/ios/CDVWKWebViewUIDelegate.m; sourceTree = SOURCE_ROOT; }; - A9CC1CEB1E0D42F50083E165 /* CDVWKProcessPoolFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVWKProcessPoolFactory.h; path = ../../../src/ios/CDVWKProcessPoolFactory.h; sourceTree = SOURCE_ROOT; }; - A9CC1CEC1E0D42F50083E165 /* CDVWKProcessPoolFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVWKProcessPoolFactory.m; path = ../../../src/ios/CDVWKProcessPoolFactory.m; sourceTree = SOURCE_ROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 7E9F519219DA102000DA31AC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7EACDCE71D234E2A00494C9E /* WebKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7E9F519C19DA102000DA31AC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7E9F51BA19DA1B2000DA31AC /* libCordova.a in Frameworks */, - 7E9F51B919DA1B1600DA31AC /* libCDVWKWebViewEngineLib.a in Frameworks */, - 7E9F51B519DA127E00DA31AC /* UIKit.framework in Frameworks */, - 7E9F51B319DA116500DA31AC /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 7E9F517119DA09CE00DA31AC = { - isa = PBXGroup; - children = ( - 7EACDCE61D234E2A00494C9E /* WebKit.framework */, - 7E9F51B419DA127E00DA31AC /* UIKit.framework */, - 7E9F51B219DA116500DA31AC /* Foundation.framework */, - 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */, - 7E9F519619DA102000DA31AC /* CDVWKWebViewEngineLib */, - 7E9F51A019DA102000DA31AC /* CDVWKWebViewEngineLibTests */, - 7E9F517D19DA0A0A00DA31AC /* Products */, - ); - sourceTree = "<group>"; - }; - 7E9F517D19DA0A0A00DA31AC /* Products */ = { - isa = PBXGroup; - children = ( - 7E9F519519DA102000DA31AC /* libCDVWKWebViewEngineLib.a */, - 7E9F519F19DA102000DA31AC /* CDVWKWebViewEngineLibTests.xctest */, - ); - name = Products; - sourceTree = "<group>"; - }; - 7E9F518C19DA0F8300DA31AC /* Products */ = { - isa = PBXGroup; - children = ( - 7E9F519019DA0F8300DA31AC /* libCordova.a */, - ); - name = Products; - sourceTree = "<group>"; - }; - 7E9F519619DA102000DA31AC /* CDVWKWebViewEngineLib */ = { - isa = PBXGroup; - children = ( - A9CC1CEB1E0D42F50083E165 /* CDVWKProcessPoolFactory.h */, - A9CC1CEC1E0D42F50083E165 /* CDVWKProcessPoolFactory.m */, - 7EACDCE91D234FB300494C9E /* CDVWKWebViewUIDelegate.h */, - 7EACDCEA1D234FB300494C9E /* CDVWKWebViewUIDelegate.m */, - 7E9F51A919DA10AE00DA31AC /* CDVWKWebViewEngine.m */, - 7E9F51AA19DA10AE00DA31AC /* CDVWKWebViewEngine.h */, - ); - path = CDVWKWebViewEngineLib; - sourceTree = SOURCE_ROOT; - }; - 7E9F51A019DA102000DA31AC /* CDVWKWebViewEngineLibTests */ = { - isa = PBXGroup; - children = ( - 7E9F51A119DA102000DA31AC /* Supporting Files */, - 7E9F51B019DA114400DA31AC /* CDVWKWebViewEngineTest.m */, - ); - path = CDVWKWebViewEngineLibTests; - sourceTree = "<group>"; - }; - 7E9F51A119DA102000DA31AC /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 7E9F51A219DA102000DA31AC /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 7E9F519419DA102000DA31AC /* CDVWKWebViewEngineLib */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7E9F51A319DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVWKWebViewEngineLib" */; - buildPhases = ( - 7E9F519119DA102000DA31AC /* Sources */, - 7E9F519219DA102000DA31AC /* Frameworks */, - 7E9F519319DA102000DA31AC /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - 305028101E2973F700CF9F12 /* PBXTargetDependency */, - ); - name = CDVWKWebViewEngineLib; - productName = CDVWKWebViewEngineLib; - productReference = 7E9F519519DA102000DA31AC /* libCDVWKWebViewEngineLib.a */; - productType = "com.apple.product-type.library.static"; - }; - 7E9F519E19DA102000DA31AC /* CDVWKWebViewEngineLibTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7E9F51A619DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVWKWebViewEngineLibTests" */; - buildPhases = ( - 7E9F519B19DA102000DA31AC /* Sources */, - 7E9F519C19DA102000DA31AC /* Frameworks */, - 7E9F519D19DA102000DA31AC /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 7E9F51AF19DA10E100DA31AC /* PBXTargetDependency */, - 7E9F51AD19DA10DE00DA31AC /* PBXTargetDependency */, - ); - name = CDVWKWebViewEngineLibTests; - productName = CDVWKWebViewEngineLibTests; - productReference = 7E9F519F19DA102000DA31AC /* CDVWKWebViewEngineLibTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 7E9F517219DA09CE00DA31AC /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0830; - TargetAttributes = { - 7E9F519419DA102000DA31AC = { - CreatedOnToolsVersion = 6.0; - }; - 7E9F519E19DA102000DA31AC = { - CreatedOnToolsVersion = 6.0; - }; - }; - }; - buildConfigurationList = 7E9F517519DA09CE00DA31AC /* Build configuration list for PBXProject "CDVWKWebViewEngineTest" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 7E9F517119DA09CE00DA31AC; - productRefGroup = 7E9F517D19DA0A0A00DA31AC /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 7E9F518C19DA0F8300DA31AC /* Products */; - ProjectRef = 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 7E9F519419DA102000DA31AC /* CDVWKWebViewEngineLib */, - 7E9F519E19DA102000DA31AC /* CDVWKWebViewEngineLibTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 7E9F519019DA0F8300DA31AC /* libCordova.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libCordova.a; - remoteRef = 7E9F518F19DA0F8300DA31AC /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 7E9F519D19DA102000DA31AC /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 7E9F519119DA102000DA31AC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A9CC1CED1E0D42F50083E165 /* CDVWKProcessPoolFactory.m in Sources */, - 7EACDCEB1D234FB300494C9E /* CDVWKWebViewUIDelegate.m in Sources */, - 7E9F51AB19DA10AE00DA31AC /* CDVWKWebViewEngine.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7E9F519B19DA102000DA31AC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7E9F51B119DA114400DA31AC /* CDVWKWebViewEngineTest.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 305028101E2973F700CF9F12 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CordovaLib; - targetProxy = 3050280F1E2973F700CF9F12 /* PBXContainerItemProxy */; - }; - 7E9F51AD19DA10DE00DA31AC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7E9F519419DA102000DA31AC /* CDVWKWebViewEngineLib */; - targetProxy = 7E9F51AC19DA10DE00DA31AC /* PBXContainerItemProxy */; - }; - 7E9F51AF19DA10E100DA31AC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CordovaLib; - targetProxy = 7E9F51AE19DA10E100DA31AC /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 7E9F517619DA09CE00DA31AC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "-ObjC"; - }; - name = Debug; - }; - 7E9F517719DA09CE00DA31AC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - OTHER_LDFLAGS = "-ObjC"; - }; - name = Release; - }; - 7E9F51A419DA102000DA31AC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "$(inherited)"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 7E9F51A519DA102000DA31AC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "$(inherited)"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 7E9F51A719DA102000DA31AC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = CDVWKWebViewEngineLibTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.apache.cordova.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - }; - name = Debug; - }; - 7E9F51A819DA102000DA31AC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = CDVWKWebViewEngineLibTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.apache.cordova.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 7E9F517519DA09CE00DA31AC /* Build configuration list for PBXProject "CDVWKWebViewEngineTest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7E9F517619DA09CE00DA31AC /* Debug */, - 7E9F517719DA09CE00DA31AC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7E9F51A319DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVWKWebViewEngineLib" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7E9F51A419DA102000DA31AC /* Debug */, - 7E9F51A519DA102000DA31AC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7E9F51A619DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVWKWebViewEngineLibTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7E9F51A719DA102000DA31AC /* Debug */, - 7E9F51A819DA102000DA31AC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 7E9F517219DA09CE00DA31AC /* Project object */; -} diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index bd6cf4a0..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "self:CDVWKWebViewEngineTest.xcodeproj"> - </FileRef> -</Workspace> diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.xcworkspace/xcshareddata/CDVWKWebViewEngineTest.xccheckout b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.xcworkspace/xcshareddata/CDVWKWebViewEngineTest.xccheckout deleted file mode 100644 index fd8d16a8..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.xcworkspace/xcshareddata/CDVWKWebViewEngineTest.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ -<?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>IDESourceControlProjectFavoriteDictionaryKey</key> - <false/> - <key>IDESourceControlProjectIdentifier</key> - <string>6BE9AD73-1B9F-4362-98D7-DC631BEC6185</string> - <key>IDESourceControlProjectName</key> - <string>CDVWKWebViewEngineTest</string> - <key>IDESourceControlProjectOriginsDictionary</key> - <dict> - <key>BEF5A5D0FF64801E558286389440357A9233D7DB</key> - <string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-wkwebview-engine.git</string> - </dict> - <key>IDESourceControlProjectPath</key> - <string>tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj</string> - <key>IDESourceControlProjectRelativeInstallPathDictionary</key> - <dict> - <key>BEF5A5D0FF64801E558286389440357A9233D7DB</key> - <string>../../../../..</string> - </dict> - <key>IDESourceControlProjectURL</key> - <string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-wkwebview-engine.git</string> - <key>IDESourceControlProjectVersion</key> - <integer>111</integer> - <key>IDESourceControlProjectWCCIdentifier</key> - <string>BEF5A5D0FF64801E558286389440357A9233D7DB</string> - <key>IDESourceControlProjectWCConfigurations</key> - <array> - <dict> - <key>IDESourceControlRepositoryExtensionIdentifierKey</key> - <string>public.vcs.git</string> - <key>IDESourceControlWCCIdentifierKey</key> - <string>BEF5A5D0FF64801E558286389440357A9233D7DB</string> - <key>IDESourceControlWCCName</key> - <string>cordova-plugin-wkwebview-engine</string> - </dict> - </array> -</dict> -</plist> diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/xcshareddata/xcschemes/CDVWKWebViewEngineLib.xcscheme b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/xcshareddata/xcschemes/CDVWKWebViewEngineLib.xcscheme deleted file mode 100644 index 835532ca..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/xcshareddata/xcschemes/CDVWKWebViewEngineLib.xcscheme +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0830" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7E9F519419DA102000DA31AC" - BuildableName = "libCDVWKWebViewEngineLib.a" - BlueprintName = "CDVWKWebViewEngineLib" - ReferencedContainer = "container:CDVWKWebViewEngineTest.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 = "7E9F519419DA102000DA31AC" - BuildableName = "libCDVWKWebViewEngineLib.a" - BlueprintName = "CDVWKWebViewEngineLib" - ReferencedContainer = "container:CDVWKWebViewEngineTest.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7E9F519419DA102000DA31AC" - BuildableName = "libCDVWKWebViewEngineLib.a" - BlueprintName = "CDVWKWebViewEngineLib" - ReferencedContainer = "container:CDVWKWebViewEngineTest.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/xcshareddata/xcschemes/CDVWKWebViewEngineLibTests.xcscheme b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/xcshareddata/xcschemes/CDVWKWebViewEngineLibTests.xcscheme deleted file mode 100644 index dd99117c..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/xcshareddata/xcschemes/CDVWKWebViewEngineLibTests.xcscheme +++ /dev/null @@ -1,104 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "0830" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "NO" - buildForArchiving = "NO" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7E9F519E19DA102000DA31AC" - BuildableName = "CDVWKWebViewEngineLibTests.xctest" - BlueprintName = "CDVWKWebViewEngineLibTests" - ReferencedContainer = "container:CDVWKWebViewEngineTest.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> - <Testables> - <TestableReference - skipped = "NO"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7E9F519E19DA102000DA31AC" - BuildableName = "CDVWKWebViewEngineLibTests.xctest" - BlueprintName = "CDVWKWebViewEngineLibTests" - ReferencedContainer = "container:CDVWKWebViewEngineTest.xcodeproj"> - </BuildableReference> - <SkippedTests> - <Test - Identifier = "CDVWKWebViewEngineTest/testConfigurationWithMediaPlaybackAllowsAirPlay"> - </Test> - </SkippedTests> - </TestableReference> - </Testables> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7E9F519E19DA102000DA31AC" - BuildableName = "CDVWKWebViewEngineLibTests.xctest" - BlueprintName = "CDVWKWebViewEngineLibTests" - ReferencedContainer = "container:CDVWKWebViewEngineTest.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"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7E9F519E19DA102000DA31AC" - BuildableName = "CDVWKWebViewEngineLibTests.xctest" - BlueprintName = "CDVWKWebViewEngineLibTests" - ReferencedContainer = "container:CDVWKWebViewEngineTest.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES"> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7E9F519E19DA102000DA31AC" - BuildableName = "CDVWKWebViewEngineLibTests.xctest" - BlueprintName = "CDVWKWebViewEngineLibTests" - ReferencedContainer = "container:CDVWKWebViewEngineTest.xcodeproj"> - </BuildableReference> - </MacroExpansion> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/README.md b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/README.md deleted file mode 100644 index ac5e93fd..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/README.md +++ /dev/null @@ -1,40 +0,0 @@ -<!-- -# 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. ---> - -# iOS Tests for CDVWKWebViewEngine - -You need to install `node.js` to pull in `cordova-ios`. - -First install cordova-ios: - - npm install - -... in the current folder. - - -# Testing from Xcode - -1. Launch the `CDVWKWebViewEngineTest.xcworkspace` file. -2. Choose "CDVWKWebViewEngineLibTests" from the scheme drop-down menu -3. Click and hold on the `Play` button, and choose the `Wrench` icon to run the tests - - -# Testing from the command line - - npm test diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/package.json b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/package.json deleted file mode 100644 index 8d354e05..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "cordova-plugin-wkwebview-engine-test-ios", - "version": "1.0.0", - "description": "iOS Unit Tests for cordova-plugin-wkwebview-engine Plugin", - "author": "Apache Software Foundation", - "license": "Apache Version 2.0", - "dependencies": { - "cordova-ios": "*" - }, - "scripts": { - "test": "xcodebuild test -workspace CDVWKWebViewEngineTest.xcworkspace -scheme CDVWKWebViewEngineLibTests -destination 'platform=iOS Simulator,name=iPhone 5' -xcconfig test.xcconfig" - } -} diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/test.xcconfig b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/test.xcconfig deleted file mode 100644 index 072159de..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/ios/test.xcconfig +++ /dev/null @@ -1,20 +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. -// - -HEADER_SEARCH_PATHS = $(TARGET_BUILD_DIR)/include diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/plugin.xml deleted file mode 100644 index a7474a26..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/plugin.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?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://apache.org/cordova/ns/plugins/1.0" - id="cordova-plugin-wkwebview-engine-tests" - version="1.1.3"> - <name>cordova-plugin-wkwebview-engine Tests</name> - <license>Apache 2.0</license> - - <js-module src="tests.js" name="tests"> - </js-module> -</plugin> diff --git a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/tests.js b/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/tests.js deleted file mode 100644 index 879b6a0a..00000000 --- a/StoneIsland/plugins/cordova-plugin-wkwebview-engine/tests/tests.js +++ /dev/null @@ -1,44 +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. - * -*/ - -/* jshint jasmine: true */ - -exports.defineAutoTests = function () { - describe('cordova-plugin-wkwebview-engine (cordova)', function () { - it("cordova-plugin-wkwebview-engine.spec.1 should exist", function () { - //expect(window).toBeDefined(); - }); - }); -}; - -exports.defineManualTests = function (contentEl, createActionButton) { - - contentEl.innerHTML = 'Your HTML instructions here'; - - createActionButton('Do something 1', function () { - // do something 1; - }, 'do-something-1'); - - createActionButton('Do something 2', function () { - // do something 2; - }, 'do-something-2'); - -}; diff --git a/StoneIsland/plugins/fetch.json b/StoneIsland/plugins/fetch.json index f47a6d5f..74ba0266 100755 --- a/StoneIsland/plugins/fetch.json +++ b/StoneIsland/plugins/fetch.json @@ -1,134 +1,118 @@ { - "cordova-plugin-inappbrowser": { - "source": { - "type": "registry", - "id": "cordova-plugin-inappbrowser@1.5.0" - }, - "is_top_level": true, - "variables": {} + "cordova-plugin-inappbrowser": { + "source": { + "type": "registry", + "id": "cordova-plugin-inappbrowser@1.5.0" }, - "cordova-plugin-x-socialsharing": { - "source": { - "type": "registry", - "id": "cordova-plugin-x-socialsharing" - }, - "is_top_level": true, - "variables": {} + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-x-socialsharing": { + "source": { + "type": "registry", + "id": "cordova-plugin-x-socialsharing" }, - "cordova-plugin-customurlscheme": { - "source": { - "type": "registry", - "id": "cordova-plugin-customurlscheme" - }, - "is_top_level": true, - "variables": { - "URL_SCHEME": "stoneisland" - } + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-customurlscheme": { + "source": { + "type": "registry", + "id": "cordova-plugin-customurlscheme" }, - "cordova-plugin-whitelist": { - "source": { - "type": "registry", - "id": "cordova-plugin-whitelist@1" - }, - "is_top_level": true, - "variables": {} - }, - "cordova-plugin-console": { - "source": { - "type": "registry", - "id": "cordova-plugin-console" - }, - "is_top_level": true, - "variables": {} + "is_top_level": true, + "variables": { + "URL_SCHEME": "stoneisland" + } + }, + "cordova-plugin-whitelist": { + "source": { + "type": "registry", + "id": "cordova-plugin-whitelist@1" }, - "cordova-plugin-device": { - "source": { - "type": "registry", - "id": "cordova-plugin-device" - }, - "is_top_level": true, - "variables": {} + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-device": { + "source": { + "type": "registry", + "id": "cordova-plugin-device" }, - "cordova-plugin-network-information": { - "source": { - "type": "registry", - "id": "cordova-plugin-network-information" - }, - "is_top_level": true, - "variables": {} + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-network-information": { + "source": { + "type": "registry", + "id": "cordova-plugin-network-information" }, - "cordova-plugin-dialogs": { - "source": { - "type": "registry", - "id": "cordova-plugin-dialogs" - }, - "is_top_level": true, - "variables": {} + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-dialogs": { + "source": { + "type": "registry", + "id": "cordova-plugin-dialogs" }, - "cordova-plugin-splashscreen": { - "source": { - "type": "registry", - "id": "cordova-plugin-splashscreen@4.0.0" - }, - "is_top_level": true, - "variables": {} + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-geolocation": { + "source": { + "type": "registry", + "id": "cordova-plugin-geolocation" }, - "cordova-plugin-geolocation": { - "source": { - "type": "registry", - "id": "cordova-plugin-geolocation" - }, - "is_top_level": true, - "variables": {} + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-compat": { + "source": { + "type": "registry", + "id": "cordova-plugin-compat" }, - "cordova-plugin-compat": { - "source": { - "type": "registry", - "id": "cordova-plugin-compat" - }, - "is_top_level": false, - "variables": {} + "is_top_level": false, + "variables": {} + }, + "ionic-plugin-keyboard": { + "source": { + "type": "registry", + "id": "ionic-plugin-keyboard" }, - "ionic-plugin-keyboard": { - "source": { - "type": "registry", - "id": "ionic-plugin-keyboard" - }, - "is_top_level": true, - "variables": {} + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-statusbar": { + "source": { + "type": "registry", + "id": "cordova-plugin-statusbar@2.2.3" }, - "cordova-plugin-statusbar": { - "source": { - "type": "registry", - "id": "cordova-plugin-statusbar@2.2.3" - }, - "is_top_level": true, - "variables": {} + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-app-name": { + "source": { + "type": "registry", + "id": "cordova-plugin-app-name" }, - "cordova-plugin-app-name": { - "source": { - "type": "registry", - "id": "cordova-plugin-app-name" - }, - "is_top_level": true, - "variables": { - "APP_NAME": "Stone Island" - } + "is_top_level": true, + "variables": { + "APP_NAME": "Stone Island" + } + }, + "cordova-plugin-splashscreen": { + "source": { + "type": "registry", + "id": "cordova-plugin-splashscreen@~4.0.0" }, - "phonegap-plugin-push": { - "source": { - "type": "registry", - "id": "phonegap-plugin-push@2.0.0" - }, - "is_top_level": true, - "variables": {} + "is_top_level": true, + "variables": {} + }, + "phonegap-plugin-push": { + "source": { + "type": "registry", + "id": "phonegap-plugin-push@1.9.2" }, - "cordova-plugin-wkwebview-engine": { - "source": { - "type": "registry", - "id": "cordova-plugin-wkwebview-engine" - }, - "is_top_level": true, - "variables": {} - } + "is_top_level": true, + "variables": {} + } }
\ No newline at end of file diff --git a/StoneIsland/plugins/ios.json b/StoneIsland/plugins/ios.json index 20f1fe25..7cfe33d1 100644 --- a/StoneIsland/plugins/ios.json +++ b/StoneIsland/plugins/ios.json @@ -1,63 +1,58 @@ { - "prepare_queue": { - "installed": [], - "uninstalled": [] + "prepare_queue": { + "installed": [], + "uninstalled": [] + }, + "config_munge": { + "files": {} + }, + "installed_plugins": { + "cordova-plugin-app-name": { + "APP_NAME": "Stone Island", + "PACKAGE_NAME": "us.okfoc.stoneisland" }, - "config_munge": { - "files": {} + "cordova-plugin-customurlscheme": { + "URL_SCHEME": "stoneisland", + "PACKAGE_NAME": "us.okfoc.stoneisland" }, - "installed_plugins": { - "cordova-plugin-app-name": { - "APP_NAME": "Stone Island", - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-console": { - "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": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-geolocation": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-inappbrowser": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-network-information": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-splashscreen": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-statusbar": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-whitelist": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-x-socialsharing": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "ionic-plugin-keyboard": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "phonegap-plugin-push": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - }, - "cordova-plugin-wkwebview-engine": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - } + "cordova-plugin-device": { + "PACKAGE_NAME": "us.okfoc.stoneisland" }, - "dependent_plugins": { - "cordova-plugin-compat": { - "PACKAGE_NAME": "us.okfoc.stoneisland" - } + "cordova-plugin-dialogs": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-geolocation": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-inappbrowser": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-network-information": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-splashscreen": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-statusbar": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-whitelist": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-x-socialsharing": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "ionic-plugin-keyboard": { + "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "phonegap-plugin-push": { + "SENDER_ID": "85075801930", + "PACKAGE_NAME": "us.okfoc.stoneisland" + } + }, + "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 index 1d66c3ac..e46cdae8 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/CHANGELOG.md +++ b/StoneIsland/plugins/phonegap-plugin-push/CHANGELOG.md @@ -1,587 +1,5 @@ # Change Log -## [v2.0.0-rc5](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc5) (2017-06-20) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0-rc4...v2.0.0-rc5) - -- 2.0.0-rc5 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a5dfcb4e364a1b31d98d4b9683d9e4fe2e0e5d2d) -- :bookmark: Bumping plugin version to 2.0.0-rc5 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4bb16bea611e9c472f34c3ede9a1a6d00a8e4c4d) -- :arrow_up: Bump FCM to 11.0.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/576135bf576be6e2cd183101d3d7219b4d297030) -- :penguin: Issue #1796: Remove hook from 2.0.0 version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/464636b9ae257afc712cfebcc1ed11425590c509) -- :memo: Issue #1552: library not found for -lPods-Appname [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95b23cdf5ae68faf714d63ac69cfe71ce7034dba) -- :checkered_flag: Issue #1670: Subscribe and Unsubscribe for windows [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/228cdb4062f6019f878c456b89ef0685955ac7ed) -- :memo: Issue #1760: fcmSandbox vs gcmSandbox [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/64562177a6d32f34b29f2a97fcc8846db9926a1c) -- :bug: Issue #1785: plugin fails to install on windows using plugman [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/156adfc70e85a21cb9f3134de72781db405c5e07) -- :memo: Issue #1767: Ionic 2 Android build fails with error (Can't find google-services.json file) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fa9625e7530f4c2280804fc0fcd52a7b7476e5eb) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6f98be137f997c2bbd32e5c192c1e928e4e1f2c9) - -## [v2.0.0-rc4](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc4) (2017-06-01) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0-rc3...v2.0.0-rc4) - -- 2.0.0-rc4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/65f2e4c56b0ed440b8668986114c2c84b49e9c68) -- :bookmark: Bumping plugin version to 2.0.0-rc4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4e887023484cb5d6dd92524e05a6490d22eb3974) -- Update push.js [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a7cc5bdb8d149a3f6e7e9d918ecd9bb27c34009f) -- :memo: Issue #1679: Please clarify the use of content-available in the payload doc [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/23f7965e26d48b43c09921138b1290a658a41528) -- Update INSTALLATION.md (#1745) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3e94bbc1dd79bf830a2342ce3d6ca0d0e1cf9a2) -- Fixing 404 link to definition file [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9df6b4de82047a30b8322eb635c581de6c7252aa) -- :bug::wrench: Issue #1744: The plugin installs npm in my local node_modules [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/06bb2b207848e2dc993c28052f3ad29bf84d88c4) -- :bug: Issue #1725: Provide default for applicationServerKey [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d63bbe949edd21e86d886baf9aa00aab30f0ca95) -- :wrench: use Node 4 on Travis [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2da999beffe2ef043767c8c979ca4e7ae7a069c6) -- Fix INSTALLATION.md docs for v2.0.0 and Firebase Cloud Messaging (#1741) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/32ff975ea1318f6194ac01477ca563cfe4a0218a) -- update FirebaseMessaging podspec (#1742) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1842f7ade4643ad733c18f80b0daa211147ab72c) -- :art: Fix merge conflicts [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3efba512317119ea2d54473c7e164a6c24db3ca3) -- Merge v2.0.x into master (#1736) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d07fdf031e052f9c457319e6aaa9d7bfb72d1224) -- Fixes #1716 - Incomplete CocoaPods installation steps (#1738) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/525816cb0fd591b49f51b2844ac04e55397b6b8b) -- docs updated (#1727) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4234bfe9dab6e9f72b2ff52c3a94287154d39229) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e7cbe6ea8c863b0096425836473f2fa05a0da048) -- 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec7c3ea1fafbf3fafe502d278af218715aebb909) -- :bookmark: Bumping plugin version to 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b1efe1fa069c034aaf465e040300fd2884d46075) -- :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/911a1d4fe5d3a05e0012ee8121464cfb8974ce23) -- :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4eadccd93d6daa81a05396a93fdc2033a4c90b12) -- :penguin: Fix issue #1663 by allowing message as the data payload key (#1666) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f8ac07399905fb9c6b0ab48139fa76066c5e190f) -- [typo] Small fix to payload doc [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5a4a04b1be5a7dd30a9c577441b241767ec20500) -- 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b393a9d932aee66da277b404c2475cb77195d8d8) -- :bookmark: Bumping plugin version to 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8003110d0757107ad211cd0e0b9c175e60dcd7ed) -- :package: update www/push.js [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0a3a4c6d578b2ee14a82f167934ecc8a7672557) -- :wrench: Update cordovaDependencies [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/969d546c3dc96efb59a226ee5df38de6e66e4de4) -- :memo: update readme [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0cbb7a92946ac9febb5ac5960291928d539c0fe6) -- :memo: Fix PAYLOAD.md regarding "drawable" directory name (#1711) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a27a62d6e346b1e61ffe2ffaae482461cf970c03) -- Bump requirements [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/85e6419cbad124eaa3eac1c1c515aa684ccf4393) -- Add resource-file way of copying google services files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46ba2745f0ebc08cc3b12f9c51177247130b592c) -- Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a5c9e456ce333b3387b2e4412248cdf45d26334c) -- Fixing package.json from failed merge/rebase. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/974d2e218bcc8ab8ebf779ef18df74622702eb0e) -- Remove hook and use resource-file tag to copy google services file [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/86763c7f2cc15eae39972e4137813edb5cd8b838) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9850b1b180c3b66f64edc1680d358a7b1df58b95) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/15a68ed070d611f0569c90adaa062099120a7817) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/784b7355a62490a5ce6229292213e22e671873c8) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9b9df30cf65a275c0d4727a2854b12792ec905a2) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/620af90cdda85f64aa65cc0fc0de051cb13980ba) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ee9ecc957d8961e2a0ae884f55ee5abc71652885) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c7545607bb23ea801f7a167d3408b112e4a6e812) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2ac7442de047ecedf4a6d2c66591889e14bdafc4) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5c2fc51055343467e51f6facbd690e71273cbac2) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1b4f51fb2cd6e9ee8447fee0ce4a5e9eba0a52d) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0169587f198d0b44a06f408d803bbdac0fb1d079) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38bd3581663ccd85b2daed7b9833571a4adbc99e) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9d5dbb196763e399d5177c0d4802ecc043cfc270) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/24f0a77bac10e0d8e4ff837a165a3d69c3447601) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2535a189caddba2a41f9e002930541c55360047d) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8aa6f717db7dd534c97ad559307d391788e13e47) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/740cfe2bda63548a0e9cbf62b1833a4945eb432f) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/704b3635764700d5fc06f2e9c8c6a657ea4b7f29) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/68b045e6e40cdf1d5b9ed84136bebdf5f7874b8a) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8c4d002e4b6c6b399e5c5e5456012a121ee7b20) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/632a4f1d87ff306bbc8920133e96b84125e44468) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4fb78566b5ebbbf2f04268b91f9c8cbc7193601e) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e93f04a87763a762d581a18439b2de808fc81a2c) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f827a9678dac02887872bd7374fde1c40caeb90) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/64044115de796c52132e60719d5e93fc16594002) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1f8f8e55af40a16129cdc362e179f0c7ef60bd0) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/05c52e22945c0405b76a6d10d837ae6b015e661b) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/600f6050a2c3899559148579c5bc32c1e56449fa) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660a8620874d520e2f3f3217cf20ea369affada) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3f043c21a608fdea4436409b68fbcf2c822d6c0a) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97a1615a79ab0317a5dae27b7124dbaec7bc71c7) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e04b175c72d0680b3b618fdbcce80f9f9d470055) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d21632fd2acf90847c67b0c70f0b740ed3d367a7) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b41580f7476a34014ceb03976f25989f98cbde6a) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f84574aeffc958b6ec152ca36c2ea595418e901c) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/326943dadc29fe662ce4925b8141960e31d78dd3) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5c0156bb13a22e11cf6f174a7307e404ed6d154) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/006ca17a7482490fbbfc67faa88a4c60d81a49f4) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/102934b167c4e69c9a6a5c7b41d0ca3fba0cfd25) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/bccc1ba887603b8577c01ee5b885bffa0d406028) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7fe0379c6be007817c21355044bcecdd05bcc301) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c1a5572c420c88772bd3fc89d81fac21027a5be) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/98c100b12613a2885ed1afd417b1e678883d37ee) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7861fd27cd052c7e80736b8da9cba8cfae442e73) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b3dc189600842c6a8e318b032bdf215ea1c9b81f) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff2dbe0cc5a2dce0a92b6c16f35b1a67ce6a6f18) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/50285f9193f5e6b33e63c2540b8f3c7a257a5221) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f67e30d41f5ea94a60a53b00ed51b995960f89c9) -- Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/96af63840f28a57d29e21a48cc52533fa0830bea) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7371f3b31ea7a672ec6d43da7ef9475916b6c5c5) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5099c8fe435bda7d8bc7b2648d078a3b63cf19ea) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72d29bd4372e6043d38835d07839346ea204390a) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c44be0628bb42ba7ee07456524e9b1fffae64aea) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95cdee193d2977a17e778bf91ca1bcfc240dc266) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1fa7cce1168145c77fef2632ad64f8926e71d27) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef4c7e187f2c5f386d9c844ee7211c8ff1cc214c) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d52fdaf28f0535ef6dab315abd67141b0fcd0f7) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d9dfdf179b39312a6382a48dd99d675e642a533) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/057cbd16f10581cd601079a9a10b9338df3c23eb) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/83238fce85413cdd192b5ff33139ba9a0bcd080f) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9ff3929bed6bff911027bef21168e527ff61fd2c) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/94d8cc7ec8ba3a4d466758ffb2c27104c2cc1ca3) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a837c875d8a30fc4175693dff43139569974ec22) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/49da4ea30af1a2fb479110074ddf5f67e2ba370c) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ebc5d9353bab3917f91c775cf13aec47c5ca1e04) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/505c8da8253cb8562ed16659b5ec2a8e73ec1c23) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46eafb1e5688ade278086a1644d06de4e36849b5) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3b01f155f6300dc05c625116e0c374af61d6388) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/453561c8f2dfc4ed09b6a182f6998c90408a3d44) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba0020349337160f83271b683195693ef0b4f440) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aee7b93a4d0b0bb0b9c987704c1cde82612e4445) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5e0e7d107b2c9f4aeeda3a7757213e41ac573798) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/172528ea548174fd7be62d0ab2f9816566447a61) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2727d274ef650fb0b4d25786d42f0ee5f72e9730) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/697e592d8225f4e0853a0ea72a598d10a18c832d) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c2987cbee54f04e7d44eec421b2417be5e7d716e) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f358dba691fb39757003326209a232cefce53adf) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7b7de65c2718eccc1ff0eeb2800973cd440c85a7) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8bf4343369e6b12f6ec28a104512cb3ab392e834) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3de63bdf9e5a365e3b3e295f2a305ad66b512917) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b9ad4ebdeee6700d9edf95bf051dabda5923e01a) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c119bf08869d51d5fe23f9a0fb78fd8325b35248) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a1806aaec5d3c76f7fcd30ddfd85d576fb6d197) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/471b2aa829cb0ecc93a9a788891602ad17319a47) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7ad471ff45724828fb21630fdfbc244ba037d9d8) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b80dfb12b5053184936a4c6c881f1af55459348f) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9796292910f2d600b22d4846c128196cfb54ba7c) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/297b8d28f2d7bf04420744c445e59a527c52d502) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/41c8e66483fc0c5f21da7477d2522a2212a8017a) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/08e496fffc7fa082410f7b16e73e6afe12da194c) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/156718a5800dfe4b87593e0732f4258c7c148bea) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0add758d08657e22501612ed258033e31c394e6a) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1f2fd671ae734201b1260bc3d7878ae9ef28673c) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/70c6e04a3ba072b91b3752173ca2287d4e448b8f) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e07d81dbb47babe161f3204cdd06222a1e2ab3c) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3dffdcf63c3d19b4717eed89eb911b8aecdd25a) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f5182503b241f519c03c872ae12f3489383f2b83) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/27a101f1d35217e0a1b7f0be9ad0607d31ea6c57) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c25a47bd3b5c2437ce3108656449658568f2c053) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/000bc36a8ce2a00e96212b66d69f1597dac68554) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa1cc247fcf8b94c4d60d26b18c9229c112e8185) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f4bcafafe56be18f6dc64f3e634a6de594bc034) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3f0eee774c7f9791f55f85816b0aeadc5c4fb4c) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c796a49c3a44b47f58237d7e7760f5ebc34c371) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/10c5153672dc478dd072274c220200526c313604) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa6e3ce5449accd5397b4eda8a950fd5cebc4f0e) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b65fe745b5eabbb7437a46b46e747be4aaf5116a) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3b5f3c71657d8af3e4407ac9ea6c36e00988b1cf) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/89040874c530c7f86c2acbcce5c3b88b351e80fb) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1e90013f8ca8497acc2513f4ce3df1358293d51) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0bc1ca736546242772516334f47fd4ea4f8f5e5f) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7acf338d5bff2bc25b5c1e2fa681b7e20254cc9) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a65be290d4176c1c0b51b700d673550ae22cf777) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed630d481b9035eb9df48738c0e77029937fafe9) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9c53761fa3d6fc99acaa96601e9abc673a62c23) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c46880b57aa1dee2bbcfeb5a86b497035f46ebe) - -## [v1.10.4](https://github.com/phonegap/phonegap-plugin-push/tree/v1.10.4) (2017-05-17) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.10.3...v1.10.4) - -- 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec7c3ea1fafbf3fafe502d278af218715aebb909) -- :bookmark: Bumping plugin version to 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b1efe1fa069c034aaf465e040300fd2884d46075) -- :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/911a1d4fe5d3a05e0012ee8121464cfb8974ce23) -- :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4eadccd93d6daa81a05396a93fdc2033a4c90b12) -- :penguin: Fix issue #1663 by allowing message as the data payload key (#1666) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f8ac07399905fb9c6b0ab48139fa76066c5e190f) -- [typo] Small fix to payload doc [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5a4a04b1be5a7dd30a9c577441b241767ec20500) -- :memo: update readme [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0cbb7a92946ac9febb5ac5960291928d539c0fe6) -- :memo: Fix PAYLOAD.md regarding "drawable" directory name (#1711) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a27a62d6e346b1e61ffe2ffaae482461cf970c03) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfad83fa420df5ba4ac12f2f3f7fa68fdb22cc03) - -## [v2.0.0-rc3](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc3) (2017-05-09) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0-rc2...v2.0.0-rc3) - -- 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b393a9d932aee66da277b404c2475cb77195d8d8) -- :bookmark: Bumping plugin version to 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8003110d0757107ad211cd0e0b9c175e60dcd7ed) -- :package: update www/push.js [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0a3a4c6d578b2ee14a82f167934ecc8a7672557) -- :wrench: Update cordovaDependencies [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/969d546c3dc96efb59a226ee5df38de6e66e4de4) -- Bump requirements [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/85e6419cbad124eaa3eac1c1c515aa684ccf4393) -- Add resource-file way of copying google services files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46ba2745f0ebc08cc3b12f9c51177247130b592c) -- Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a5c9e456ce333b3387b2e4412248cdf45d26334c) -- Fixing package.json from failed merge/rebase. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/974d2e218bcc8ab8ebf779ef18df74622702eb0e) -- Remove hook and use resource-file tag to copy google services file [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/86763c7f2cc15eae39972e4137813edb5cd8b838) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9850b1b180c3b66f64edc1680d358a7b1df58b95) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/15a68ed070d611f0569c90adaa062099120a7817) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/784b7355a62490a5ce6229292213e22e671873c8) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9b9df30cf65a275c0d4727a2854b12792ec905a2) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/620af90cdda85f64aa65cc0fc0de051cb13980ba) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ee9ecc957d8961e2a0ae884f55ee5abc71652885) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c7545607bb23ea801f7a167d3408b112e4a6e812) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2ac7442de047ecedf4a6d2c66591889e14bdafc4) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5c2fc51055343467e51f6facbd690e71273cbac2) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1b4f51fb2cd6e9ee8447fee0ce4a5e9eba0a52d) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0169587f198d0b44a06f408d803bbdac0fb1d079) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38bd3581663ccd85b2daed7b9833571a4adbc99e) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9d5dbb196763e399d5177c0d4802ecc043cfc270) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/24f0a77bac10e0d8e4ff837a165a3d69c3447601) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2535a189caddba2a41f9e002930541c55360047d) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8aa6f717db7dd534c97ad559307d391788e13e47) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/740cfe2bda63548a0e9cbf62b1833a4945eb432f) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/704b3635764700d5fc06f2e9c8c6a657ea4b7f29) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/68b045e6e40cdf1d5b9ed84136bebdf5f7874b8a) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8c4d002e4b6c6b399e5c5e5456012a121ee7b20) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/632a4f1d87ff306bbc8920133e96b84125e44468) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4fb78566b5ebbbf2f04268b91f9c8cbc7193601e) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e93f04a87763a762d581a18439b2de808fc81a2c) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f827a9678dac02887872bd7374fde1c40caeb90) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/64044115de796c52132e60719d5e93fc16594002) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1f8f8e55af40a16129cdc362e179f0c7ef60bd0) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/05c52e22945c0405b76a6d10d837ae6b015e661b) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/600f6050a2c3899559148579c5bc32c1e56449fa) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660a8620874d520e2f3f3217cf20ea369affada) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3f043c21a608fdea4436409b68fbcf2c822d6c0a) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97a1615a79ab0317a5dae27b7124dbaec7bc71c7) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e04b175c72d0680b3b618fdbcce80f9f9d470055) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d21632fd2acf90847c67b0c70f0b740ed3d367a7) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b41580f7476a34014ceb03976f25989f98cbde6a) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f84574aeffc958b6ec152ca36c2ea595418e901c) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/326943dadc29fe662ce4925b8141960e31d78dd3) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5c0156bb13a22e11cf6f174a7307e404ed6d154) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/006ca17a7482490fbbfc67faa88a4c60d81a49f4) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/102934b167c4e69c9a6a5c7b41d0ca3fba0cfd25) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/bccc1ba887603b8577c01ee5b885bffa0d406028) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7fe0379c6be007817c21355044bcecdd05bcc301) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c1a5572c420c88772bd3fc89d81fac21027a5be) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/98c100b12613a2885ed1afd417b1e678883d37ee) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7861fd27cd052c7e80736b8da9cba8cfae442e73) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b3dc189600842c6a8e318b032bdf215ea1c9b81f) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff2dbe0cc5a2dce0a92b6c16f35b1a67ce6a6f18) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/50285f9193f5e6b33e63c2540b8f3c7a257a5221) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f67e30d41f5ea94a60a53b00ed51b995960f89c9) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfad83fa420df5ba4ac12f2f3f7fa68fdb22cc03) -- 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1e072b351056d453fd1c1d40d5fcac310f3e107c) -- :bookmark: Bumping plugin version to 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/29df66eae54e773925e25bd92299957e4d654723) -- :bug: Handle null in getCircleBitmap (#1705) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3acdfa338d7a8b56ec4dc73c50aa9917ecb3be7c) -- :shirt: Issue #1702: The logging tag can be at most 23 characters, was 40 (PushPlugin_BackgroundActionButtonHandler) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2045873acda2e81d54b2da87cd2d10f056bd90f9) -- Shortened log tag PushPlugin_BackgroundActionButtonHandler to bring u… (#1703) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dd707122b7aa78649fa6f5f73ba9b05436799926) -- Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/96af63840f28a57d29e21a48cc52533fa0830bea) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7371f3b31ea7a672ec6d43da7ef9475916b6c5c5) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5099c8fe435bda7d8bc7b2648d078a3b63cf19ea) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72d29bd4372e6043d38835d07839346ea204390a) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c44be0628bb42ba7ee07456524e9b1fffae64aea) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95cdee193d2977a17e778bf91ca1bcfc240dc266) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1fa7cce1168145c77fef2632ad64f8926e71d27) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef4c7e187f2c5f386d9c844ee7211c8ff1cc214c) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d52fdaf28f0535ef6dab315abd67141b0fcd0f7) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d9dfdf179b39312a6382a48dd99d675e642a533) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/057cbd16f10581cd601079a9a10b9338df3c23eb) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/83238fce85413cdd192b5ff33139ba9a0bcd080f) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9ff3929bed6bff911027bef21168e527ff61fd2c) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/94d8cc7ec8ba3a4d466758ffb2c27104c2cc1ca3) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a837c875d8a30fc4175693dff43139569974ec22) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/49da4ea30af1a2fb479110074ddf5f67e2ba370c) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ebc5d9353bab3917f91c775cf13aec47c5ca1e04) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/505c8da8253cb8562ed16659b5ec2a8e73ec1c23) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46eafb1e5688ade278086a1644d06de4e36849b5) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3b01f155f6300dc05c625116e0c374af61d6388) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/453561c8f2dfc4ed09b6a182f6998c90408a3d44) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba0020349337160f83271b683195693ef0b4f440) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aee7b93a4d0b0bb0b9c987704c1cde82612e4445) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5e0e7d107b2c9f4aeeda3a7757213e41ac573798) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/172528ea548174fd7be62d0ab2f9816566447a61) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2727d274ef650fb0b4d25786d42f0ee5f72e9730) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/697e592d8225f4e0853a0ea72a598d10a18c832d) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c2987cbee54f04e7d44eec421b2417be5e7d716e) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f358dba691fb39757003326209a232cefce53adf) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7b7de65c2718eccc1ff0eeb2800973cd440c85a7) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8bf4343369e6b12f6ec28a104512cb3ab392e834) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3de63bdf9e5a365e3b3e295f2a305ad66b512917) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b9ad4ebdeee6700d9edf95bf051dabda5923e01a) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c119bf08869d51d5fe23f9a0fb78fd8325b35248) -- :memo: Docs for interoperability with Firebase (#1693) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cebb6403143047192462f30c22b9510a8c6dbe21) -- fix headline (#1685) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2e7993544eed544eb7286868b60e2e3efb6275d) -- Fix changelog date [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3140b2b00388785f8056632376b50a1d1ef67b96) -- :arrow_up: update pluginpub to 0.0.8 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfab7d91556a38ee81550fe47e13f2662ae810db) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/027ea2c17e4b96b848ab29046efea243e6e2da27) -- 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5a7d4ec6e64abaed65de00be3e9bac9ab25791e) -- :bookmark: Bumping plugin version to 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5b700ad9927c401081a5de49f2a6a27ba0dfaa9a) -- :arrow_up: update pluginpub to 0.0.7 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38564ce55e53e018c91f4063d680eedd2631b825) -- Fix the dates on the CHANGELOG (the last 2 version) (#1676) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0f26192c906bfc1a60390333c96d5dc07433978) -- Vapid Support (#1675) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/384b60bade628035b21d23f07e284eb6e1557a10) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97d618fb53084cfae78f397def48df791131358f) -- 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6211e8c3df8881a90d19b111a0e63f890d435df6) -- :bookmark: Bumping plugin version to 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6d710a06681ad84c13273fe5d20feb3033ac67b6) -- :bug: Issue #1655: App opens on clearing notification (Android) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff417925f6d6678f0fcd8315d5f4b4b08fbb9085) -- :memo: Issue #1118: Problem with notifications stacking [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d669c44a863d86d0bb73b5ae086bc2fe6f8113a9) -- :memo: Issue #1220: [Question] the hook setting seem not work [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4ef137eea370da7c225ab2a5cf63b1e97a68f4a4) -- Set get badge count android (#1644) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/630907cf3d8802bcd5d91b6bd768c989f6ef897a) -- Add plugin typings from DefinitelyTyped (#1654) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ea70d9984e176a75602e72e1d26f5404c519e29) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/700701fd2151667905d860228cf954301186721a) -- :memo: Issue #1618: No notification when app is closed on Android, not at all on iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f64bf0ffbddf3ef20de2fe540ec2718be5d0c23) -- :arrow_down: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e450fd7b623f27f27858a7537ec7950aa0f618b5) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4af3472263a5125cab6f08bbb59b83bf957144ec) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed25a3e3ad9fb6f2af63fd07957944f974eafaa1) -- 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6b9b862da8566c7717dfc79dd6b32d8a7e6774d8) -- :bookmark: Bumping plugin version to 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/626e9615fbff6ea225569ab58353ac7f58aef495) -- :heavy_plus_sign: update pluginpub version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c3c8058ffee888447017eb5d8c0f4f30cbcd090f) -- Issue #1464: Create round bitmap icon for large icon image passed in from local resource or url (#1635) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0dd0d468868f0b13c8d840c78dd89fca5920cd32) -- Receive notification only from SENDER_ID (#1484) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a0d51e54aac39b8c58e4c67080f174c0228947c9) -- Add no-cache flag to payload (#1620) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42f8cefbd187c36534e6ab59b6611fb7f15b91f0) -- Add dismiss key to on notification data (#1621) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4259bb3cacfe2561ed44e9f16bd74f8d5ae45ae2) -- return true for old android versions, since AppOpsManager is available starting at 19 (#1634) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/945aa2ad6d266e82683e0bee86f53d258f2b31b6) -- :art: remove reference to unused String [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/75f2191632a7a51eda7510a172ae6cc9d477acb9) -- Ability to use custom keys to find message title and text on Android (#1604) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fd366296773906c91d5f8dfa3e8ba813c7c71b85) -- :memo: Fixed URL of apples custom sound documentation (#1600) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c93f8622eb1c453cb0c681158a07deca32bf200) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/409020c90edf04e0a37232cff8aadb070d4ccaa9) -- 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2241c7431cd60a68d2f35e7b4a5bfd797d5161b6) -- Bumping plugin version to 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec47932bf8fdf9cd96db076fe56306ab230048d9) -- Issue #1591: App crashes with the latest updates of Android SDK with plugin v-1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/514c21366ab37001ca323bec58261e023edaefd7) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a218e4c68ebc1088461c2cfec966e57eaa24089) -- 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42723d6609862aa950abce67b2a637736bdd9e99) -- :bookmark: Bumping plugin version to 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f7b7dc003a2bc5bab7a316b0e2b0cf475c5a449) -- :wrench: Add valid SPDX license expression [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4274d0759acd7110ed2592ed1d2ce3bf692711d3) -- :memo: Issue #1587: v2.0.0-rc2: .on('notification') event not fired when background notification in Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e90853a09a2c49f29e12eed03977b08b1295387) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3188a3907f50dcf625b7663ecf74ea9a9209d437) -- :memo: Issue #1557: push.on('notification') not triggered - Ionic [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b91e9420fb68c4efc943cc5f8ecbd81274ffcbec) -- :memo: Issue #1407: Uncaught (in promise): Error: Push plugin not found! [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/adf3eabb8871980d2dead7ecb8185ad0da1d6b46) -- Corrected merges usage to prevent possible conflicts with other plugins (#1538) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/00c67cb2c85e97dfe4f7020f28ad4d954458599f) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a1806aaec5d3c76f7fcd30ddfd85d576fb6d197) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/471b2aa829cb0ecc93a9a788891602ad17319a47) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7ad471ff45724828fb21630fdfbc244ba037d9d8) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b80dfb12b5053184936a4c6c881f1af55459348f) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9796292910f2d600b22d4846c128196cfb54ba7c) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/297b8d28f2d7bf04420744c445e59a527c52d502) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/41c8e66483fc0c5f21da7477d2522a2212a8017a) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/08e496fffc7fa082410f7b16e73e6afe12da194c) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/156718a5800dfe4b87593e0732f4258c7c148bea) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0add758d08657e22501612ed258033e31c394e6a) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1f2fd671ae734201b1260bc3d7878ae9ef28673c) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/70c6e04a3ba072b91b3752173ca2287d4e448b8f) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e07d81dbb47babe161f3204cdd06222a1e2ab3c) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3dffdcf63c3d19b4717eed89eb911b8aecdd25a) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f5182503b241f519c03c872ae12f3489383f2b83) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/27a101f1d35217e0a1b7f0be9ad0607d31ea6c57) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c25a47bd3b5c2437ce3108656449658568f2c053) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/000bc36a8ce2a00e96212b66d69f1597dac68554) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa1cc247fcf8b94c4d60d26b18c9229c112e8185) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f4bcafafe56be18f6dc64f3e634a6de594bc034) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3f0eee774c7f9791f55f85816b0aeadc5c4fb4c) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c796a49c3a44b47f58237d7e7760f5ebc34c371) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/10c5153672dc478dd072274c220200526c313604) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa6e3ce5449accd5397b4eda8a950fd5cebc4f0e) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b65fe745b5eabbb7437a46b46e747be4aaf5116a) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3b5f3c71657d8af3e4407ac9ea6c36e00988b1cf) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/89040874c530c7f86c2acbcce5c3b88b351e80fb) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1e90013f8ca8497acc2513f4ce3df1358293d51) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0bc1ca736546242772516334f47fd4ea4f8f5e5f) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7acf338d5bff2bc25b5c1e2fa681b7e20254cc9) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a65be290d4176c1c0b51b700d673550ae22cf777) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed630d481b9035eb9df48738c0e77029937fafe9) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9c53761fa3d6fc99acaa96601e9abc673a62c23) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c46880b57aa1dee2bbcfeb5a86b497035f46ebe) -- :penguin: android mixpanel pushnotification suport added (#1523) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/951cb6921a717d847c279ad6896c28772c70103f) -- :memo: Making string replacement clearer [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/abdb656315bd4457c7ae43aaa52e2357df85d139) -- :bug::penguin::memo: Issue #1433: Cordova Push V5 register () crashes App when initialized with topicList [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1d5723c81ad7a1e9d76fdce22161e8e8aa8da262) -- :bug::penguin: Issue #1421: Notification delay caused by icon bitmap timeout [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fb4b533f2b31daebc7ed57c16228458def3d2af9) -- :memo: Issue #1442: CocoaPods support vs requirement [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5912b1ea911fbe3b45a3a47ed005b7048a487ba6) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/67041a994d70fd3a04149003607b88947e8cc994) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7dea689ba17ebb901ee12da62801f051a99cc368) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea92e039b1d7640b70ca94e5f8748e7d2abbf13a) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/498bb038799bd687d8c492154bd3b34d72edd322) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/74aba315b4cbb1e06c902e76891bce5582cbe690) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2f8a62c431af26c4d2fa487daa704067a088643) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cb9839740c4cbff5711224eed4b91b55aba77612) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1bef8b37ef7bc017571924edc9e05fe09cd25e29) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca5c281897c664b0bd98097ec2fc8c19c33b2c63) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/170d7dd43fe047c6caf84ec0f59da6c2c0cdeb6f) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fa4e36606c965504dba609940a2acf24f74ed978) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/af6c31933e3daedf6e5a7f046e971efcf65cc1ea) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/99742021c8c6c2cd860c40b01db6a3dc18095dbb) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff14a71b5e365f5c93159e759f989a6bbe89b40a) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/92dca439e1b0a0750a7e466bace2c4cb3acd19d8) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4cbc1cb69203c5a0fab250bd49b99a398ce86558) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7075bc8206641aa6459cf6acc4fe447fb1d57f77) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d043c5f9d7872dc4340151c0645a24716391f58f) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7a7c5c172190acab17fdfd54ad726a7a2fad701) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/15e68b03956a1dd292fda87e0da4f1ad9700d9c0) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/54aa482fb8af6ac15a60fb06090077e1d68dee6c) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1276d538b80106dd2f3d67996a531e64e7aa4937) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/504f2dcb5b158e0b2e151b255aad28a659bc2c4d) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97f0aeaa1099b89076b28282b2d2daac7ec62b33) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e11d89f46572d1e4430f1f6a63945d74b56e574c) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fa66ac99685f1f2b580597a45b16315ab7748028) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c539b041cbe2a2b6e9a360a91ee2a9bfdfd16b03) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dce5e9fb70e4df45a10fd8348a7def64864fdd24) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6f0182aff86b04c22630d1586d6ac6ca617c7e61) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/562a22f45bdafa4e2887996e9c0fa295b8bac886) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f1d14b2615d7c8330afbdbf0faa1d2438473a45d) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e4c47b5c5647866f24e6c2f47e4c98a1f8e2442) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a02580e19d470919ec61ec489cdf4ee6ca2f0d8c) - -## [v1.10.3](https://github.com/phonegap/phonegap-plugin-push/tree/v1.10.3) (2017-20-04) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.10.2...v1.10.3) - -- 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1e072b351056d453fd1c1d40d5fcac310f3e107c) -- :bookmark: Bumping plugin version to 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/29df66eae54e773925e25bd92299957e4d654723) -- :bug: Handle null in getCircleBitmap (#1705) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3acdfa338d7a8b56ec4dc73c50aa9917ecb3be7c) -- :shirt: Issue #1702: The logging tag can be at most 23 characters, was 40 (PushPlugin_BackgroundActionButtonHandler) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2045873acda2e81d54b2da87cd2d10f056bd90f9) -- Shortened log tag PushPlugin_BackgroundActionButtonHandler to bring u… (#1703) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dd707122b7aa78649fa6f5f73ba9b05436799926) -- :memo: Docs for interoperability with Firebase (#1693) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cebb6403143047192462f30c22b9510a8c6dbe21) -- fix headline (#1685) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2e7993544eed544eb7286868b60e2e3efb6275d) -- Fix changelog date [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3140b2b00388785f8056632376b50a1d1ef67b96) -- :arrow_up: update pluginpub to 0.0.8 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfab7d91556a38ee81550fe47e13f2662ae810db) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/027ea2c17e4b96b848ab29046efea243e6e2da27) - -## [v1.10.2](https://github.com/phonegap/phonegap-plugin-push/tree/v1.10.2) (2017-04-12) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.10.1...v1.10.2) - -- 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5a7d4ec6e64abaed65de00be3e9bac9ab25791e) -- :bookmark: Bumping plugin version to 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5b700ad9927c401081a5de49f2a6a27ba0dfaa9a) -- :arrow_up: update pluginpub to 0.0.7 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38564ce55e53e018c91f4063d680eedd2631b825) -- Fix the dates on the CHANGELOG (the last 2 version) (#1676) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0f26192c906bfc1a60390333c96d5dc07433978) -- Vapid Support (#1675) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/384b60bade628035b21d23f07e284eb6e1557a10) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97d618fb53084cfae78f397def48df791131358f) - -## [v1.10.1](https://github.com/phonegap/phonegap-plugin-push/tree/v1.10.1) (2017-04-07) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.10.0...v1.10.1) - -- 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6211e8c3df8881a90d19b111a0e63f890d435df6) -- :bookmark: Bumping plugin version to 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6d710a06681ad84c13273fe5d20feb3033ac67b6) -- :bug: Issue #1655: App opens on clearing notification (Android) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff417925f6d6678f0fcd8315d5f4b4b08fbb9085) -- :memo: Issue #1118: Problem with notifications stacking [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d669c44a863d86d0bb73b5ae086bc2fe6f8113a9) -- :memo: Issue #1220: [Question] the hook setting seem not work [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4ef137eea370da7c225ab2a5cf63b1e97a68f4a4) -- Set get badge count android (#1644) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/630907cf3d8802bcd5d91b6bd768c989f6ef897a) -- Add plugin typings from DefinitelyTyped (#1654) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ea70d9984e176a75602e72e1d26f5404c519e29) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/700701fd2151667905d860228cf954301186721a) -- :memo: Issue #1618: No notification when app is closed on Android, not at all on iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f64bf0ffbddf3ef20de2fe540ec2718be5d0c23) -- :arrow_down: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e450fd7b623f27f27858a7537ec7950aa0f618b5) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4af3472263a5125cab6f08bbb59b83bf957144ec) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed25a3e3ad9fb6f2af63fd07957944f974eafaa1) - -## [v1.10.0](https://github.com/phonegap/phonegap-plugin-push/tree/v1.10.0) (2017-03-10) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.4...v1.10.0) - -- 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6b9b862da8566c7717dfc79dd6b32d8a7e6774d8) -- :bookmark: Bumping plugin version to 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/626e9615fbff6ea225569ab58353ac7f58aef495) -- :heavy_plus_sign: update pluginpub version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c3c8058ffee888447017eb5d8c0f4f30cbcd090f) -- Issue #1464: Create round bitmap icon for large icon image passed in from local resource or url (#1635) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0dd0d468868f0b13c8d840c78dd89fca5920cd32) -- Receive notification only from SENDER_ID (#1484) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a0d51e54aac39b8c58e4c67080f174c0228947c9) -- Add no-cache flag to payload (#1620) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42f8cefbd187c36534e6ab59b6611fb7f15b91f0) -- Add dismiss key to on notification data (#1621) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4259bb3cacfe2561ed44e9f16bd74f8d5ae45ae2) -- return true for old android versions, since AppOpsManager is available starting at 19 (#1634) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/945aa2ad6d266e82683e0bee86f53d258f2b31b6) -- :art: remove reference to unused String [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/75f2191632a7a51eda7510a172ae6cc9d477acb9) -- Ability to use custom keys to find message title and text on Android (#1604) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fd366296773906c91d5f8dfa3e8ba813c7c71b85) -- :memo: Fixed URL of apples custom sound documentation (#1600) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c93f8622eb1c453cb0c681158a07deca32bf200) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/409020c90edf04e0a37232cff8aadb070d4ccaa9) - -## [v1.9.4](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.4) (2016-07-09) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.3...v1.9.4) - -- 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2241c7431cd60a68d2f35e7b4a5bfd797d5161b6) -- Bumping plugin version to 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec47932bf8fdf9cd96db076fe56306ab230048d9) -- Issue #1591: App crashes with the latest updates of Android SDK with plugin v-1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/514c21366ab37001ca323bec58261e023edaefd7) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a218e4c68ebc1088461c2cfec966e57eaa24089) - -## [v1.9.3](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.3) (2016-07-09) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.2...v1.9.3) - -- 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42723d6609862aa950abce67b2a637736bdd9e99) -- :bookmark: Bumping plugin version to 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f7b7dc003a2bc5bab7a316b0e2b0cf475c5a449) -- :wrench: Add valid SPDX license expression [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4274d0759acd7110ed2592ed1d2ce3bf692711d3) -- :memo: Issue #1587: v2.0.0-rc2: .on('notification') event not fired when background notification in Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e90853a09a2c49f29e12eed03977b08b1295387) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3188a3907f50dcf625b7663ecf74ea9a9209d437) -- :memo: Issue #1557: push.on('notification') not triggered - Ionic [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b91e9420fb68c4efc943cc5f8ecbd81274ffcbec) -- :memo: Issue #1407: Uncaught (in promise): Error: Push plugin not found! [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/adf3eabb8871980d2dead7ecb8185ad0da1d6b46) -- Corrected merges usage to prevent possible conflicts with other plugins (#1538) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/00c67cb2c85e97dfe4f7020f28ad4d954458599f) -- :penguin: android mixpanel pushnotification suport added (#1523) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/951cb6921a717d847c279ad6896c28772c70103f) -- :memo: Making string replacement clearer [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/abdb656315bd4457c7ae43aaa52e2357df85d139) -- :bug::penguin::memo: Issue #1433: Cordova Push V5 register () crashes App when initialized with topicList [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1d5723c81ad7a1e9d76fdce22161e8e8aa8da262) -- :bug::penguin: Issue #1421: Notification delay caused by icon bitmap timeout [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fb4b533f2b31daebc7ed57c16228458def3d2af9) -- :memo: Issue #1442: CocoaPods support vs requirement [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5912b1ea911fbe3b45a3a47ed005b7048a487ba6) -- make google_app_id non translatable string (#1485) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d9890fa52ecdb41b344f06f1dd081d05ea784bea) -- :penguin::bug: Issue #1474: Android: force-start starts the app in Foreground instead of Background [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bb5f53a8478353ed1f5f97756adff336fb9a710) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e02ff6703a53cb18e53060e2d7f6f64ebc8588b6) - -## [v2.0.0-rc2](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc2) (2016-07-09) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0-rc1...v2.0.0-rc2) - -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/67041a994d70fd3a04149003607b88947e8cc994) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7dea689ba17ebb901ee12da62801f051a99cc368) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea92e039b1d7640b70ca94e5f8748e7d2abbf13a) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/498bb038799bd687d8c492154bd3b34d72edd322) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/74aba315b4cbb1e06c902e76891bce5582cbe690) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2f8a62c431af26c4d2fa487daa704067a088643) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cb9839740c4cbff5711224eed4b91b55aba77612) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1bef8b37ef7bc017571924edc9e05fe09cd25e29) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca5c281897c664b0bd98097ec2fc8c19c33b2c63) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/170d7dd43fe047c6caf84ec0f59da6c2c0cdeb6f) - -## [v2.0.0-rc1](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc1) (2016-07-09) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.1...v2.0.0-rc1) - -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46a44f92ca8f94c991a564a5a8ff1e424c4b7f7f) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b952330124ab76d6a8ec88ebdb7eac0a614f8c38) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ec1beb2ab13d6333122b76122ae4eb2e60dfb55) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fab033596c66ee1c9594d404fec8473a4dd41e77) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/07f28d8dbc477faeb2a8dd8997fde0d088dd191a) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba16ce363a198edd0d190e9603a5e1363289a893) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a47af30d32c6921b484c1c129cd60582e1b3047b) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9f4a5d6d6f18082ae9e5a533a700cf3662c2739) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/368f6cbb8095fd742bb39308e02fac7f89379f18) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3e0eefe09359612d6757d4598eba69e3d68a96b) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d6d527628f8811ab6781591b3c186ce2732c9f37) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/26b0369f148976e4227f73f5883658a726f825dd) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b4d850028b088c38bbd11c1899e28ea69b1c391e) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/417be691c8131f006a7f1bd49bc171faa36ee872) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e34ddc03b01e676382a6d70e1e750a4e64ca6d62) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/732a2bd8efbfbea696db6951439e2472d6dc8e6f) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8d44ccfdfe91831140e4e972d6879b6330a1c613) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a18d50324ab96945db382539ce2ed7a287bed840) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72875ac0aef0f9d00de6413e0dea4d7533c5eaef) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bd37d1b31ca0b2c76c89a04a803b22186d1f8ad) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fda1f905c4364a3ac100486dc639fdd5c3bae9ca) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b6acbfeacf851bab256962616ba2bd93150982ba) -- :memo: Issue #1235: SecurityError: Only secure origins are allowed (see: https://goo.gl/Y0ZkNV) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5241a6f3868b4b15f79c6d5c0b5b5ea45e6301f9) -- :memo: Issue #1415: What is the id in push.finish? [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660b51da66e791ff342d027ea6afa4313281e28) -- :memo: Issue #1420: Update PLATFORM_SUPPORT.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/60ad23affaf2dc4c9c2bf48b6cbb702b0217aeb7) -- :memo: Adding more emoji for commit messages [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eb6b7b7d52770769719392b9b5226ee9a7caef75) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f38fd3d4d9f5f4f8de602b6aa07089b706884ca5) - -## [v2.0.0-rc2](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc2) (2016-07-09) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0-rc1...v2.0.0-rc2) - -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/67041a994d70fd3a04149003607b88947e8cc994) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7dea689ba17ebb901ee12da62801f051a99cc368) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea92e039b1d7640b70ca94e5f8748e7d2abbf13a) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/498bb038799bd687d8c492154bd3b34d72edd322) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/74aba315b4cbb1e06c902e76891bce5582cbe690) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2f8a62c431af26c4d2fa487daa704067a088643) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cb9839740c4cbff5711224eed4b91b55aba77612) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1bef8b37ef7bc017571924edc9e05fe09cd25e29) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca5c281897c664b0bd98097ec2fc8c19c33b2c63) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/170d7dd43fe047c6caf84ec0f59da6c2c0cdeb6f) - -## [v2.0.0-rc1](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc1) (2016-07-09) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.1...v2.0.0-rc1) - -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46a44f92ca8f94c991a564a5a8ff1e424c4b7f7f) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b952330124ab76d6a8ec88ebdb7eac0a614f8c38) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ec1beb2ab13d6333122b76122ae4eb2e60dfb55) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fab033596c66ee1c9594d404fec8473a4dd41e77) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/07f28d8dbc477faeb2a8dd8997fde0d088dd191a) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba16ce363a198edd0d190e9603a5e1363289a893) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a47af30d32c6921b484c1c129cd60582e1b3047b) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9f4a5d6d6f18082ae9e5a533a700cf3662c2739) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/368f6cbb8095fd742bb39308e02fac7f89379f18) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3e0eefe09359612d6757d4598eba69e3d68a96b) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d6d527628f8811ab6781591b3c186ce2732c9f37) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/26b0369f148976e4227f73f5883658a726f825dd) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b4d850028b088c38bbd11c1899e28ea69b1c391e) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/417be691c8131f006a7f1bd49bc171faa36ee872) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e34ddc03b01e676382a6d70e1e750a4e64ca6d62) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/732a2bd8efbfbea696db6951439e2472d6dc8e6f) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8d44ccfdfe91831140e4e972d6879b6330a1c613) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a18d50324ab96945db382539ce2ed7a287bed840) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72875ac0aef0f9d00de6413e0dea4d7533c5eaef) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bd37d1b31ca0b2c76c89a04a803b22186d1f8ad) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fda1f905c4364a3ac100486dc639fdd5c3bae9ca) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b6acbfeacf851bab256962616ba2bd93150982ba) -- :memo: Issue #1235: SecurityError: Only secure origins are allowed (see: https://goo.gl/Y0ZkNV) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5241a6f3868b4b15f79c6d5c0b5b5ea45e6301f9) -- :memo: Issue #1415: What is the id in push.finish? [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660b51da66e791ff342d027ea6afa4313281e28) -- :memo: Issue #1420: Update PLATFORM_SUPPORT.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/60ad23affaf2dc4c9c2bf48b6cbb702b0217aeb7) -- :memo: Adding more emoji for commit messages [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eb6b7b7d52770769719392b9b5226ee9a7caef75) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f38fd3d4d9f5f4f8de602b6aa07089b706884ca5) - -## [v1.9.2](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.2) (2016-07-09) -[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.1...v1.9.2) - -- 1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef3de3281205b1fd56c57c71db31dc06a95da7a9) -- :bookmark: Bumping plugin version to 1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/24650bad4db49525505e9a2624ff1b5500e6b3ef) -- Optional event emit instead of function call for action buttons (#1378) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e92e951e759fe64d17d01e152575b6262973380a) -- Ensures foreground is true when inline is set to true and Android version is earlier than N (#1459) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dd61ec34c0ca5c3fadf6797a8e192b9343324f68) - ## [v1.9.1](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.1) (2016-07-09) [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.0...v1.9.1) diff --git a/StoneIsland/plugins/phonegap-plugin-push/MIT-LICENSE b/StoneIsland/plugins/phonegap-plugin-push/MIT-LICENSE index abf9a980..a017eb00 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/MIT-LICENSE +++ b/StoneIsland/plugins/phonegap-plugin-push/MIT-LICENSE @@ -1,4 +1,4 @@ -Copyright 2012-2017 Adobe Systems +Copyright 2012-2016 Adobe Systems Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/StoneIsland/plugins/phonegap-plugin-push/README.md b/StoneIsland/plugins/phonegap-plugin-push/README.md index 93c2b1eb..8f9ff5e9 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/README.md +++ b/StoneIsland/plugins/phonegap-plugin-push/README.md @@ -1,16 +1,12 @@ -# phonegap-plugin-push [](https://travis-ci.org/phonegap/phonegap-plugin-push) +#phonegap-plugin-push [](https://travis-ci.org/phonegap/phonegap-plugin-push) > Register and receive push notifications -# Warning - -The links below take you to the version 2.x documentation which includes a number of breaking API changes from version 1.x, mostly the move from GCM to FCM. If you are using version 1.x please reference the docs in the [v1.x branch](https://github.com/phonegap/phonegap-plugin-push/tree/v1.x). - # What is this? -This plugin offers support to receive and handle native push notifications with a **single unified API**. +This plugin offers support to receive and handle native push notifications with a **single unified API**. -Starting with version `2.0.0`, this plugin will support `CocoaPods` installation of the `Firebase Cloud Messaging` library. More details are available in the [Installation](docs/INSTALLATION.md#cocoapods) documentation. +Starting with version `1.9.0`, this plugin will support `CocoaPods` installation of the `Google Cloud Messaging` library. More details are available in the [Installation](docs/INSTALLATION.md#cocoapods) documentation. - [Reporting Issues](docs/ISSUES.md) - [Installation](docs/INSTALLATION.md) diff --git a/StoneIsland/plugins/phonegap-plugin-push/docs/API.md b/StoneIsland/plugins/phonegap-plugin-push/docs/API.md index 866fd28c..e0481af8 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/docs/API.md +++ b/StoneIsland/plugins/phonegap-plugin-push/docs/API.md @@ -11,7 +11,7 @@ - [push.subscribe()](#pushsubscribetopic-successhandler-errorhandler) - [push.unsubscribe()](#pushunsubscribetopic-successhandler-errorhandler) - [push.setApplicationIconBadgeNumber() - iOS & Android only](#pushsetapplicationiconbadgenumbersuccesshandler-errorhandler-count---ios--android-only) -- [push.getApplicationIconBadgeNumber() - iOS & Android only](#pushgetapplicationiconbadgenumbersuccesshandler-errorhandler---ios--android-only) +- [push.getApplicationIconBadgeNumber() - iOS only](#pushgetapplicationiconbadgenumbersuccesshandler-errorhandler---ios-only) - [push.finish() - iOS only](#pushfinishsuccesshandler-errorhandler-id---ios-only) - [push.clearAllNotifications() - iOS & Android only](#pushclearallnotificationssuccesshandler-errorhandler---ios--android-only) @@ -39,6 +39,7 @@ All available option attributes are described bellow. Currently, there are no Wi Attribute | Type | Default | Description --------- | ---- | ------- | ----------- +`android.senderID` | `string` | | Maps to the project number in the Google Developer Console. `android.icon` | `string` | | Optional. The name of a drawable resource to use as the small-icon. The name should not include the extension. `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)) `android.sound` | `boolean` | `true` | Optional. If `true` it plays the sound specified in the push data or the default system sound. @@ -46,16 +47,13 @@ Attribute | Type | Default | Description `android.clearBadge` | `boolean` | `false` | Optional. If `true` the icon badge will be cleared on init and before push messages are processed. `android.clearNotifications` | `boolean` | `true` | Optional. If `true` the app clears all pending notifications when it is closed. `android.forceShow` | `boolean` | `false` | Optional. Controls the behavior of the notification when app is in foreground. If `true` and app is in foreground, it will show a notification in the notification drawer, the same way as when the app is in background (and `on('notification')` callback will be called *only when the user clicks the notification*). When `false` and app is in foreground, the `on('notification')` callback will be called immediately. -`android.topics` | `array` | `[]` | Optional. If the array contains one or more strings each string will be used to subscribe to a FcmPubSub topic. -`android.messageKey` | `string` | `message` | Optional. The key to search for text of notification. -`android.titleKey` | `string` | `'title'` | Optional. The key to search for title of notification. +`android.topics` | `array` | `[]` | Optional. If the array contains one or more strings each string will be used to subscribe to a GcmPubSub topic. #### Browser Attribute | Type | Default | Description --------- | ---- | ------- | ----------- `browser.pushServiceURL` | `string` | `http://push.api.phonegap.com/v1/push` | Optional. URL for the push server you want to use. -`browser.applicationServerKey` | `string` | `` | Optional. Your GCM API key if you are using VAPID keys. #### iOS @@ -75,9 +73,9 @@ The following properties are used if you want use GCM on iOS. Attribute | Type | Default | Description --------- | ---- | ------- | ----------- -`ios.fcmSandbox` | `boolean` | `false` | Whether to use prod or sandbox GCM setting. Defaults to false. -options -`ios.topics` | `array` | `[]` | Optional. If the array contains one or more strings each string will be used to subscribe to a FcmPubSub topic. +`ios.senderID` | `string` | `undefined` (Native) | Maps to the project number in the Google Developer Console. Setting this uses GCM for notifications instead of native +`ios.gcmSandbox` | `boolean` | `false` | Whether to use prod or sandbox GCM setting. Defaults to false. +`ios.topics` | `array` | `[]` | Optional. If the array contains one or more strings each string will be used to subscribe to a GcmPubSub topic. Note: only usable in conjunction with `senderID`. ##### How GCM on iOS works. @@ -87,12 +85,12 @@ What happens is on the device side is that it registers with APNS, then that reg When you send a message to GCM using that ID, what it does is look up the APNS registration ID on it's side and forward the message you sent to GCM on to APSN to deliver to your iOS device. -Make sure that the certificate you build with matches your `fcmSandbox` value. +Make sure that the certificate you build with matches your `gcmSandbox` value. -- If you build your app as development and set `fcmSandbox: false` it will fail. -- If you build your app as production and set `fcmSandbox: true` it will fail. -- If you build your app as development and set `fcmSandbox: true` but haven't uploaded the development certs to Google it will fail. -- If you build your app as production and set `fcmSandbox: false` but haven't uploaded the production certs to Google it will fail. +- If you build your app as development and set `gcmSandbox: false` it will fail. +- If you build your app as production and set `gcmSandbox: true` it will fail. +- If you build your app as development and set `gcmSandbox: true` but haven't uploaded the development certs to Google it will fail. +- If you build your app as production and set `gcmSandbox: false` but haven't uploaded the production certs to Google it will fail. > Note: The integration between GCM and APNS is a bit finicky. Personally, I feel it is much better to send pushes to Android using GCM and pushes to iOS using APNS which this plugin does support. @@ -101,6 +99,7 @@ Make sure that the certificate you build with matches your `fcmSandbox` value. ```javascript var push = PushNotification.init({ android: { + senderID: "12345679" }, browser: { pushServiceURL: 'http://push.api.phonegap.com/v1/push' @@ -160,14 +159,12 @@ The event `registration` will be triggered on each successful registration with Parameter | Type | Description --------- | ---- | ----------- `data.registrationId` | `string` | The registration ID provided by the 3rd party remote push service. -`data.registrationType` | `string` | The registration type of the 3rd party remote push service. Either FCM or APNS. ### Example ```javascript push.on('registration', function(data) { - console.log(data.registrationId); - console.log(data.registrationType); + console.log(data.registrationId); }); ``` @@ -206,7 +203,6 @@ Parameter | Type | Description `data.additionalData` | `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 `data.additionalData.coldstart` | `boolean` | Will be `true` if the application is started by clicking on the push notification, `false` if the app is already started. -`data.additionalData.dismissed` | `boolean` | Is set to `true` if the notification was dismissed by the user ### Example @@ -356,7 +352,7 @@ push.setApplicationIconBadgeNumber(function() { }, 2); ``` -## push.getApplicationIconBadgeNumber(successHandler, errorHandler) - iOS & Android only +## push.getApplicationIconBadgeNumber(successHandler, errorHandler) - iOS only Get the current badge count visible when the app is not running diff --git a/StoneIsland/plugins/phonegap-plugin-push/docs/EXAMPLES.md b/StoneIsland/plugins/phonegap-plugin-push/docs/EXAMPLES.md index 32bc2e5f..8481e7bc 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/docs/EXAMPLES.md +++ b/StoneIsland/plugins/phonegap-plugin-push/docs/EXAMPLES.md @@ -11,6 +11,7 @@ phonegap create my-app --template phonegap-template-push ```javascript var push = PushNotification.init({ android: { + senderID: "12345679" }, browser: { pushServiceURL: 'http://push.api.phonegap.com/v1/push' diff --git a/StoneIsland/plugins/phonegap-plugin-push/docs/INSTALLATION.md b/StoneIsland/plugins/phonegap-plugin-push/docs/INSTALLATION.md index ea8f6918..830bbdd7 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/docs/INSTALLATION.md +++ b/StoneIsland/plugins/phonegap-plugin-push/docs/INSTALLATION.md @@ -4,7 +4,6 @@ - [Android details](#android-details) - [Compilation](#compilation) - [Co-existing with Facebook Plugin](#co-existing-with-facebook-plugin) - - [Co-existing with plugins that use Firebase](#co-existing-with-plugins-that-use-firebase) - [Common errors](#common-errors) - [minSdkVersion === 14](#minsdkversion--14) - [Multidex](#multidex) @@ -17,65 +16,52 @@ - [Bitcode](#bitcode) - [CocoaPods](#cocoapods) - [Common CocoaPod Installation issues](#common-cocoapod-installation-issues) - - [CocoaPod Disk Space](#cocoapod-disk-space) - - [Library not found for -lPods-Appname](#library-not-found-for--lPods-Appname) - - [Library not found for -lGoogleToolboxForMac](#library-not-found-for--lPods-Appname) - [Additional Resources](#additional-resources) ## Installation Requirements Plugin version | Cordova CLI | Cordova Android | Cordova iOS | CocoaPods ---- | ---- | ---- | ---- | ---- -2.0.0 | 7.0.0 | 6.2.1 | 4.4.0 | 1.1.1 1.9.0 | 6.4.0 | 6.0.0 | 4.3.0 | 1.1.1 1.8.0 | 3.6.3 | 4.0.0 | 4.1.0 | N/A To install from the command line: ``` -phonegap plugin add phonegap-plugin-push +phonegap plugin add phonegap-plugin-push --variable SENDER_ID="XXXXXXX" ``` or ``` -cordova plugin add phonegap-plugin-push +cordova plugin add phonegap-plugin-push --variable SENDER_ID="XXXXXXX" ``` It is also possible to install via repo url directly ( unstable ) ``` -phonegap plugin add https://github.com/phonegap/phonegap-plugin-push +phonegap plugin add https://github.com/phonegap/phonegap-plugin-push --variable SENDER_ID="XXXXXXX" ``` or ``` -cordova plugin add https://github.com/phonegap/phonegap-plugin-push +cordova plugin add https://github.com/phonegap/phonegap-plugin-push --variable SENDER_ID="XXXXXXX" ``` -As of version 2.0.0 the SENDER_ID parameter has been removed at install time. Instead you put your google-services.json (Android) and/or GoogleService-Info.plist in the root folder of your project and then add the following lines into your config.xml. +Where the `XXXXXXX` in `SENDER_ID="XXXXXXX"` maps to the project number in the [Google Developer Console](https://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwikqt3nyPjMAhXJ5iYKHR0qDcsQFggbMAA&url=https%3A%2F%2Fconsole.developers.google.com%2F&usg=AFQjCNF0eH059mv86nMIlRmfsf42kde-wA&sig2=BQ2BJpchw1CpGt87sk5p6w&bvm=bv.122852650,d.eWE). To find the project number login to the Google Developer Console, select your project and click the menu item in the screen shot below to display your project number. -In the platform tag for Android add the resource-file tag: + -``` -<platform name="android"> - <resource-file src="google-services.json" target="google-services.json" /> -</platform> -``` - -In the platform tag for iOS add the resource-file tag: - -``` -<platform name="ios"> - <resource-file src="GoogleService-Info.plist" /> -</platform> -``` +If you are not creating an Android application you can put in anything for this value. > Note: if you are using Ionic you may need to specify the SENDER_ID variable in your package.json. ``` "cordovaPlugins": [ { + "variables": { + "SENDER_ID": "XXXXXXX" + }, "locator": "phonegap-plugin-push" } ] @@ -84,17 +70,23 @@ In the platform tag for iOS add the resource-file tag: > Note: You need to specify the SENDER_ID variable in your config.xml if you plan on installing/restoring plugins using the prepare method. The prepare method will skip installing the plugin otherwise. ``` -<plugin name="phonegap-plugin-push" spec="2.0.0" /> +<plugin name="phonegap-plugin-push" spec="1.6.0"> + <param name="SENDER_ID" value="XXXXXXX" /> +</plugin> ``` ## Android details ### Compilation -As of version 2.0.0 the plugin has been switched to using pinned version of Gradle libraries. You will need to ensure that you have installed the following items through the Android SDK Manager: +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 following items through the Android SDK Manager: -- Android Support Library version 25.1.0 -- FirebaseMessaging Library version 9.8.0 +- Android Support Library version 23 or greater +- Local Maven repository for Support Libraries (formerly Android Support Repository) version 20 or greater +- Google Play Services version 27 or greater +- Google Repository version 22 or greater  @@ -121,30 +113,6 @@ or cordova plugin add --save cordova-plugin-facebook4 --variable APP_ID="App ID" --variable APP_NAME="App Name" ``` -### Co-existing with plugins that use Firebase - -Problems may arise when push plugin is used along plugins that implement Firebase functionality (cordova-plugin-firebase-analytics, for example). Firebase uses `@string/google_app_id`, as does the push plugin, though the value format differs, causing problems like this: `Invalid google_app_id. Firebase Analytics disabled`. - -To make the two work together, you need to migrate your GCM project from Google console to Firebase console: - -1) In Firebase console - [import your existing GCM project](https://firebase.google.com/support/guides/google-android#migrate_your_console_project), don't create a new one. -2) Set your `SENDER_ID` variable to match the id of your imported Firebase project. In case of cordova, your `config.xml` would look something like this: -```xml -<plugin name="phonegap-plugin-push" spec="~1.10.0"> - <variable name="SENDER_ID" value="1:956432534015:android:df201d13e7261425" /> -</plugin> -``` -3) In your JavaScript, when you init the PushPlugin, senderID remains the same format as before: -```javascript -PushNotification.init({ - android: { - senderID: 956432534015 - } -}); -``` - -*Note:* No changes on the back-end side are needed: [even though recommended](https://developers.google.com/cloud-messaging/android/android-migrate-fcm#update_server_endpoints), it isn't yet required and sending messages through GCM gateway should work just fine. - ### Common errors #### minSdkVersion === 14 @@ -255,21 +223,11 @@ cordova platform update ios@4.0.0 ### CocoaPods -Required `cordova-cli` minimum version: `6.4.0` - -Required `cordova-ios` minimum version: `4.3.0` - -Required `CocoaPods` minimum version: `1.0.1` +Required `cordova-cli` version: `6.4.0` +Required `cordova-ios` version: `4.3.0` -To install CocoaPods, please follow the installation instructions [here](https://guides.cocoapods.org/using/getting-started). After installing CocoaPods, please run: - - pod setup - -This will clone the required CocoaPods specs-repo into your home folder at `~/.cocoapods/repos`, so it might take a while. See the [CocoaPod Disk Space](#cocoapod-disk-space) section below for more information. - - -Version `2.0.0` (and above) of this plugin supports [CocoaPods](https://cocoapods.org) installation of the [Firebase Cloud Messaging](https://cocoapods.org/pods/FirebaseMessaging) library. +Version `1.9.0` (and above) of this plugin supports [CocoaPods](https://cocoapods.org) installation of the [Google Cloud Messaging](https://cocoapods.org/pods/GoogleCloudMessaging) library. If you are installing this plugin using `npm`, and you are using version `6.1.0` or greater of the `cordova-cli`, it will automatically download the right version of this plugin for both your platform and cli. @@ -297,55 +255,59 @@ Failed to install 'phonegap-plugin-push':Error: pod: Command failed with exit co Error: pod: Command failed with exit code 1 ``` -Please run the command `pod repo update` and re-install the plugin. You would only run `pod repo update` if you have the specs-repo already cloned on your machine through `pod setup`. - -##### CocoaPod Disk Space - -Running `pod setup` can take over 1 GB of disk space and that can take quite some time to download over a slow internet connection. If you are having issues with disk space/network try this neat hack from @VinceOPS. +Please run the command `pod repo update` and re-install the plugin. -``` -git clone --verbose --depth=1 https://github.com/CocoaPods/Specs.git ~/.cocoapods/repos/master -pod setup --verbose -``` +## Additional Resources -##### Library not found for -lPods-Appname +The push plugin enables you to play sounds and display different icons during push (Android only). These additional resources need to be added to your projects `platforms` directory in order for them to be included into your final application binary. One way of doing it is to create a hook to do the copying for you on each build. -If you open the app in Xcode and you get an error like: +First create a `scripts` directory in the root of your project. Next add a file to the scripts directory called `copy_resource_files.js`. The contents of the file will look something like this: -``` -ld: library not found for -lPods-Appname -clang: error: linker command failed with exit code 1 -``` +```javascript +#!/usr/bin/env node -Then you are opening the .xcodeproj file when you should be opening the .xcworkspace file. +// each object in the array consists of a key which refers to the source and +// the value which is the destination. +var filestocopy = [{ + "resources/android/images/logo.png": + "platforms/android/res/drawable/logo.png" +}, { + "resources/android/sounds/ring.mp3": + "platforms/android/res/raw/ring.mp3" +}, { + "resources/ios/sounds/ring.caf": + "platforms/ios/YourAppName/ring.caf" +}, ]; -##### Library not found for -lGoogleToolboxForMac +var fs = require('fs'); +var path = require('path'); -Trying to build for iOS using the latest cocoapods (1.2.1) but failed with the following error (from terminal running cordova build ios): +// no need to configure below +var rootdir = process.argv[2]; +filestocopy.forEach(function(obj) { + Object.keys(obj).forEach(function(key) { + var val = obj[key]; + var srcfile = path.join(rootdir, key); + var destfile = path.join(rootdir, val); + //console.log("copying "+srcfile+" to "+destfile); + var destdir = path.dirname(destfile); + if (fs.existsSync(srcfile) && fs.existsSync(destdir)) { + fs.createReadStream(srcfile).pipe( + fs.createWriteStream(destfile)); + } + }); +}); ``` -ld: library not found for -lGoogleToolboxForMac -``` - -Workarounds are to add the platform first and install the plugins later, or to manually run pod install on projectName/platforms/ios. -## Additional Resources - -The push plugin enables you to play sounds and display different icons during push (Android only). These additional resources need to be added to your projects `platforms` directory in order for them to be included into your final application binary. +Obviously, you'll need to modify the `filestocopy` variable to suit your needs. Pay attention to the destination path on iOS where you will need to replace `YourAppName`. -You can now use the `resource-file` tag to deliver the image and sound files to your application. For example if you wanted to include an extra image file for only your Android build you would add the `resource-file` tag to your android `platform` tag: +Next open up your `config.xml` file and add the following line: +```xml +<hook type="before_build" src="scripts/copy_resource_files.js" /> ``` -<platform name="android"> - <resource-file src="myImage.png" target="res/drawable/myImage.png" /> -</platform> -``` - -or if you wanted to include a sound file for iOS: +Now, when you build your app the files will get copied into your platforms directory for you. -``` -<platform name="ios"> - <resource-file src="mySound.caf" /> -</platform> -``` +If you are using PhoneGap Build check out these instructions on [Additional Resources](PHONEGAP_BUILD.md#additional-resources) diff --git a/StoneIsland/plugins/phonegap-plugin-push/docs/PAYLOAD.md b/StoneIsland/plugins/phonegap-plugin-push/docs/PAYLOAD.md index 431b5a4e..b446612e 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/docs/PAYLOAD.md +++ b/StoneIsland/plugins/phonegap-plugin-push/docs/PAYLOAD.md @@ -3,7 +3,6 @@ - [Background Events](#push-message-arrives-with-app-in-background) - [Tap Events](#user-clicks-on-notification-in-notification-center) - [Android Behaviour](#android-behaviour) - - [Notification vs Data Payloads](#notification-vs-data-payloads) - [Localization](#localization) - [Images](#images) - [Sound](#sound) @@ -16,14 +15,12 @@ - [Priority in Notifications](#priority-in-notifications) - [Picture Messages](#picture-messages) - [Background Notifications](#background-notifications) - - [Use of content_available: true](#use-of-content-available-true) - - [Caching](#caching) + - [Use of content-available: true](#use-of-content-available-true) - [Huawei and Xiaomi Phones](#huawei-and-xiaomi-phones) - [Application force closed](#application-force-closed) - [Visibility](#visibility-of-notifications) - [Badges](#badges) - [Support for Twilio Notify](#support-for-twilio-notify) - - [Notification ID](#notification-id) - [iOS Behaviour](#ios-behaviour) - [Sound](#sound-1) - [Background Notifications](#background-notifications-1) @@ -70,66 +67,6 @@ Some ways to handle this *double* event are: # Android Behaviour -## Notification vs Data Payloads - -Notifications behave differently depending on the foreground/background state of the receiving app and the payload you send to the app. - -For instance if you send the following payload: - -``` -{ - "notification": { - "title": "Test Notification", - "body": "This offer expires at 11:30 or whatever", - "notId": 10 - } -} -``` - -When your app is in the foreground any `on('notification')` handlers you have registered will be called. However if your app is in the background the notification will show up in the system tray. Clicking on the notification in the system tray will start the app but your `on('notification')` handler will not be called as messages with only `notification` payloads will not cause the plugins `onMessageReceived` method to be called. - -If you send a payload with a mix of `notification` & `data` objects like this: - -``` -{ - "notification": { - "title": "Test Notification", - "body": "This offer expires at 11:30 or whatever", - "notId": 10 - }, - "data" : { - "surveyID": "ewtawgreg-gragrag-rgarhthgbad" - } -} -``` - -When your app is in the foreground any `on('notification')` handlers you have registered will be called. If your app is in the background the notification will show up in the system tray. Clicking on the notification in the system tray will start the app and your `on('notification')` handler will not be called as messages with only `notification` payloads will not cause the plugins `onMessageReceived` method to be called. - -My recommended format for your push payload when using this plugin (while it differs from Google's docs) works 100% of the time: - -``` -{ - "data" : { - "title": "Test Notification", - "body": "This offer expires at 11:30 or whatever", - "notId": 10, - "surveyID": "ewtawgreg-gragrag-rgarhthgbad" - } -} -``` - -When your app is in the foreground any `on('notification')` handlers you have registered will be called. If your app is in the background the notification will show up in the system tray. Clicking on the notification in the system tray will start the app and your `on('notification')` handler will be called and the event received by your `on('notification')` handler will get the following data: - -``` -{ - "message": "This offer expires at 11:30 or whatever", - "title": "Test Notification", - "additionalData": { - "surveyID": "ewtawgreg-gragrag-rgarhthgbad" - } -} -``` - ## Localization Plugin supported localization from resources for: title, message and summaryText. @@ -158,32 +95,22 @@ Or use localization with formatted constants. } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: {"locKey": "push_app_title"}, - message: 'Simple non-localizable text for message!' - // Constant with formatted params - // message: {"locKey": "push_message_fox", "locData": ["fox", "dog"]}); - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', {"locKey": "push_app_title"}); +message.addData('message', 'Simple non-localizable text for message!'); +// Constant with formatted params +// message.addData('message', {"locKey": "push_message_fox", "locData": ["fox", "dog"]}); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -202,8 +129,9 @@ By default the icon displayed in your push notification will be your apps icon. ```javascript var push = PushNotification.init({ "android": { + "senderID": "12345679" }, - "browser": { + browser: { pushServiceURL: 'http://push.api.phonegap.com/v1/push' }, "ios": { @@ -226,10 +154,11 @@ In order to get a better user experience you can specify an alternate icon and b ```javascript var push = PushNotification.init({ "android": { + "senderID": "123456789", "icon": "phonegap", "iconColor": "blue" }, - "browser": { + browser: { pushServiceURL: 'http://push.api.phonegap.com/v1/push' }, "ios": { @@ -241,8 +170,7 @@ var push = PushNotification.init({ }); ``` -Where *icon* is the name of an `.png` image file in the Android `res/drawable` folder. For example: `platforms/android/res/drawable/phonegap.png` -Writing a hook to describe how to copy an image to the Android `res/drawable` 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. +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. @@ -252,48 +180,38 @@ Please follow the [Android icon design guidelines](https://www.google.com/design 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 `res/drawable` folder in your app. This JSON sent from GCM: +The first is the *drawables* folder in your app. This JSON sent from GCM: ```javascript { "registration_ids": ["my device id"], "data": { "title": "Large Icon", - "message": "Loaded from drawable folder", + "message": "Loaded from drawables folder", "image": "twitter" } } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Large Icon', - message: 'Loaded from drawables folder.', - image: 'twitter' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Large Icon'); +message.addData('message', 'Loaded from drawables folder.'); +message.addData('image', 'twitter'); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` -Would look for the *twitter* image in the `res/drawable` folder and produce the following notification. +Would look for the *twitter* image in the drawables folder and produce the following notification.  @@ -310,35 +228,25 @@ The second is the *assets* folder in your app. This JSON sent from GCM: } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Large Icon', - message: 'Loaded from assets folder.', - image: 'www/image/logo.png' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Large Icon'); +message.addData('message', 'Loaded from assets folder.'); +message.addData('image', 'www/image/logo.png'); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` -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 `res/drawable` folder. It produces the following notification. +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.  @@ -356,52 +264,6 @@ The third is the remote *URL*. This JSON sent from GCM: } ``` -Here is an example using fcm-node that sends the above JSON: - -```javascript -var FCM = require('fcm-node'); -// Replace these with your own values. -var apiKey = "replace with API key"; -var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Large Icon', - message: 'Loaded from URL', - image: 'https://dl.dropboxusercontent.com/u/887989/antshot.png' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } -}); -``` - -Produces the following notification. - - - -Finally the Material UI guidelines recommend using a circular icon for the large icon if the subject of the image is a person. This JSON sent from GCM: - -```javascript -{ - "registration_ids": ["my device id"], - "data": { - "title": "Large Circular Icon", - "message": "Loaded from URL", - "image": "https://pbs.twimg.com/profile_images/837060031895896065/VHIQ4oUf_400x400.jpg", - "image-type": "circle" - } -} -``` - Here is an example using node-gcm that sends the above JSON: ```javascript @@ -411,10 +273,9 @@ var apiKey = "replace with API key"; var deviceID = "my device id"; var service = new gcm.Sender(apiKey); var message = new gcm.Message(); -message.addData('title', 'Large Circular Icon'); +message.addData('title', 'Large Icon'); message.addData('message', 'Loaded from URL'); -message.addData('image', 'https://pbs.twimg.com/profile_images/837060031895896065/VHIQ4oUf_400x400.jpg'); -message.addData('image-type', 'circular'); +message.addData('image', 'https://dl.dropboxusercontent.com/u/887989/antshot.png'); service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { if(err) console.error(err); else console.log(response); @@ -423,7 +284,7 @@ service.send(message, { registrationTokens: [ deviceID ] }, function (err, respo Produces the following notification. - + ## Sound @@ -478,31 +339,21 @@ In order for your your notification to play a custom sound you will need to add } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Sound Test', - message: 'Loaded res/raw', - soundname: 'test' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Sound Test'); +message.addData('message', 'Loaded res/raw'); +message.addData('soundname', 'test'); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -524,30 +375,20 @@ If you want to see multiple notifications in the shade you will need to provide } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Test Push', - message: 'Push number 1' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Test Push'); +message.addData('message', 'Push number 1'); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -563,30 +404,20 @@ Followed by: } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Test Push', - message: 'Push number 2' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Test Push'); +message.addData('message', 'Push number 2'); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -603,31 +434,21 @@ You will only see "Push number 2" in the shade. However, if you send: } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Test Push', - message: 'Push number 1', - notId: 1 - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Test Push'); +message.addData('message', 'Push number 1'); +message.addData('notId', 1); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -644,31 +465,21 @@ and: } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Test Push', - message: 'Push number 2', - notId: 2 - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Test Push'); +message.addData('message', 'Push number 2'); +message.addData('notId', 2); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -690,32 +501,22 @@ A better alternative to stacking your notifications is to use the inbox style to } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'My Title', - message: 'My first message', - style: 'inbox', - summaryText: 'There are %n% notifications' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'My Title'); +message.addData('message', 'My first message'); +message.addData('style', 'inbox'); +message.addData('summaryText', 'There are %n% notifications'); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -737,32 +538,22 @@ But, if you follow it up with subsequent notifications like: } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'My Title', - message: 'My second message', - style: 'inbox', - summaryText: 'There are %n% notifications' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'My Title'); +message.addData('message', 'My second message'); +message.addData('style', 'inbox'); +message.addData('summaryText', 'There are %n% notifications'); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -790,34 +581,24 @@ Your notification can include a maximum of three action buttons. If you wish to } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - 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", foreground: true}, - { icon: "snooze", title: "SNOOZE", callback: "app.snooze", foreground: false}, - ] - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'AUX Scrum'); +message.addData('message', 'Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.'); +message.addData('actions', [ + { "icon": "emailGuests", "title": "EMAIL GUESTS", "callback": "app.emailGuests", "foreground": true}, + { "icon": "snooze", "title": "SNOOZE", "callback": "app.snooze", "foreground": false}, +]); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -847,34 +628,24 @@ Your notification can include action buttons. If you wish to include an icon alo } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - 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", "foreground": false, "inline": true}, - { "icon": "snooze", "title": "SNOOZE", "callback": "app.snooze", "foreground": false}, - ] - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'AUX Scrum'); +message.addData('message', 'Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.'); +message.addData('actions', [ + { "icon": "emailGuests", "title": "EMAIL GUESTS", "callback": "app.emailGuests", "foreground": false, "inline": true}, + { "icon": "snooze", "title": "SNOOZE", "callback": "app.snooze", "foreground": false}, +]); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -941,31 +712,21 @@ You can use a Led notifcation and choose the color of it. Just add a `ledColor` } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Green LED', - message: 'This is my message with a Green LED', - ledColor: [0, 0, 255, 0] - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Green LED'); +message.addData('message', 'This is my message with a Green LED'); +message.addData('ledColor', [0, 0, 255, 0]); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -984,31 +745,21 @@ You can set a Vibration Pattern for your notifications. Just add a `vibrationPat } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - 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] - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Vibration Pattern'); +message.addData('message', 'Device should wait for 2 seconds, vibrate for 1 second then be silent for 500 ms then vibrate for 500 ms'); +message.addData('vibrationPattern', [2000, 1000, 500, 500]); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -1027,31 +778,21 @@ You can set a priority parameter for your notifications. This priority value det } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'This is a maximum priority Notification', - message: 'This notification should appear in front of all others', - priority: 2 - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'This is a maximum priority Notification'); +message.addData('message', 'This notification should appear in front of all others'); +message.addData('priority', 2); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -1074,32 +815,23 @@ Perhaps you want to include a large picture in the notification that you are sen } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Big Picture', - message: 'This is my big picture message', - picture: 'http://36.media.tumblr.com/c066cc2238103856c9ac506faa6f3bc2/tumblr_nmstmqtuo81tssmyno1_1280.jpg', - summaryText: 'The internet is built on cat pictures' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Big Picture'); +message.addData('message', 'This is my big picture message'); +message.addData('style', 'picture'); +message.addData('picture', 'http://36.media.tumblr.com/c066cc2238103856c9ac506faa6f3bc2/tumblr_nmstmqtuo81tssmyno1_1280.jpg'); +message.addData('summaryText', 'The internet is built on cat pictures'); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -1127,32 +859,22 @@ First the JSON you send from GCM will need to include `"content-available": "1"` } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - "to": deviceID, - "data": { - "title": 'Test Push', - "message": 'Push number 1', - "info": 'super secret info', - "content-available": '1' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Test Push'); +message.addData('message', 'Push number 1'); +message.addData('info', 'super secret info'); +message.addData('content-available', '1'); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -1169,38 +891,28 @@ or if you want the payload to be delivered directly to your app without anything } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - "to": deviceID, - "data": { - "info": 'super secret info', - "content-available": '1' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('info', 'super secret info'); +message.addData('content-available', '1'); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` If do not want this type of behaviour just omit `"content-available": 1` from your push data and your `on('notification')` event handler will not be called. -### Use of content_available: true +### Use of content-available: true -The [GCM docs](https://developers.google.com/cloud-messaging/http-server-ref#downstream-http-messages-json) will tell you to send a data payload of: +The GCM docs will tell you to send a data payload of: ```javascript { @@ -1214,9 +926,9 @@ The [GCM docs](https://developers.google.com/cloud-messaging/http-server-ref#dow } ``` -Where the `content_available` property is part of the main payload object. Setting the property in this part of the payload will result in the PushPlugin not getting the data correctly. Setting `content_available: true` will cause the Android OS to handle the push payload for you and not pass the data to the PushPlugin. +Where the `content-available` property is part of the main payload object. Setting the property in this part of the payload will result in the PushPlugin not getting the data correctly. Setting `content-available: true` will cause the Android OS to handle the push payload for you and not pass the data to the PushPlugin. -Instead move `content_available: true` into the `data` object of the payload. The property name changes slightly to use a `-` instead of an `_`. So, `content_available` becomes `content-available` and `true` becomes `1` as per the example below: +Instead move `content-available: true` into the `data` object of the payload and set it to `1` as per the example below: ```javascript { @@ -1235,8 +947,7 @@ Instead move `content_available: true` into the `data` object of the payload. Th These phones have a particular quirk that when the app is force closed that you will no longer be able to receive notifications until the app is restarted. In order for you to receive background notifications: - On your Huawei device go to Settings > Protected apps > check "My App" where. -- On your Xiaomi make sure your phone has the "Auto-start" property enabled for your app. -- On your Asus make sure your phone has the "Auto-start" property enabled for your app. +- On your Xiaomi makes sure your phone has the "Auto-start" property enabled for your app. ### Application force closed @@ -1282,50 +993,24 @@ If you add `force-start: 1` to the data payload the application will be restarte } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - "data": { - "title": 'Force Start', - "message": 'This notification should restart the app', - "force-start": '1' - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Force Start'); +message.addData('message', 'This notification should restart the app'); +message.addData('force-start', 1); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` -### Caching - -By default, when a notification arrives and 'content-available' is set to '1', the plugin will try to deliver the data payload even if the app is not running. In that case, the payload is cached and may be delivered when the app is started again. To disable this behavior, you can set a `no-cache` flag in the notification payload. 0: caching enabled (default), 1: caching disabled. - -```javascript -{ - "registration_ids": ["my device id"], - "data": { - "title": "Push without cache", - "message": "When the app is closed, this notification will not be cached", - "content-available": "1", - "no-cache": "1" - } -} -``` - ## Visibility of Notifications You can set a visibility parameter for your notifications. Just add a `visibility` field in your notification. -1: secret, 0: private (default), 1: public. `Secret` shows only the most minimal information, excluding even the notification's icon. `Private` shows basic information about the existence of this notification, including its icon and the name of the app that posted it. The rest of the notification's details are not displayed. `Public` Shows the notification's full content. @@ -1341,31 +1026,21 @@ You can set a visibility parameter for your notifications. Just add a `visibilit } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'This is a public Notification', - message: 'You should be able to read this notification on your lock screen', - visibility: 1 - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'This is a public Notification'); +message.addData('message', 'You should be able to read this notification on your lock screen'); +message.addData('visibility', 1); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -1386,31 +1061,21 @@ In order to set the badge number you will need to include the `badge` property i } ``` -Here is an example using fcm-node that sends the above JSON: +Here is an example using node-gcm that sends the above JSON: ```javascript -var FCM = require('fcm-node'); +var gcm = require('node-gcm'); // Replace these with your own values. var apiKey = "replace with API key"; var deviceID = "my device id"; -var fcm = new FCM(apiKey); - -var message = { - to: deviceID, - data: { - title: 'Badge Test', - message: 'Badges, we don\'t need no stinking badges', - badge: 7 - } -}; - -fcm.send(message, function(err, response){ - if (err) { - console.log(err); - console.log("Something has gone wrong!"); - } else { - console.log("Successfully sent with response: ", response); - } +var service = new gcm.Sender(apiKey); +var message = new gcm.Message(); +message.addData('title', 'Badge Test'); +message.addData('message', 'Badges, we don\'t need no stinking badges'); +message.addData('badge', 7); +service.send(message, { registrationTokens: [ deviceID ] }, function (err, response) { + if(err) console.error(err); + else console.log(response); }); ``` @@ -1448,17 +1113,11 @@ The JSON received by your app will comply with the standards described in the se Note: "sound" and "soundname" are equivalent and are considered to be the same by the plugin. -## Notification ID - -When setting the notification ID or `notId` please make sure that you are not exceeding the [MAX_INT](https://developer.android.com/reference/java/lang/Integer.html#MAX_VALUE) value for Android. Using a value larger than MAX_INT will throw an exception which will be caught by the plugin and it will use a default value of `0`. - -This means you can't use the JavaScript's `Date.getMilliseconds()` or Java's `System.currentTimeMillis()` as they will give you a value greater than MAX_INT. - # iOS Behaviour ## Sound -In order for 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/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/SupportingNotificationsinYourApp.html#//apple_ref/doc/uid/TP40008194-CH4-SW10) for more info on proper file formats and how to convert existing sound files. +In order for 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: diff --git a/StoneIsland/plugins/phonegap-plugin-push/docs/PHONEGAP_BUILD.md b/StoneIsland/plugins/phonegap-plugin-push/docs/PHONEGAP_BUILD.md index 7f460738..8a95d6a1 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/docs/PHONEGAP_BUILD.md +++ b/StoneIsland/plugins/phonegap-plugin-push/docs/PHONEGAP_BUILD.md @@ -4,20 +4,19 @@ - [Including the plugin](#including-the-plugin) - [Adding Resources](#adding-resources) - [IntelXDK Support](#intelxdk-support) -- [Ionic Cloud Build](#ionic-cloud-build) ## PhoneGap Build Support -> PhoneGap Build now support version 1.9.0 of the plugin. +> Currently PhoneGap Build does not support version 1.9.0 of the plugin. Updates are being made to PGB to support the latest release. ### Including the plugin -Including this plugin in a project that is built by PhoneGap Build is as easy as adding (replacing `123456789` with your own, that is): +Including this plugin in a project that is built by PhoneGap Build is as easy as adding: ```xml <preference name="android-build-tool" value="gradle" /> <plugin name="phonegap-plugin-push" source="npm"> - <param name="SENDER_ID" value="123456789" /> + <param name="SENDER_ID" value="<Your Sender ID>" /> </plugin> ``` @@ -92,25 +91,3 @@ f. you probably need to install the required gem (`gem install pushmeup`) g. send the notification (`ruby pushAPNS.rb`) 10. See notification on device! - -## Ionic Cloud Build - -Users have reported issues with Ionic Cloud Build. Apparently there are some differences in the way variables are handled. If your app has an issue where the `PushNotification` object can't be found try the following. - -1. Remove the inclusion of `phonegap-plugin-push` from config.xml. That is delete lines that look like this: - -``` -<plugin name="phonegap-plugin-push" spec="~1.9.1"> - <variable name="SENDER_ID" value="xxx"/> -</plugin> -``` -2. Add the following lines into `package.json` in the `cordovaPlugins` array. - -``` -{ - "variables": { - "SENDER_ID": "xxx" - }, - "locator": "phonegap-plugin-push" -} -``` diff --git a/StoneIsland/plugins/phonegap-plugin-push/docs/TYPESCRIPT.md b/StoneIsland/plugins/phonegap-plugin-push/docs/TYPESCRIPT.md index 53d215b3..37117d16 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/docs/TYPESCRIPT.md +++ b/StoneIsland/plugins/phonegap-plugin-push/docs/TYPESCRIPT.md @@ -1,7 +1,7 @@ # Typescript definition file For those of you who use typescript, we're glad to say that we have the complete definition file available at [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped). -Search for `phonegap-plugin-push` there, or simply grab it directly [here](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/phonegap-plugin-push/index.d.ts). +Search for `phonegap-plugin-push` there, or simply grab it directly [here](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/phonegap-plugin-push/phonegap-plugin-push.d.ts). ## Example usage @@ -11,6 +11,7 @@ All available attributes and properties will have autocomplete support and type ```typescript let push = PushNotification.init({ android: { + senderID: "12345679" }, ios: { alert: "true", @@ -68,4 +69,4 @@ push.on('notification', (data: my.custom.NotificationEventResponse) => { ## Outdated definitions Is our definition file at DefinitelyTyped outdated? Is there any improvements that could be done? -We welcome any contribution, and they should be done through issues created [there](https://github.com/DefinitelyTyped/DefinitelyTyped/issues/new). +We welcome any contribution, and they should be done through issues created [there](https://github.com/DefinitelyTyped/DefinitelyTyped/issues/new).
\ No newline at end of file diff --git a/StoneIsland/plugins/phonegap-plugin-push/hooks/windows/setToastCapable.js b/StoneIsland/plugins/phonegap-plugin-push/hooks/windows/setToastCapable.js index 5b784582..b8cbcbc0 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/hooks/windows/setToastCapable.js +++ b/StoneIsland/plugins/phonegap-plugin-push/hooks/windows/setToastCapable.js @@ -1,13 +1,7 @@ module.exports = function(context) { - console.log('Updating appxmanifests with ToastCapable=true ...'); + console.log('Updating appxmanifests with ToastCapable=true...'); var path = require('path'); - var fs = require('fs'); - var platformProjPath = path.join(context.opts.projectRoot, 'platforms/windows'); - if (!fs.existsSync(platformProjPath)) { - platformProjPath = context.opts.projectRoot; - } - var AppxManifest = require(path.join(platformProjPath, 'cordova/lib/AppxManifest')); ['package.phone.appxmanifest', 'package.windows.appxmanifest'].forEach(function(manifestPath) { diff --git a/StoneIsland/plugins/phonegap-plugin-push/package.json b/StoneIsland/plugins/phonegap-plugin-push/package.json index 14f757b2..01287217 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/package.json +++ b/StoneIsland/plugins/phonegap-plugin-push/package.json @@ -1,28 +1,28 @@ { - "_from": "phonegap-plugin-push@2.0.0", - "_id": "phonegap-plugin-push@2.0.0", + "_from": "phonegap-plugin-push@1.9.2", + "_id": "phonegap-plugin-push@1.9.2", "_inBundle": false, - "_integrity": "sha1-FhKJtP3r0LUqTVoQUg0VYIPuz3M=", + "_integrity": "sha1-3PktbNuZLcs3iUCyIbfwjoKcn8E=", "_location": "/phonegap-plugin-push", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "phonegap-plugin-push@2.0.0", + "raw": "phonegap-plugin-push@1.9.2", "name": "phonegap-plugin-push", "escapedName": "phonegap-plugin-push", - "rawSpec": "2.0.0", + "rawSpec": "1.9.2", "saveSpec": null, - "fetchSpec": "2.0.0" + "fetchSpec": "1.9.2" }, "_requiredBy": [ "#USER", "/" ], - "_resolved": "https://registry.npmjs.org/phonegap-plugin-push/-/phonegap-plugin-push-2.0.0.tgz", - "_shasum": "161289b4fdebd0b52a4d5a10520d156083eecf73", - "_spec": "phonegap-plugin-push@2.0.0", - "_where": "/Users/user/Sites/stone-island/StoneIsland/node_modules", + "_resolved": "https://registry.npmjs.org/phonegap-plugin-push/-/phonegap-plugin-push-1.9.2.tgz", + "_shasum": "dcf92d6cdb992dcb378940b221b7f08e829c9fc1", + "_spec": "phonegap-plugin-push@1.9.2", + "_where": "/Users/user/Sites/stone-island/StoneIsland", "author": { "name": "Adobe PhoneGap Team" }, @@ -39,25 +39,11 @@ "browser" ] }, - "dependencies": { - "babel-plugin-add-header-comment": "^1.0.3", - "install": "^0.8.2" - }, "deprecated": false, "description": "Register and receive push notifications.", "devDependencies": { - "babel-cli": "^6.10.1", - "babel-core": "^6.10.4", - "babel-eslint": "^6.1.0", - "babel-preset-es2015": "^6.9.0", - "eslint": "^2.13.1", - "eslint-config-airbnb": "^9.0.1", - "eslint-plugin-import": "^1.9.2", - "eslint-plugin-jsx-a11y": "^1.5.3", - "eslint-plugin-react": "^5.2.2", "jasmine-node": "1.14.5", - "nodemon": "^1.9.2", - "pluginpub": "^0.0.8" + "pluginpub": "^0.0.5" }, "engines": { "cordovaDependencies": { @@ -66,15 +52,13 @@ "cordova-android": ">=4.0.0", "cordova-ios": ">=4.1.0" }, - "2.0.0": { - "cordova": ">=7.0.0", - "cordova-android": ">=6.2.1", - "cordova-ios": ">=4.4.0" - }, - "<2.0.0": { + "1.9.0": { "cordova": ">=6.4.0", "cordova-android": ">=6.0.0", "cordova-ios": ">=4.3.0" + }, + "2.0.0": { + "cordova": ">100" } } }, @@ -89,18 +73,14 @@ "cordova-wp8", "cordova-browser" ], - "license": "MIT", + "license": "APL", "name": "phonegap-plugin-push", "repository": { "type": "git", "url": "git://github.com/phonegap/phonegap-plugin-push.git" }, "scripts": { - "build": "babel src/js --out-dir www", - "build:watch": "nodemon -w ./src/js -e js -x npm run build", - "jasmine": "jasmine-node --color spec", - "test": "npm run build && npm run jasmine" + "test": "jasmine-node --color spec" }, - "types": "./types/index.d.ts", - "version": "2.0.0" + "version": "1.9.2" } diff --git a/StoneIsland/plugins/phonegap-plugin-push/plugin.xml b/StoneIsland/plugins/phonegap-plugin-push/plugin.xml index 2c507e4d..bf9c659a 100755 --- a/StoneIsland/plugins/phonegap-plugin-push/plugin.xml +++ b/StoneIsland/plugins/phonegap-plugin-push/plugin.xml @@ -1,60 +1,75 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<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="2.0.0"> +<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.9.2"> <name>PushPlugin</name> <description> - This plugin allows your application to receive push notifications on Android, iOS and Windows devices. - Android uses Firebase Cloud Messaging. + This plugin allows your application to receive push notifications on Android, iOS and Windows devices. + Android uses Google Cloud Messaging. iOS uses Apple APNS Notifications. Windows uses Microsoft WNS Notifications. - </description> + </description> <license>MIT</license> <js-module src="www/push.js" name="PushNotification"> <clobbers target="PushNotification"/> </js-module> <engines> - <engine name="cordova" version=">=7.0.0"/> - <engine name="cordova-android" version=">=6.2.1"/> - <engine name="cordova-ios" version=">=4.4.0"/> + <engine name="cordova" version=">=6.4.0"/> + <engine name="cordova-android" version=">=6.0.0"/> + <engine name="cordova-ios" version=">=4.3.0"/> </engines> + <preference name="SENDER_ID" default="85075801930"/> <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="res/values/strings.xml" parent="/resources"> + <string name="google_app_id">$SENDER_ID</string> + </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"/> + <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/> + <uses-permission android:name="${applicationId}.permission.PushHandlerActivity"/> + <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature"/> + <permission android:name="${applicationId}.permission.PushHandlerActivity" android:protectionLevel="signature"/> </config-file> <config-file target="AndroidManifest.xml" parent="/manifest/application"> <activity android:name="com.adobe.phonegap.push.PushHandlerActivity" android:exported="true" android:permission="${applicationId}.permission.PushHandlerActivity"/> <receiver android:name="com.adobe.phonegap.push.BackgroundActionButtonHandler"/> - <receiver android:name="com.adobe.phonegap.push.PushDismissedHandler"/> - <service android:name="com.adobe.phonegap.push.FCMService"> + <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="${applicationId}"/> + </intent-filter> + </receiver> + <service android:name="com.adobe.phonegap.push.GCMIntentService" android:exported="false"> <intent-filter> - <action android:name="com.google.firebase.MESSAGING_EVENT"/> + <action android:name="com.google.android.c2dm.intent.RECEIVE"/> </intent-filter> </service> - <service android:name="com.adobe.phonegap.push.PushInstanceIDListenerService"> + <service android:name="com.adobe.phonegap.push.PushInstanceIDListenerService" android:exported="false"> <intent-filter> - <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> + <action android:name="com.google.android.gms.iid.InstanceID"/> </intent-filter> </service> + <service android:name="com.adobe.phonegap.push.RegistrationIntentService" android:exported="false"/> </config-file> - <framework src="com.android.support:support-v13:25.1.0"/> - <framework src="me.leolin:ShortcutBadger:1.1.17@aar"/> - <framework src="com.google.firebase:firebase-messaging:11.0.1"/> <framework src="push.gradle" custom="true" type="gradleReference"/> - <source-file src="src/android/com/adobe/phonegap/push/FCMService.java" target-dir="src/com/adobe/phonegap/push/"/> + <framework src="com.android.support:support-v13:23+"/> + <framework src="com.google.android.gms:play-services-gcm:9.8+"/> + <framework src="me.leolin:ShortcutBadger:1.1.11@aar"/> + <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/"/> <source-file src="src/android/com/adobe/phonegap/push/PermissionUtils.java" target-dir="src/com/adobe/phonegap/push/"/> <source-file src="src/android/com/adobe/phonegap/push/BackgroundActionButtonHandler.java" target-dir="src/com/adobe/phonegap/push/"/> - <source-file src="src/android/com/adobe/phonegap/push/PushDismissedHandler.java" target-dir="src/com/adobe/phonegap/push/"/> </platform> <platform name="browser"> <js-module src="www/browser/push.js" name="BrowserPush"> @@ -74,6 +89,12 @@ <string>remote-notification</string> </array> </config-file> + <config-file target="*-Info.plist" parent="GCM_SENDER_ID"> + <string>$SENDER_ID</string> + </config-file> + <config-file target="*-Info.plist" parent="IS_GCM_ENABLED"> + <true/> + </config-file> <config-file target="*-Debug.plist" parent="aps-environment"> <string>development</string> </config-file> @@ -84,12 +105,16 @@ <source-file src="src/ios/PushPlugin.m"/> <header-file src="src/ios/AppDelegate+notification.h"/> <header-file src="src/ios/PushPlugin.h"/> - <framework src="FirebaseMessaging" type="podspec" spec="~> 2.0.0"/> + <framework src="AddressBook.framework"/> + <framework src="libsqlite3.tbd"/> + <framework src="libz.tbd"/> + <framework src="GoogleCloudMessaging" type="podspec" spec="~> 1.2.0"/> + <framework src="GGLInstanceID" type="podspec" spec="~> 1.2.1"/> </platform> <platform name="windows"> <hook type="after_plugin_install" src="hooks/windows/setToastCapable.js"/> <js-module src="src/windows/PushPluginProxy.js" name="PushPlugin"> - <runs/> + <merges target=""/> </js-module> <config-file target="config.xml" parent="/*"> <preference name="WindowsToastCapable" value="true"/> diff --git a/StoneIsland/plugins/phonegap-plugin-push/push.gradle b/StoneIsland/plugins/phonegap-plugin-push/push.gradle index 1506191b..11e735ae 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/push.gradle +++ b/StoneIsland/plugins/phonegap-plugin-push/push.gradle @@ -16,24 +16,6 @@ android { } defaultConfig { - multiDexEnabled true applicationId = doExtractStringFromManifest("package") } } - -buildscript { - repositories { - jcenter() - mavenLocal() - } - dependencies { - classpath 'com.android.tools.build:gradle:+' - classpath 'com.google.gms:google-services:3.0.0' - } -} - -// apply plugin: 'com.google.gms.google-services' -// class must be used instead of id(string) to be able to apply plugin from non-root gradle file -ext.postBuildExtras = { - apply plugin: com.google.gms.googleservices.GoogleServicesPlugin -} diff --git a/StoneIsland/plugins/phonegap-plugin-push/spec/index.spec.js b/StoneIsland/plugins/phonegap-plugin-push/spec/index.spec.js index e41accd2..8e1c2665 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/spec/index.spec.js +++ b/StoneIsland/plugins/phonegap-plugin-push/spec/index.spec.js @@ -193,7 +193,7 @@ describe('phonegap-plugin-push', function () { push.off('notification', eventHandler); - expect(push.handlers.notification.indexOf(eventHandler)).toEqual(-1); + expect(push._handlers.notification.indexOf(eventHandler)).toEqual(-1); done(); }); }); @@ -208,7 +208,7 @@ describe('phonegap-plugin-push', function () { push.off('registration', eventHandler); - expect(push.handlers.registration.indexOf(eventHandler)).toEqual(-1); + expect(push._handlers.registration.indexOf(eventHandler)).toEqual(-1); done(); }); }); @@ -222,7 +222,7 @@ describe('phonegap-plugin-push', function () { push.on('error', eventHandler); push.off('error', eventHandler); - expect(push.handlers.error.indexOf(eventHandler)).toEqual(-1); + expect(push._handlers.error.indexOf(eventHandler)).toEqual(-1); done(); }); }); @@ -233,19 +233,19 @@ describe('phonegap-plugin-push', function () { eventHandler = function () { }; - expect(push.handlers.registration.length).toEqual(0); + expect(push._handlers.registration.length).toEqual(0); push.on('registration',eventHandler); - expect(push.handlers.registration.length).toEqual(1); - expect(push.handlers.registration.indexOf(eventHandler)).toBeGreaterThan(-1); + expect(push._handlers.registration.length).toEqual(1); + expect(push._handlers.registration.indexOf(eventHandler)).toBeGreaterThan(-1); execSpy.andCallFake(function (win, fail, service, id, args) { win(); }); push.unregister(function() { - expect(push.handlers.registration.length).toEqual(0); - expect(push.handlers.registration.indexOf(eventHandler)).toEqual(-1); + expect(push._handlers.registration.length).toEqual(0); + expect(push._handlers.registration.indexOf(eventHandler)).toEqual(-1); done(); }); }); @@ -255,19 +255,19 @@ describe('phonegap-plugin-push', function () { eventHandler = function () { }; - expect(push.handlers.notification.length).toEqual(0); + expect(push._handlers.notification.length).toEqual(0); push.on('notification', eventHandler); - expect(push.handlers.notification.length).toEqual(1); - expect(push.handlers.notification.indexOf(eventHandler)).toBeGreaterThan(-1); + expect(push._handlers.notification.length).toEqual(1); + expect(push._handlers.notification.indexOf(eventHandler)).toBeGreaterThan(-1); execSpy.andCallFake(function (win, fail, service, id, args) { win(); }); push.unregister(function() { - expect(push.handlers.notification.length).toEqual(0); - expect(push.handlers.notification.indexOf(eventHandler)).toEqual(-1); + expect(push._handlers.notification.length).toEqual(0); + expect(push._handlers.notification.indexOf(eventHandler)).toEqual(-1); done(); }); }); @@ -277,19 +277,19 @@ describe('phonegap-plugin-push', function () { eventHandler = function () { }; - expect(push.handlers.error.length).toEqual(0); + expect(push._handlers.error.length).toEqual(0); push.on('error', eventHandler); - expect(push.handlers.error.length).toEqual(1); - expect(push.handlers.error.indexOf(eventHandler)).toBeGreaterThan(-1); + expect(push._handlers.error.length).toEqual(1); + expect(push._handlers.error.indexOf(eventHandler)).toBeGreaterThan(-1); execSpy.andCallFake(function (win, fail, service, id, args) { win(); }); push.unregister(function() { - expect(push.handlers.error.length).toEqual(0); - expect(push.handlers.error.indexOf(eventHandler)).toEqual(-1); + expect(push._handlers.error.length).toEqual(0); + expect(push._handlers.error.indexOf(eventHandler)).toEqual(-1); done(); }); }); @@ -301,21 +301,21 @@ describe('phonegap-plugin-push', function () { eventHandler = function () { }; - expect(push.handlers.registration.length).toEqual(0); + expect(push._handlers.registration.length).toEqual(0); push.on('registration',eventHandler); - expect(push.handlers.registration.length).toEqual(1); - expect(push.handlers.registration.indexOf(eventHandler)).toBeGreaterThan(-1); + expect(push._handlers.registration.length).toEqual(1); + expect(push._handlers.registration.indexOf(eventHandler)).toBeGreaterThan(-1); execSpy.andCallFake(function (win, fail, service, id, args) { win(); }); push.unregister(function() { - expect(push.handlers.registration.length).toEqual(1); - expect(push.handlers.registration.indexOf(eventHandler)).toBeGreaterThan(-1); + expect(push._handlers.registration.length).toEqual(1); + expect(push._handlers.registration.indexOf(eventHandler)).toBeGreaterThan(-1); done(); - }, function() {}, ['foo', 'bar']); + }, null, ['foo', 'bar']); }); it('should not clear "notification" event handlers', function (done) { @@ -323,21 +323,21 @@ describe('phonegap-plugin-push', function () { eventHandler = function () { }; - expect(push.handlers.notification.length).toEqual(0); + expect(push._handlers.notification.length).toEqual(0); push.on('notification', eventHandler); - expect(push.handlers.notification.length).toEqual(1); - expect(push.handlers.notification.indexOf(eventHandler)).toBeGreaterThan(-1); + expect(push._handlers.notification.length).toEqual(1); + expect(push._handlers.notification.indexOf(eventHandler)).toBeGreaterThan(-1); execSpy.andCallFake(function (win, fail, service, id, args) { win(); }); push.unregister(function() { - expect(push.handlers.notification.length).toEqual(1); - expect(push.handlers.notification.indexOf(eventHandler)).toBeGreaterThan(-1); + expect(push._handlers.notification.length).toEqual(1); + expect(push._handlers.notification.indexOf(eventHandler)).toBeGreaterThan(-1); done(); - }, function() {}, ['foo', 'bar']); + }, null, ['foo', 'bar']); }); it('should not clear "error" event handlers', function (done) { @@ -345,21 +345,21 @@ describe('phonegap-plugin-push', function () { eventHandler = function () { }; - expect(push.handlers.error.length).toEqual(0); + expect(push._handlers.error.length).toEqual(0); push.on('error', eventHandler); - expect(push.handlers.error.length).toEqual(1); - expect(push.handlers.error.indexOf(eventHandler)).toBeGreaterThan(-1); + expect(push._handlers.error.length).toEqual(1); + expect(push._handlers.error.indexOf(eventHandler)).toBeGreaterThan(-1); execSpy.andCallFake(function (win, fail, service, id, args) { win(); }); push.unregister(function() { - expect(push.handlers.error.length).toEqual(1); - expect(push.handlers.error.indexOf(eventHandler)).toBeGreaterThan(-1); + expect(push._handlers.error.length).toEqual(1); + expect(push._handlers.error.indexOf(eventHandler)).toBeGreaterThan(-1); done(); - }, function() {}, ['foo', 'bar']); + }, null, ['foo', 'bar']); }); }); diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/BackgroundActionButtonHandler.java b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/BackgroundActionButtonHandler.java index 4456f525..3ccea6cb 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/BackgroundActionButtonHandler.java +++ b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/BackgroundActionButtonHandler.java @@ -9,7 +9,7 @@ import android.util.Log; import android.support.v4.app.RemoteInput; public class BackgroundActionButtonHandler extends BroadcastReceiver implements PushConstants { - private static String LOG_TAG = "Push_BGActionButton"; + private static String LOG_TAG = "PushPlugin_BackgroundActionButtonHandler"; @Override public void onReceive(Context context, Intent intent) { @@ -19,7 +19,7 @@ public class BackgroundActionButtonHandler extends BroadcastReceiver implements int notId = intent.getIntExtra(NOT_ID, 0); Log.d(LOG_TAG, "not id = " + notId); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancel(FCMService.getAppName(context), notId); + notificationManager.cancel(GCMIntentService.getAppName(context), notId); if (extras != null) { Bundle originalExtras = extras.getBundle(PUSH_BUNDLE); diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/FCMService.java b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/GCMIntentService.java index af328fb2..e1a2b75c 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/FCMService.java +++ b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/GCMIntentService.java @@ -13,23 +13,17 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.Paint; -import android.graphics.Canvas; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.NotificationCompat; +import android.support.v4.app.NotificationManagerCompat; import android.support.v4.app.NotificationCompat.WearableExtender; import android.support.v4.app.RemoteInput; import android.text.Html; import android.text.Spanned; import android.util.Log; -import com.google.firebase.messaging.FirebaseMessagingService; -import com.google.firebase.messaging.RemoteMessage; +import com.google.android.gms.gcm.GcmListenerService; import org.json.JSONArray; import org.json.JSONException; @@ -42,13 +36,12 @@ import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; -import java.util.Map; import java.util.Random; @SuppressLint("NewApi") -public class FCMService extends FirebaseMessagingService implements PushConstants { +public class GCMIntentService extends GcmListenerService implements PushConstants { - private static final String LOG_TAG = "Push_FCMService"; + 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){ @@ -66,31 +59,17 @@ public class FCMService extends FirebaseMessagingService implements PushConstant } @Override - public void onMessageReceived(RemoteMessage message){ - - String from = message.getFrom(); + public void onMessageReceived(String from, Bundle extras) { Log.d(LOG_TAG, "onMessage - from: " + from); - Bundle extras = new Bundle(); - - if (message.getNotification()!=null) { - extras.putString(TITLE,message.getNotification().getTitle()); - extras.putString(MESSAGE,message.getNotification().getBody()); - } - for (Map.Entry<String, String> entry : message.getData().entrySet()) { - extras.putString(entry.getKey(), entry.getValue()); - } - - if (extras != null && isAvailableSender(from)) { + if (extras != null) { Context applicationContext = getApplicationContext(); SharedPreferences prefs = applicationContext.getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); boolean forceShow = prefs.getBoolean(FORCE_SHOW, false); boolean clearBadge = prefs.getBoolean(CLEAR_BADGE, false); - String messageKey = prefs.getString(MESSAGE_KEY, MESSAGE); - String titleKey = prefs.getString(TITLE_KEY, TITLE); - extras = normalizeExtras(applicationContext, extras, messageKey, titleKey); + extras = normalizeExtras(applicationContext, extras); if (clearBadge) { PushPlugin.setApplicationIconBadgeNumber(getApplicationContext(), 0); @@ -188,10 +167,10 @@ public class FCMService extends FirebaseMessagingService implements PushConstant /* * Replace alternate keys with our canonical value */ - private String normalizeKey(String key, String messageKey, String titleKey) { - if (key.equals(BODY) || key.equals(ALERT) || key.equals(MP_MESSAGE) || key.equals(GCM_NOTIFICATION_BODY) || key.equals(TWILIO_BODY) || key.equals(messageKey)) { + private String normalizeKey(String key) { + if (key.equals(BODY) || key.equals(ALERT) || key.equals(GCM_NOTIFICATION_BODY) || key.equals(TWILIO_BODY)) { return MESSAGE; - } else if (key.equals(TWILIO_TITLE) || key.equals(SUBJECT) || key.equals(titleKey)) { + } else if (key.equals(TWILIO_TITLE)) { return TITLE; }else if (key.equals(MSGCNT) || key.equals(BADGE)) { return COUNT; @@ -212,7 +191,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant /* * Parse bundle into normalized keys. */ - private Bundle normalizeExtras(Context context, Bundle extras, String messageKey, String titleKey) { + private Bundle normalizeExtras(Context context, Bundle extras) { Log.d(LOG_TAG, "normalize extras"); Iterator<String> it = extras.keySet().iterator(); Bundle newExtras = new Bundle(); @@ -224,7 +203,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant // 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) || key.equals(messageKey)) { + 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("{") ) { @@ -232,8 +211,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant 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) || - data.has(messageKey) || data.has(titleKey) ) { + 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(); @@ -241,7 +219,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant Log.d(LOG_TAG, "key = data/" + jsonKey); String value = data.getString(jsonKey); - jsonKey = normalizeKey(jsonKey, messageKey, titleKey); + jsonKey = normalizeKey(jsonKey); value = localizeKey(context, jsonKey, value); newExtras.putString(jsonKey, value); @@ -250,10 +228,6 @@ public class FCMService extends FirebaseMessagingService implements PushConstant } catch( JSONException e) { Log.e(LOG_TAG, "normalizeExtras: JSON exception"); } - } else { - String newKey = normalizeKey(key, messageKey, titleKey); - Log.d(LOG_TAG, "replace key " + key + " with " + newKey); - replaceKey(context, key, newKey, extras, newExtras); } } else if (key.equals(("notification"))) { Bundle value = extras.getBundle(key); @@ -262,7 +236,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant String notifkey = iterator.next(); Log.d(LOG_TAG, "notifkey = " + notifkey); - String newKey = normalizeKey(notifkey, messageKey, titleKey); + String newKey = normalizeKey(notifkey); Log.d(LOG_TAG, "replace key " + notifkey + " with " + newKey); String valueData = value.getString(notifkey); @@ -271,17 +245,12 @@ public class FCMService extends FirebaseMessagingService implements PushConstant newExtras.putString(newKey, valueData); } continue; - // In case we weren't working on the payload data node or the notification node, - // normalize the key. - // This allows to have "message" as the payload data key without colliding - // with the other "message" key (holding the body of the payload) - // See issue #1663 - } else { - String newKey = normalizeKey(key, messageKey, titleKey); - Log.d(LOG_TAG, "replace key " + key + " with " + newKey); - replaceKey(context, key, newKey, extras, newExtras); } + String newKey = normalizeKey(key); + Log.d(LOG_TAG, "replace key " + key + " with " + newKey); + replaceKey(context, key, newKey, extras, newExtras); + } // while return newExtras; @@ -332,15 +301,15 @@ public class FCMService extends FirebaseMessagingService implements PushConstant createNotification(context, extras); } - if(!PushPlugin.isActive() && "1".equals(forceStart)){ + if(!PushPlugin.isActive() && "1".equals(forceStart)){ Log.d(LOG_TAG, "app is not running but we should start it and put in background"); - Intent intent = new Intent(this, PushHandlerActivity.class); + Intent intent = new Intent(this, PushHandlerActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(PUSH_BUNDLE, extras); - intent.putExtra(START_IN_BACKGROUND, true); + intent.putExtra(START_IN_BACKGROUND, true); intent.putExtra(FOREGROUND, false); startActivity(intent); - } else if ("1".equals(contentAvailable)) { + } else if ("1".equals(contentAvailable)) { Log.d(LOG_TAG, "app is not running and content available true"); Log.d(LOG_TAG, "send notification event"); PushPlugin.sendExtras(extras); @@ -362,22 +331,12 @@ public class FCMService extends FirebaseMessagingService implements PushConstant int requestCode = new Random().nextInt(); PendingIntent contentIntent = PendingIntent.getActivity(this, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); - Intent dismissedNotificationIntent = new Intent(this, PushDismissedHandler.class); - dismissedNotificationIntent.putExtra(PUSH_BUNDLE, extras); - dismissedNotificationIntent.putExtra(NOT_ID, notId); - dismissedNotificationIntent.putExtra(DISMISSED, true); - dismissedNotificationIntent.setAction(PUSH_DISMISSED); - - requestCode = new Random().nextInt(); - PendingIntent deleteIntent = PendingIntent.getBroadcast(this, requestCode, dismissedNotificationIntent, PendingIntent.FLAG_CANCEL_CURRENT); - NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setWhen(System.currentTimeMillis()) .setContentTitle(fromHtml(extras.getString(TITLE))) .setTicker(fromHtml(extras.getString(TITLE))) .setContentIntent(contentIntent) - .setDeleteIntent(deleteIntent) .setAutoCancel(true); SharedPreferences prefs = context.getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); @@ -731,46 +690,11 @@ public class FCMService extends FirebaseMessagingService implements PushConstant } } - private Bitmap getCircleBitmap(Bitmap bitmap) { - if (bitmap == null) { - return null; - } - - final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); - final Canvas canvas = new Canvas(output); - final int color = Color.RED; - final Paint paint = new Paint(); - final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); - final RectF rectF = new RectF(rect); - - paint.setAntiAlias(true); - canvas.drawARGB(0, 0, 0, 0); - paint.setColor(color); - float cx = bitmap.getWidth()/2; - float cy = bitmap.getHeight()/2; - float radius = cx < cy ? cx : cy; - canvas.drawCircle(cx,cy,radius,paint); - - paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); - canvas.drawBitmap(bitmap, rect, rect, paint); - - bitmap.recycle(); - - return output; - } - private void setNotificationLargeIcon(Bundle extras, String packageName, Resources resources, NotificationCompat.Builder mBuilder) { String gcmLargeIcon = extras.getString(IMAGE); // from gcm - String imageType = extras.getString(IMAGE_TYPE, IMAGE_TYPE_SQUARE); if (gcmLargeIcon != null && !"".equals(gcmLargeIcon)) { if (gcmLargeIcon.startsWith("http://") || gcmLargeIcon.startsWith("https://")) { - Bitmap bitmap = getBitmapFromURL(gcmLargeIcon); - if (IMAGE_TYPE_SQUARE.equalsIgnoreCase(imageType)) { - mBuilder.setLargeIcon(bitmap); - } else { - Bitmap bm = getCircleBitmap(bitmap); - mBuilder.setLargeIcon(bm); - } + mBuilder.setLargeIcon(getBitmapFromURL(gcmLargeIcon)); Log.d(LOG_TAG, "using remote large-icon from gcm"); } else { AssetManager assetManager = getAssets(); @@ -778,12 +702,7 @@ public class FCMService extends FirebaseMessagingService implements PushConstant try { istr = assetManager.open(gcmLargeIcon); Bitmap bitmap = BitmapFactory.decodeStream(istr); - if (IMAGE_TYPE_SQUARE.equalsIgnoreCase(imageType)) { - mBuilder.setLargeIcon(bitmap); - } else { - Bitmap bm = getCircleBitmap(bitmap); - mBuilder.setLargeIcon(bm); - } + mBuilder.setLargeIcon(bitmap); Log.d(LOG_TAG, "using assets large-icon from gcm"); } catch (IOException e) { int largeIconId = 0; @@ -843,7 +762,6 @@ public class FCMService extends FirebaseMessagingService implements PushConstant try { URL url = new URL(strURL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setConnectTimeout(15000); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); @@ -881,11 +799,4 @@ public class FCMService extends FirebaseMessagingService implements PushConstant else return null; } - - private boolean isAvailableSender(String from) { - SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); - String savedSenderID = sharedPref.getString(SENDER_ID, ""); - - return from.equals(savedSenderID) || from.startsWith("/topics/"); - } } diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PermissionUtils.java b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PermissionUtils.java index 41bc6a6f..6aa5c9bf 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PermissionUtils.java +++ b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PermissionUtils.java @@ -10,12 +10,8 @@ import java.lang.reflect.Method; public class PermissionUtils { private static final String CHECK_OP_NO_THROW = "checkOpNoThrow"; - private static final int MIN_API_LEVEL = 19; // required by AppOpsManager public static boolean hasPermission(Context appContext, String appOpsServiceId) throws UnknownError { - if (android.os.Build.VERSION.SDK_INT < MIN_API_LEVEL) { - return true; - } ApplicationInfo appInfo = appContext.getApplicationInfo(); 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 index e3aa217c..37874e04 100644 --- 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 @@ -3,7 +3,6 @@ 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 REGISTRATION_TYPE = "registrationType"; public static final String FOREGROUND = "foreground"; public static final String TITLE = "title"; public static final String NOT_ID = "notId"; @@ -56,11 +55,10 @@ public interface PushConstants { 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 FCM = "FCM"; + public static final String GCM = "GCM"; public static final String CONTENT_AVAILABLE = "content-available"; public static final String TOPICS = "topics"; public static final String SET_APPLICATION_ICON_BADGE_NUMBER = "setApplicationIconBadgeNumber"; - public static final String GET_APPLICATION_ICON_BADGE_NUMBER = "getApplicationIconBadgeNumber"; public static final String CLEAR_ALL_NOTIFICATIONS = "clearAllNotifications"; public static final String VISIBILITY = "visibility"; public static final String INLINE_REPLY = "inlineReply"; @@ -69,18 +67,6 @@ public interface PushConstants { public static final String TWILIO_BODY = "twi_body"; public static final String TWILIO_TITLE = "twi_title"; public static final String TWILIO_SOUND = "twi_sound"; - public static final String MP_MESSAGE = "mp_message"; public static final String START_IN_BACKGROUND = "cdvStartInBackground"; public static final String FORCE_START = "force-start"; - public static final String MESSAGE_KEY = "messageKey"; - public static final String TITLE_KEY = "titleKey"; - public static final String NO_CACHE = "no-cache"; - public static final String DISMISSED = "dismissed"; - public static final String IMAGE_TYPE = "image-type"; - public static final String IMAGE_TYPE_SQUARE = "square"; - public static final String IMAGE_TYPE_CIRCLE = "circle"; - public static final String SUBJECT = "subject"; - public static final String GOOGLE_APP_ID = "google_app_id"; - public static final String GCM_DEFAULT_SENDER_ID = "gcm_defaultSenderId"; - public static final String PUSH_DISMISSED = "push_dismissed"; } diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushDismissedHandler.java b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushDismissedHandler.java deleted file mode 100644 index a517bc1e..00000000 --- a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushDismissedHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.adobe.phonegap.push; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; - -public class PushDismissedHandler extends BroadcastReceiver implements PushConstants { - private static String LOG_TAG = "Push_DismissedHandler"; - - @Override - public void onReceive(Context context, Intent intent) { - Bundle extras = intent.getExtras(); - FCMService fcm = new FCMService(); - String action = intent.getAction(); - int notID = intent.getIntExtra(NOT_ID, 0); - - if (action.equals(PUSH_DISMISSED)) { - Log.d(LOG_TAG, "PushDismissedHandler = " + extras); - Log.d(LOG_TAG, "not id = " + notID); - - fcm.setNotification(notID, ""); - } - } -} 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 index 0d399a61..23682ac8 100644 --- 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 @@ -11,7 +11,7 @@ import android.support.v4.app.RemoteInput; public class PushHandlerActivity extends Activity implements PushConstants { - private static String LOG_TAG = "Push_HandlerActivity"; + private static String LOG_TAG = "PushPlugin_PushHandlerActivity"; /* * this activity will be started if the user touches a notification that we own. @@ -21,7 +21,7 @@ public class PushHandlerActivity extends Activity implements PushConstants { */ @Override public void onCreate(Bundle savedInstanceState) { - FCMService gcm = new FCMService(); + GCMIntentService gcm = new GCMIntentService(); Intent intent = getIntent(); @@ -34,18 +34,16 @@ public class PushHandlerActivity extends Activity implements PushConstants { Log.d(LOG_TAG, "callback = " + callback); boolean foreground = getIntent().getExtras().getBoolean("foreground", true); boolean startOnBackground = getIntent().getExtras().getBoolean(START_IN_BACKGROUND, false); - boolean dismissed = getIntent().getExtras().getBoolean(DISMISSED, false); - Log.d(LOG_TAG, "dismissed = " + dismissed); if(!startOnBackground){ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancel(FCMService.getAppName(this), notId); + notificationManager.cancel(GCMIntentService.getAppName(this), notId); } boolean isPushPluginActive = PushPlugin.isActive(); boolean inline = processPushBundle(isPushPluginActive, intent); - if(inline && android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N && !startOnBackground){ + if(inline && android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N){ foreground = true; } @@ -53,17 +51,15 @@ public class PushHandlerActivity extends Activity implements PushConstants { finish(); - if(!dismissed) { - Log.d(LOG_TAG, "isPushPluginActive = " + isPushPluginActive); - if (!isPushPluginActive && foreground && inline) { - Log.d(LOG_TAG, "forceMainActivityReload"); - forceMainActivityReload(false); - } else if(startOnBackground) { - Log.d(LOG_TAG, "startOnBackgroundTrue"); - forceMainActivityReload(true); - } else { - Log.d(LOG_TAG, "don't want main activity"); - } + Log.d(LOG_TAG, "isPushPluginActive = " + isPushPluginActive); + if (!isPushPluginActive && foreground && inline) { + Log.d(LOG_TAG, "forceMainActivityReload"); + forceMainActivityReload(false); + } else if(startOnBackground) { + Log.d(LOG_TAG, "startOnBackgroundTrue"); + forceMainActivityReload(true); + } else { + Log.d(LOG_TAG, "don't want main activity"); } } @@ -80,9 +76,7 @@ public class PushHandlerActivity extends Activity implements PushConstants { originalExtras.putBoolean(FOREGROUND, false); originalExtras.putBoolean(COLDSTART, !isPushPluginActive); - originalExtras.putBoolean(DISMISSED, extras.getBoolean(DISMISSED)); originalExtras.putString(ACTION_CALLBACK, extras.getString(CALLBACK)); - originalExtras.remove(NO_CACHE); remoteInput = RemoteInput.getResultsFromIntent(intent); if (remoteInput != null) { 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 index 176b7419..eaa39a48 100644 --- 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 @@ -5,22 +5,23 @@ import android.content.Context; import android.content.SharedPreferences; import android.util.Log; -import com.google.firebase.iid.FirebaseInstanceId; -import com.google.firebase.iid.FirebaseInstanceIdService; +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 FirebaseInstanceIdService implements PushConstants { - public static final String LOG_TAG = "Push_InsIdService"; +public class PushInstanceIDListenerService extends InstanceIDListenerService implements PushConstants { + public static final String LOG_TAG = "PushPlugin_PushInstanceIDListenerService"; @Override public void onTokenRefresh() { - // Get updated InstanceID token. - String refreshedToken = FirebaseInstanceId.getInstance().getToken(); - Log.d(LOG_TAG, "Refreshed token: " + refreshedToken); - // TODO: Implement this method to send any registration to your app's servers. - //sendRegistrationToServer(refreshedToken); + 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 index 32f72bf3..f6faaa2b 100644 --- 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 @@ -1,14 +1,13 @@ package com.adobe.phonegap.push; -import android.app.Activity; import android.app.NotificationManager; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; -import com.google.firebase.iid.FirebaseInstanceId; -import com.google.firebase.messaging.FirebaseMessaging; +import com.google.android.gms.gcm.GcmPubSub; +import com.google.android.gms.iid.InstanceID; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaInterface; @@ -30,7 +29,7 @@ import me.leolin.shortcutbadger.ShortcutBadger; public class PushPlugin extends CordovaPlugin implements PushConstants { - public static final String LOG_TAG = "Push_Plugin"; + public static final String LOG_TAG = "PushPlugin"; private static CallbackContext pushContext; private static CordovaWebView gWebView; @@ -60,7 +59,6 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { 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 { @@ -68,19 +66,15 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { Log.v(LOG_TAG, "execute: jo=" + jo.toString()); - senderID = getStringResourceByName(GCM_DEFAULT_SENDER_ID); + senderID = jo.getString(SENDER_ID); Log.v(LOG_TAG, "execute: senderID=" + senderID); - token = FirebaseInstanceId.getInstance().getToken(); + String savedSenderID = sharedPref.getString(SENDER_ID, ""); + registration_id = InstanceID.getInstance(getApplicationContext()).getToken(senderID, GCM); - if (token == null) { - token = FirebaseInstanceId.getInstance().getToken(senderID,FCM); - } - - if (!"".equals(token)) { - JSONObject json = new JSONObject().put(REGISTRATION_ID, token); - json.put(REGISTRATION_TYPE, FCM); + if (!"".equals(registration_id)) { + JSONObject json = new JSONObject().put(REGISTRATION_ID, registration_id); Log.v(LOG_TAG, "onRegistered: " + json.toString()); @@ -89,14 +83,14 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { PushPlugin.sendEvent( json ); } else { - callbackContext.error("Empty registration ID received from FCM"); + 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 IO Exception " + e.getMessage()); + Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage()); callbackContext.error(e.getMessage()); } @@ -124,8 +118,6 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { 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(MESSAGE_KEY, jo.optString(MESSAGE_KEY)); - editor.putString(TITLE_KEY, jo.optString(TITLE_KEY)); editor.commit(); } @@ -151,7 +143,7 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { if (topics != null && !"".equals(registration_id)) { unsubscribeFromTopics(topics, registration_id); } else { - FirebaseInstanceId.getInstance().deleteInstanceId(); + InstanceID.getInstance(getApplicationContext()).deleteInstanceID(); Log.v(LOG_TAG, "UNREGISTER"); // Remove shared prefs @@ -202,13 +194,6 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { callbackContext.success(); } }); - } else if (GET_APPLICATION_ICON_BADGE_NUMBER.equals(action)) { - cordova.getThreadPool().execute(new Runnable() { - public void run() { - Log.v(LOG_TAG, "getApplicationIconBadgeNumber"); - callbackContext.success(getApplicationIconBadgeNumber(getApplicationContext())); - } - }); } else if (CLEAR_ALL_NOTIFICATIONS.equals(action)) { cordova.getThreadPool().execute(new Runnable() { public void run() { @@ -227,6 +212,8 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { callbackContext.success(); } catch (JSONException e) { callbackContext.error(e.getMessage()); + } catch (IOException e) { + callbackContext.error(e.getMessage()); } } }); @@ -240,6 +227,8 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { callbackContext.success(); } catch (JSONException e) { callbackContext.error(e.getMessage()); + } catch (IOException e) { + callbackContext.error(e.getMessage()); } } }); @@ -270,41 +259,25 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { /* * Sends the pushbundle extras to the client application. - * If the client application isn't currently active and the no-cache flag is not set, it is cached for later processing. + * If the client application isn't currently active, it is cached for later processing. */ public static void sendExtras(Bundle extras) { if (extras != null) { - String noCache = extras.getString(NO_CACHE); if (gWebView != null) { sendEvent(convertBundleToJson(extras)); - } else if(!"1".equals(noCache)){ + } else { Log.v(LOG_TAG, "sendExtras: caching extras to send at a later time."); gCachedExtras.add(extras); } } } - /* - * Retrives badge count from SharedPreferences - */ - public static int getApplicationIconBadgeNumber(Context context){ - SharedPreferences settings = context.getSharedPreferences(BADGE, Context.MODE_PRIVATE); - return settings.getInt(BADGE, 0); - } - - /* - * Sets badge count on application icon and in SharedPreferences - */ public static void setApplicationIconBadgeNumber(Context context, int badgeCount) { if (badgeCount > 0) { ShortcutBadger.applyCount(context, badgeCount); - }else{ + } else { ShortcutBadger.removeCount(context); } - - SharedPreferences.Editor editor = context.getSharedPreferences(BADGE, Context.MODE_PRIVATE).edit(); - editor.putInt(BADGE, Math.max(badgeCount, 0)); - editor.apply(); } @Override @@ -342,7 +315,23 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { notificationManager.cancelAll(); } - private void subscribeToTopics(JSONArray topics, String registrationToken) { + /** + * Transform `topic name` to `topic path` + * Normally, the `topic` inputed from end-user is `topic name` only. + * We should convert them to GCM `topic path` + * Example: + * when topic name = 'my-topic' + * then topic path = '/topics/my-topic' + * + * @param String topic The topic name + * @return The topic path + */ + private String getTopicPath(String topic) + { + return "/topics/" + topic; + } + + private void subscribeToTopics(JSONArray topics, String registrationToken) throws IOException { if (topics != null) { String topic = null; for (int i=0; i<topics.length(); i++) { @@ -352,10 +341,16 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { } } - private void subscribeToTopic(String topic, String registrationToken) { - if (topic != null) { - Log.d(LOG_TAG, "Subscribing to topic: " + topic); - FirebaseMessaging.getInstance().subscribeToTopic(topic); + private void subscribeToTopic(String topic, String registrationToken) throws IOException + { + try { + if (topic != null) { + Log.d(LOG_TAG, "Subscribing to topic: " + topic); + GcmPubSub.getInstance(getApplicationContext()).subscribe(registrationToken, getTopicPath(topic), null); + } + } catch (IOException e) { + Log.e(LOG_TAG, "Failed to subscribe to topic: " + topic, e); + throw e; } } @@ -363,20 +358,29 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { if (topics != null) { String topic = null; for (int i=0; i<topics.length(); i++) { - topic = topics.optString(i, null); - unsubscribeFromTopic(topic, registrationToken); - if (topic != null) { - Log.d(LOG_TAG, "Unsubscribing to topic: " + topic); - FirebaseMessaging.getInstance().unsubscribeFromTopic(topic); + try { + topic = topics.optString(i, null); + if (topic != null) { + Log.d(LOG_TAG, "Unsubscribing to topic: " + topic); + GcmPubSub.getInstance(getApplicationContext()).unsubscribe(registrationToken, getTopicPath(topic)); + } + } catch (IOException e) { + Log.e(LOG_TAG, "Failed to unsubscribe to topic: " + topic, e); } } } } - private void unsubscribeFromTopic(String topic, String registrationToken) { - if (topic != null) { - Log.d(LOG_TAG, "Unsubscribing to topic: " + topic); - FirebaseMessaging.getInstance().unsubscribeFromTopic(topic); + private void unsubscribeFromTopic(String topic, String registrationToken) throws IOException + { + try { + if (topic != null) { + Log.d(LOG_TAG, "Unsubscribing to topic: " + topic); + GcmPubSub.getInstance(getApplicationContext()).unsubscribe(registrationToken, getTopicPath(topic)); + } + } catch (IOException e) { + Log.e(LOG_TAG, "Failed to unsubscribe to topic: " + topic, e); + throw e; } } @@ -409,9 +413,6 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { else if (key.equals(FOREGROUND)) { additionalData.put(key, extras.getBoolean(FOREGROUND)); } - else if (key.equals(DISMISSED)) { - additionalData.put(key, extras.getBoolean(DISMISSED)); - } else if ( value instanceof String ) { String strValue = (String)value; try { @@ -443,13 +444,6 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { return null; } - private String getStringResourceByName(String aString) { - Activity activity = cordova.getActivity(); - String packageName = activity.getPackageName(); - int resId = activity.getResources().getIdentifier(aString, "string", packageName); - return activity.getString(resId); - } - public static boolean isInForeground() { return gForeground; } 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 new file mode 100644 index 00000000..b181e88e --- /dev/null +++ b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/RegistrationIntentService.java @@ -0,0 +1,38 @@ +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); + PushPlugin.setRegistrationID(token); + Log.i(LOG_TAG, "new GCM Registration Token: " + token); + + } catch (Exception e) { + Log.d(LOG_TAG, "Failed to complete token refresh", e); + } + } +} diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/browser/manifest.json b/StoneIsland/plugins/phonegap-plugin-push/src/browser/manifest.json index eff52c74..ce8390ab 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/src/browser/manifest.json +++ b/StoneIsland/plugins/phonegap-plugin-push/src/browser/manifest.json @@ -1,4 +1,4 @@ { "name": "Push Demo", - "gcm_sender_id": "996231231186" + "gcm_sender_id": "85075801930" } diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.h b/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.h index 4cc1dcb0..276a0080 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.h +++ b/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.h @@ -29,7 +29,7 @@ @protocol GGLInstanceIDDelegate; @protocol GCMReceiverDelegate; -@interface PushPlugin : CDVPlugin +@interface PushPlugin : CDVPlugin<GGLInstanceIDDelegate, GCMReceiverDelegate> { NSDictionary *notificationMessage; BOOL isInline; @@ -68,12 +68,13 @@ - (void)didSendDataMessageWithID:(NSString *)messageID; - (void)didDeleteMessagesOnServer; -// FCM Features -@property(nonatomic, assign) BOOL usesFCM; -@property(nonatomic, strong) NSNumber *fcmSandbox; -@property(nonatomic, strong) NSString *fcmSenderId; -@property(nonatomic, strong) NSDictionary *fcmRegistrationOptions; -@property(nonatomic, strong) NSString *fcmRegistrationToken; -@property(nonatomic, strong) NSArray *fcmTopics; +// GCM Features +@property(nonatomic, assign) BOOL usesGCM; +@property(nonatomic, strong) NSNumber* gcmSandbox; +@property(nonatomic, strong) NSString *gcmSenderId; +@property(nonatomic, strong) NSDictionary *gcmRegistrationOptions; +@property(nonatomic, strong) void (^gcmRegistrationHandler) (NSString *registrationToken, NSError *error); +@property(nonatomic, strong) NSString *gcmRegistrationToken; +@property(nonatomic, strong) NSArray *gcmTopics; @end diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.m b/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.m index 90475d10..a176b9af 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.m +++ b/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.m @@ -27,9 +27,8 @@ #define GMP_NO_MODULES true #import "PushPlugin.h" -@import FirebaseInstanceID; -@import FirebaseMessaging; -@import FirebaseAnalytics; +#import "GoogleCloudMessaging.h" +#import "GGLInstanceIDHeaders.h" @implementation PushPlugin : CDVPlugin @@ -43,62 +42,78 @@ @synthesize clearBadge; @synthesize handlerObj; -@synthesize usesFCM; -@synthesize fcmSandbox; -@synthesize fcmSenderId; -@synthesize fcmRegistrationOptions; -@synthesize fcmRegistrationToken; -@synthesize fcmTopics; +@synthesize usesGCM; +@synthesize gcmSandbox; +@synthesize gcmSenderId; +@synthesize gcmRegistrationOptions; +@synthesize gcmRegistrationHandler; +@synthesize gcmRegistrationToken; +@synthesize gcmTopics; --(void)initRegistration; +-(void)initGCMRegistrationHandler; { - NSString * registrationToken = [[FIRInstanceID instanceID] token]; + __weak __block PushPlugin *weakSelf = self; + gcmRegistrationHandler = ^(NSString *registrationToken, NSError *error){ + if (registrationToken != nil) { + NSLog(@"GCM Registration Token: %@", registrationToken); + [weakSelf setGcmRegistrationToken: registrationToken]; - if (registrationToken != nil) { - NSLog(@"FCM Registration Token: %@", registrationToken); - [self setFcmRegistrationToken: registrationToken]; - - id topics = [self fcmTopics]; - if (topics != nil) { - for (NSString *topic in topics) { - NSLog(@"subscribe to topic: %@", topic); - id pubSub = [FIRMessaging messaging]; - [pubSub subscribeToTopic:topic]; + id topics = [weakSelf gcmTopics]; + if (topics != nil) { + for (NSString *topic in topics) { + NSLog(@"subscribe from topic: %@", topic); + id pubSub = [GCMPubSub sharedInstance]; + [pubSub subscribeWithToken: [weakSelf gcmRegistrationToken] + topic:[NSString stringWithFormat:@"/topics/%@", topic] + options:nil + handler:^void(NSError *error) { + if (error) { + if (error.code == 3001) { + NSLog(@"Already subscribed to %@", topic); + } else { + NSLog(@"Failed to subscribe to topic %@: %@", topic, error); + } + } + else { + NSLog(@"Successfully subscribe to topic %@", topic); + } + }]; + } } - } - - [self registerWithToken:registrationToken]; - } else { - NSLog(@"FCM token is null"); - } + [weakSelf registerWithToken:registrationToken]; + } else { + NSLog(@"Registration to GCM failed with error: %@", error.localizedDescription); + [weakSelf failWithMessage:self.callbackId withMsg:@"" withError:error]; + } + }; } -// FCM refresh token +// GCM refresh token // Unclear how this is testable under normal circumstances - (void)onTokenRefresh { #if !TARGET_IPHONE_SIMULATOR // A rotation of the registration tokens is happening, so the app needs to request a new token. - NSLog(@"The FCM registration token needs to be changed."); - [[FIRInstanceID instanceID] token]; - [self initRegistration]; + NSLog(@"The GCM registration token needs to be changed."); + [[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:[self gcmSenderId] + scope:kGGLInstanceIDScopeGCM + options:[self gcmRegistrationOptions] + handler:[self gcmRegistrationHandler]]; #endif } -// contains error info -- (void)sendDataMessageFailure:(NSNotification *)notification { - NSLog(@"sendDataMessageFailure"); -} -- (void)sendDataMessageSuccess:(NSNotification *)notification { - NSLog(@"sendDataMessageSuccess"); -} - -- (void)didSendDataMessageWithID:messageID { - NSLog(@"didSendDataMessageWithID"); +- (void)willSendDataMessageWithID:(NSString *)messageID error:(NSError *)error { + NSLog(@"willSendDataMessageWithID"); + if (error) { + // Failed to send the message. + } else { + // Will send message, you can save the messageID to track the message + } } -- (void)willSendDataMessageWithID:messageID error:error { +- (void)didSendDataMessageWithID:(NSString *)messageID { NSLog(@"willSendDataMessageWithID"); + // Did successfully send message identified by messageID } - (void)didDeleteMessagesOnServer { @@ -113,10 +128,20 @@ NSArray* topics = [command argumentAtIndex:0]; if (topics != nil) { - id pubSub = [FIRMessaging messaging]; + id pubSub = [GCMPubSub sharedInstance]; for (NSString *topic in topics) { NSLog(@"unsubscribe from topic: %@", topic); - [pubSub unsubscribeFromTopic:topic]; + [pubSub unsubscribeWithToken: [self gcmRegistrationToken] + topic:[NSString stringWithFormat:@"/topics/%@", topic] + options:nil + handler:^void(NSError *error) { + if (error) { + NSLog(@"Failed to unsubscribe from topic %@: %@", topic, error); + } + else { + NSLog(@"Successfully unsubscribe from topic %@", topic); + } + }]; } } else { [[UIApplication sharedApplication] unregisterForRemoteNotifications]; @@ -130,10 +155,25 @@ if (topic != nil) { NSLog(@"subscribe from topic: %@", topic); - id pubSub = [FIRMessaging messaging]; - [pubSub subscribeToTopic:topic]; - NSLog(@"Successfully subscribe to topic %@", topic); - [self successWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Successfully subscribe to topic %@", topic]]; + id pubSub = [GCMPubSub sharedInstance]; + [pubSub subscribeWithToken: [self gcmRegistrationToken] + topic:[NSString stringWithFormat:@"/topics/%@", topic] + options:nil + handler:^void(NSError *error) { + if (error) { + if (error.code == 3001) { + NSLog(@"Already subscribed to %@", topic); + [self successWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Already subscribed to %@", topic]]; + } else { + NSLog(@"Failed to subscribe to topic %@: %@", topic, error); + [self failWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Failed to subscribe to topic %@", topic] withError:error]; + } + } + else { + NSLog(@"Successfully subscribe to topic %@", topic); + [self successWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Successfully subscribe to topic %@", topic]]; + } + }]; } else { NSLog(@"There is no topic to subscribe"); [self successWithMessage:command.callbackId withMsg:@"There is no topic to subscribe"]; @@ -146,10 +186,19 @@ if (topic != nil) { NSLog(@"unsubscribe from topic: %@", topic); - id pubSub = [FIRMessaging messaging]; - [pubSub unsubscribeFromTopic:topic]; - NSLog(@"Successfully unsubscribe from topic %@", topic); - [self successWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Successfully unsubscribe from topic %@", topic]]; + id pubSub = [GCMPubSub sharedInstance]; + [pubSub unsubscribeWithToken: [self gcmRegistrationToken] + topic:[NSString stringWithFormat:@"/topics/%@", topic] + options:nil + handler:^void(NSError *error) { + if (error) { + NSLog(@"Failed to unsubscribe to topic %@: %@", topic, error); + [self failWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Failed to unsubscribe to topic %@", topic] withError:error]; + } else { + NSLog(@"Successfully unsubscribe to topic %@", topic); + [self successWithMessage:command.callbackId withMsg:[NSString stringWithFormat:@"Successfully unsubscribe to topic %@", topic]]; + } + }]; } else { NSLog(@"There is no topic to unsubscribe"); [self successWithMessage:command.callbackId withMsg:@"There is no topic to unsubscribe"]; @@ -158,22 +207,6 @@ - (void)init:(CDVInvokedUrlCommand*)command; { - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(onTokenRefresh) - name:kFIRInstanceIDTokenRefreshNotification object:nil]; - - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(sendDataMessageFailure:) - name:FIRMessagingSendErrorNotification object:nil]; - - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(sendDataMessageSuccess:) - name:FIRMessagingSendSuccessNotification object:nil]; - - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(didDeleteMessagesOnServer) - name:FIRMessagingMessagesDeletedNotification object:nil]; - [self.commandDelegate runInBackground:^ { NSLog(@"Push Plugin register called"); @@ -182,10 +215,13 @@ NSMutableDictionary* options = [command.arguments objectAtIndex:0]; NSMutableDictionary* iosOptions = [options objectForKey:@"ios"]; - NSArray* topics = [iosOptions objectForKey:@"topics"]; - [self setFcmTopics:topics]; + NSArray* topics = [iosOptions objectForKey:@"topics"]; + [self setGcmTopics:topics]; +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 UIUserNotificationType UserNotificationTypes = UIUserNotificationTypeNone; +#endif + UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeNone; id badgeArg = [iosOptions objectForKey:@"badge"]; id soundArg = [iosOptions objectForKey:@"sound"]; @@ -194,20 +230,32 @@ 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"); @@ -219,8 +267,12 @@ } 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 NSLog(@"PushPlugin.register: better button setup"); // setup action buttons NSMutableSet *categories = [[NSMutableSet alloc] init]; @@ -277,46 +329,45 @@ } } +#else + NSLog(@"PushPlugin.register: action buttons only supported on iOS8 and above"); +#endif + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 if ([[UIApplication sharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UserNotificationTypes categories:categories]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; [[UIApplication sharedApplication] registerForRemoteNotifications]; + } else { + [[UIApplication sharedApplication] registerForRemoteNotificationTypes: + (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; } - - // Read GoogleService-Info.plist - NSString *path = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; - - // Load the file content and read the data into arrays - NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; - fcmSenderId = [dict objectForKey:@"GCM_SENDER_ID"]; - BOOL isGcmEnabled = [[dict valueForKey:@"IS_GCM_ENABLED"] boolValue]; - - NSLog(@"FCM Sender ID %@", fcmSenderId); +#else + [[UIApplication sharedApplication] registerForRemoteNotificationTypes: + (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; +#endif // GCM options - [self setFcmSenderId: fcmSenderId]; - if(isGcmEnabled && [[self fcmSenderId] length] > 0) { - NSLog(@"Using FCM Notification"); - [self setUsesFCM: YES]; - dispatch_async(dispatch_get_main_queue(), ^{ - if([FIRApp defaultApp] == nil) - [FIRApp configure]; - [self initRegistration]; - }); + [self setGcmSenderId: [iosOptions objectForKey:@"senderID"]]; + NSLog(@"GCM Sender ID %@", gcmSenderId); + if([[self gcmSenderId] length] > 0) { + NSLog(@"Using GCM Notification"); + [self setUsesGCM: YES]; + [self initGCMRegistrationHandler]; } else { NSLog(@"Using APNS Notification"); - [self setUsesFCM:NO]; + [self setUsesGCM:NO]; } - id fcmSandboxArg = [iosOptions objectForKey:@"fcmSandbox"]; + id gcmSandBoxArg = [iosOptions objectForKey:@"gcmSandbox"]; - [self setFcmSandbox:@NO]; - if ([self usesFCM] && - (([fcmSandboxArg isKindOfClass:[NSString class]] && [fcmSandboxArg isEqualToString:@"true"]) || - [fcmSandboxArg boolValue])) + [self setGcmSandbox:@NO]; + if ([self usesGCM] && + (([gcmSandBoxArg isKindOfClass:[NSString class]] && [gcmSandBoxArg isEqualToString:@"true"]) || + [gcmSandBoxArg boolValue])) { - NSLog(@"Using FCM Sandbox"); - [self setFcmSandbox:@YES]; + NSLog(@"Using GCM Sandbox"); + [self setGcmSandbox:@YES]; } if (notificationMessage) { // if there is a pending startup notification @@ -371,8 +422,14 @@ [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 = [[[UIApplication sharedApplication] currentUserNotificationSettings] types]; + 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"; @@ -383,13 +440,13 @@ // 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 & UIUserNotificationTypeBadge){ + if(rntypes & UIRemoteNotificationTypeBadge){ pushBadge = @"enabled"; } - if(rntypes & UIUserNotificationTypeAlert) { + if(rntypes & UIRemoteNotificationTypeAlert) { pushAlert = @"enabled"; } - if(rntypes & UIUserNotificationTypeSound) { + if(rntypes & UIRemoteNotificationTypeSound) { pushSound = @"enabled"; } @@ -403,7 +460,24 @@ [results setValue:dev.model forKey:@"deviceModel"]; [results setValue:dev.systemVersion forKey:@"deviceSystemVersion"]; - if(![self usesFCM]) { + if([self usesGCM]) { + GGLInstanceIDConfig *instanceIDConfig = [GGLInstanceIDConfig defaultConfig]; + instanceIDConfig.delegate = self; + [[GGLInstanceID sharedInstance] startWithConfig:instanceIDConfig]; + + [self setGcmRegistrationOptions: @{kGGLInstanceIDRegisterAPNSOption:deviceToken, + kGGLInstanceIDAPNSServerTypeSandboxOption:[self gcmSandbox]}]; + + [[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:[self gcmSenderId] + scope:kGGLInstanceIDScopeGCM + options:[self gcmRegistrationOptions] + handler:[self gcmRegistrationHandler]]; + + GCMConfig *gcmConfig = [GCMConfig defaultConfig]; + gcmConfig.receiverDelegate = self; + [[GCMService sharedInstance] startWithConfig:gcmConfig]; + + } else { [self registerWithToken: token]; } #endif @@ -536,36 +610,31 @@ [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; } --(void)successWithMessage:(NSString *)myCallbackId withMsg:(NSString *)message +-(void)successWithMessage:(NSString *)callbackId withMsg:(NSString *)message { - if (myCallbackId != nil) + if (callbackId != nil) { CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message]; - [self.commandDelegate sendPluginResult:commandResult callbackId:myCallbackId]; + [self.commandDelegate sendPluginResult:commandResult callbackId:callbackId]; } } -(void)registerWithToken:(NSString*)token; { // Send result to trigger 'registration' event but keep callback - NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:2]; + NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:1]; [message setObject:token forKey:@"registrationId"]; - if ([self usesFCM]) { - [message setObject:@"FCM" forKey:@"registrationType"]; - } else { - [message setObject:@"APNS" forKey:@"registrationType"]; - } CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message]; [pluginResult setKeepCallbackAsBool:YES]; [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId]; } --(void)failWithMessage:(NSString *)myCallbackId withMsg:(NSString *)message withError:(NSError *)error +-(void)failWithMessage:(NSString *)callbackId withMsg:(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:myCallbackId]; + [self.commandDelegate sendPluginResult:commandResult callbackId:callbackId]; } -(void) finish:(CDVInvokedUrlCommand*)command diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/js/push.js b/StoneIsland/plugins/phonegap-plugin-push/src/js/push.js deleted file mode 100644 index 150af344..00000000 --- a/StoneIsland/plugins/phonegap-plugin-push/src/js/push.js +++ /dev/null @@ -1,316 +0,0 @@ -/* global cordova:false */ -/* globals window */ - -/*! - * Module dependencies. - */ - -const exec = cordova.require('cordova/exec'); - -class PushNotification { - /** - * PushNotification constructor. - * - * @param {Object} options to initiate Push Notifications. - * @return {PushNotification} instance that can be monitored and cancelled. - */ - constructor(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 - const success = (result) => { - if (result && typeof result.registrationId !== 'undefined') { - this.emit('registration', result); - } else if (result && result.additionalData && - typeof result.additionalData.actionCallback !== 'undefined') { - const executeFuctionOrEmitEventByName = (functionName, context, ...args) => { - const namespaces = functionName.split('.'); - const func = namespaces.pop(); - for (let i = 0; i < namespaces.length; i++) { - context = context[namespaces[i]]; - } - - if (typeof context[func] === 'function') { - context[func].call(context, args); - } else { - this.emit(functionName, args); - } - }; - - executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); - } else if (result) { - this.emit('notification', result); - } - }; - - // triggered on error - const fail = (msg) => { - const e = (typeof msg === 'string') ? new Error(msg) : msg; - this.emit('error', e); - }; - - // wait at least one process tick to allow event subscriptions - setTimeout(() => { - exec(success, fail, 'PushNotification', 'init', [options]); - }, 10); - } - - /** - * Unregister from push notifications - */ - unregister(successCallback, errorCallback = () => {}, options) { - 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; - } - - const cleanHandlersAndPassThrough = () => { - if (!options) { - this.handlers = { - registration: [], - notification: [], - error: [], - }; - } - successCallback(); - }; - - exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); - } - - /** - * subscribe to a topic - * @param {String} topic topic to subscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ - subscribe(topic, successCallback, errorCallback = () => {}) { - if (typeof errorCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + - 'failure parameter not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + - 'success callback parameter must be a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); - } - - /** - * unsubscribe to a topic - * @param {String} topic topic to unsubscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ - unsubscribe(topic, successCallback, errorCallback = () => {}) { - if (typeof errorCallback !== 'function') { - console.log('PushNotification.unsubscribe failure: failure parameter not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.unsubscribe failure: ' + - 'success callback parameter must be a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); - } - - - /** - * Call this to set the application icon badge - */ - setApplicationIconBadgeNumber(successCallback, errorCallback = () => {}, badge) { - 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 }]); - } - - /** - * Get the application icon badge - */ - - getApplicationIconBadgeNumber(successCallback, errorCallback = () => {}) { - 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', []); - } - - /** - * Clear all notifications - */ - - clearAllNotifications(successCallback = () => {}, errorCallback = () => {}) { - if (typeof errorCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: failure parameter ' + - 'not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: success callback ' + - 'parameter must be a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); - } - /** - * 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. - */ - - on(eventName, callback) { - if (!this.handlers.hasOwnProperty(eventName)) { - this.handlers[eventName] = []; - } - this.handlers[eventName].push(callback); - } - - /** - * Remove event listener. - * - * @param {String} eventName to match subscription. - * @param {Function} handle function associated with event. - */ - - off(eventName, handle) { - if (this.handlers.hasOwnProperty(eventName)) { - const 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. - */ - - emit(...args) { - const eventName = args.shift(); - - if (!this.handlers.hasOwnProperty(eventName)) { - return false; - } - - for (let i = 0, length = this.handlers[eventName].length; i < length; i++) { - const callback = this.handlers[eventName][i]; - if (typeof callback === 'function') { - callback.apply(undefined, args); - } else { - console.log(`event handler: ${eventName} must be a function`); - } - } - - return true; - } - - finish(successCallback = () => {}, errorCallback = () => {}, id = 'handler') { - 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', [id]); - } -} - -/*! - * 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: (options) => { - return new PushNotification(options); - }, - - hasPermission: (successCallback, errorCallback) => { - exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); - }, - - /** - * PushNotification Object. - * - * Expose the PushNotification object for direct use - * and testing. Typically, you should use the - * .init helper method. - */ - PushNotification, -}; diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/windows/PushPluginProxy.js b/StoneIsland/plugins/phonegap-plugin-push/src/windows/PushPluginProxy.js index eb552dc0..ac04f39d 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/src/windows/PushPluginProxy.js +++ b/StoneIsland/plugins/phonegap-plugin-push/src/windows/PushPluginProxy.js @@ -88,12 +88,6 @@ module.exports = { } catch(ex) { onFail(ex); } - }, - subscribe: function() { - console.log("Subscribe is unsupported"); - }, - unsubscribe: function() { - console.log("Subscribe is unsupported"); } }; require("cordova/exec/proxy").add("PushNotification", module.exports); diff --git a/StoneIsland/plugins/phonegap-plugin-push/types/index.d.ts b/StoneIsland/plugins/phonegap-plugin-push/types/index.d.ts deleted file mode 100644 index b47335c2..00000000 --- a/StoneIsland/plugins/phonegap-plugin-push/types/index.d.ts +++ /dev/null @@ -1,302 +0,0 @@ -// Type definitions for phonegap-plugin-push -// Project: https://github.com/phonegap/phonegap-plugin-push -// Definitions by: Frederico Galvão <https://github.com/fredgalvao> -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -declare namespace PhonegapPluginPush { - type EventResponse = RegistrationEventResponse | NotificationEventResponse | Error - - interface PushNotification { - /** - * The event registration will be triggered on each successful registration with the 3rd party push service. - * @param event - * @param callback - */ - on(event: "registration", callback: (response: RegistrationEventResponse) => any): void - /** - * The event notification will be triggered each time a push notification is received by a 3rd party push service on the device. - * @param event - * @param callback - */ - on(event: "notification", callback: (response: NotificationEventResponse) => any): void - /** - * The event error will trigger when an internal error occurs and the cache is aborted. - * @param event - * @param callback - */ - on(event: "error", callback: (response: Error) => any): void - /** - * - * @param event Name of the event to listen to. See below(above) for all the event names. - * @param callback is called when the event is triggered. - * @param event - * @param callback - */ - on(event: string, callback: (response: EventResponse) => any): void - - off(event: "registration", callback: (response: RegistrationEventResponse) => any): void - off(event: "notification", callback: (response: NotificationEventResponse) => any): void - off(event: "error", callback: (response: Error) => any): void - /** - * As stated in the example, you will have to store your event handler if you are planning to remove it. - * @param event Name of the event type. The possible event names are the same as for the push.on function. - * @param callback handle to the function to get removed. - * @param event - * @param callback - */ - off(event: string, callback: (response: EventResponse) => any): void - - /** - * The unregister method is used when the application no longer wants to receive push notifications. - * Beware that this cleans up all event handlers previously registered, - * so you will need to re-register them if you want them to function again without an application reload. - * @param successHandler - * @param errorHandler - * @param topics - */ - unregister(successHandler: () => any, errorHandler?: () => any, topics?: string[]): void - - /** - * The subscribe method is used when the application wants to subscribe a new topic to receive push notifications. - * @param topic Topic to subscribe to. - * @param successHandler Is called when the api successfully unregisters. - * @param errorHandler Is called when the api encounters an error while unregistering. - */ - subscribe(topic: string, successHandler: () => any, errorHandler: () => any): void; - - /** - * The unsubscribe method is used when the application no longer wants to receive push notifications - * from a specific topic but continue to receive other push messages. - * @param topic Topic to unsubscribe from. - * @param successHandler Is called when the api successfully unregisters. - * @param errorHandler Is called when the api encounters an error while unregistering. - */ - unsubscribe(topic: string, successHandler: () => any, errorHandler: () => any): void; - - /*TODO according to js source code, "errorHandler" is optional, but is "count" also optional? I can't read objetive-C code (can anyone at all? I wonder...)*/ - /** - * 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. - * @param successHandler - * @param errorHandler - * @param count - */ - setApplicationIconBadgeNumber(successHandler: () => any, errorHandler: () => any, count: number): void - - /** - * Get the current badge count visible when the app is not running - * successHandler gets called with an integer which is the current badge count - * @param successHandler - * @param errorHandler - */ - getApplicationIconBadgeNumber(successHandler: (count: number) => any, errorHandler: () => any): void - - /** - * iOS only - * Tells the OS that you are done processing a background push notification. - * successHandler gets called when background push processing is successfully completed. - * @param successHandler - * @param errorHandler - * @param id - */ - finish(successHandler?: () => any, errorHandler?: () => any, id?: string): void - - /** - * Tells the OS to clear all notifications from the Notification Center - * @param successHandler Is called when the api successfully clears the notifications. - * @param errorHandler Is called when the api encounters an error when attempting to clears the notifications. - */ - clearAllNotifications(successHandler: () => any, errorHandler: () => any): void - } - - /** - * platform specific initialization options. - */ - interface InitOptions { - /** - * Android specific initialization options. - */ - android?: { - /** - * Maps to the project number in the Google Developer Console. - */ - senderID: string - /** - * The name of a drawable resource to use as the small-icon. The name should not include the extension. - */ - icon?: string - /** - * 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) - */ - iconColor?: string - /** - * If true it plays the sound specified in the push data or the default system sound. Default is true. - */ - sound?: boolean - /** - * If true the device vibrates on receipt of notification. Default is true. - */ - vibrate?: boolean - /** - * If true the app clears all pending notifications when it is closed. Default is true. - */ - clearNotifications?: boolean - /** - * If true will always show a notification, even when the app is on the foreground. Default is false. - */ - forceShow?: boolean - /** - * If the array contains one or more strings each string will be used to subscribe to a GcmPubSub topic. - */ - topics?: string[] - } - - /** - * iOS specific initialization options. - */ - ios?: { - /** - * 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. - */ - badge?: boolean | string - /** - * 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. - */ - sound?: boolean | string - /** - * 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. - */ - alert?: boolean | string - /** - * If true|"true" the badge will be cleared on app startup. Default is false|"false". - */ - clearBadge?: boolean | string - /** - * The data required in order to enable Action Buttons for iOS. - * Action Buttons on iOS - https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#action-buttons-1 - */ - categories?: CategoryArray - /** - * Maps to the project number in the Google Developer Console. Setting this uses GCM for notifications instead of native - */ - senderID?: string - /** - * Whether to use prod or sandbox GCM setting. Defaults to false. - */ - gcmSandbox?: boolean - /** - * If the array contains one or more strings each string will be used to subscribe to a GcmPubSub topic. Note: only usable in conjunction with senderID - */ - topics?: string[] - } - - /** - * Windows specific initialization options. - */ - windows?: { - - } - } - - interface CategoryArray { - [name: string]: CategoryAction - } - - interface CategoryAction { - yes?: CategoryActionData - no?: CategoryActionData - maybe?: CategoryActionData - } - - interface CategoryActionData { - callback: string - title: string - foreground: boolean - destructive: boolean - } - - interface RegistrationEventResponse { - /** - * The registration ID provided by the 3rd party remote push service. - */ - registrationId: string - } - - interface NotificationEventResponse { - /** - * The text of the push message sent from the 3rd party service. - */ - message: string - /** - * The optional title of the push message sent from the 3rd party service. - */ - title?: 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. - */ - count: string - /** - * The name of the sound file to be played upon receipt of the notification. - */ - sound: string - /** - * The path of the image file to be displayed in the notification. - */ - image: string - /** - * An optional collection of data sent by the 3rd party push service that does not fit in the above properties. - */ - additionalData: NotificationEventAdditionalData - } - - /** - * TODO: document all possible properties (I only got the android ones) - * - * Loosened up with a dictionary notation, but all non-defined properties need to use (map['prop']) notation - * - * Ideally the developer would overload (merged declaration) this or create a new interface that would extend this one - * so that he could specify any custom code without having to use array notation (map['prop']) for all of them. - */ - interface NotificationEventAdditionalData { - [name: string]: any - - /** - * Whether the notification was received while the app was in the foreground - */ - foreground?: boolean - /** - * Will be true if the application is started by clicking on the push notification, false if the app is already started. (Android/iOS only) - */ - coldstart?: boolean - collapse_key?: string - from?: string - notId?: string - } - - interface PushNotificationStatic { - init(options: InitOptions): PushNotification - new (options: InitOptions): PushNotification - } -} - -interface Window { - PushNotification: PhonegapPluginPush.PushNotificationStatic -} -declare var PushNotification: PhonegapPluginPush.PushNotificationStatic;
\ No newline at end of file diff --git a/StoneIsland/plugins/phonegap-plugin-push/www/browser/push.js b/StoneIsland/plugins/phonegap-plugin-push/www/browser/push.js index 1badd77b..9b74d8a4 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/www/browser/push.js +++ b/StoneIsland/plugins/phonegap-plugin-push/www/browser/push.js @@ -29,12 +29,6 @@ var PushNotification = function(options) { // store the options to this object instance this.options = options; - // subscription options - var subOptions = {userVisibleOnly: true}; - if (this.options.browser && this.options.browser.applicationServerKey) { - subOptions.applicationServerKey = urlBase64ToUint8Array(this.options.browser.applicationServerKey); - } - // triggered on registration and notification var that = this; @@ -56,7 +50,7 @@ var PushNotification = function(options) { }) .then(function(reg) { serviceWorker = reg; - reg.pushManager.subscribe(subOptions).then(function(sub) { + reg.pushManager.subscribe({userVisibleOnly: true}).then(function(sub) { subscription = sub; result = { 'registrationId': sub.endpoint.substring(sub.endpoint.lastIndexOf('/') + 1) }; that.emit('registration', result); @@ -328,29 +322,6 @@ PushNotification.prototype.finish = function(successCallback, errorCallback, id) * Push Notification Plugin. */ -/** - * Converts the server key to an Uint8Array - * - * @param base64String - * - * @returns {Uint8Array} - */ -function urlBase64ToUint8Array(base64String) { - const padding = '='.repeat((4 - base64String.length % 4) % 4); - const base64 = (base64String + padding) - .replace(/\-/g, '+') - .replace(/_/g, '/'); - - const rawData = window.atob(base64); - const outputArray = new Uint8Array(rawData.length); - - for (var i = 0; i < rawData.length; ++i) { - outputArray[i] = rawData.charCodeAt(i); - } - return outputArray; -} - - module.exports = { /** * Register for Push Notifications. diff --git a/StoneIsland/plugins/phonegap-plugin-push/www/push.js b/StoneIsland/plugins/phonegap-plugin-push/www/push.js index 03f02e64..58c686d3 100644 --- a/StoneIsland/plugins/phonegap-plugin-push/www/push.js +++ b/StoneIsland/plugins/phonegap-plugin-push/www/push.js @@ -1,15 +1,3 @@ -/** -* This file has been generated by Babel. -* -* DO NOT EDIT IT DIRECTLY -* -* Edit the JS source file src/js/push.js -**/'use strict'; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - /* global cordova:false */ /* globals window */ @@ -19,357 +7,320 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var exec = cordova.require('cordova/exec'); -var PushNotification = function () { - /** - * PushNotification constructor. - * - * @param {Object} options to initiate Push Notifications. - * @return {PushNotification} instance that can be monitored and cancelled. - */ - function PushNotification(options) { - var _this = this; - - _classCallCheck(this, PushNotification); +/** + * PushNotification constructor. + * + * @param {Object} options to initiate Push Notifications. + * @return {PushNotification} instance that can be monitored and cancelled. + */ - this.handlers = { - registration: [], - notification: [], - error: [] +var PushNotification = function(options) { + this._handlers = { + 'registration': [], + 'notification': [], + 'error': [] }; // require options parameter if (typeof options === 'undefined') { - throw new Error('The options argument is required.'); + throw new Error('The options argument is required.'); } // store the options to this object instance this.options = options; // triggered on registration and notification - var success = function success(result) { - if (result && typeof result.registrationId !== 'undefined') { - _this.emit('registration', result); - } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { - var executeFuctionOrEmitEventByName = function executeFuctionOrEmitEventByName(functionName, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } - - var namespaces = functionName.split('.'); - var func = namespaces.pop(); - for (var i = 0; i < namespaces.length; i++) { - context = context[namespaces[i]]; - } + var that = this; + var success = function(result) { + if (result && typeof result.registrationId !== 'undefined') { + that.emit('registration', result); + } else if (result && result.additionalData && typeof result.additionalData.actionCallback !== 'undefined') { + var executeFuctionOrEmitEventByName = function(callbackName, context, arg) { + var namespaces = callbackName.split('.'); + var func = namespaces.pop(); + for (var i = 0; i < namespaces.length; i++) { + context = context[namespaces[i]]; + } - if (typeof context[func] === 'function') { - context[func].call(context, args); - } else { - _this.emit(functionName, args); - } - }; + if (typeof context[func] === 'function') { + context[func].call(context, arg); + } else { + that.emit(callbackName, arg); + } + }; - executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); - } else if (result) { - _this.emit('notification', result); - } + executeFuctionOrEmitEventByName(result.additionalData.actionCallback, window, result); + } else if (result) { + that.emit('notification', result); + } }; // triggered on error - var fail = function fail(msg) { - var e = typeof msg === 'string' ? new Error(msg) : msg; - _this.emit('error', e); + 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]); + setTimeout(function() { + exec(success, fail, 'PushNotification', 'init', [options]); }, 10); - } - - /** - * Unregister from push notifications - */ - +}; - _createClass(PushNotification, [{ - key: 'unregister', - value: function unregister(successCallback) { - var _this2 = this; +/** + * Unregister from push notifications + */ - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var options = arguments[2]; +PushNotification.prototype.unregister = function(successCallback, errorCallback, options) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof 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'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.unregister failure: success callback parameter must be a function'); return; - } + } - var cleanHandlersAndPassThrough = function cleanHandlersAndPassThrough() { + var that = this; + var cleanHandlersAndPassThrough = function() { if (!options) { - _this2.handlers = { - registration: [], - notification: [], - error: [] - }; + that._handlers = { + 'registration': [], + 'notification': [], + 'error': [] + }; } successCallback(); - }; - - exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); - } + }; - /** - * subscribe to a topic - * @param {String} topic topic to subscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ + exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); +}; - }, { - key: 'subscribe', - value: function subscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; +/** + * subscribe to a topic + * @param {String} topic topic to subscribe + * @param {Function} successCallback success callback + * @param {Function} errorCallback error callback + * @return {void} + */ +PushNotification.prototype.subscribe = function(topic, successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'failure parameter not a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.subscribe failure: failure parameter not a function'); return; - } + } - if (typeof successCallback !== 'function') { - console.log('PushNotification.subscribe failure: ' + 'success callback parameter must be a function'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.subscribe failure: success callback parameter must be a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); } - /** - * unsubscribe to a topic - * @param {String} topic topic to unsubscribe - * @param {Function} successCallback success callback - * @param {Function} errorCallback error callback - * @return {void} - */ + exec(successCallback, errorCallback, 'PushNotification', 'subscribe', [topic]); +}; - }, { - key: 'unsubscribe', - value: function unsubscribe(topic, successCallback) { - var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; +/** + * unsubscribe to a topic + * @param {String} topic topic to unsubscribe + * @param {Function} successCallback success callback + * @param {Function} errorCallback error callback + * @return {void} + */ +PushNotification.prototype.unsubscribe = function(topic, successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { + if (typeof errorCallback !== 'function') { console.log('PushNotification.unsubscribe failure: failure parameter not a function'); return; - } + } - if (typeof successCallback !== 'function') { - console.log('PushNotification.unsubscribe failure: ' + 'success callback parameter must be a function'); + if (typeof successCallback !== 'function') { + console.log('PushNotification.unsubscribe failure: success callback parameter must be a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); } - /** - * Call this to set the application icon badge - */ + exec(successCallback, errorCallback, 'PushNotification', 'unsubscribe', [topic]); +}; + +/** + * Call this to set the application icon badge + */ - }, { - key: 'setApplicationIconBadgeNumber', - value: function setApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var badge = arguments[2]; +PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof errorCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: failure ' + 'parameter not a 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'); + 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 - */ + exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{badge: badge}]); +}; - }, { - key: 'getApplicationIconBadgeNumber', - value: function getApplicationIconBadgeNumber(successCallback) { - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; +/** + * Get the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: failure ' + 'parameter not a function'); - return; - } +PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) { + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: success ' + 'callback parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); + if (typeof successCallback !== 'function') { + console.log('PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function'); + return; } - /** - * Clear all notifications - */ + exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); +}; - }, { - key: 'clearAllNotifications', - value: function clearAllNotifications() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; +/** + * Get the application icon badge + */ - if (typeof errorCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: failure parameter ' + 'not a function'); - return; - } +PushNotification.prototype.clearAllNotifications = function(successCallback, errorCallback) { + if (!successCallback) { successCallback = function() {}; } + if (!errorCallback) { errorCallback = function() {}; } - if (typeof successCallback !== 'function') { - console.log('PushNotification.clearAllNotifications failure: success callback ' + 'parameter must be a function'); + if (typeof errorCallback !== 'function') { + console.log('PushNotification.clearAllNotifications failure: failure parameter not a function'); return; - } + } - exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); + if (typeof successCallback !== 'function') { + console.log('PushNotification.clearAllNotifications failure: success callback parameter must be a function'); + return; } - /** - * 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. - */ - }, { - key: 'on', - value: function on(eventName, callback) { - if (!this.handlers.hasOwnProperty(eventName)) { - this.handlers[eventName] = []; - } - this.handlers[eventName].push(callback); + exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); +}; + +/** + * Listen for an event. + * + * Any event is supported, but the following are built-in: + * + * - 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] = []; } + this._handlers[eventName].push(callback); +}; - /** - * Remove event listener. - * - * @param {String} eventName to match subscription. - * @param {Function} handle function associated with event. - */ +/** + * Remove event listener. + * + * @param {String} eventName to match subscription. + * @param {Function} handle function associated with event. + */ - }, { - key: 'off', - value: function off(eventName, handle) { - if (this.handlers.hasOwnProperty(eventName)) { - var handleIndex = this.handlers[eventName].indexOf(handle); +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); + 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. - */ - - }, { - key: 'emit', - value: function emit() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } +/** + * 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. + */ - var eventName = args.shift(); +PushNotification.prototype.emit = function() { + var args = Array.prototype.slice.call(arguments); + var eventName = args.shift(); - if (!this.handlers.hasOwnProperty(eventName)) { + if (!this._handlers.hasOwnProperty(eventName)) { return false; - } + } - for (var i = 0, length = this.handlers[eventName].length; i < length; i++) { - var callback = this.handlers[eventName][i]; + for (var i = 0, length = this._handlers[eventName].length; i < length; i++) { + var callback = this._handlers[eventName][i]; if (typeof callback === 'function') { - callback.apply(undefined, args); + callback.apply(undefined,args); } else { - console.log('event handler: ' + eventName + ' must be a function'); + console.log('event handler: ' + eventName + ' must be a function'); } - } - - return true; } - }, { - key: 'finish', - value: function finish() { - var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - var id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'handler'; - if (typeof successCallback !== 'function') { + return true; +}; + +PushNotification.prototype.finish = function(successCallback, errorCallback, id) { + if (!successCallback) { successCallback = function() {}; } + if (!errorCallback) { errorCallback = function() {}; } + if (!id) { id = 'handler'; } + + if (typeof successCallback !== 'function') { console.log('finish failure: success callback parameter must be a function'); return; - } + } - if (typeof errorCallback !== 'function') { + if (typeof errorCallback !== 'function') { console.log('finish failure: failure parameter not a function'); return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); } - }]); - return PushNotification; -}(); + exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); +}; /*! * 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 - */ + /** + * 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); + }, - init: function init(options) { - return new PushNotification(options); - }, + hasPermission: function(successCallback, errorCallback) { + exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); + }, - hasPermission: function hasPermission(successCallback, errorCallback) { - exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); - }, + /** + * PushNotification Object. + * + * Expose the PushNotification object for direct use + * and testing. Typically, you should use the + * .init helper method. + */ - /** - * 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 + PushNotification: PushNotification +}; diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/1024x1024bb.png b/StoneIsland/res/screen/ios/1024x1024bb.png Binary files differindex ee0b3903..ee0b3903 100644 --- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/1024x1024bb.png +++ b/StoneIsland/res/screen/ios/1024x1024bb.png diff --git a/StoneIsland/res/screen/ios/Contents.json b/StoneIsland/res/screen/ios/Contents.json new file mode 100644 index 00000000..56254c1d --- /dev/null +++ b/StoneIsland/res/screen/ios/Contents.json @@ -0,0 +1,213 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-small.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-small@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-small@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-60@2x.png", + "scale" : "3x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "icon.png", + "scale" : "1x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "icon@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60@3x.png", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-small.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-small@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "icon-50.png", + "scale" : "1x" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "icon-50@2x.png", + "scale" : "2x" + }, + { + "size" : "72x72", + "idiom" : "ipad", + "filename" : "icon-72.png", + "scale" : "1x" + }, + { + "size" : "72x72", + "idiom" : "ipad", + "filename" : "icon-72@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "icon-83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "1024x1024bb.png", + "scale" : "1x" + }, + { + "size" : "24x24", + "idiom" : "watch", + "scale" : "2x", + "role" : "notificationCenter", + "subtype" : "38mm" + }, + { + "size" : "27.5x27.5", + "idiom" : "watch", + "scale" : "2x", + "role" : "notificationCenter", + "subtype" : "42mm" + }, + { + "size" : "29x29", + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "watch", + "scale" : "2x", + "role" : "appLauncher", + "subtype" : "38mm" + }, + { + "size" : "44x44", + "idiom" : "watch", + "scale" : "2x", + "role" : "longLook", + "subtype" : "42mm" + }, + { + "size" : "86x86", + "idiom" : "watch", + "scale" : "2x", + "role" : "quickLook", + "subtype" : "38mm" + }, + { + "size" : "98x98", + "idiom" : "watch", + "scale" : "2x", + "role" : "quickLook", + "subtype" : "42mm" + }, + { + "idiom" : "watch-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +}
\ No newline at end of file diff --git a/StoneIsland/res/screen/ios/Default-568h@2x~iphone.png b/StoneIsland/res/screen/ios/Default-568h@2x~iphone.png Binary files differnew file mode 100644 index 00000000..db85b885 --- /dev/null +++ b/StoneIsland/res/screen/ios/Default-568h@2x~iphone.png diff --git a/StoneIsland/res/screen/ios/Default-667h.png b/StoneIsland/res/screen/ios/Default-667h.png Binary files differnew file mode 100644 index 00000000..b299cefa --- /dev/null +++ b/StoneIsland/res/screen/ios/Default-667h.png diff --git a/StoneIsland/res/screen/ios/Default-736h.png b/StoneIsland/res/screen/ios/Default-736h.png Binary files differnew file mode 100644 index 00000000..6c83b6af --- /dev/null +++ b/StoneIsland/res/screen/ios/Default-736h.png diff --git a/StoneIsland/res/screen/ios/Default-Landscape-736h.png b/StoneIsland/res/screen/ios/Default-Landscape-736h.png Binary files differnew file mode 100644 index 00000000..50dcc57f --- /dev/null +++ b/StoneIsland/res/screen/ios/Default-Landscape-736h.png diff --git a/StoneIsland/res/screen/ios/Default-Landscape@2x~ipad.png b/StoneIsland/res/screen/ios/Default-Landscape@2x~ipad.png Binary files differnew file mode 100644 index 00000000..33bf55d9 --- /dev/null +++ b/StoneIsland/res/screen/ios/Default-Landscape@2x~ipad.png diff --git a/StoneIsland/res/screen/ios/Default-Landscape~ipad.png b/StoneIsland/res/screen/ios/Default-Landscape~ipad.png Binary files differnew file mode 100644 index 00000000..076dffbc --- /dev/null +++ b/StoneIsland/res/screen/ios/Default-Landscape~ipad.png diff --git a/StoneIsland/res/screen/ios/Default-Portrait@2x~ipad.png b/StoneIsland/res/screen/ios/Default-Portrait@2x~ipad.png Binary files differnew file mode 100644 index 00000000..b4f2ea21 --- /dev/null +++ b/StoneIsland/res/screen/ios/Default-Portrait@2x~ipad.png diff --git a/StoneIsland/res/screen/ios/Default-Portrait~ipad.png b/StoneIsland/res/screen/ios/Default-Portrait~ipad.png Binary files differnew file mode 100644 index 00000000..0f28a4c8 --- /dev/null +++ b/StoneIsland/res/screen/ios/Default-Portrait~ipad.png diff --git a/StoneIsland/res/screen/ios/Default@2x~iphone.png b/StoneIsland/res/screen/ios/Default@2x~iphone.png Binary files differnew file mode 100644 index 00000000..371b1241 --- /dev/null +++ b/StoneIsland/res/screen/ios/Default@2x~iphone.png diff --git a/StoneIsland/res/screen/ios/Default@2x~universal~anyany.png b/StoneIsland/res/screen/ios/Default@2x~universal~anyany.png Binary files differnew file mode 100644 index 00000000..507cf688 --- /dev/null +++ b/StoneIsland/res/screen/ios/Default@2x~universal~anyany.png diff --git a/StoneIsland/res/screen/ios/Default~iphone.png b/StoneIsland/res/screen/ios/Default~iphone.png Binary files differnew file mode 100644 index 00000000..d898d145 --- /dev/null +++ b/StoneIsland/res/screen/ios/Default~iphone.png diff --git a/StoneIsland/res/screen/ios/icon-40.png b/StoneIsland/res/screen/ios/icon-40.png Binary files differnew file mode 100644 index 00000000..d2617e23 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-40.png diff --git a/StoneIsland/res/screen/ios/icon-40@2x.png b/StoneIsland/res/screen/ios/icon-40@2x.png Binary files differnew file mode 100644 index 00000000..1813fa48 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-40@2x.png diff --git a/StoneIsland/res/screen/ios/icon-50.png b/StoneIsland/res/screen/ios/icon-50.png Binary files differnew file mode 100644 index 00000000..531435f3 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-50.png diff --git a/StoneIsland/res/screen/ios/icon-50@2x.png b/StoneIsland/res/screen/ios/icon-50@2x.png Binary files differnew file mode 100644 index 00000000..dffdf8ba --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-50@2x.png diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60.png b/StoneIsland/res/screen/ios/icon-60.png Binary files differindex dd612e83..dd612e83 100644 --- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60.png +++ b/StoneIsland/res/screen/ios/icon-60.png diff --git a/StoneIsland/res/screen/ios/icon-60@2x.png b/StoneIsland/res/screen/ios/icon-60@2x.png Binary files differnew file mode 100644 index 00000000..23c5b259 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-60@2x.png diff --git a/StoneIsland/res/screen/ios/icon-60@3x.png b/StoneIsland/res/screen/ios/icon-60@3x.png Binary files differnew file mode 100644 index 00000000..da2863a4 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-60@3x.png diff --git a/StoneIsland/res/screen/ios/icon-72.png b/StoneIsland/res/screen/ios/icon-72.png Binary files differnew file mode 100644 index 00000000..3094af16 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-72.png diff --git a/StoneIsland/res/screen/ios/icon-72@2x.png b/StoneIsland/res/screen/ios/icon-72@2x.png Binary files differnew file mode 100644 index 00000000..9515e8dc --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-72@2x.png diff --git a/StoneIsland/res/screen/ios/icon-76.png b/StoneIsland/res/screen/ios/icon-76.png Binary files differnew file mode 100644 index 00000000..93e7a05d --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-76.png diff --git a/StoneIsland/res/screen/ios/icon-76@2x.png b/StoneIsland/res/screen/ios/icon-76@2x.png Binary files differnew file mode 100644 index 00000000..351f06c9 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-76@2x.png diff --git a/StoneIsland/res/screen/ios/icon-83.5@2x.png b/StoneIsland/res/screen/ios/icon-83.5@2x.png Binary files differnew file mode 100644 index 00000000..52bafc1d --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-83.5@2x.png diff --git a/StoneIsland/res/screen/ios/icon-small.png b/StoneIsland/res/screen/ios/icon-small.png Binary files differnew file mode 100644 index 00000000..cbe03b26 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-small.png diff --git a/StoneIsland/res/screen/ios/icon-small@2x.png b/StoneIsland/res/screen/ios/icon-small@2x.png Binary files differnew file mode 100644 index 00000000..8e3a96d6 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-small@2x.png diff --git a/StoneIsland/res/screen/ios/icon-small@3x.png b/StoneIsland/res/screen/ios/icon-small@3x.png Binary files differnew file mode 100644 index 00000000..a40b6358 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon-small@3x.png diff --git a/StoneIsland/res/screen/ios/icon.png b/StoneIsland/res/screen/ios/icon.png Binary files differnew file mode 100644 index 00000000..2c9b6664 --- /dev/null +++ b/StoneIsland/res/screen/ios/icon.png diff --git a/StoneIsland/res/screen/ios/icon@2x.png b/StoneIsland/res/screen/ios/icon@2x.png Binary files differnew file mode 100644 index 00000000..cf5b68db --- /dev/null +++ b/StoneIsland/res/screen/ios/icon@2x.png diff --git a/StoneIsland/www/index.html b/StoneIsland/www/index.html index a7c6bacb..6d52433c 100755 --- a/StoneIsland/www/index.html +++ b/StoneIsland/www/index.html @@ -16,7 +16,7 @@ <meta name="format-detection" content="telephone=no"> <meta name="msapplication-tap-highlight" content="no"> - <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, viewport-fit=cover"> + <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height"> <link rel="stylesheet" type="text/css" href="css/fonts/fonts.css"> <link rel="stylesheet" type="text/css" href="css/fonts/ionicons.css"> <link rel="stylesheet" type="text/css" href="css/vendor/flickity.css"> diff --git a/StoneIsland/www/js/index.js b/StoneIsland/www/js/index.js index 413c3bc5..eb3b32b9 100755 --- a/StoneIsland/www/js/index.js +++ b/StoneIsland/www/js/index.js @@ -82,7 +82,7 @@ var app = (function(){ var image = new Image image.src = "./img/compass-logo.png" } - + if (is_iphone_x) { StatusBar.hide() } diff --git a/StoneIsland/www/js/vendor/util.js b/StoneIsland/www/js/vendor/util.js index d45c4b98..27bdf008 100755 --- a/StoneIsland/www/js/vendor/util.js +++ b/StoneIsland/www/js/vendor/util.js @@ -174,6 +174,7 @@ var browser = (function( ua ) { var is_iphone = (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) var is_ipad = (navigator.userAgent.match(/iPad/i)) var is_ios = is_iphone || is_ipad +var is_iphone_x = isIphoneX() var is_android = (navigator.userAgent.match(/Android/i)) var is_mobile = is_iphone || is_ipad || is_android var is_desktop = ! is_mobile; @@ -185,6 +186,14 @@ else { document.body.parentNode.classList.add("ios") } +function isIphoneX() { + return ( + is_iphone && + !is_ipad && + (window.innerHeight === 812 || window.innerWidth === 812) + ); +} + function selectElementContents(el) { if (window.getSelection && document.createRange) { var sel = window.getSelection(); |
