Commit f057a6a2 by Nabil Sadki

New version

parent f82ba1fb
......@@ -2,7 +2,7 @@
<widget android-versionCode="11500" id="com.allotesteurs.app" version="1.1.5.0" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Allo Testeurs</name>
<description>Découvrir les bon plans à Kénitra et ailleurs!</description>
<author email="contact@allo-testeurs.com" href="https://www.allo-testeurs.com">Allo Testeurs Agency</author>
<author email="nabil.sadki@gmail.com" href="https://www.allo-testeurs.com">Nabil Sadki</author>
<content src="index.html" />
<access origin="*" />
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
......@@ -92,20 +92,22 @@
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="19" />
<preference name="BackupWebStorage" value="none" />
<preference name="fullscreen" value="true" />
<preference name="SplashScreenDelay" value="0" />
<preference name="fullscreen" value="false" />
<preference name="SplashScreenDelay" value="6000" />
<preference name="FadeSplashScreen" value="true" />
<preference name="ShowSplashScreen" value="false" />
<preference name="ShowSplashScreenSpinner" value="false" />
<preference name="ShowSplashScreen" value="true" />
<preference name="ShowSplashScreenSpinner" value="true" />
<preference name="FadeSplashScreenDuration" value="600" />
<preference name="SplashScreenBackgroundColor" value="0xFFFFFFFF" />
<preference name="SplashScreen" value="screen" />
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="StatusBarBackgroundColor" value="#f93129" />
<preference name="StatusBarStyle" value="lightcontent" />
<preference name="GOOGLE_MAPS_ANDROID_API_KEY" value="AIzaSyBqWOnztK-6EKX3FeURqrLK5af_bV3Pz5k" />
<feature name="StatusBar">
<param name="ios-package" onload="true" value="CDVStatusBar" />
</feature>
<engine name="android" spec="^8.1.0" />
<allow-navigation href="http://localhost:8101" sessionid="600eac0d" />
<plugin name="cordova-sqlite-storage" spec="^3.2.0" />
<plugin name="cordova-plugin-advanced-http" spec="^2.1.1">
......@@ -135,4 +137,5 @@
</plugin>
<plugin name="cordova-plugin-network-information" spec="~2.0.2" />
<plugin name="cordova-plugin-qrscanner" spec="~3.0.1" />
<allow-navigation href="http://localhost:8100" sessionid="4d54dadf" />
</widget>
......@@ -4,6 +4,11 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@admob-plus/core": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/@admob-plus/core/-/core-0.9.0.tgz",
"integrity": "sha512-4IXsM8ZjWLfl+9BWRSDdKkjPxXW96oXSJjtUM5c0nyW4IhrOySMVq+oNOS+TUgEM/o/CEDoQ/Jyqi9m7zR1XcQ=="
},
"@angular-devkit/architect": {
"version": "0.13.9",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.9.tgz",
......@@ -901,6 +906,21 @@
"protobufjs": "^6.8.6"
}
},
"@ionic-native/admob-pro": {
"version": "5.22.0",
"resolved": "https://registry.npmjs.org/@ionic-native/admob-pro/-/admob-pro-5.22.0.tgz",
"integrity": "sha512-r2iRs54hyK6pYK4e/P0+uRNsXJA3aJNwRpNLeM00jyXVN49jvGOhNm+4hR/qhiLUEIyNOZdtRydMJ58iv996Hg==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/app-version": {
"version": "5.18.0",
"resolved": "https://registry.npmjs.org/@ionic-native/app-version/-/app-version-5.18.0.tgz",
......@@ -910,11 +930,18 @@
}
},
"@ionic-native/background-geolocation": {
"version": "5.18.0",
"resolved": "https://registry.npmjs.org/@ionic-native/background-geolocation/-/background-geolocation-5.18.0.tgz",
"integrity": "sha512-zyM2Y94LWL/ZJ2rkVzbEG2eGdu9s4HKivYkaq02BAV1zvLz3hlAyhofNCS69iMte4tSAzQG/N62jxpQ+JVPpfg==",
"version": "5.24.0",
"resolved": "https://registry.npmjs.org/@ionic-native/background-geolocation/-/background-geolocation-5.24.0.tgz",
"integrity": "sha512-nj3zMqxxzhywoN59/27kljeFbEHv65fW/jzzq9Rfa9w0vIeU1XMJgioL5ptNnJA54Mw4o1XsHm44nOzI4HIjtQ==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/background-mode": {
......@@ -934,11 +961,18 @@
}
},
"@ionic-native/core": {
"version": "5.18.0",
"resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.18.0.tgz",
"integrity": "sha512-c4UN2h90kJ6s0bHFDe73nDPa0ydR5zhzV1oRxdsA7QItmeeZYgizexL01Lvpg01UaR9JHqBg1KHQJuT8l5k01g==",
"version": "5.22.0-beta-1",
"resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.22.0-beta-1.tgz",
"integrity": "sha512-LXyqhUbFO1EfGncqcz8K662AKQDCjP9tu3899llNRAG5mhP3F6xjdYEgV5CVWIgRDuVrLn/LOmmBQjDp8mecRQ==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/diagnostic": {
......@@ -974,6 +1008,21 @@
"@types/cordova": "^0.0.34"
}
},
"@ionic-native/google-maps": {
"version": "5.0.0-beta.27",
"resolved": "https://registry.npmjs.org/@ionic-native/google-maps/-/google-maps-5.0.0-beta.27.tgz",
"integrity": "sha512-ifVuI3fPt1D9+Fqu6vYyCYdNEI45/S6BRUM1PB0qhs26MbfEXwQvt2tTdw1CITLoBxqzgQcGgh/PadzdeA1xhg==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/google-plus": {
"version": "5.18.0",
"resolved": "https://registry.npmjs.org/@ionic-native/google-plus/-/google-plus-5.18.0.tgz",
......@@ -1467,6 +1516,11 @@
}
}
},
"@mauron85/cordova-plugin-background-geolocation": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@mauron85/cordova-plugin-background-geolocation/-/cordova-plugin-background-geolocation-3.1.0.tgz",
"integrity": "sha512-ZZDwkO5m0Bbi8VDJsO3ssBgXrgCiu43/kOBvSneh5djIFyRrQZJbj6IMNt/hP7F/m7Pmw0x7F5ASXjPMwjEAjg=="
},
"@ngtools/webpack": {
"version": "7.3.9",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.9.tgz",
......@@ -1896,7 +1950,6 @@
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
"dev": true,
"requires": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
......@@ -2014,7 +2067,6 @@
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
......@@ -2047,15 +2099,12 @@
"aproba": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"dev": true
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
},
"are-we-there-yet": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"dev": true,
"optional": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
......@@ -2563,6 +2612,37 @@
"file-uri-to-path": "1.0.0"
}
},
"bl": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz",
"integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==",
"requires": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
},
"dependencies": {
"buffer": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
"integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4"
}
},
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"blob": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
......@@ -2604,7 +2684,6 @@
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"dev": true,
"requires": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
......@@ -2621,14 +2700,12 @@
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
"dev": true
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
"dev": true
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
}
}
},
......@@ -2876,8 +2953,7 @@
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
"dev": true
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
},
"cacache": {
"version": "10.0.4",
......@@ -2993,7 +3069,6 @@
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
......@@ -3004,7 +3079,6 @@
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
......@@ -3041,8 +3115,7 @@
"chownr": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
"integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==",
"dev": true
"integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw=="
},
"chrome-trace-event": {
"version": "1.0.2",
......@@ -3201,11 +3274,19 @@
"object-visit": "^1.0.0"
}
},
"color": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
"integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
"requires": {
"color-convert": "^1.9.1",
"color-string": "^1.5.2"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
......@@ -3213,8 +3294,16 @@
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"color-string": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
"integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
"requires": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
}
},
"colors": {
"version": "1.4.0",
......@@ -3284,7 +3373,6 @@
"version": "2.0.17",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
"integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
"dev": true,
"requires": {
"mime-db": ">= 1.40.0 < 2"
}
......@@ -3293,7 +3381,6 @@
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
"integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
"dev": true,
"requires": {
"accepts": "~1.3.5",
"bytes": "3.0.0",
......@@ -3307,8 +3394,7 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
......@@ -3356,9 +3442,7 @@
"console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
"dev": true,
"optional": true
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
},
"constants-browserify": {
"version": "1.0.0",
......@@ -3370,7 +3454,6 @@
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"dev": true,
"requires": {
"safe-buffer": "5.1.2"
},
......@@ -3378,16 +3461,14 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
"dev": true
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
"convert-source-map": {
"version": "1.7.0",
......@@ -3409,14 +3490,12 @@
"cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
"dev": true
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
"dev": true
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"copy-concurrently": {
"version": "1.0.5",
......@@ -3468,6 +3547,17 @@
"shelljs": "^0.5.3"
}
},
"cordova-browser": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cordova-browser/-/cordova-browser-6.0.0.tgz",
"integrity": "sha512-G61S7fhnVVJC98lvkGeKCVpfFtoW0a1P1Sg9TK+n03g3yupDMIM7XuecWuJ3KEMRhED4+CEc2hauruAff7oXrw==",
"requires": {
"cordova-common": "^3.1.0",
"cordova-serve": "^3.0.0",
"nopt": "^4.0.1",
"shelljs": "^0.5.3"
}
},
"cordova-common": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-3.2.1.tgz",
......@@ -3488,11 +3578,34 @@
"which": "^1.3.0"
}
},
"cordova-plugin-admobpro": {
"version": "2.49.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-admobpro/-/cordova-plugin-admobpro-2.49.0.tgz",
"integrity": "sha512-u517lXjNTuUDRmAhlP/Ay4xx/zIJgZsP+gEAgryV1plSIan7I+kb0lm3kNuuDvvpVexm8QvDO1JHiyh7jN81lg=="
},
"cordova-plugin-advanced-http": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/cordova-plugin-advanced-http/-/cordova-plugin-advanced-http-2.3.1.tgz",
"integrity": "sha512-8GbxrzBN7RTCwdBsVW0g+O7NmKX3M6zALessmm/66qOA/jO+pSd1BQg+abbAMBArRnI0ITOIjEsChjwIjFS06w=="
},
"cordova-plugin-androidx": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-androidx/-/cordova-plugin-androidx-1.0.2.tgz",
"integrity": "sha512-gA0Ugz3xXRndZ5+QV+T2BjigNt5YraC+uDA/gOEM6p4m4ofwqFAPoHA4Q17VIHnRtn9++OYoa1Gi44+l6blGhA==",
"requires": {
"q": "^1.4.1"
}
},
"cordova-plugin-androidx-adapter": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-androidx-adapter/-/cordova-plugin-androidx-adapter-1.1.0.tgz",
"integrity": "sha512-V09W27ViYnh54fR2eilswXt10DrQ1P23fo+3JdbrHqU5HkNfufWojK9dWPzDYQ6xKQkOkUJcEh6tLWxg5hQdgg==",
"requires": {
"performance-now": "^2.1.0",
"q": "^1.4.1",
"recursive-readdir": "^2.2.2"
}
},
"cordova-plugin-app-version": {
"version": "0.1.9",
"resolved": "https://registry.npmjs.org/cordova-plugin-app-version/-/cordova-plugin-app-version-0.1.9.tgz",
......@@ -3518,6 +3631,11 @@
"integrity": "sha1-/Ajzci5n7ve2xnv8mag99q3Quro=",
"dev": true
},
"cordova-plugin-extension": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/cordova-plugin-extension/-/cordova-plugin-extension-1.5.4.tgz",
"integrity": "sha1-k4/KDLAAa6tW/87lBiAb/hsA44Q="
},
"cordova-plugin-file": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-6.0.2.tgz",
......@@ -3528,6 +3646,13 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-google-analytics/-/cordova-plugin-google-analytics-1.8.6.tgz",
"integrity": "sha512-shg8e3ris1MzmhC8roraScc2GEcfe7sVlbKkvrO3wZUAlYr31sf+4wxZr/VQB6tEcPsmTAkoNjGr1zMwoYjMeg=="
},
"cordova-plugin-googlemaps": {
"version": "git+https://github.com/mapsplugin/cordova-plugin-googlemaps.git#c680247ea7ddd614702ebd5f0b78ec83042371e0",
"from": "git+https://github.com/mapsplugin/cordova-plugin-googlemaps.git#multiple_maps",
"requires": {
"cordova-common": "^3.1.0"
}
},
"cordova-plugin-googleplus": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/cordova-plugin-googleplus/-/cordova-plugin-googleplus-8.2.1.tgz",
......@@ -3590,6 +3715,64 @@
"integrity": "sha1-tehezbv+Wu3tQKG/TuI3LmfZb7Q=",
"dev": true
},
"cordova-res": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/cordova-res/-/cordova-res-0.14.0.tgz",
"integrity": "sha512-EKKDHDlzu6a3QburzowbszRgQ2/5Xci/e1Bzu2yvq+2EWPHKAS5fTNPTM66qVrOR3hI2Th8GlijhV64Zn/dPcg==",
"requires": {
"@ionic/utils-fs": "^3.0.0",
"debug": "^4.1.1",
"elementtree": "^0.1.7",
"sharp": "^0.25.1",
"tslib": "^1.9.3"
},
"dependencies": {
"@ionic/utils-fs": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.1.tgz",
"integrity": "sha512-LwfziPHkVata/54dcf8sn/LhShUhgdds411M8v4H6+ugQQO9N+a5TDtFtVnnqSy8Q3uxR15SBWMGyII8i730BA==",
"requires": {
"debug": "^4.0.0",
"fs-extra": "^8.0.1",
"through2": "^3.0.0",
"tslib": "^1.9.0"
}
},
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"through2": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
"integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
"requires": {
"readable-stream": "2 || 3"
}
}
}
},
"cordova-serve": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-3.0.0.tgz",
"integrity": "sha512-h479g/5a0PXn//yiFuMrD5MDEbB+mtihNkWcE6uD/aCh/6z0FRZ9sWH3NfZbHDB+Bp1yGLYsjbH8LZBL8KOQ0w==",
"requires": {
"chalk": "^2.4.1",
"compression": "^1.6.0",
"express": "^4.13.3",
"opn": "^5.3.0",
"which": "^1.3.0"
}
},
"cordova-sqlite-storage": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/cordova-sqlite-storage/-/cordova-sqlite-storage-3.4.1.tgz",
......@@ -3621,8 +3804,7 @@
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cosmiconfig": {
"version": "5.2.1",
......@@ -3789,7 +3971,6 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
......@@ -3805,6 +3986,14 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
},
"decompress-response": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
"integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
"requires": {
"mimic-response": "^2.0.0"
}
},
"dedent": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
......@@ -3814,6 +4003,7 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
"integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
"dev": true,
"requires": {
"is-arguments": "^1.0.4",
"is-date-object": "^1.0.1",
......@@ -3823,6 +4013,11 @@
"regexp.prototype.flags": "^1.2.0"
}
},
"deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
},
"default-gateway": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz",
......@@ -3846,6 +4041,7 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"dev": true,
"requires": {
"object-keys": "^1.0.12"
}
......@@ -3891,11 +4087,6 @@
}
}
},
"defined": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
"integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
},
"del": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
......@@ -3942,15 +4133,12 @@
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"dev": true,
"optional": true
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
"dev": true
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"dependency-graph": {
"version": "0.7.2",
......@@ -3971,8 +4159,7 @@
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
"dev": true
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"detect-indent": {
"version": "4.0.0",
......@@ -3983,6 +4170,11 @@
"repeating": "^2.0.0"
}
},
"detect-libc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
},
"detect-node": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
......@@ -4063,6 +4255,14 @@
"resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
"integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
},
"dom7": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/dom7/-/dom7-2.1.3.tgz",
"integrity": "sha512-QTxHHDox+M6ZFz1zHPAHZKI3JOHY5iY4i9BK2uctlggxKQwRhO3q3HHFq1BKsT25Bm/ySSj70K6Wk/G4bs9rMQ==",
"requires": {
"ssr-window": "^1.0.1"
}
},
"domain-browser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
......@@ -4102,8 +4302,7 @@
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
"dev": true
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"electron-to-chromium": {
"version": "1.3.322",
......@@ -4149,8 +4348,7 @@
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
"dev": true
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"encoding": {
"version": "0.1.12",
......@@ -4164,19 +4362,18 @@
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
"requires": {
"once": "^1.4.0"
}
},
"endent": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/endent/-/endent-1.3.0.tgz",
"integrity": "sha512-C8AryqPPwtydqcpO5AF6k9Bd1EpFkQtvsefJqS3y3n8TG13Jy63MascDxTOULZYqrUde+dK6BjNc6LIMr3iI2A==",
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz",
"integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==",
"requires": {
"dedent": "^0.7.0",
"fast-json-parse": "^1.0.3",
"objectorarray": "^1.0.3"
"objectorarray": "^1.0.4"
}
},
"engine.io": {
......@@ -4338,6 +4535,7 @@
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz",
"integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==",
"dev": true,
"requires": {
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
......@@ -4356,6 +4554,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dev": true,
"requires": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
......@@ -4385,14 +4584,12 @@
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
"dev": true
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"eslint-scope": {
"version": "4.0.3",
......@@ -4434,8 +4631,7 @@
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
"dev": true
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"eventemitter3": {
"version": "4.0.0",
......@@ -4524,11 +4720,15 @@
}
}
},
"expand-template": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
},
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
"dev": true,
"requires": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
......@@ -4565,20 +4765,17 @@
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
"dev": true
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
"dev": true
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
......@@ -4791,7 +4988,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"dev": true,
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
......@@ -4883,14 +5079,6 @@
}
}
},
"for-each": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
"integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
"requires": {
"is-callable": "^1.1.3"
}
},
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
......@@ -4926,8 +5114,7 @@
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
"dev": true
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
},
"fragment-cache": {
"version": "0.2.1",
......@@ -4941,8 +5128,7 @@
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
"dev": true
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"from2": {
"version": "2.3.0",
......@@ -4963,6 +5149,11 @@
"null-check": "^1.0.0"
}
},
"fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
......@@ -5573,7 +5764,8 @@
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
"g": {
"version": "2.0.1",
......@@ -5584,8 +5776,6 @@
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"optional": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
......@@ -5647,6 +5837,11 @@
"assert-plus": "^1.0.0"
}
},
"github-from-package": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4="
},
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
......@@ -6147,6 +6342,11 @@
}
}
},
"hammerjs": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
"integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE="
},
"handle-thing": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
......@@ -6193,6 +6393,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": {
"function-bind": "^1.1.1"
}
......@@ -6232,20 +6433,18 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"has-symbols": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
"dev": true
},
"has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"dev": true,
"optional": true
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
},
"has-value": {
"version": "1.0.0",
......@@ -6350,7 +6549,6 @@
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"dev": true,
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
......@@ -6362,8 +6560,7 @@
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
}
}
},
......@@ -6485,8 +6682,7 @@
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
"dev": true
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"iferr": {
"version": "0.1.5",
......@@ -6659,8 +6855,7 @@
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
},
"inquirer": {
"version": "6.2.1",
......@@ -6765,6 +6960,14 @@
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
},
"ionic-admob": {
"version": "0.19.8",
"resolved": "https://registry.npmjs.org/ionic-admob/-/ionic-admob-0.19.8.tgz",
"integrity": "sha512-QqV5Q6lMGnPxLpIHjzSZa9v8feMou3ZUDARY6yZh/F6uYu4pwVEYviECjabKzW9ygqvWirTjdw/AG9mYGAruiA==",
"requires": {
"@admob-plus/core": "^0.9.0"
}
},
"ionic-image-loader": {
"version": "6.3.3",
"resolved": "https://registry.npmjs.org/ionic-image-loader/-/ionic-image-loader-6.3.3.tgz",
......@@ -6790,8 +6993,7 @@
"ipaddr.js": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
"integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
"dev": true
"integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
},
"is-accessor-descriptor": {
"version": "0.1.6",
......@@ -6816,7 +7018,8 @@
"is-arguments": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
"integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
"integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
"dev": true
},
"is-arrayish": {
"version": "0.2.1",
......@@ -6842,7 +7045,8 @@
"is-callable": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
"integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q=="
"integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
"dev": true
},
"is-data-descriptor": {
"version": "0.1.4",
......@@ -6867,7 +7071,8 @@
"is-date-object": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
"dev": true
},
"is-descriptor": {
"version": "0.1.6",
......@@ -7000,6 +7205,7 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
"integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
......@@ -7013,6 +7219,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
"integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
"dev": true,
"requires": {
"has-symbols": "^1.0.1"
}
......@@ -7039,14 +7246,12 @@
"is-wsl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
"integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
"dev": true
"integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isbinaryfile": {
"version": "3.0.3",
......@@ -8098,8 +8303,7 @@
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
"dev": true
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"mem": {
"version": "4.3.0",
......@@ -8144,14 +8348,12 @@
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
"dev": true
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
"dev": true
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"micromatch": {
"version": "3.1.10",
......@@ -8187,20 +8389,17 @@
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dev": true
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.42.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz",
"integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==",
"dev": true
"integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ=="
},
"mime-types": {
"version": "2.1.25",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz",
"integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==",
"dev": true,
"requires": {
"mime-db": "1.42.0"
}
......@@ -8211,6 +8410,11 @@
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
"mimic-response": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
"integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA=="
},
"mini-css-extract-plugin": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz",
......@@ -8335,7 +8539,6 @@
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
"minimist": "0.0.8"
},
......@@ -8343,11 +8546,15 @@
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
}
}
},
"mkdirp-classic": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz",
"integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g=="
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
......@@ -8365,8 +8572,7 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"multicast-dns": {
"version": "6.2.3",
......@@ -8414,11 +8620,15 @@
"to-regex": "^3.0.1"
}
},
"napi-build-utils": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
},
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
"dev": true
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
"neo-async": {
"version": "2.6.1",
......@@ -8431,6 +8641,19 @@
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
},
"node-abi": {
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.16.0.tgz",
"integrity": "sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA==",
"requires": {
"semver": "^5.4.1"
}
},
"node-addon-api": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz",
"integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA=="
},
"node-fetch": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
......@@ -8635,10 +8858,15 @@
}
}
},
"noop-logger": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
"integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI="
},
"nopt": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
"integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
"integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
......@@ -8763,8 +8991,6 @@
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"dev": true,
"optional": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
......@@ -8798,8 +9024,7 @@
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-component": {
"version": "0.0.3",
......@@ -8841,17 +9066,20 @@
"object-inspect": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
"integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
"integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
"dev": true
},
"object-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz",
"integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ=="
"integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==",
"dev": true
},
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
},
"object-visit": {
"version": "1.0.1",
......@@ -8866,6 +9094,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
"dev": true,
"requires": {
"define-properties": "^1.1.2",
"function-bind": "^1.1.1",
......@@ -8883,12 +9112,9 @@
}
},
"objectorarray": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.3.tgz",
"integrity": "sha512-kPoflSYkAf/Onvjr4ZLaq37vDuOXjVzfwLCRuORRzYGdXkHa/vacPT0RgR+KmtkwOYFcxTMM62BRrZk8GGKHjw==",
"requires": {
"tape": "^4.8.0"
}
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.4.tgz",
"integrity": "sha512-91k8bjcldstRz1bG6zJo8lWD7c6QXcB4nTDUqiEvIL1xAsLoZlOOZZG+nd6YPz+V7zY1580J4Xxh1vZtyv4i/w=="
},
"obuf": {
"version": "1.1.2",
......@@ -8900,7 +9126,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"dev": true,
"requires": {
"ee-first": "1.1.1"
}
......@@ -8908,8 +9133,7 @@
"on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
"dev": true
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
"once": {
"version": "1.4.0",
......@@ -8949,7 +9173,6 @@
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
"integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
"dev": true,
"requires": {
"is-wsl": "^1.1.0"
}
......@@ -9275,8 +9498,7 @@
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"dev": true
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"pascalcase": {
"version": "0.1.1",
......@@ -9330,13 +9552,13 @@
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
"dev": true
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"path-type": {
"version": "3.0.0",
......@@ -9363,8 +9585,7 @@
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"pify": {
"version": "3.0.0",
......@@ -9499,6 +9720,39 @@
"integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
"dev": true
},
"prebuild-install": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz",
"integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==",
"requires": {
"detect-libc": "^1.0.3",
"expand-template": "^2.0.3",
"github-from-package": "0.0.0",
"minimist": "^1.2.0",
"mkdirp": "^0.5.1",
"napi-build-utils": "^1.0.1",
"node-abi": "^2.7.0",
"noop-logger": "^0.1.1",
"npmlog": "^4.0.1",
"pump": "^3.0.0",
"rc": "^1.2.7",
"simple-get": "^3.0.3",
"tar-fs": "^2.0.0",
"tunnel-agent": "^0.6.0",
"which-pm-runs": "^1.0.0"
},
"dependencies": {
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
}
}
},
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
......@@ -9507,8 +9761,7 @@
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"promise": {
"version": "7.3.1",
......@@ -9714,7 +9967,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
"integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
"dev": true,
"requires": {
"forwarded": "~0.1.2",
"ipaddr.js": "1.9.0"
......@@ -9841,14 +10093,12 @@
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"dev": true
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"dev": true,
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
......@@ -9859,8 +10109,7 @@
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
"dev": true
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
}
}
},
......@@ -9874,6 +10123,17 @@
"schema-utils": "^1.0.0"
}
},
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
}
},
"read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
......@@ -9962,7 +10222,6 @@
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
......@@ -9976,8 +10235,7 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
......@@ -10001,6 +10259,14 @@
"resolve": "^1.1.6"
}
},
"recursive-readdir": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
"integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
"requires": {
"minimatch": "3.0.4"
}
},
"redent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
......@@ -10044,6 +10310,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
"integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.1"
......@@ -10160,6 +10427,7 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz",
"integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
......@@ -10195,14 +10463,6 @@
"signal-exit": "^3.0.2"
}
},
"resumer": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
"integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
"requires": {
"through": "~2.3.4"
}
},
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
......@@ -10266,6 +10526,11 @@
"tslib": "^1.9.0"
}
},
"rxjs-compat": {
"version": "6.5.4",
"resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.5.4.tgz",
"integrity": "sha512-rkn+lbOHUQOurdd74J/hjmDsG9nFx0z66fvnbs8M95nrtKvNqCKdk7iZqdY51CGmDemTQk+kUPy4s8HVOHtkfA=="
},
"safe-buffer": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
......@@ -10461,7 +10726,6 @@
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
"dev": true,
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
......@@ -10481,8 +10745,7 @@
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
}
}
},
......@@ -10537,7 +10800,6 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
"dev": true,
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
......@@ -10548,8 +10810,7 @@
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"set-immediate-shim": {
"version": "1.0.1",
......@@ -10589,8 +10850,7 @@
"setprototypeof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
"dev": true
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"sha.js": {
"version": "2.4.11",
......@@ -10621,6 +10881,82 @@
}
}
},
"sharp": {
"version": "0.25.2",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.2.tgz",
"integrity": "sha512-l1GN0kFNtJr3U9i9pt7a+vo2Ij0xv4tTKDIPx8W6G9WELhPwrMyZZJKAAQNBSI785XB4uZfS5Wpz8C9jWV4AFQ==",
"requires": {
"color": "^3.1.2",
"detect-libc": "^1.0.3",
"node-addon-api": "^2.0.0",
"npmlog": "^4.1.2",
"prebuild-install": "^5.3.3",
"semver": "^7.1.3",
"simple-get": "^3.1.0",
"tar": "^6.0.1",
"tunnel-agent": "^0.6.0"
},
"dependencies": {
"chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
},
"fs-minipass": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
"integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
"requires": {
"minipass": "^3.0.0"
}
},
"minipass": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz",
"integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==",
"requires": {
"yallist": "^4.0.0"
}
},
"minizlib": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz",
"integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==",
"requires": {
"minipass": "^3.0.0",
"yallist": "^4.0.0"
}
},
"mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
},
"semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
},
"tar": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz",
"integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==",
"requires": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
"minipass": "^3.0.0",
"minizlib": "^2.1.0",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
}
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
},
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
......@@ -10642,8 +10978,37 @@
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
"simple-concat": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
"integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY="
},
"simple-get": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz",
"integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
"requires": {
"decompress-response": "^4.2.0",
"once": "^1.3.1",
"simple-concat": "^1.0.0"
}
},
"simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
"integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
"requires": {
"is-arrayish": "^0.3.1"
},
"dependencies": {
"is-arrayish": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
}
}
},
"slash": {
"version": "1.0.0",
......@@ -11186,6 +11551,11 @@
"tweetnacl": "~0.14.0"
}
},
"ssr-window": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-1.0.1.tgz",
"integrity": "sha512-dgFqB+f00LJTEgb6UXhx0h+SrG50LJvti2yMKMqAgzfUmUXZrLSv2fjULF7AWGwK25EXu8+smLR3jYsJQChPsg=="
},
"ssri": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
......@@ -11228,8 +11598,7 @@
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"dev": true
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"stdout-stream": {
"version": "1.4.1",
......@@ -11336,20 +11705,11 @@
"resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
"integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg=="
},
"string.prototype.trim": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz",
"integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==",
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.1",
"function-bind": "^1.1.1"
}
},
"string.prototype.trimleft": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
"integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
"function-bind": "^1.1.1"
......@@ -11359,6 +11719,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
"integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
"function-bind": "^1.1.1"
......@@ -11368,7 +11729,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.0"
},
......@@ -11376,8 +11736,7 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
......@@ -11410,6 +11769,11 @@
"get-stdin": "^4.0.1"
}
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
"style-loader": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
......@@ -11501,6 +11865,15 @@
}
}
},
"swiper": {
"version": "5.3.8",
"resolved": "https://registry.npmjs.org/swiper/-/swiper-5.3.8.tgz",
"integrity": "sha512-bCxrayTgzC2bZBRuFwAx7T4exWeHqMADBpcuTQ7PNCOIIzJRPqNh4ySIvW06LEEU3Q0KncaNre4hrn+jXcWivQ==",
"requires": {
"dom7": "^2.1.3",
"ssr-window": "^1.0.1"
}
},
"symbol-observable": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
......@@ -11513,27 +11886,6 @@
"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
"dev": true
},
"tape": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/tape/-/tape-4.12.1.tgz",
"integrity": "sha512-xoK2ariLmdGxqyXhhxfIZlr0czNB8hNJeVQmHN4D7ZyBn30GUoa4q2oM4cX8jNhnj1mtILXn1ugbfxc0tTDKtA==",
"requires": {
"deep-equal": "~1.1.1",
"defined": "~1.0.0",
"for-each": "~0.3.3",
"function-bind": "~1.1.1",
"glob": "~7.1.6",
"has": "~1.0.3",
"inherits": "~2.0.4",
"is-regex": "~1.0.5",
"minimist": "~1.2.0",
"object-inspect": "~1.7.0",
"resolve": "~1.14.1",
"resumer": "~0.0.0",
"string.prototype.trim": "~1.2.1",
"through": "~2.3.8"
}
},
"tar": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
......@@ -11546,6 +11898,52 @@
"inherits": "2"
}
},
"tar-fs": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz",
"integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==",
"requires": {
"chownr": "^1.1.1",
"mkdirp-classic": "^0.5.2",
"pump": "^3.0.0",
"tar-stream": "^2.0.0"
},
"dependencies": {
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
}
}
},
"tar-stream": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz",
"integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==",
"requires": {
"bl": "^4.0.1",
"end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
},
"dependencies": {
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"terser": {
"version": "3.17.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
......@@ -11751,7 +12149,8 @@
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
},
"through2": {
"version": "2.0.5",
......@@ -11850,8 +12249,7 @@
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
"dev": true
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"tough-cookie": {
"version": "2.4.3",
......@@ -11966,7 +12364,6 @@
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"requires": {
"safe-buffer": "^5.0.1"
}
......@@ -11981,7 +12378,6 @@
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"dev": true,
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
......@@ -12035,9 +12431,9 @@
"dev": true
},
"underscore": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
"integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz",
"integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ=="
},
"union-value": {
"version": "1.0.1",
......@@ -12077,8 +12473,7 @@
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
"dev": true
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"unset-value": {
"version": "1.0.0",
......@@ -12209,14 +12604,12 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
"dev": true
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"uuid": {
"version": "3.3.3",
......@@ -12246,8 +12639,7 @@
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
"dev": true
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"verror": {
"version": "1.10.0",
......@@ -12778,12 +13170,15 @@
"dev": true,
"optional": true
},
"which-pm-runs": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
"integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs="
},
"wide-align": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"dev": true,
"optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
......
......@@ -21,14 +21,16 @@
"@angular/platform-browser": "^7.2.2",
"@angular/platform-browser-dynamic": "^7.2.2",
"@angular/router": "^7.2.2",
"@ionic-native/admob-pro": "^5.22.0",
"@ionic-native/app-version": "^5.11.0",
"@ionic-native/background-geolocation": "^5.8.0",
"@ionic-native/background-geolocation": "^5.24.0",
"@ionic-native/background-mode": "^5.11.0",
"@ionic-native/camera": "^5.19.0",
"@ionic-native/core": "^5.0.0",
"@ionic-native/core": "^5.22.0-beta-1",
"@ionic-native/diagnostic": "^5.8.0",
"@ionic-native/file": "^5.14.0",
"@ionic-native/file-path": "^5.14.0",
"@ionic-native/google-maps": "^5.0.0-beta.27",
"@ionic-native/google-plus": "^5.0.0",
"@ionic-native/http": "^5.8.0",
"@ionic-native/ionic-webview": "^5.14.0",
......@@ -40,30 +42,42 @@
"@ionic-native/status-bar": "^5.0.0",
"@ionic/angular": "^4.1.0",
"@ionic/storage": "^2.2.0",
"@mauron85/cordova-plugin-background-geolocation": "^3.1.0",
"cordova-android": "^8.1.0",
"cordova-browser": "6.0.0",
"cordova-plugin-admobpro": "^2.49.0",
"cordova-plugin-advanced-http": "^2.1.1",
"cordova-plugin-androidx": "^1.0.2",
"cordova-plugin-androidx-adapter": "^1.1.0",
"cordova-plugin-app-version": "^0.1.9",
"cordova-plugin-background-mode": "git+https://github.com/sercatven/cordova-plugin-background-mode.git",
"cordova-plugin-badge": "^0.8.8",
"cordova-plugin-camera": "^4.1.0",
"cordova-plugin-extension": "^1.5.4",
"cordova-plugin-file": "^6.0.1",
"cordova-plugin-google-analytics": "^1.8.6",
"cordova-plugin-googlemaps": "git+https://github.com/mapsplugin/cordova-plugin-googlemaps.git#multiple_maps",
"cordova-plugin-googleplus": "^8.0.0",
"cordova-plugin-local-notification": "^0.9.0-beta.2",
"cordova-plugin-play-games-services": "^1.1.2",
"cordova-plugin-qrscanner": "^3.0.1",
"cordova-plugin-request-location-accuracy": "^2.3.0",
"cordova-res": "^0.14.0",
"cordova-sqlite-storage": "^3.2.0",
"cordova.plugins.diagnostic": "^5.0.0",
"core-js": "^2.6.11",
"firebase": "^6.6.1",
"g": "^2.0.1",
"hammerjs": "^2.0.8",
"ionic-admob": "^0.19.8",
"ionic-image-loader": "^6.3.3",
"leaflet": "^1.5.1",
"leaflet.markercluster": "^1.4.1",
"path": "^0.12.7",
"rxjs": "~6.5.1",
"rxjs-compat": "^6.5.4",
"sweetalert": "^2.1.2",
"swiper": "^5.3.8",
"tslib": "^1.9.0",
"zone.js": "~0.8.29"
},
......@@ -126,6 +140,8 @@
"cordova-plugin-app-version": {},
"cordova-plugin-file": {},
"cordova-plugin-googleplus": {
"REVERSED_CLIENT_ID": "com.googleusercontent.apps.RaNdOmVaLuEs",
"WEB_APPLICATION_CLIENT_ID": "RaNdoMvAlUeS.apps.googleusercontent.com",
"PLAY_SERVICES_VERSION": "11.8.0"
},
"cordova-plugin-google-analytics": {
......@@ -135,7 +151,25 @@
"cordova-plugin-qrscanner": {},
"cordova-plugin-camera": {
"ANDROID_SUPPORT_V4_VERSION": "27.+"
}
},
"cordova-plugin-androidx": {},
"cordova-plugin-androidx-adapter": {},
"cordova-plugin-admobpro": {
"PLAY_SERVICES_VERSION": "16.0.0",
"ADMOB_ANDROID_APP_ID": "ca-app-pub-8578682421434111~1583133422",
"ADMOB_APP_ID": "ca-app-pub-8578682421434111~1583133422"
},
"cordova-plugin-background-geolocation": {
"GOOGLE_PLAY_SERVICES_VERSION": "11+",
"ANDROID_SUPPORT_LIBRARY_VERSION": "26+",
"ICON": "@mipmap/icon",
"SMALL_ICON": "@mipmap/icon",
"ACCOUNT_NAME": "@string/app_name",
"ACCOUNT_LABEL": "@string/app_name",
"ACCOUNT_TYPE": "$PACKAGE_NAME.account",
"CONTENT_AUTHORITY": "$PACKAGE_NAME"
},
"cordova-plugin-googlemaps": {}
},
"platforms": [
"android"
......
resources/ios/icon/icon-1024.png

47.6 KB | W: | H:

resources/ios/icon/icon-1024.png

46.9 KB | W: | H:

resources/ios/icon/icon-1024.png
resources/ios/icon/icon-1024.png
resources/ios/icon/icon-1024.png
resources/ios/icon/icon-1024.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-20.png

905 Bytes | W: | H:

resources/ios/icon/icon-20.png

809 Bytes | W: | H:

resources/ios/icon/icon-20.png
resources/ios/icon/icon-20.png
resources/ios/icon/icon-20.png
resources/ios/icon/icon-20.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-20@2x.png

2.32 KB | W: | H:

resources/ios/icon/icon-20@2x.png

2.02 KB | W: | H:

resources/ios/icon/icon-20@2x.png
resources/ios/icon/icon-20@2x.png
resources/ios/icon/icon-20@2x.png
resources/ios/icon/icon-20@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-20@3x.png

3.75 KB | W: | H:

resources/ios/icon/icon-20@3x.png

3.2 KB | W: | H:

resources/ios/icon/icon-20@3x.png
resources/ios/icon/icon-20@3x.png
resources/ios/icon/icon-20@3x.png
resources/ios/icon/icon-20@3x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-24@2x.png

2.87 KB | W: | H:

resources/ios/icon/icon-24@2x.png

2.47 KB | W: | H:

resources/ios/icon/icon-24@2x.png
resources/ios/icon/icon-24@2x.png
resources/ios/icon/icon-24@2x.png
resources/ios/icon/icon-24@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-27.5@2x.png

3.36 KB | W: | H:

resources/ios/icon/icon-27.5@2x.png

2.91 KB | W: | H:

resources/ios/icon/icon-27.5@2x.png
resources/ios/icon/icon-27.5@2x.png
resources/ios/icon/icon-27.5@2x.png
resources/ios/icon/icon-27.5@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-29.png

1.56 KB | W: | H:

resources/ios/icon/icon-29.png

1.39 KB | W: | H:

resources/ios/icon/icon-29.png
resources/ios/icon/icon-29.png
resources/ios/icon/icon-29.png
resources/ios/icon/icon-29.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-29@2x.png

3.58 KB | W: | H:

resources/ios/icon/icon-29@2x.png

3.06 KB | W: | H:

resources/ios/icon/icon-29@2x.png
resources/ios/icon/icon-29@2x.png
resources/ios/icon/icon-29@2x.png
resources/ios/icon/icon-29@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-29@3x.png

5.53 KB | W: | H:

resources/ios/icon/icon-29@3x.png

4.78 KB | W: | H:

resources/ios/icon/icon-29@3x.png
resources/ios/icon/icon-29@3x.png
resources/ios/icon/icon-29@3x.png
resources/ios/icon/icon-29@3x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-40.png

2.32 KB | W: | H:

resources/ios/icon/icon-40.png

2.02 KB | W: | H:

resources/ios/icon/icon-40.png
resources/ios/icon/icon-40.png
resources/ios/icon/icon-40.png
resources/ios/icon/icon-40.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-40@2x.png

5.03 KB | W: | H:

resources/ios/icon/icon-40@2x.png

4.38 KB | W: | H:

resources/ios/icon/icon-40@2x.png
resources/ios/icon/icon-40@2x.png
resources/ios/icon/icon-40@2x.png
resources/ios/icon/icon-40@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-40@3x.png

7.8 KB | W: | H:

resources/ios/icon/icon-40@3x.png

6.69 KB | W: | H:

resources/ios/icon/icon-40@3x.png
resources/ios/icon/icon-40@3x.png
resources/ios/icon/icon-40@3x.png
resources/ios/icon/icon-40@3x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-44@2x.png

5.73 KB | W: | H:

resources/ios/icon/icon-44@2x.png

4.87 KB | W: | H:

resources/ios/icon/icon-44@2x.png
resources/ios/icon/icon-44@2x.png
resources/ios/icon/icon-44@2x.png
resources/ios/icon/icon-44@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-50.png

3.04 KB | W: | H:

resources/ios/icon/icon-50.png

2.65 KB | W: | H:

resources/ios/icon/icon-50.png
resources/ios/icon/icon-50.png
resources/ios/icon/icon-50.png
resources/ios/icon/icon-50.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-50@2x.png

6.37 KB | W: | H:

resources/ios/icon/icon-50@2x.png

5.47 KB | W: | H:

resources/ios/icon/icon-50@2x.png
resources/ios/icon/icon-50@2x.png
resources/ios/icon/icon-50@2x.png
resources/ios/icon/icon-50@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-60.png

3.75 KB | W: | H:

resources/ios/icon/icon-60.png

3.2 KB | W: | H:

resources/ios/icon/icon-60.png
resources/ios/icon/icon-60.png
resources/ios/icon/icon-60.png
resources/ios/icon/icon-60.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-60@2x.png

7.8 KB | W: | H:

resources/ios/icon/icon-60@2x.png

6.69 KB | W: | H:

resources/ios/icon/icon-60@2x.png
resources/ios/icon/icon-60@2x.png
resources/ios/icon/icon-60@2x.png
resources/ios/icon/icon-60@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-60@3x.png

11.6 KB | W: | H:

resources/ios/icon/icon-60@3x.png

9.78 KB | W: | H:

resources/ios/icon/icon-60@3x.png
resources/ios/icon/icon-60@3x.png
resources/ios/icon/icon-60@3x.png
resources/ios/icon/icon-60@3x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-72.png

4.58 KB | W: | H:

resources/ios/icon/icon-72.png

3.94 KB | W: | H:

resources/ios/icon/icon-72.png
resources/ios/icon/icon-72.png
resources/ios/icon/icon-72.png
resources/ios/icon/icon-72.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-72@2x.png

9.3 KB | W: | H:

resources/ios/icon/icon-72@2x.png

7.9 KB | W: | H:

resources/ios/icon/icon-72@2x.png
resources/ios/icon/icon-72@2x.png
resources/ios/icon/icon-72@2x.png
resources/ios/icon/icon-72@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-76.png

4.82 KB | W: | H:

resources/ios/icon/icon-76.png

4.15 KB | W: | H:

resources/ios/icon/icon-76.png
resources/ios/icon/icon-76.png
resources/ios/icon/icon-76.png
resources/ios/icon/icon-76.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-76@2x.png

9.87 KB | W: | H:

resources/ios/icon/icon-76@2x.png

8.31 KB | W: | H:

resources/ios/icon/icon-76@2x.png
resources/ios/icon/icon-76@2x.png
resources/ios/icon/icon-76@2x.png
resources/ios/icon/icon-76@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-83.5@2x.png

10.7 KB | W: | H:

resources/ios/icon/icon-83.5@2x.png

9.22 KB | W: | H:

resources/ios/icon/icon-83.5@2x.png
resources/ios/icon/icon-83.5@2x.png
resources/ios/icon/icon-83.5@2x.png
resources/ios/icon/icon-83.5@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-86@2x.png

11.1 KB | W: | H:

resources/ios/icon/icon-86@2x.png

9.4 KB | W: | H:

resources/ios/icon/icon-86@2x.png
resources/ios/icon/icon-86@2x.png
resources/ios/icon/icon-86@2x.png
resources/ios/icon/icon-86@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-98@2x.png

12.7 KB | W: | H:

resources/ios/icon/icon-98@2x.png

10.8 KB | W: | H:

resources/ios/icon/icon-98@2x.png
resources/ios/icon/icon-98@2x.png
resources/ios/icon/icon-98@2x.png
resources/ios/icon/icon-98@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon.png

3.53 KB | W: | H:

resources/ios/icon/icon.png

3.03 KB | W: | H:

resources/ios/icon/icon.png
resources/ios/icon/icon.png
resources/ios/icon/icon.png
resources/ios/icon/icon.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon@2x.png

7.36 KB | W: | H:

resources/ios/icon/icon@2x.png

6.36 KB | W: | H:

resources/ios/icon/icon@2x.png
resources/ios/icon/icon@2x.png
resources/ios/icon/icon@2x.png
resources/ios/icon/icon@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/splash.png

2.47 MB | W: | H:

resources/splash.png

2.48 MB | W: | H:

resources/splash.png
resources/splash.png
resources/splash.png
resources/splash.png
  • 2-up
  • Swipe
  • Onion skin
import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
import { AuthGuardService } from './services/auth-guard.service';
const routes: Routes = [
{ path: '', redirectTo: 'start', pathMatch: 'full' },
{ path: 'start', loadChildren: './pages/start/start.module#StartPageModule' },
{ path: 'login', loadChildren: './pages/compte/login/login.module#LoginPageModule' },
{ path: 'mainslider', loadChildren: './pages/mainslider/mainslider.module#MainsliderPageModule' },
{
path: 'app',
loadChildren: './pages/menu/menu.module#MenuPageModule',
canActivate: [AuthGuardService]
},
{
path: 'offre-details',
loadChildren: './pages/offres/offre-details/offre-details.module#OffreDetailsPageModule',
canActivate: [AuthGuardService]
},
{ path: 'login-help', loadChildren: './modals/login-help/login-help.module#LoginHelpPageModule' },
{ path: 'offres-carte-filters', loadChildren: './modals/offres-carte-filters/offres-carte-filters.module#OffresCarteFiltersPageModule' },
{ path: 'create-account', loadChildren: './pages/compte/create/create.module#CreatePageModule' }, { path: 'success', loadChildren: './modals/alerts/success/success.module#SuccessPageModule' },
import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
import { AuthGuardService } from './services/auth-guard.service';
const routes: Routes = [
{ path: '', redirectTo: 'start', pathMatch: 'full' },
{ path: 'start', loadChildren: './pages/start/start.module#StartPageModule' },
{ path: 'login', loadChildren: './pages/compte/login/login.module#LoginPageModule' },
{ path: 'mainslider', loadChildren: './pages/mainslider/mainslider.module#MainsliderPageModule' },
{
path: 'app',
loadChildren: './pages/menu/menu.module#MenuPageModule',
// canActivate: [AuthGuardService]
},
{
path: 'offre-details',
loadChildren: './pages/offres/offre-details/offre-details.module#OffreDetailsPageModule',
// canActivate: [AuthGuardService]
},
{ path: 'login-help', loadChildren: './modals/login-help/login-help.module#LoginHelpPageModule' },
{ path: 'offres-carte-filters', loadChildren: './modals/offres-carte-filters/offres-carte-filters.module#OffresCarteFiltersPageModule' },
{ path: 'create-account', loadChildren: './pages/compte/create/create.module#CreatePageModule' },
{ path: 'success', loadChildren: './modals/alerts/success/success.module#SuccessPageModule' },
{ path: 'error', loadChildren: './modals/alerts/error/error.module#ErrorPageModule' },
// { path: 'scroller', loadChildren: './pages/offres/scroller/scroller.module#ScrollerPageModule' },
// { path: 'mode-carte', loadChildren: './pages/offres/mode-carte/mode-carte.module#ModeCartePageModule' },
];
];
@NgModule({
imports: [
RouterModule.forRoot(
routes,
{
preloadingStrategy: PreloadAllModules
}
)
],
exports: [RouterModule]
})
export class AppRoutingModule { }
@NgModule({
imports: [
RouterModule.forRoot(
routes,
{
preloadingStrategy: PreloadAllModules
}
)
],
exports: [RouterModule]
})
export class AppRoutingModule { }
......@@ -40,7 +40,8 @@ export class AppComponent {
initializeApp() {
this.platform.ready().then(() => {
setTimeout(() => this.appStarted = true, 3000);
this.statusBar.styleDefault();
// this.statusBar.styleDefault();
// this.statusBar.backgroundColorByHexString('#f93129');
this.splashScreen.hide();
// Start GA tracking
......@@ -48,35 +49,60 @@ export class AppComponent {
this.ga.startTrackerWithId(Config.GA_TRACKID)
.then(() => {
console.log('tracker started');
console.log('tracker started');
this.appVersion.getVersionNumber().then((versionNumber) => {
this.ga.setAppVersion(versionNumber);
});
})
this.appVersion.getVersionNumber().then((versionNumber) => {
this.ga.setAppVersion(versionNumber);
});
})
.catch(e => {
console.log('Error starting GoogleAnalytics == ' + e);
});
// Set params
this.setDefaultParams();
this.setDefaultParams().then(() => {
this._AUTH.doRefreshToken().then(
() => {
console.log('hnaaa');
this._AUTH.authState.next(true);
this._AUTH.authState.subscribe(state => {
if (state) {
this.router.navigate(['app/dashboard']);
} else {
this.router.navigate(['login']);
}
});
},
err => {
this.storage.get('APP_PARAMS').then(appParams => {
if (appParams.PARAM_mainslider) {
this.router.navigate(['login']);
} else {
this.router.navigate(['mainslider']);
}
});
});
// this._AUTH.authState.subscribe(state => {
// console.log(state);
// if (state) {
// this.router.navigate(['app/dashboard']);
// } else {
// this.storage.get('APP_PARAMS').then(appParams => {
// if (appParams.PARAM_mainslider) {
// this.router.navigate(['login']);
// } else {
// this.router.navigate(['mainslider']);
// }
// });
// }
// });
});
// Set locator
// this.setLocator();
this._AUTH.authState.subscribe(state => {
if (state) {
this.storage.get('APP_PARAMS').then(appParams => {
if (appParams.PARAM_mainslider) {
this.router.navigate(['app/dashboard']);
} else {
this.router.navigate(['mainslider']);
}
});
} else {
this.router.navigate(['login']);
}
});
// this.storage.get('wpUser').then((wpUser) => {
// if (wpUser) {
// this.router.navigateByUrl('/app/dashboard', { replaceUrl: true });
......@@ -103,24 +129,27 @@ export class AppComponent {
}
setDefaultParams() {
this.storage.get('APP_PARAMS').then((val) => {
if (val === null) {
this.storage.set('APP_PARAMS', {
PARAM_mainslider: false,
PARAM_geolocate: true,
PARAM_geoarea: 1000,
PARAM_notiftime: 2880,
PARAM_trackdelay: 60000,
PARAM_notifnbr: 'all',
NOTIF_shownpartners: [],
});
this.storage.set('APP_QUESTS', {});
}
});
this.storage.get('WISHLIST').then((val) => {
if (val === null) {
this.storage.set('WISHLIST', []);
}
return new Promise<any>((resolve, reject) => {
this.storage.get('APP_PARAMS').then((val) => {
if (val === null) {
this.storage.set('APP_PARAMS', {
PARAM_mainslider: false,
PARAM_geolocate: true,
PARAM_geoarea: 1000,
PARAM_notiftime: 2880,
PARAM_trackdelay: 60000,
PARAM_notifnbr: 'all',
NOTIF_shownpartners: [],
});
this.storage.set('APP_QUESTS', {});
}
this.storage.get('WISHLIST').then((val) => {
if (val === null) {
this.storage.set('WISHLIST', []);
}
resolve();
}, err => reject(err));
});
});
}
......
......@@ -26,6 +26,8 @@ import { File } from '@ionic-native/File/ngx';
import { WebView } from '@ionic-native/ionic-webview/ngx';
import { FilePath } from '@ionic-native/file-path/ngx';
import { QRScanner, QRScannerStatus } from '@ionic-native/qr-scanner/ngx';
// import { AdMob } from "ionic-admob";
import { AdMobPro } from '@ionic-native/admob-pro/ngx';
import { Network } from '@ionic-native/network/ngx';
import { environment } from 'src/environments/environment';
import { AuthService } from './services/auth.service';
......@@ -80,8 +82,9 @@ import { PipesModule } from './pipes/pipes.module';
AuthService,
AuthGuardService,
GoogleAnalytics,
Network
Network,
// AdMob
AdMobPro
],
bootstrap: [AppComponent]
})
......
......@@ -5,6 +5,19 @@
// file can hold Sass mixins, functions, and placeholder classes to be imported
// and used throughout the application.
//Fonts definition
@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;0,800;1,300;1,400;1,600;1,700;1,800&display=swap');
$white: #fcfcfc;
$gray: #cbcdd3;
$dark: #777777;
$error: #ef8d9c;
$orange: #ffc39e;
$success: #b0db7d;
$secondary: #99dbb4;
$font: "Lato", sans-serif;
.map-popup {
.leaflet-popup-content {
width: 80vw !important;
......@@ -31,7 +44,7 @@
}
div.start {
background: #f93129;
// background: #f93129;
width: 100vw;
height: 100vh;
display: flex;
......@@ -54,196 +67,189 @@ ion-alert {
div.hide {
display: none !important;
}
ion-modal.modal-filters .modal-wrapper {
width: 90vw !important;
height: 50vh !important;
border-radius: 10px;
}
ion-select.wide-select {
max-width: 65% !important;
}
.swiper-pagination {
.swiper-pagination-bullet {
opacity: 1 !important;
ion-modal {
&.modal-filters {
.modal-wrapper {
width: 90vw !important;
height: 50vh !important;
border-radius: 10px;
}
}
}
ion-modal .modal-wrapper {
width: 90vw !important;
max-height: 90vh !important;
border-radius: 10px !important;
}
ion-alert.alert-pulse .alert-wrapper {
box-shadow: 0 0 0 rgba(249, 49, 41, 0.8);
animation: pulse 2s infinite;
}
$white: #fcfcfc;
$gray: #cbcdd3;
$dark: #777777;
$error: #ef8d9c;
$orange: #ffc39e;
$success: #b0db7d;
$secondary: #99dbb4;
@import url("https://fonts.googleapis.com/css?family=Lato:400,700");
$font: "Lato", sans-serif;
ion-modal.alert-success {
.modal-wrapper {
max-height: 50vh !important;
position: absolute;
// width: 35%;
// height: 100%;
background: linear-gradient(to bottom right, $success 40%, $secondary 100%);
border-radius: 20px;
// box-shadow: 5px 5px 20px rgba($gray, 10%);
perspective: 40px;
&.alert-success {
.modal-wrapper {
max-height: 50vh !important;
position: absolute;
// width: 35%;
// height: 100%;
background: linear-gradient(to bottom right, $success 40%, $secondary 100%);
border-radius: 20px;
// box-shadow: 5px 5px 20px rgba($gray, 10%);
perspective: 40px;
.alert-message {
max-height: auto !important;
}
.alert-message {
max-height: auto !important;
}
h1 {
font-size: 0.9em;
font-weight: 100;
letter-spacing: 3px;
padding-top: 5px;
color: $white;
padding-bottom: 5px;
text-transform: uppercase;
}
h1 {
font-size: 0.9em;
font-weight: 100;
letter-spacing: 3px;
padding-top: 5px;
color: $white;
padding-bottom: 5px;
text-transform: uppercase;
}
.green {
color: darken($secondary, 20%);
}
.green {
color: darken($secondary, 20%);
}
.alert {
font-weight: 700;
letter-spacing: 5px;
}
.alert {
font-weight: 700;
letter-spacing: 5px;
}
p {
font-size: 0.8em;
font-weight: 100;
color: darken($dark, 10%);
letter-spacing: 1px;
text-align: center;
}
p {
font-size: 0.8em;
font-weight: 100;
color: darken($dark, 10%);
letter-spacing: 1px;
text-align: center;
}
button,
.dot {
cursor: pointer;
}
button,
.dot {
cursor: pointer;
}
.dot {
width: 24px;
height: 24px;
background: $white;
border-radius: 50%;
position: absolute;
top: 4%;
right: 4%;
&:hover {
background: darken($white, 20%);
.dot {
width: 24px;
height: 24px;
background: $white;
border-radius: 50%;
position: absolute;
top: 4%;
right: 4%;
&:hover {
background: darken($white, 20%);
}
}
}
.face {
position: absolute;
width: 4rem;
height: 4rem;
background: $white;
border-radius: 50%;
border: 1px solid $dark;
top: 3rem;
left: calc(50% - 2rem);
z-index: 2;
animation: bounce 1s ease-in infinite;
}
.face {
position: absolute;
width: 4rem;
height: 4rem;
background: $white;
border-radius: 50%;
border: 1px solid $dark;
top: 3rem;
left: calc(50% - 2rem);
z-index: 2;
animation: bounce 1s ease-in infinite;
}
.eye {
position: absolute;
width: 5px;
height: 5px;
background: $dark;
border-radius: 50%;
top: 40%;
left: 20%;
}
.eye {
position: absolute;
width: 5px;
height: 5px;
background: $dark;
border-radius: 50%;
top: 40%;
left: 20%;
}
.right {
left: 68%;
}
.right {
left: 68%;
}
.mouth {
position: absolute;
top: 43%;
left: 41%;
width: 7px;
height: 7px;
border-radius: 50%;
}
.mouth {
position: absolute;
top: 43%;
left: 41%;
width: 7px;
height: 7px;
border-radius: 50%;
}
.happy {
border: 2px solid;
border-color: transparent $dark $dark transparent;
transform: rotate(45deg);
}
.happy {
border: 2px solid;
border-color: transparent $dark $dark transparent;
transform: rotate(45deg);
}
.sad {
top: 49%;
border: 2px solid;
border-color: $dark transparent transparent $dark;
transform: rotate(45deg);
}
.sad {
top: 49%;
border: 2px solid;
border-color: $dark transparent transparent $dark;
transform: rotate(45deg);
}
.shadow {
position: absolute;
width: 4.5rem;
height: 1.5rem;
opacity: 0.5;
background: $dark;
left: 40%;
top: 6.5rem;
border-radius: 50%;
z-index: 1;
}
.shadow {
position: absolute;
width: 4.5rem;
height: 1.5rem;
opacity: 0.5;
background: $dark;
left: 40%;
top: 6.5rem;
border-radius: 50%;
z-index: 1;
}
.scale {
animation: scale 1s ease-in infinite;
}
.move {
animation: move 3s ease-in-out infinite;
}
.scale {
animation: scale 1s ease-in infinite;
}
.move {
animation: move 3s ease-in-out infinite;
}
.message {
// position: absolute;
width: 100%;
text-align: center;
// height: 40%;
margin-top: 7rem;
padding: 1rem;
}
.message {
// position: absolute;
width: 100%;
text-align: center;
// height: 40%;
margin-top: 7rem;
padding: 1rem;
}
ion-button button{
// position: absolute;
background: $white;
// width: 50%;
height: 15%;
border-radius: 20px;
// top: 73%;
// left: 25%;
outline: 0;
border: none;
box-shadow: 2px 2px 10px rgba($dark, 0.5);
transition: all 0.5s ease-in-out;
&:hover {
background: darken($white, 5%);
transform: scale(1.05);
transition: all 0.3s ease-in-out;
ion-button button {
// position: absolute;
background: $white;
// width: 50%;
height: 15%;
border-radius: 20px;
// top: 73%;
// left: 25%;
outline: 0;
border: none;
box-shadow: 2px 2px 10px rgba($dark, 0.5);
transition: all 0.5s ease-in-out;
&:hover {
background: darken($white, 5%);
transform: scale(1.05);
transition: all 0.3s ease-in-out;
}
}
}
}
.modal-wrapper {
width: 90vw !important;
max-height: 90vh !important;
border-radius: 10px !important;
}
}
ion-select.wide-select {
max-width: 65% !important;
}
.swiper-pagination {
.swiper-pagination-bullet {
opacity: 1 !important;
}
}
ion-alert.alert-pulse .alert-wrapper {
box-shadow: 0 0 0 rgba(249, 49, 41, 0.8);
animation: pulse 2s infinite;
}
@keyframes bounce {
......
<div class="tinder" [hidden]="!_TRIP.offersCardList.length">
<div class="tinder--status">
<div *ngIf="crossVisible">
<ion-icon name="close" color="medium"></ion-icon>
</div>
<div *ngIf="heartVisible">
<ion-icon name="heart" color="primary"></ion-icon>
</div>
</div>
<div class="tinder--cards" (pan)="handlePan($event)" (panend)="handlePanEnd($event)">
<div #tinderCard class="tinder--card" (transitionend)="handleShift()">
<!-- <ion-badge class="percent" fill="outline" *ngIf="_TRIP.offersScrollerList[0].price_adult" color="warning">
-{{ ((_TRIP.offersScrollerList[0].price_adult_before - _TRIP.offersScrollerList[0].price_adult) * 100) / _TRIP.offersScrollerList[0].price_adult_before | number:'1.0-0' }}%
</ion-badge> -->
<div class="merites">
<ion-icon name="ribbon" color="secondary"></ion-icon>
<p>+500 Mrt</p>
</div>
<div class="merites right" *ngIf="_TRIP.offersScrollerList[0].price_adult">
<p class="reduced-price">{{ _TRIP.offersScrollerList[0].price_adult }} <span class="currency">DH</span></p>
<p class="real-price">Au lieu de : <br><span class="barre">{{ _TRIP.offersScrollerList[0].price_adult_before }} <span class="currency">DH</span></span> (-{{ ((_TRIP.offersScrollerList[0].price_adult_before - _TRIP.offersScrollerList[0].price_adult) * 100) / _TRIP.offersScrollerList[0].price_adult_before | number:'1.0-0' }}%)</p>
</div>
<img #tinderCardImage [src]="_TRIP.offersScrollerList[0].thumb" (load)="tinderCardImage.style.opacity = 1">
<div class="tinder--grad-bg">
<h3>{{ _TRIP.offersScrollerList[0].name }}</h3>
<ion-chip class="info locate" routerLink="/app/partenaire/{{_TRIP.offersScrollerList[0].brand_id}}" routerDirection="forward" routerLinkActive="active">
<ion-icon name="locate"></ion-icon> {{ _TRIP.offersScrollerList[0].location }} - Kénitra
</ion-chip>
<span class="info">
<ion-chip class="info" (click)="toggleMoreInfos()">
<ion-icon name="information"></ion-icon>
</ion-chip>
</span>
<div class="more-infos" [hidden]="showMoreInfos">
<p>{{ _TRIP.offersScrollerList[0].description }}...</p>
<p *ngIf="_TRIP.offersScrollerList[0].price_adult">
<br><br>
Prix proposé : {{ _TRIP.offersScrollerList[0].price_adult }} DH
</p>
<p *ngIf="_TRIP.offersScrollerList[0].price_adult_before">
Prix d'avant : <span class="barre">{{ _TRIP.offersScrollerList[0].price_adult_before }} DH</span>
</p>
</div>
</div>
</div>
</div>
<div class="tinder--buttons">
<!-- <ion-fab vertical="bottom" horizontal="center" slot="fixed">
<ion-fab-button color="warning" (click)="userClickedButton($event, false)">
<ion-icon name="close-outline"></ion-icon>
</ion-fab-button>
<ion-fab-button color="primary" (click)="userClickedButton($event, true)">
<ion-icon name="heart-outline"></ion-icon>
</ion-fab-button>
</ion-fab> -->
<ion-toolbar>
<ion-button size="large" color="warning" fill="solid" (click)="userClickedButton($event, false)">
<ion-icon name="close"></ion-icon>
</ion-button>
<ion-button size="large" color="primary" fill="solid" (click)="userClickedButton($event, true)">
<ion-icon name="heart"></ion-icon>
</ion-button>
</ion-toolbar>
<!-- <ion-footer>
<ion-toolbar>
<ion-buttons>
<ion-button (click)="userClickedButton($event, false)" color="warning">
<ion-icon name="close-outline"></ion-icon>
</ion-button>
<ion-button (click)="userClickedButton($event, true)" color="primary">
<ion-icon name="heart-outline"></ion-icon>
</ion-button>
</ion-buttons>
</ion-toolbar>
</ion-footer> -->
</div>
</div>
\ No newline at end of file
.tinder {
width: 100%;
height: 100%;
overflow: hidden;
background-color: rgba(0, 0, 0, 0.4);
position: absolute;
left: 0;
top: 0;
}
.tinder--status {
position: absolute;
top: 50%;
margin-top: -30px;
z-index: 2;
width: 100%;
text-align: center;
pointer-events: none;
ion-icon {
font-size: 30vw;
}
}
.tinder--cards {
text-align: center;
display: flex;
flex-direction: column;
position: fixed;
justify-content: flex-start;
align-items: center;
width: 100%;
height: 100%;
overflow: hidden;
background: rgb(249, 49, 41);
background: linear-gradient(180deg, rgba(249, 49, 41, 1) 0%, rgba(255, 255, 255, 1) 100%);
// padding-top: 7vh;
}
.barre {
text-decoration: line-through;
}
.merites {
position: absolute;
top: 4.7vw;
left: 4vw;
padding: 5px;
background: rgb(255, 255, 255);
background: linear-gradient(0deg, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%);
border-radius: 10px;
&.right {
background: var(--ion-color-success, #10dc60);
// background: linear-gradient(180deg, rgba(255, 206, 0, 1) 0%, rgba(255, 255, 255, 0) 100%);
border-top-left-radius: 0px;
border-top-right-radius: 0px;
left: auto;
right: 4vw;
top: 3vw;
color: #fff;
.reduced-price, .real-price {
font-family: "Open Sans";
font-weight: 500;
.currency {
font-weight: 100;
}
}
.reduced-price {
color: #fff !important;
font-size: 2rem;
}
.real-price {
font-size: 0.8rem;
}
}
ion-icon {
font-size: 15vw;
// background: #fff;
// border-top-left-radius: 15px;
// border-top-right-radius: 15px;
}
p {
color: #000 !important;
margin: 0;
padding: 3px;
// background: #fff;
border-radius: 15px;
// border: 1px dotted grey;
margin-top: -7px;
// min-width: 20vw;
text-align: center !important;
}
}
.tinder--card {
display: inline-block;
width: 100vw;
height: 100%;
padding-bottom: 40px;
position: relative;
// border-radius: 8px;
overflow: hidden;
position: absolute;
will-change: transform;
transition: all 0.3s ease-in-out;
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: grab;
ion-badge.percent {
position: absolute;
right: 3vw;
top: 4vw;
min-width: 20vw;
height: 8vw;
font-size: 7vw;
border-radius: 5vw;
border-top-right-radius: 10px;
}
img {
width: 96%;
height: 82%;
object-fit: cover;
margin-top: 3vw;
border-radius: 10px;
}
h3,
p {
font-family: "Lato", sans-serif;
// position: absolute;
// top: 69%;
// left: 4vw;
color: #ffffff;
text-align: left;
}
h3 {
// top: 65%;
// font-weight: bold;
margin-bottom: 0;
width: 90%;
}
p {
// top: 69%;
font-size: 0.9rem;
}
.tinder--grad-bg {
background: rgb(0, 0, 0);
background: linear-gradient(
0deg,
rgba(0, 0, 0, 0.8099614845938375) 0%,
rgba(0, 0, 0, 0.5718662464985995) 60%,
rgba(255, 255, 255, 0) 100%
);
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
font-family: "Lato", sans-serif;
bottom: 20.8%;
position: absolute;
left: 2vw;
width: 96vw;
color: #ffffff;
text-align: left;
padding: 6vw 4vw 4vw 4vw;
span.info {
position: absolute;
top: 9vw;
right: 5px;
}
ion-chip.info {
--background: #fff !important;
padding-left: 6px;
padding-right: 6px;
ion-icon {
margin: 0;
}
}
ion-chip.locate {
padding: 1px 5px;
height: 20px;
}
.more-infos {
border: 1px dotted #fff;
margin-top: 10px;
padding: 2vw;
border-radius: 10px;
p {
margin: 0 !important;
}
}
}
}
.tinder--buttons {
position: absolute;
flex: 0 0 100px;
text-align: center;
bottom: 20px;
left: 0;
right: 0;
ion-button {
--border-radius: 30px;
}
}
.tinder--buttons button {
border-radius: 50%;
line-height: 50px;
width: 50px;
height: 50px;
border: 0;
background: #ffffff;
display: inline-block;
padding-top: 10px;
margin: 0 12px;
border: 1px solid #000000;
}
.tinder--buttons button:focus {
outline: 0;
}
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TinderuiComponent } from './tinderui.component';
describe('TinderuiComponent', () => {
let component: TinderuiComponent;
let fixture: ComponentFixture<TinderuiComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ TinderuiComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(TinderuiComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, Input, ViewChildren, QueryList, ElementRef, EventEmitter, Output, Renderer2, OnInit } from '@angular/core';
import { TripService } from '../../services/trip-service';
import { AlloService } from '../../services/allo-service';
@Component({
selector: 'app-tinderui',
templateUrl: './tinderui.component.html',
styleUrls: ['./tinderui.component.scss'],
})
export class TinderuiComponent implements OnInit {
@Input('cards') cards: Array<{
img: string,
title: string,
description: string
}>;
@Output() choiceMade = new EventEmitter();
@ViewChildren('tinderCard') tinderCards: QueryList<ElementRef>;
tinderCardsArray: Array<ElementRef>;
moveOutWidth: number; // value in pixels that a card needs to travel to dissapear from screen
shiftRequired: boolean; // state variable that indicates we need to remove the top card of the stack
transitionInProgress: boolean; // state variable that indicates currently there is transition on-going
heartVisible: boolean;
crossVisible: boolean;
showMoreInfos = true;
constructor(
public _TRIP: TripService,
public _ALLO: AlloService,
private renderer: Renderer2
) {
this.loadData();
}
ngOnInit() { }
toggleMoreInfos() {
this.showMoreInfos = !this.showMoreInfos;
}
loadData() {
let products = this._TRIP.products;
products = this._ALLO.shuffleArray(products);
let product = products.slice(0, 1);
this._TRIP.offersScrollerList = [].concat(product);
}
userClickedButton(event, heart) {
event.preventDefault();
if (!this._TRIP.offersScrollerList.length) return false;
if (heart) {
// this.tinderCardsArray[0].nativeElement.style.transform = 'translate(' + this.moveOutWidth + 'px, -100px) rotate(-30deg)';
this.toggleChoiceIndicator(false, true);
this._TRIP.wishList(this._TRIP.offersScrollerList[0], 'add');
} else {
// this.tinderCardsArray[0].nativeElement.style.transform = 'translate(-' + this.moveOutWidth + 'px, -100px) rotate(30deg)';
this.toggleChoiceIndicator(true, false);
this._TRIP.wishList(this._TRIP.offersScrollerList[0], 'remove');
};
this.shiftRequired = true;
this.transitionInProgress = true;
this.emitChoice(heart, this._TRIP.offersScrollerList[0]);
this.handleShift();
// this.handlePan(event, true);
// this.handlePanEnd(event);
};
toggleChoiceIndicator(cross, heart) {
this.crossVisible = cross;
this.heartVisible = heart;
};
handleShift() {
this.transitionInProgress = false;
setTimeout(()=>{
this.toggleChoiceIndicator(false, false);
}, 300);
if (this.shiftRequired) {
this.shiftRequired = false;
// this._TRIP.offersScrollerList.shift();
this.loadData();
};
};
handlePan(event, click) {
if (!click) {
if (event.deltaX === 0 || (event.center.x === 0 && event.center.y === 0) || !this._TRIP.offersScrollerList.length) return;
}
if (this.transitionInProgress) {
this.handleShift();
}
this.renderer.addClass(this.tinderCardsArray[0].nativeElement, 'moving');
if (event.deltaX > 0) { this.toggleChoiceIndicator(false, true) }
if (event.deltaX < 0) { this.toggleChoiceIndicator(true, false) }
let xMulti = event.deltaX * 0.03;
let yMulti = event.deltaY / 80;
let rotate = xMulti * yMulti;
// this.renderer.setStyle(this.tinderCardsArray[0].nativeElement, 'transform', 'translate(' + event.deltaX + 'px, ' + event.deltaY + 'px) rotate(' + rotate + 'deg)');
this.shiftRequired = true;
};
handlePanEnd(event) {
setTimeout(()=>{
this.toggleChoiceIndicator(false, false);
}, 300);
if (!this._TRIP.offersScrollerList.length) return;
this.renderer.removeClass(this.tinderCardsArray[0].nativeElement, 'moving');
console.log(event);
// let keep = Math.abs(event.deltaX) < 80 || Math.abs(event.velocityX) < 0.5;
// if (keep) {
// this.renderer.setStyle(this.tinderCardsArray[0].nativeElement, 'transform', '');
// this.shiftRequired = false;
// } else {
let endX = Math.max(Math.abs(event.velocityX) * this.moveOutWidth, this.moveOutWidth);
let toX = event.deltaX > 0 ? endX : -endX;
let endY = Math.abs(event.velocityY) * this.moveOutWidth;
let toY = event.deltaY > 0 ? endY : -endY;
let xMulti = event.deltaX * 0.03;
let yMulti = event.deltaY / 80;
let rotate = xMulti * yMulti;
// this.renderer.setStyle(this.tinderCardsArray[0].nativeElement, 'transform', 'translate(' + toX + 'px, ' + (toY + event.deltaY) + 'px) rotate(' + rotate + 'deg)');
this.shiftRequired = true;
this.emitChoice(!!(event.deltaX > 0), this._TRIP.offersScrollerList[0]);
// }
this.transitionInProgress = true;
};
emitChoice(heart, card) {
this.choiceMade.emit({
choice: heart,
card: card
})
};
ngAfterViewInit() {
this.moveOutWidth = document.documentElement.clientWidth * 1.5;
this.tinderCardsArray = this.tinderCards.toArray();
this.tinderCards.changes.subscribe(() => {
this.tinderCardsArray = this.tinderCards.toArray();
})
};
}
......@@ -4,5 +4,6 @@ export const WORDPRESS_REST_API_URL = WORDPRESS_URL + 'wp-json/wp/v2/';
export const GA_TRACKID = 'UA-129706772-2';
export const WORDPRESS_REST_API_ACF_USER_URL = WORDPRESS_URL + 'wp-json/acf/v3/users/';
export const DRUPAL_URL = 'http://partners.allo-testeurs.com/';
export const DRUPAL_URL = 'http://bce1d98d.ngrok.io/';
// export const DRUPAL_URL = 'http://partners.allo-testeurs.com/';
export const DRUPAL_OAUTH_CLIENT_ID = 'be89e1d8-a10c-4448-90e3-8a97a1f305f9';
......@@ -25,14 +25,14 @@
</ion-select>
</ion-item>
<ion-item>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding>
<ion-col class="ion-no-padding">
<ion-label margin-vertical>Type</ion-label>
</ion-col>
</ion-row>
<ion-row>
<ion-col no-padding>
<ion-col class="ion-no-padding">
<ion-segment [(ngModel)]="_TRIP.filters.type" (ionChange)="_TRIP.filterOffers()" mode="ios" margin-bottom>
<ion-segment-button mode="ios" value="all">
<ion-label>Tout</ion-label>
......
<ion-header>
<!-- <ion-header>
<ion-toolbar color="primary">
<ion-buttons slot="start">
<ion-menu-button> </ion-menu-button>
</ion-buttons>
<ion-title>Favoris </ion-title>
</ion-toolbar>
</ion-header>
</ion-header> -->
<ion-content>
<ion-card [hidden]="_TRIP.wishedProducts.length" padding>
......
......@@ -72,14 +72,26 @@
</ion-button>
</ion-col>
</ion-row>
<ion-row>
<!-- <ion-row>
<ion-col class="ion-no-padding ion-text-start">
<ion-button color="dark" class="btn-g ion-no-margin" (click)="presentSuccessModal()">
<ion-icon name="walk"></ion-icon>
Anonyme
</ion-button>
</ion-col>
</ion-row>
</ion-row> -->
<!-- <ion-row>
<ion-col class="ion-no-padding ion-text-start">
<ion-button color="dark" class="btn-g ion-no-margin" (click)="_ADS.showInterstitial()">
<ion-icon name="walk"></ion-icon>
Show Interstitial
</ion-button>
<ion-button color="dark" class="btn-g ion-no-margin" (click)="_ADS.showBanner()">
<ion-icon name="walk"></ion-icon>
Show Banner
</ion-button>
</ion-col>
</ion-row> -->
</ion-grid>
<app-alert-success></app-alert-success>
<!-- <app-alert-success></app-alert-success> -->
</ion-content>
\ No newline at end of file
......@@ -5,8 +5,10 @@ import { Storage } from '@ionic/storage';
import { Router } from '@angular/router';
import { GooglePlus } from '@ionic-native/google-plus/ngx';
import { GoogleAnalytics } from '@ionic-native/google-analytics/ngx';
// import { AdMob } from "ionic-admob";
import { AlloService } from '../../../services/allo-service';
import { AuthService } from '../../../services/auth.service';
import { AdsService } from '../../../services/ads.service';
import { LoginHelpPage } from '../../../modals/login-help/login-help.page';
// import swal from 'sweetalert';
......@@ -39,9 +41,24 @@ export class LoginPage implements OnInit {
public modalController: ModalController,
private googlePlus: GooglePlus,
private ga: GoogleAnalytics,
// private admob: AdMob,
public _ALLO: AlloService,
public _AUTH: AuthService
) { }
public _AUTH: AuthService,
public _ADS: AdsService,
) {
// this.admob.banner.show({
// // id: 'ca-app-pub-8578682421434111/7420292773', // Allo banner
// // id: 'ca-app-pub-8578682421434111/9385601826', // Allo interstitial
// id: 'ca-app-pub-3940256099942544/6300978111', // Google demo banner
// id: 'ca-app-pub-3940256099942544/1033173712', // Google demo interstitial
// });
// let adId;
// adId = 'ca-app-pub-3940256099942544/1033173712';
// this.admob.prepareInterstitial({ adId: adId })
// .then(() => { this.admob.showInterstitial(); });
}
ngOnInit() {
this.ga.trackView('Page : Login');
......@@ -60,6 +77,10 @@ export class LoginPage implements OnInit {
});
}
ionViewDidEnter() {
this._ADS.createBanner(false);
}
async presentHelpModal() {
const modal = await this.modalController.create({
component: LoginHelpPage
......@@ -75,7 +96,7 @@ export class LoginPage implements OnInit {
this.ga.trackEvent('Login', 'Tapped button', 'Anonymous login');
this._AUTH.isAnonymous = true;
const alloUser = {
user_infos : {
user_infos: {
"uid": 0,
"mail": "nomail",
"nom": "anonymous",
......@@ -89,12 +110,10 @@ export class LoginPage implements OnInit {
};
this.storage.set('alloUser', alloUser).then(() => {
this._AUTH.setUser(alloUser);
this.storage.get('APP_PARAMS').then(appParams => {
if (appParams.PARAM_mainslider) {
this.router.navigate(['app/dashboard']);
} else {
this.router.navigate(['mainslider']);
}
this.storage.get('APP_PARAMS').then(appParams => {
this._ADS.hideBanner();
this._AUTH.authState.next(true);
this.router.navigate(['app/dashboard']);
});
});
}
......@@ -105,25 +124,29 @@ export class LoginPage implements OnInit {
// this._AUTH.doLogin(values)
this._AUTH.doDrupLogin(values)
.then(
res => {console.log(res);
res => {
console.log(res);
this.ga.trackEvent('Login', 'Result', 'Successfull connection');
this._ALLO.dismissLoading();
this._AUTH.isAnonymous = false;
this.storage.get('APP_PARAMS').then(appParams => {
if (appParams.PARAM_mainslider) {
this.router.navigate(['app/dashboard']);
} else {
this.router.navigate(['mainslider']);
}
this._ADS.hideBanner();
this.router.navigate(['/app/dashboard']);
// if (appParams.PARAM_mainslider) {
// this.router.navigate(['app/dashboard']);
// } else {
// this.router.navigate(['mainslider']);
// }
});
},
err => {console.log(err);
err => {
console.log(err);
this.ga.trackEvent('Login', 'Result', 'Connection error : ' + err);
this._ALLO.dismissLoading();
// swal('Connexion', 'Email ou Mot de passe incorrects. Veuillez réessayer.', 'error');
// this._ALLO.presentAlert('Connexion', 'Email ou Mot de passe incorrects.<br>Veuillez réessayer.');
this._ALLO.presentToast('', this._AUTH.getErrorMessage(err), 'top');
setTimeout(() => {this._ALLO.dismissLoading();}, 1000);
console.log('Auth error', err);
});
// this._ALLO.presentLoading();
......
<ion-header>
<!-- <ion-header>
<ion-toolbar color="primary">
<ion-buttons slot="start">
<ion-menu-button></ion-menu-button>
......@@ -11,7 +11,7 @@
<ion-spinner name="dots" color="light" *ngIf="syncing"></ion-spinner>
</ion-buttons>
</ion-toolbar>
</ion-header>
</ion-header> -->
<ion-content>
<form [formGroup]="validationsForm">
......@@ -56,7 +56,7 @@
</ion-col>
</ion-row>
<!-- <ion-row no-padding padding-horizontal padding-top>
<ion-col no-padding>
<ion-col class="ion-no-padding">
<ion-progress-bar color="primary" value="0.75"></ion-progress-bar>
</ion-col>
</ion-row>
......@@ -65,7 +65,7 @@
<ion-col no-padding size="6" class="ion-text-end"> 1000 </ion-col>
</ion-row> -->
</ion-grid>
<ion-card *ngIf="_AUTH?.userInfos?.card_number">
<!-- <ion-card *ngIf="_AUTH?.userInfos?.card_number">
<ion-item [color]="editMode ? 'dark' : 'primary'">
Ma carte testeur :
</ion-item>
......@@ -78,8 +78,8 @@
<ion-item lines="none" [color]="editMode ? 'medium' : ''">
<ion-icon name="person" slot="start"></ion-icon> {{ _AUTH.userInfos.cnie }}
</ion-item>
</ion-card>
<ion-card color="primary" *ngIf="!_AUTH?.userInfos?.card_number && !editMode">
</ion-card> -->
<!-- <ion-card color="primary" *ngIf="!_AUTH?.userInfos?.card_number && !editMode">
<ion-text>
<h5 class="ion-text-center">Vous n'avez pas encore</h5>
<h3 class="ion-text-center">la Carte Testeur.</h3>
......@@ -91,7 +91,7 @@
routerLinkActive="active">Contactez-nous maintenant!</ion-button>
</p>
</ion-text>
</ion-card>
</ion-card> -->
<ion-card>
<ion-item color="primary">
Infos :
......@@ -124,9 +124,9 @@
</form>
</ion-content>
<ion-footer *ngIf="editMode">
<ion-footer>
<ion-toolbar color="primary">
<ion-buttons slot="end" *ngIf="!syncing">
<ion-buttons slot="end" *ngIf="!syncing && editMode">
<ion-button fill="outline" color="light" (click)="cancelEdit()">
<ion-icon name="close"></ion-icon> Annuler
</ion-button>
......@@ -135,5 +135,9 @@
<ion-icon name="checkmark"></ion-icon> Valider
</ion-button>
</ion-buttons>
<ion-buttons slot="end">
<ion-button fill="outline" color="light" *ngIf="!editMode" (click)="startEdit()">Modifier</ion-button>
<ion-spinner name="dots" color="light" *ngIf="syncing"></ion-spinner>
</ion-buttons>
</ion-toolbar>
</ion-footer>
\ No newline at end of file
......@@ -12,7 +12,7 @@
<ion-content padding>
<p class="text-dark">Vous pouvez nous contacter via les réseaux sociaux, ou bien notre site web sur ces liens :</p>
<ion-card no-margin>
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-list>
<ion-item href="https://www.facebook.com/AlloTesteurs">
<ion-icon name="logo-facebook" slot="start" color="secondary"></ion-icon>
......@@ -36,7 +36,7 @@
<p class="text-dark">Mais aussi, par téléphone/WhatsApp sur ces numéro :</p>
<ion-card no-margin>
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-list>
<ion-item href="tel://0661934878">
<ion-icon name="logo-whatsapp" slot="start" color="secondary"></ion-icon><ion-icon name="phone-portrait" slot="start" color="secondary"></ion-icon>
......
<ion-header>
<ion-toolbar color="primary">
<ion-buttons slot="start">
<ion-menu-button>
<!-- <ion-icon name="menu" size="large"></ion-icon> -->
</ion-menu-button>
<!-- <ion-menu-button></ion-menu-button> -->
<ion-back-button text="Retour"></ion-back-button>
</ion-buttons>
<ion-title>Etablissement</ion-title>
</ion-toolbar>
......@@ -39,44 +38,44 @@
</ion-label>
</ion-item>
<ion-slides pager="false" scrollbar="true">
<ion-slide no-padding>
<ion-slide class="ion-no-padding">
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/04.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>40 DH</ion-badge>
</ion-card-content>
</ion-card>
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/03.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>35 DH</ion-badge>
</ion-card-content>
</ion-card>
</ion-slide>
<ion-slide no-padding>
<ion-slide class="ion-no-padding">
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/02.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>55 DH</ion-badge>
</ion-card-content>
</ion-card>
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/01.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>65 DH</ion-badge>
</ion-card-content>
</ion-card>
</ion-slide>
<ion-slide no-padding>
<ion-slide class="ion-no-padding">
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/04.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>60 DH</ion-badge>
</ion-card-content>
</ion-card>
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/03.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>73 DH</ion-badge>
</ion-card-content>
</ion-card>
......@@ -88,44 +87,44 @@
</ion-label>
</ion-item>
<ion-slides pager="false" scrollbar="true">
<ion-slide no-padding>
<ion-slide class="ion-no-padding">
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/02.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>55 DH</ion-badge>
</ion-card-content>
</ion-card>
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/01.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>45 DH</ion-badge>
</ion-card-content>
</ion-card>
</ion-slide>
<ion-slide no-padding>
<ion-slide class="ion-no-padding">
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/04.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>66 DH</ion-badge>
</ion-card-content>
</ion-card>
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/03.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>49 DH</ion-badge>
</ion-card-content>
</ion-card>
</ion-slide>
<ion-slide no-padding>
<ion-slide class="ion-no-padding">
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/02.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>65 DH</ion-badge>
</ion-card-content>
</ion-card>
<ion-card class="menu-card">
<img src="../../../assets/img/demo/dishes/01.jpg">
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-badge>55 DH</ion-badge>
</ion-card-content>
</ion-card>
......
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { TripService } from "../../services/trip-service";
@Component({
selector: 'app-etablissement',
......@@ -6,6 +8,7 @@ import { Component, OnInit } from '@angular/core';
styleUrls: ['./etablissement.page.scss'],
})
export class EtablissementPage implements OnInit {
private pid = null;
slidesOpts = {
on: {
beforeInit() {
......@@ -67,9 +70,16 @@ export class EtablissementPage implements OnInit {
}
constructor() { }
constructor(
private activatedRoute: ActivatedRoute,
private _TRIP: TripService
) { }
ngOnInit() {
this.pid = this.activatedRoute.snapshot.paramMap.get('pid');
let brand = this._TRIP.getItemById('brands', this.pid);
console.log(brand);
}
}
......@@ -34,8 +34,7 @@
<ion-text color="light">
<p class="text-1x">
Vous y trouverez toute l'actualité sur les bons plans à Kenitra et ailleurs, destinés
exclusivement à
nos cher(e)s détenteur(se)s de la Carte Testeurs.
exclusivement à nos cher(e)s adhérent(e)s à l'application.
</p>
</ion-text>
</ion-col>
......@@ -58,7 +57,7 @@
<!-- <button ion-button class="round" color="light" margin-top full tappable (click)="getGps()">GPS!</button>
<button ion-button class="round" color="light" margin-top full tappable (click)="getNotifs()">Notifs!</button>-->
</ion-slide>
<ion-slide padding>
<!-- <ion-slide padding>
<ion-item lines="none" color="primary" class="skip">
<ion-button fill="outline" color="light" (click)="skipPresentation($event)">
Passer <ion-icon name="arrow-dropright-circle" slot="end"></ion-icon>
......@@ -123,7 +122,7 @@
</ion-col>
</ion-row>
</ion-grid>
</ion-slide>
</ion-slide> -->
<ion-slide padding>
<ion-item lines="none" color="primary" class="skip">
<ion-button fill="outline" color="light" (click)="skipPresentation($event)">
......@@ -147,9 +146,8 @@
<ion-col>
<ion-text color="light">
<p class="text-1x">
La liste de nos partenaires, ainsi que leurs offres est disponible ici même, mais aussi
sur
:
La liste de nos partenaires, ainsi que leurs offres sont disponibles ici même, mais aussi
sur :
</p>
</ion-text>
</ion-col>
......@@ -157,7 +155,7 @@
<ion-row>
<ion-col>
<ion-card no-margin>
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-list>
<ion-item href="https://www.facebook.com/AlloTesteurs">
<ion-icon slot="start" name="logo-facebook" color="tertiary"></ion-icon>
......@@ -205,11 +203,11 @@
</ion-row>
<ion-row>
<ion-col>
<ion-grid no-margin no-padding>
<ion-grid no-margin class="ion-no-padding">
<ion-row>
<ion-col>
<ion-button class="round" size="small" color="light" margin-top full tappable
(click)="goToDashboard()" routerDirection="forward" routerLinkActive="active">
(click)="goToLogin()" routerDirection="forward" routerLinkActive="active">
Continuer sans &nbsp;<ion-icon name="arrow-dropright-circle"></ion-icon>
</ion-button>
</ion-col>
......
......@@ -6,6 +6,7 @@ import { GoogleAnalytics } from '@ionic-native/google-analytics/ngx';
// import { DashboardPage } from "../dashboard/dashboard";
import { PermService } from '../../services/perm-service';
import { LocationService } from '../../services/location-service';
import { AuthService } from '../../services/auth.service';
// import { AlloService } from "../../services/allo-service";
// import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
......@@ -34,6 +35,7 @@ export class MainsliderPage implements OnInit {
// public LN: LocalNotifications,
private _PERM: PermService,
private _LOCATE: LocationService,
private _AUTH: AuthService,
// private _ALLO: AlloService,
private storage: Storage,
private router: Router,
......@@ -55,7 +57,7 @@ export class MainsliderPage implements OnInit {
}
this.mainSlider.getActiveIndex().then(index => {
this.hideSlider = true;
this.mainSlider.slideTo(4, 1000);
this.mainSlider.slideTo(2, 1000);
this.hideSlider = false;
});
}
......@@ -70,7 +72,7 @@ export class MainsliderPage implements OnInit {
appParams.PARAM_mainslider = true;
appParams.PARAM_geolocate = true;
this.storage.set('APP_PARAMS', appParams);
this.goToDashboard();
this.goToLogin();
});
}
......@@ -86,4 +88,21 @@ export class MainsliderPage implements OnInit {
});
this.router.navigate(['app/dashboard']);
}
goToLogin() {
this.storage.get('APP_PARAMS')
.then(appParams => {
appParams.PARAM_mainslider = true;
this.storage.set('APP_PARAMS', appParams);
})
.then(() => {
this._AUTH.authState.subscribe(state => {
if (state) {
this.router.navigate(['app/dashboard']);
} else {
this.router.navigate(['login']);
}
});
});
}
}
......@@ -22,6 +22,14 @@ const routes: Routes = [
loadChildren: '../offres/dashboard/dashboard.module#DashboardPageModule'
},
{
path: 'scroller',
loadChildren: '../offres/scroller/scroller.module#ScrollerPageModule'
},
{
path: 'mode-carte',
loadChildren: '../offres/mode-carte/mode-carte.module#ModeCartePageModule'
},
{
path: 'details-offre/:oid',
loadChildren: '../offres/offre-details/offre-details.module#OffreDetailsPageModule'
},
......@@ -85,6 +93,10 @@ const routes: Routes = [
path: 'favoris',
loadChildren: '../compte/favoris/favoris.module#FavorisPageModule'
},
{
path: 'partenaire/:pid',
loadChildren: '../etablissement/etablissement.module#EtablissementPageModule'
},
]
}
];
......
<ion-menu contentId="content">
<ion-menu contentId="content" swipeGesture="false">
<ion-header>
<ion-toolbar color="primary">
<div class="anonymous ion-text-center" *ngIf="_AUTH.infoNicename === 'anonymous'" padding>
......@@ -27,41 +27,45 @@
<ion-text>
<h4>{{ _AUTH?.infoFullname }}</h4>
</ion-text>
<ion-chip color="light">
<!-- <ion-chip color="light">
<ion-icon name="star"></ion-icon>
<ion-label>Testeur</ion-label>
</ion-chip>
<ion-menu-toggle>
<ion-chip routerLink="/app/hauts-faits" routerDirection="root"
</ion-chip> -->
<ion-badge color="secondary">
Testeur
</ion-badge>
<!-- <ion-menu-toggle>
<ion-chip routerLink="/app/dashboard/merites" routerDirection="root"
routerLinkActive="active">
<ion-icon name="ribbon" color="secondary"></ion-icon>
<ion-label color="light">{{ _QST.pointsMerites }}</ion-label>
</ion-chip>
</ion-menu-toggle>
</ion-menu-toggle> -->
</ion-col>
</ion-row>
</ion-grid>
<ion-card color="light">
<ion-grid>
<!-- <ion-row no-padding padding-horizontal>
<ion-col no-padding>
<ion-label>Mes points :</ion-label>
</ion-col>
</ion-row>
<ion-row no-padding padding-horizontal padding-top>
<ion-col no-padding>
<ion-progress-bar color="primary" value="0.75"></ion-progress-bar>
</ion-col>
</ion-row>
<ion-row no-padding padding-horizontal>
<ion-col no-padding size="6" class="ion-text-start"> 0 </ion-col>
<ion-col no-padding size="6" class="ion-text-end"> 1000 </ion-col>
</ion-row> -->
<!-- <ion-row class="ion-no-padding">
<ion-col class="ion-no-padding">
<ion-label>Mes points :</ion-label>
</ion-col>
</ion-row>
<ion-row class="ion-no-padding">
<ion-col class="ion-no-padding">
<ion-progress-bar color="primary" value="0.75"></ion-progress-bar>
</ion-col>
</ion-row>
<ion-row class="ion-no-padding">
<ion-col size="6" class="ion-no-padding ion-text-start"> 0 </ion-col>
<ion-col size="6" class="ion-no-padding ion-text-end"> 1000 </ion-col>
</ion-row> -->
<ion-row>
<ion-col no-padding class="ion-text-start">
<ion-col class="ion-no-padding ion-text-start">
<ion-menu-toggle>
<ion-button fill="outline" size="small" color="dark" routerLink="/app/profil"
routerDirection="root" routerLinkActive="active">
<ion-button fill="outline" size="small" color="dark"
routerLink="/app/dashboard/compte" routerDirection="root"
routerLinkActive="active">
<ion-icon name="contact"></ion-icon>
Profil
</ion-button>
......
......@@ -12,29 +12,29 @@ export class MenuPage implements OnInit {
pages = [
{
title: 'Les promos',
title: 'Accueil',
url: '/app/dashboard',
icon: 'home',
anonymous: true
},
{
title: 'Partenaires',
url: '/app/partenaires',
icon: 'contacts',
anonymous: true
},
{
title: 'Favoris',
url: '/app/favoris',
icon: 'bookmark',
anonymous: false
},
{
title: 'Mes mérites',
url: '/app/mes-merites',
icon: 'ribbon',
anonymous: false
},
// {
// title: 'Partenaires',
// url: '/app/partenaires',
// icon: 'contacts',
// anonymous: true
// },
// {
// title: 'Favoris',
// url: '/app/favoris',
// icon: 'bookmark',
// anonymous: false
// },
// {
// title: 'Mes mérites',
// url: '/app/mes-merites',
// icon: 'ribbon',
// anonymous: false
// },
{
title: 'Paramètres',
url: '/app/params',
......
<ion-header>
<!-- <ion-header>
<ion-toolbar color="primary">
<ion-buttons slot="start">
<ion-menu-button>
......@@ -10,11 +10,11 @@
<ion-label color="light">{{ _QST.pointsMerites }}</ion-label>
</ion-chip>
</ion-toolbar>
</ion-header>
</ion-header> -->
<ion-content padding>
<div [ngSwitch]="viewList">
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col size="8">
<ion-button expand="block" color="success" routerLink="/app/reclamer-merites" routerDirection="forward"
......
......@@ -39,7 +39,7 @@ export class ReclamerMeritesCodePage implements OnInit {
validateCode(values) {
this._ALLO.presentLoading();
const header = {
'Authorization': 'Bearer ' + this._AUTH.userToken,
'Authorization': 'Bearer ' + this._AUTH.userToken.getValue(),
};
this.httpAdv.sendRequest(Config.DRUPAL_URL + 'partenaire/validate-merits-code/' + values.code,
{
......
......@@ -59,7 +59,7 @@
<ion-text class="ion-padding-horizontal">
<small>La preuve d'achat doit avoir la date d'achat affichée en claire.</small>
</ion-text>
<ion-item no-padding>
<ion-item class="ion-no-padding">
<ion-button fill="solid" expand="full" color="success" (click)="selectImage()" class="ion-margin-horizontal">
<ion-icon slot="start" name="camera"></ion-icon>
Preuves d'achat (ticket de caisse, bons, ...)
......
......@@ -36,7 +36,7 @@ export class ReclamerMeritesQrcodePage implements OnInit {
if (token.startsWith('token:')) {
console.log('Scanned something', token, this.isOn);
const header = {
'Authorization': 'Bearer ' + this._AUTH.userToken,
'Authorization': 'Bearer ' + this._AUTH.userToken.getValue(),
};
this.httpAdv.sendRequest(Config.DRUPAL_URL + 'partenaire/validate-qrcode' + token.replace('token:', ''),
{
......
......@@ -31,6 +31,42 @@ const routes: Routes = [
]
},
{
path: 'favoris',
children: [
{
path: '',
loadChildren: '../../compte/favoris/favoris.module#FavorisPageModule'
}
]
},
{
path: 'merites',
children: [
{
path: '',
loadChildren: '../../merites/mes-merites/mes-merites.module#MesMeritesPageModule'
}
]
},
{
path: 'compte',
children: [
{
path: '',
loadChildren: '../../compte/profil/profil.module#ProfilPageModule'
}
]
},
{
path: 'partenaires',
children: [
{
path: '',
loadChildren: '../../partenaires/partenaires-list/partenaires-list.module#PartenairesListPageModule'
}
]
},
{
path: '',
redirectTo: '/app/dashboard/offres-carte',
pathMatch: 'full'
......
......@@ -8,21 +8,33 @@
<!-- <ion-icon name="menu" size="large" color="light"></ion-icon> -->
</ion-menu-button>
</ion-buttons>
<!-- <ion-grid no-padding>
<!-- <ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding>
<ion-col class="ion-no-padding">
<ion-icon name="ribbon" color="secondary"></ion-icon>
<ion-label color="light">10 542</ion-label>
</ion-col>
</ion-row>
<ion-row>
<ion-col no-padding>
<ion-col class="ion-no-padding">
<ion-icon name="ribbon" color="secondary"></ion-icon>
<ion-label color="light">10 542</ion-label>
</ion-col>
</ion-row>
</ion-grid> -->
<ion-chip slot="end">
<!-- <ion-chip slot="end" (click)="token()">
<ion-icon name="refresh" color="dark" class="ion-no-margin"></ion-icon>
</ion-chip> -->
<ion-chip slot="end" routerLink="/app/mode-carte" routerDirection="forward" routerLinkActive="active" *ngIf="show_header === 'main'">
<ion-icon name="locate" color="dark" class="ion-no-margin"></ion-icon>
</ion-chip>
<ion-chip slot="end" routerLink="/app/scroller" routerDirection="forward" routerLinkActive="active" *ngIf="show_header === 'main'">
<!-- <ion-icon name="trending-up" color="blue"></ion-icon>
<ion-label color="dark" class="ion-padding-end">{{ _QST.pointsExp }}</ion-label> -->
<!-- <ion-icon name="search-outline" color="secondary"></ion-icon> -->
<ion-icon name="heart-half" color="dark" class="ion-no-margin"></ion-icon>
</ion-chip>
<ion-chip slot="end" routerLink="/app/dashboard/merites" routerDirection="forward" routerLinkActive="active" *ngIf="show_header === 'main' && !_AUTH.isAnonymous">
<!-- <ion-icon name="trending-up" color="blue"></ion-icon>
<ion-label color="dark" class="ion-padding-end">{{ _QST.pointsExp }}</ion-label> -->
<ion-icon name="ribbon" color="secondary"></ion-icon>
......@@ -38,11 +50,11 @@
<!--<ion-searchbar hidden [(ngModel)]="terms" placeholder="Rechercher"></ion-searchbar>-->
<!--</ion-title>-->
</ion-toolbar>
<ion-grid color="primary" *ngIf="show_more_filters" no-padding>
<ion-grid color="primary" *ngIf="show_more_filters" class="ion-no-padding">
<!-- <ion-row>
<ion-col col-12>
<ion-card class="top-card" no-margin>
<ion-card-content no-padding>
<ion-card-content class="ion-no-padding">
<ion-item>
<ion-label class="text-1x bold text-primary">Etablissement</ion-label>
<ion-select cancelText="Fermer" class="text-primary" [(ngModel)]="terms" (ionChange)="onContextChange($event.id)">
......@@ -54,8 +66,8 @@
</ion-card>
</ion-col>
</ion-row>-->
<ion-row no-padding>
<ion-col col-12 no-padding>
<ion-row class="ion-no-padding">
<ion-col col-12 class="ion-no-padding">
<ion-item color="primary">
<ion-label color="light" class="text-1x">Offres Carte Testeur seulement</ion-label>
<ion-toggle checked color="secondary" [(ngModel)]="prm_ctonly" [ngModelOptions]="{standalone: true}"
......@@ -63,8 +75,8 @@
</ion-item>
</ion-col>
</ion-row>
<ion-row no-padding>
<ion-col col-12 no-padding>
<ion-row class="ion-no-padding">
<ion-col col-12 class="ion-no-padding">
<ion-item color="primary" lines="none">
<ion-label color="light" class="text-1x">Offres populaires</ion-label>
<ion-toggle checked color="secondary" [(ngModel)]="prm_hotdeals"
......@@ -81,15 +93,26 @@
<ion-content>
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button tab="offres-carte">
<ion-icon name="card"></ion-icon>
<ion-label>Offres Carte Testeur</ion-label>
<ion-tab-button tab="compte" (click)="setHeader('compte')" *ngIf="!_AUTH.isAnonymous">
<ion-icon name="person"></ion-icon>
<ion-label>Compte</ion-label>
</ion-tab-button>
<ion-tab-button tab="favoris" (click)="setHeader('main')" *ngIf="!_AUTH.isAnonymous">
<ion-icon name="heart"></ion-icon>
<ion-label>Favoris</ion-label>
</ion-tab-button>
<ion-tab-button tab="offres-carte" (click)="setHeader('main')">
<ion-icon name="home"></ion-icon>
<ion-label>Offres</ion-label>
<ion-badge color="dark">{{_TRIP.filtredProducts.length}}</ion-badge>
</ion-tab-button>
<ion-tab-button tab="offres-tlm">
<ion-icon name="people"></ion-icon>
<ion-label>Pour tout le monde</ion-label>
<ion-tab-button tab="partenaires" (click)="setHeader('main')">
<ion-icon name="cart"></ion-icon>
<ion-label>Boutiques</ion-label>
</ion-tab-button>
<ion-tab-button tab="merites" (click)="setHeader('main')" *ngIf="!_AUTH.isAnonymous">
<ion-icon name="ribbon"></ion-icon>
<ion-label>Mérites</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
......
......@@ -66,3 +66,8 @@ ion-fab {
min-height: 10rem;
padding-top: 4.5rem;
}
ion-tab-button {
&.tab-selected {
border-top: 4px solid;
}
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
import { Component, OnInit, ViewChild } from '@angular/core';
import { IonTabs } from "@ionic/angular";
import { TripService } from '../../../services/trip-service';
import { QuestsService } from '../../../services/quests.service';
import { AppService } from "../../../services/app.service";
import { AuthService } from "../../../services/auth.service";
@Component({
selector: 'app-dashboard',
......@@ -13,16 +16,34 @@ export class DashboardPage implements OnInit {
public products: any;
public terms: any;
public show_more_filters = false;
public show_header = 'main';
@ViewChild('dashTabs') dashTabs: IonTabs;
constructor(
public _TRIP: TripService,
public _QST: QuestsService
public _QST: QuestsService,
public _APP: AppService,
public _AUTH: AuthService
) {
}
token() {
this._AUTH.doRefreshToken().then(res => {
console.log('res', res);
},
err => {
console.log('err', err);
});
}
ngOnInit() {
// console.log('ngOnInit Dashboard');
// this._ALLO.presentLoading();
this._APP.$dashboard_header_buttons.subscribe(v => {
this.show_header = v;
});
// this._TRIP.getData('partners').then(r => console.log(r)).catch(e => console.log(e));
}
showHideMoreFilters() {
......@@ -32,4 +53,8 @@ export class DashboardPage implements OnInit {
this.show_more_filters = false;
}
}
setHeader(name) {
this._APP.$dashboard_header_buttons.next(name);
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { ModeCartePage } from './mode-carte.page';
const routes: Routes = [
{
path: '',
component: ModeCartePage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [ModeCartePage]
})
export class ModeCartePageModule {}
<!-- <ion-header>
<ion-toolbar color="primary">
</ion-toolbar>
</ion-header> -->
<ion-content>
<ion-toolbar>
<ion-buttons slot="start">
<ion-menu-button>
</ion-menu-button>
</ion-buttons>
<ion-chip slot="end" (click)="searchHere()">
Rechercher ici
</ion-chip>
<ion-chip slot="end" routerLink="/app/dashboard" routerDirection="root" routerLinkActive="active">
<ion-icon name="albums" color="dark" class="ion-no-margin"></ion-icon>
</ion-chip>
<ion-chip slot="end" routerLink="/app/scroller" routerDirection="root" routerLinkActive="active">
<ion-icon name="heart-half" color="dark" class="ion-no-margin"></ion-icon>
</ion-chip>
<ion-buttons slot="end">
<ion-chip>
<ion-icon name="options" color="primary" class="ion-no-margin"></ion-icon>
</ion-chip>
</ion-buttons>
</ion-toolbar>
<!-- <ion-slides pager="true">
<ion-slide padding>
<ion-card>
<img src="../../assets/img/DSC09608.JPG">
<ion-item>
<ion-avatar slot="end">
<img src="../../assets/img/avatar.jpeg">
</ion-avatar>
<ion-label>
<h2>The green place</h2>
<p>Café / Restaurant</p>
</ion-label>
</ion-item>
</ion-card>
</ion-slide>
<ion-slide padding>
<ion-card>
<img src="../../assets/img/DSC09608.JPG">
<ion-item>
<ion-avatar slot="end">
<img src="../../assets/img/avatar.jpeg">
</ion-avatar>
<ion-label>
<h2>The green place</h2>
<p>Café / Restaurant</p>
</ion-label>
</ion-item>
</ion-card>
</ion-slide>
<ion-slide padding>
<ion-card>
<img src="../../assets/img/DSC09608.JPG">
<ion-item>
<ion-avatar slot="end">
<img src="../../assets/img/avatar.jpeg">
</ion-avatar>
<ion-label>
<h2>The green place</h2>
<p>Café / Restaurant</p>
</ion-label>
</ion-item>
</ion-card>
</ion-slide>
</ion-slides> -->
<div style="position: fixed; bottom: 0; width: 100vw; z-index: 9999999;">
<div class="swiper-container">
<!-- Additional required wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<div class="swiper-slide" *ngFor="let brand of _TRIP.brands">
<ion-card color="light">
<img class="big" [src]="brand.thumb" />
<ion-item>
<ion-avatar slot="end">
<img [src]="brand.thumb" />
</ion-avatar>
<ion-label>
<p>Restaurant</p>
<h3>{{ brand.label }}</h3>
<p>{{ brand.adresse }}</p>
<p>
<ion-icon name="star" color="secondary"></ion-icon> 5 étoiles &nbsp; &nbsp;
<ion-icon name="chatbubbles" color="medium"></ion-icon> 5 avis &nbsp; &nbsp;
<ion-icon name="gift" color="medium"></ion-icon> 45 offres
</p>
</ion-label>
</ion-item>
<!-- <ion-card-header>
<ion-card-subtitle>Restaurant</ion-card-subtitle>
<ion-card-title>{{ brand.label }}</ion-card-title>
</ion-card-header>
<ion-card-content>
<ion-icon name="star" color="secondary"></ion-icon> 5 étoiles &nbsp; &nbsp;
<ion-icon name="chatbubbles" color="medium"></ion-icon> 5 avis &nbsp; &nbsp;
<ion-icon name="gift" color="medium"></ion-icon> 45 offres
</ion-card-content> -->
</ion-card>
</div>
</div>
<!-- If we need pagination -->
<div class="swiper-pagination"></div>
<!-- If we need scrollbar -->
<div class="swiper-scrollbar"></div>
</div>
</div>
<div id="map" style="width:100%; height:100%;"></div>
</ion-content>
\ No newline at end of file
ion-toolbar {
--background: none !important;
position: absolute !important;
z-index: 9999 !important;
// width: 60vw !important;
right: 0 !important;
}
ion-slides {
height: 60vh;
width: 100vw;
position: absolute;
bottom: 0;
z-index: 99999;
// ion-slide {
// height: 50vh;
// width: 100vw;
// }
}
ion-card {
width: calc(100vw - 20px);
transition: 0.5s;
h3 {
font-family: "Open Sans";
text-transform: uppercase;
color: var(--ion-color-primary);
}
ion-card-header {
ion-card-subtitle {
font-family: "Open Sans";
text-transform: uppercase;
color: var(--ion-color-primary);
}
ion-card-title {
font-family: "Open Sans Light";
text-transform: uppercase;
margin: 0 !important;
}
}
img.big {
background-color: var(--ion-color-medium);
height: 20vh;
object-fit: cover;
}
}
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ModeCartePage } from './mode-carte.page';
describe('ModeCartePage', () => {
let component: ModeCartePage;
let fixture: ComponentFixture<ModeCartePage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ModeCartePage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ModeCartePage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { TripService } from '../../../services/trip-service';
import { LocationService } from '../../../services/location-service';
import { MapsService } from '../../../services/maps.service';
import L from 'leaflet';
import 'leaflet.markercluster';
@Component({
selector: 'app-mode-carte',
templateUrl: './mode-carte.page.html',
styleUrls: ['./mode-carte.page.scss'],
})
export class ModeCartePage implements OnInit {
private map: any;
constructor(
public _TRIP: TripService,
public _LOCL: LocationService,
public _MAPS: MapsService
) { }
ionViewDidEnter() {
// this.loader = this.loadingCtrl.create({
// message: 'Chargement...'
// });
// this.loader.present();
// this.loadmap();
this._MAPS.loadMapGoogle();
this._TRIP.getData(true).then(services => {
this._MAPS.loadMarkersGoogle(services.brands);
this._MAPS.setSwiper();
});
}
ionViewDidLeave() {
this._MAPS.removeMapGoogle();
}
searchHere() {
this.map.flyTo([34.255670, -6.578737], 16);
}
ngOnInit() {
}
}
<ion-header>
<ion-toolbar color="primary">
<ion-toolbar [class.show-tb]="showToolbar">
<ion-buttons slot="start">
<ion-back-button defaultHref="/app/dashboard" text="Retour"></ion-back-button>
<ion-back-button defaultHref="/app/dashboard" text=""></ion-back-button>
</ion-buttons>
<ion-title>
<span ion-text>{{ trip.location }}</span>
<!-- <span ion-text>{{ trip?.titre_partenaire }}</span> -->
</ion-title>
<ion-badge color="success" slot="end" class="ion-margin-end">-20% de réduction</ion-badge>
</ion-toolbar>
</ion-header>
<ion-content class="common-bg">
<ion-card *ngIf="trip?.description">
<ion-img src="assets/img/ressources/ribbon.png"></ion-img>
<ion-slides *ngIf="trip?.images" class="to-top" pager>
<ion-content class="common-bg" [scrollEvents]="true" (ionScroll)="onScroll($event)">
<!-- <div [hidden]="trip">
<ion-card class="skeleton ion-no-margin ion-margin-bottom">
<ion-skeleton-text class="img" animated></ion-skeleton-text>
<ion-card-header>
<ion-card-subtitle color="primary">
<ion-skeleton-text style="width: 80%" animated></ion-skeleton-text>
</ion-card-subtitle>
<ion-card-title>
<ion-skeleton-text style="height: 20px" animated></ion-skeleton-text>
</ion-card-title>
</ion-card-header>
<ion-card-content no-padding padding-horizontal padding-bottom>
<ion-skeleton-text style="width: 80%" animated></ion-skeleton-text>
<ion-skeleton-text animated></ion-skeleton-text>
<ion-skeleton-text style="width: 80%" animated></ion-skeleton-text>
<ion-skeleton-text style="width: 50%" animated></ion-skeleton-text>
</ion-card-content>
</ion-card>
</div> -->
<!-- <div *ngIf="trip?.description"> -->
<div>
<div class="main-image">
<ion-img [src]="cfg.DRUPAL_URL + trip?.photo_carte_app_mob"></ion-img>
<div class="mask">
{{ trip?.titre }}
</div>
</div>
<ion-item class="infos-partner" lines="none">
<div *ngIf="!_AUTH.isAnonymous">
<ion-button color="medium" fill="outline" class="bookmark ion-no-padding"
(click)="_TRIP.wishList(trip, 'add', $event)" *ngIf="!trip?.bookmarked">
<ion-icon name="heart-empty" color="medium"></ion-icon>
</ion-button>
<ion-button color="medium" fill="outline" class="bookmark ion-no-padding"
(click)="_TRIP.wishList(trip, 'remove', $event)" *ngIf="trip?.bookmarked">
<ion-icon name="heart" color="danger"></ion-icon>
</ion-button>
</div>
<ion-avatar slot="start">
<ion-img [src]="cfg.DRUPAL_URL + trip?.logo_partenaire">
</ion-img>
</ion-avatar>
<ion-label>
<h3>{{ trip?.titre_categorie }}</h3>
<p>{{ trip?.nom_categorie }}</p>
<p *ngIf="trip?.adresse_partenire">
<ion-icon name="pin" color="primary" slot="start"></ion-icon> {{ trip?.adresse_partenire }}
</p>
<p lines="none" *ngIf="trip?.telephone_partenire">
<ion-icon name="phone-portrait" color="primary" slot="start"></ion-icon>
{{ trip?.telephone_partenire }}
</p>
</ion-label>
</ion-item>
<ion-card mode="ios">
<ion-card-content>
{{ trip?.description }}
</ion-card-content>
</ion-card>
<!-- <ion-slides *ngIf="trip?.images" class="to-top" pager>
<ion-slide *ngFor="let image of trip.images">
<img [src]="image" alt="">
</ion-slide>
</ion-slides>
<ion-slides *ngIf="trip?.images?.length < 1" class="to-top" pager>
<img [src]="trip.thumb" alt="">
</ion-slides>
</ion-slides> -->
<!-- <ion-slides *ngIf="trip?.images?.length < 1" class="to-top" pager> -->
<img [src]="cfg.DRUPAL_URL + trip?.photo_carte_app_mob" alt="">
<!-- </ion-slides> -->
<ion-card-header color="primary">
<ion-card-title>{{ trip.sub_name }}</ion-card-title>
<ion-card-title>{{ trip?.titre }}</ion-card-title>
</ion-card-header>
<ion-card-content>
{{ trip.description }}
{{ trip?.description }}
</ion-card-content>
<ion-list>
<ion-item *ngIf="trip?.brand_adresse">
<ion-item *ngIf="trip?.nom_categorie">
<!-- <ion-icon name="pin" color="primary" slot="start"></ion-icon> -->
<ion-badge>{{ trip?.nom_categorie }}</ion-badge>
</ion-item>
<ion-item *ngIf="trip?.adresse_partenire">
<ion-icon name="pin" color="primary" slot="start"></ion-icon>
<ion-label>Adresse : {{ trip.brand_adresse }}</ion-label>
<ion-label>Adresse : {{ trip?.adresse_partenire }}</ion-label>
</ion-item>
<ion-item href="tel://{{ trip.brand_tel }}" lines="none" *ngIf="trip?.brand_tel">
<ion-item href="tel://{{ trip?.telephone_partenire }}" lines="none" *ngIf="trip?.telephone_partenire">
<ion-icon name="phone-portrait" color="primary" slot="start"></ion-icon>
<ion-label>Tél : {{ trip.brand_tel }}</ion-label>
<ion-label>Tél : {{ trip?.telephone_partenire }}</ion-label>
</ion-item>
</ion-list>
</ion-card>
</div>
</ion-content>
\ No newline at end of file
......@@ -34,3 +34,87 @@ ul.highlight {
text-align: justify;
}
}
ion-header {
position: absolute;
&::after {
background: none;
}
ion-toolbar {
--background: transparent;
transition: 1s linear;
&.show-tb {
--background: #ffffff;
transition: 1s linear;
}
ion-back-button {
background: #ffffff;
border-radius: 24px;
}
}
}
ion-content {
.main-image {
position: relative;
}
.mask {
width: 100%;
height: 100%;
background: rgb(252, 252, 252);
background: linear-gradient(180deg, rgba(252, 252, 252, 0) 72%, rgba(106, 106, 106, 0.451418) 84%, #545454 100%);
// border-radius: 8px;
color: #fff;
display: flex;
align-items: flex-end;
padding: 15px 15px 45px;
position: absolute;
top: 0;
text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.6);
font-weight: 200;
font-family: Montserrat;
font-size: 5vw;
}
ion-item {
// box-shadow: 0px 23px 25px -8px rgba(0, 0, 0, 0.37);
// -webkit-box-shadow: 0px 23px 25px -8px rgba(0, 0, 0, 0.37);
// -moz-box-shadow: 0px 23px 25px -8px rgba(0, 0, 0, 0.37);
&.infos-partner {
border-top-left-radius: 30px;
margin-top: -30px;
border-top-right-radius: 30px;
p {
font-size: 3vw;
font-family: Montserrat;
font-weight: 300;
}
.bookmark {
// background: var(--ion-color-light, #fff);
// border: 1px dotted var(--ion-color-dark, #000);
position: absolute;
right: 1rem;
top: 1rem;
z-index: 9;
margin: 0;
height: 2.9em;
--border-radius: 30px;
--background: #fff;
--box-shadow: none;
--border-width: 1px;
// width: 46px;
// height: 44px;
// padding: 10px;
ion-icon {
font-size: 24px;
margin: 6px;
&.ios {
margin: 6px 11px !important;
}
}
}
}
}
ion-card {
font-family: Montserrat;
background: white;
margin-top: 40px;
}
}
import { Component, OnInit } from '@angular/core';
import { AlloService } from '../../../services/allo-service';
import { TripService } from '../../../services/trip-service';
import { AuthService } from '../../../services/auth.service';
import { Storage } from '@ionic/storage';
import { ActivatedRoute } from '@angular/router';
import * as Config from '../../../constants';
@Component({
selector: 'app-offre-details',
templateUrl: './offre-details.page.html',
......@@ -11,6 +14,7 @@ import { ActivatedRoute } from '@angular/router';
})
export class OffreDetailsPage implements OnInit {
public cfg;
// trip info
public trip: any;
// number of adult
......@@ -18,29 +22,45 @@ export class OffreDetailsPage implements OnInit {
// number of children
public children = 0;
private oid = null;
showToolbar = false;
constructor(
private activatedRoute: ActivatedRoute,
public _TRIP: TripService,
private _ALLO: AlloService,
private _AUTH: AuthService,
private _STOR: Storage) {
this.trip = {};
this._STOR.get('REST_services').then((data) => {
if (data) {
if (null !== data && 'object' === typeof data && data.hasOwnProperty('products')) {
var products = this._ALLO.jsonToArray(data.products);
for (var i = 0; i < products.length; i++) {
if (products[i].id === parseInt(this.oid)) {
this.trip = products[i];
}
}
}
}
});
// this._STOR.get('REST_services').then((data) => {
// if (data) {
// if (null !== data && 'object' === typeof data && data.hasOwnProperty('products')) {
// var products = this._ALLO.jsonToArray(data.products);
// for (var i = 0; i < products.length; i++) {
// if (products[i].id === parseInt(this.oid)) {
// this.trip = products[i];
// }
// }
// }
// }
// });
}
ngOnInit() {
this.cfg = Config;
this.oid = this.activatedRoute.snapshot.paramMap.get('oid');
this._TRIP.getOffer(this.oid).then(r => {
console.log(this.oid, r);
if (r) {
this.trip = r[0];
}
});
}
onScroll($event) {
if ($event && $event.detail && $event.detail.scrollTop) {
const scrollTop = $event.detail.scrollTop;
this.showToolbar = scrollTop >= 225;
}
}
}
<!-- <ion-list-header>Catégories :</ion-list-header> -->
<div class="app">
<!-- <div class="app">
<ul class="hs">
<li class="item">
<ion-chip (click)="_TRIP.filterList('all')">
......@@ -12,14 +12,72 @@
</ion-chip>
</li>
</ul>
</div>
<ion-content padding-horizontal padding-bottom class="dashboard">
<ion-refresher (ionRefresh)="doRefresh($event)">
<ion-refresher-content></ion-refresher-content>
</div> -->
<ion-content color="light" class="dashboard">
<ion-refresher slot="fixed" (ionRefresh)="doRefresh($event)">
<ion-refresher-content pullingText="Swipez en bas pour rafraîchir" refreshingSpinner="dots"
refreshingText="En cours...">
</ion-refresher-content>
</ion-refresher>
<div *ngIf="_TRIP.filtredProducts.length <= 0">
<ion-card class="skeleton" tappable no-margin margin-bottom>
<!-- <ion-refresher (ionRefresh)="doRefresh($event)" slot="fixed" >
<ion-refresher-content></ion-refresher-content>
</ion-refresher> -->
<div class="header-slider">
<ion-list-header>Hot deals! <ion-badge color="tertiary" class="ion-margin-end">Sponsorisé</ion-badge>
</ion-list-header>
<ion-item class="ion-no-padding">
<div class="app" *ngIf="_TRIP.products.length > 0">
<ul class="hs">
<li class="item" *ngFor="let trip of _TRIP.products">
<div class="badges ion-text-right">
<div class="bookmark" *ngIf="!_AUTH.isAnonymous">
<ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'add', true)"
*ngIf="!trip.bookmarked" class="ion-no-padding">
<ion-icon name="heart-empty"></ion-icon>
</ion-button>
<ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'remove', true)"
*ngIf="trip.bookmarked" class="ion-no-padding">
<ion-icon name="heart" color="danger"></ion-icon>
</ion-button>
</div>
<!-- <ion-badge color="blue">
<ion-icon name="trending-up"></ion-icon> 400
</ion-badge> -->
<ion-badge color="secondary" margin-left>
<ion-text color="light">
<ion-icon name="ribbon"></ion-icon> 200
</ion-text>
</ion-badge>
</div>
<div (click)="viewDetail(trip.id)"
[ngStyle]="{'background-image': 'url(' + trip.thumb + ')', 'background-color': '#fff', 'background-repeat': 'no-repeat', 'background-size': 'cover', 'width': '100%', 'height': '100%', 'border-radius': '8px', 'display': 'flex'}">
<div class="mask">
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col class="ion-no-padding"> {{trip.name}} </ion-col>
</ion-row>
<ion-row>
<ion-col class="ion-no-padding">
<ion-badge color="light">
<ion-text color="primary">
<ion-label>
<ion-icon name="pin"></ion-icon> {{ trip.location }}
</ion-label>
</ion-text>
</ion-badge>
</ion-col>
</ion-row>
</ion-grid>
</div>
</div>
<!-- <ion-img src="../../../../assets/img/avatar.jpeg"></ion-img> -->
</li>
</ul>
</div>
</ion-item>
</div>
<div class="ion-padding" *ngIf="offres.length <= 0">
<ion-card class="skeleton ion-no-margin ion-margin-bottom">
<ion-skeleton-text class="img" animated></ion-skeleton-text>
<ion-card-header>
<ion-card-subtitle color="primary">
......@@ -37,7 +95,7 @@
<ion-skeleton-text style="width: 50%" animated></ion-skeleton-text>
</ion-card-content>
</ion-card>
<ion-card class="skeleton" tappable no-margin margin-bottom>
<ion-card class="skeleton ion-no-margin ion-margin-bottom">
<ion-skeleton-text class="img" animated></ion-skeleton-text>
<ion-card-header>
<ion-card-subtitle color="primary">
......@@ -56,32 +114,47 @@
</ion-card-content>
</ion-card>
</div>
<div class="card-wrapper" *ngFor="let trip of _TRIP.offersCardList">
<div class="card-wrapper ion-padding" *ngFor="let trip of offres">
<div *ngIf="!_AUTH.isAnonymous">
<ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'add')"
*ngIf="!trip.bookmarked" no-padding>
<ion-icon name="heart-empty"></ion-icon>
<ion-button color="light" fill="solid" class="bookmark ion-no-padding"
(click)="_TRIP.wishList(trip, 'add', $event)" *ngIf="!trip.bookmarked">
<ion-icon name="heart-empty" color="medium"></ion-icon>
</ion-button>
<ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'remove')"
*ngIf="trip.bookmarked" no-padding>
<ion-button color="light" fill="solid" class="bookmark ion-no-padding"
(click)="_TRIP.wishList(trip, 'remove', $event)" *ngIf="trip.bookmarked">
<ion-icon name="heart" color="danger"></ion-icon>
</ion-button>
</div>
<ion-card (click)="viewDetail(trip.id)" tappable no-margin margin-bottom>
<ion-card class="ion-no-margin ion-margin-bottom" routerLink="/app/details-offre/{{trip.id}}"
routerDirection="forward" routerLinkActive="active">
<ion-item lines="none">
<ion-avatar slot="start">
<ion-img [src]="cfg.DRUPAL_URL + trip.logo_partenaire_thumb">
</ion-img>
</ion-avatar>
<ion-label>
<h3>{{ trip.titre_partenaire }}</h3>
<p class="text-sm">{{ trip.nom_categorie }}</p>
</ion-label>
</ion-item>
<div class="img-spinner-wrap ion-text-center">
<ion-spinner name="dots" *ngIf="trip.hidden"></ion-spinner>
</div>
<ion-img [src]="trip.thumb" [class.no-visibility]="trip.hidden" (ionImgDidLoad)="setImgVisible(trip)"></ion-img>
<ion-img class="main" [src]="cfg.DRUPAL_URL + trip.photo_carte_app_mob" [class.no-visibility]="trip.hidden"
(ionImgDidLoad)="setImgVisible(trip)"></ion-img>
<ion-card-header>
<ion-card-subtitle color="primary">
<ion-icon name="pin"></ion-icon>
<ion-label>{{ trip.location }}</ion-label>
<ion-badge fill="outline" *ngIf="trip.price_adult" color="warning">
<!-- <ion-icon name="pin"></ion-icon>
<ion-label>{{ trip.location }}</ion-label> -->
<!-- <ion-avatar class="ion-no-margin ion-no-padding">
<ion-img src="https://allo-testeurs.com/wp-content/uploads/2019/04/C-la-vue-150x150.png"></ion-img>
</ion-avatar> -->
<!-- <ion-badge fill="outline" *ngIf="trip.price_adult" color="warning">
-{{ ((trip.price_adult_before - trip.price_adult) * 100) / trip.price_adult_before | number:'1.0-0' }}%
</ion-badge>
</ion-badge> -->
</ion-card-subtitle>
<ion-card-title>
{{ trip.name | slice:0:100 }}
{{ trip.titre | slice:0:30 }}
</ion-card-title>
</ion-card-header>
......@@ -90,10 +163,18 @@
<ion-label>{{ trip.location }}</ion-label>
<ion-button fill="outline" slot="end">View</ion-button>
</ion-item> -->
<ion-card-content no-padding padding-horizontal padding-bottom>
{{ trip.description | slice:0:130 }}...
<ion-card-content class="ion-no-padding ion-padding-horizontal ion-padding-bottom">
<p>
{{ trip.description | slice:0:100 }}...
</p>
<p class="bottom-card ion-padding-top">
<ion-icon name="heart" color="primary"></ion-icon>&nbsp;<strong>34 wishes</strong>
&nbsp;<span>.</span>&nbsp;
<!-- <ion-icon name="chatbubbles" color="medium"></ion-icon> --> <strong>5 avis</strong>
<!-- <ion-icon name="gift" color="medium"></ion-icon> 45 offres -->
</p>
</ion-card-content>
<ion-item *ngIf="trip.price_adult" color="primary" lines="none">
<!-- <ion-item *ngIf="trip.price_adult" color="primary" lines="none">
<ion-icon name="cash" slot="start"></ion-icon>
<ion-button slot="end" class="before">
<ion-text color="light">
......@@ -105,14 +186,14 @@
{{ trip.price_adult }} Dh
</ion-text>
</ion-button>
</ion-item>
</ion-item> -->
</ion-card>
</div>
<ion-fab vertical="bottom" horizontal="end" slot="fixed">
<ion-fab-button (click)="presentFiltersModal()">
<ion-icon name="funnel"></ion-icon>
</ion-fab-button>
</ion-fab>
<ion-fab-button (click)="presentFiltersModal()">
<ion-icon name="funnel"></ion-icon>
</ion-fab-button>
</ion-fab>
<ion-infinite-scroll threshold="100px" (ionInfinite)="loadData($event)">
<ion-infinite-scroll-content loadingSpinner="bubbles" loadingText="Chargement...">
</ion-infinite-scroll-content>
......
.dashboard {
.header-slider {
background: #fff1d0;
// background: linear-gradient(to bottom, #ffffff, #fbfbfb, #f6f6f6, #f2f2f2, #eeeeee);
ion-item {
--background: #fff1d0;
}
}
.bottom-card {
font-size: 0.8rem;
}
ion-card {
ion-skeleton-text.img {
margin: 0 !important;
min-height: 160px;
}
ion-label {
h3 {
margin: 0;
}
.text-sm {
font-size: 0.8rem;
color: #888;
}
}
ion-badge {
float: right;
margin-top: -36px;
......@@ -14,11 +33,43 @@
align-items: center;
justify-content: center;
}
ion-img {
height: 15rem;
ion-img.main {
height: 11rem;
background: var(--ion-color-tertiary, #989aa2);
object-fit: cover;
}
ion-card-header {
border-top: 1px solid #eee;
}
ion-card-content {
span {
color: #ddd;
font-size: 40px;
line-height: 0;
}
}
ion-card-header,
ion-card-content {
--background: #ffffff;
background: #ffffff;
}
ion-card-title {
font-weight: bold;
}
ion-card-subtitle {
--background: #ffffff;
ion-avatar {
position: absolute;
top: -14vw;
right: 0;
border: 1.5vw solid #ffffff;
width: 20vw;
height: 20vw;
ion-img {
border: none;
}
}
}
ion-item {
ion-button {
font-size: large;
......@@ -58,12 +109,15 @@ div[scrollx="true"] {
div[scrolly="true"] {
overflow-y: auto;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
ion-list-header{
font-weight: 700;
}
.app {
padding: 0;
// padding: 20px 0;
display: grid;
grid-gap: 20px 0;
// grid-template-columns: 20px 1fr 20px;
grid-template-columns: 10px 1fr 0;
align-content: start;
}
......@@ -77,14 +131,15 @@ div[scrolly="true"] {
.hs {
display: grid;
// grid-gap: calc(20px / 2);
grid-template-columns: repeat(9999999, auto);
// grid-template-rows: minmax(150px, 1fr);
grid-gap: calc(20px / 2);
grid-template-columns: repeat(999999999, calc(80% - 20px * 2));
grid-template-rows: minmax(150px, 1fr);
overflow-x: scroll;
scroll-snap-type: x proximity;
// padding-bottom: calc(.75 * 20px);
// margin-bottom: calc(-.25 * 20px);
padding-bottom: calc(0.75 * 20px);
margin-bottom: calc(-0.25 * 20px);
margin-top: 0;
}
/* Demo styles */
......@@ -108,32 +163,75 @@ ul {
.hs > li,
.item {
scroll-snap-align: center;
// padding: calc(20px / 2 * 1.5);
padding: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background: #fff;
background: #fff1d0;
border-radius: 8px;
position: relative;
.mask {
width: 100%;
height: 100%;
background: rgb(252, 252, 252);
background: linear-gradient(
180deg,
rgba(252, 252, 252, 0) 32%,
rgba(106, 106, 106, 0.4514180672268907) 70%,
rgba(84, 84, 84, 1) 100%
);
border-radius: 8px;
color: #fff;
display: flex;
align-items: flex-end;
padding: 0 6px;
}
.badges {
position: absolute;
top: 0;
width: 100%;
padding: 5px;
.bookmark {
position: absolute;
ion-button {
margin: 0 !important;
padding: 0 !important;
height: auto !important;
--border-radius: 16px;
ion-icon {
font-size: 16px;
margin: 6px;
&.ios {
margin: 6px !important;
}
}
}
}
}
}
.card-wrapper {
position: relative;
.bookmark {
// background: var(--ion-color-light, #fff);
// border: 1px dotted var(--ion-color-dark, #000);
position: absolute;
right: 10px;
top: 10px;
--border-radius: 30px;
right: 1.5rem;
top: 17rem;
z-index: 9;
margin: 0;
--border-radius: 30px;
--background: #fff;
--box-shadow: none;
// width: 46px;
// height: 44px;
// padding: 10px;
ion-icon {
font-size: 24px;
margin: 6px;
&.ios{
margin: 6px 11px !important;
&.ios {
margin: 6px 11px !important;
}
}
}
......
......@@ -8,6 +8,8 @@ import { AuthService } from '../../../services/auth.service';
import { TripService } from '../../../services/trip-service';
import { OffresCarteFiltersPage } from '../../../modals/offres-carte-filters/offres-carte-filters.page';
import * as Config from '../../../constants';
@Component({
selector: 'app-offres-carte',
templateUrl: './offres-carte.page.html',
......@@ -16,7 +18,16 @@ import { OffresCarteFiltersPage } from '../../../modals/offres-carte-filters/off
export class OffresCartePage implements OnInit {
@ViewChild(IonInfiniteScroll) infiniteScroll: IonInfiniteScroll;
public cfg;
public toast: any;
public offres = [];
public pager = {
"count": 0,
"pages": 0,
"items_per_page": 2,
"current_page": 0,
"next_page": 1
};
constructor(
public _ALLO: AlloService,
......@@ -29,21 +40,39 @@ export class OffresCartePage implements OnInit {
private storage: Storage) { }
ngOnInit() {
this.cfg = Config;
this.ga.trackView('Page : Offres Carte Testeur');
this._TRIP.getData('offers').then(r => {
this.offres = r.results;
this.pager = r.pager;
});
}
loadData(event) {
setTimeout(() => {
++this._TRIP.offersCardListPointer;
let loadedData = this._TRIP.filtredProducts.slice(this._TRIP.offersCardListPointer, this._TRIP.offersCardListPointer + 2);
if (loadedData) {
this._TRIP.offersCardListPointer = this._TRIP.offersCardListPointer + 1;
this._TRIP.offersCardList = this._TRIP.offersCardList.concat(loadedData);
event.target.complete();
} else {
event.target.disabled = true;
}
}, 300);
if (this.pager.next_page > 0) {
setTimeout(() => {
this._TRIP.getData('offers', this.pager).then(r => {
if (r) {
this.offres = this.offres.concat(r.results);
this.pager = r.pager;
event.target.complete();
} else {
event.target.disabled = true;
}
});
}, 300);
// ++this._TRIP.offersCardListPointer;
// let loadedData = this._TRIP.filtredProducts.slice(this._TRIP.offersCardListPointer, this._TRIP.offersCardListPointer + 2);
// if (loadedData) {
// this._TRIP.offersCardListPointer = this._TRIP.offersCardListPointer + 1;
// this._TRIP.offersCardList = this._TRIP.offersCardList.concat(loadedData);
// event.target.complete();
// } else {
// event.target.disabled = true;
// }
} else {
event.target.disabled = true;
}
}
setImgVisible(trip) {
......@@ -69,7 +98,7 @@ export class OffresCartePage implements OnInit {
return await modal.present();
}
async doRefresh(refresher) {
doRefresh(refresher) {
try {
this.toast.dismiss();
} catch (e) { }
......@@ -87,7 +116,8 @@ export class OffresCartePage implements OnInit {
this.router.navigateByUrl('/app/details-offre/' + id);
}
wishList(offer, action) {
wishList(ev, offer, action) {
// ev.preventDefault();
this._TRIP.wishList(offer, action).then(result => {
offer = result;
});
......
......@@ -25,11 +25,11 @@
<div class="badges ion-text-right">
<div class="bookmark" *ngIf="!_AUTH.isAnonymous">
<ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'add')"
*ngIf="!trip.bookmarked" no-padding>
*ngIf="!trip.bookmarked" class="ion-no-padding">
<ion-icon name="heart-empty"></ion-icon>
</ion-button>
<ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'remove')"
*ngIf="trip.bookmarked" no-padding>
*ngIf="trip.bookmarked" class="ion-no-padding">
<ion-icon name="heart" color="danger"></ion-icon>
</ion-button>
</div>
......@@ -45,12 +45,12 @@
<div (click)="viewDetail(trip.id)"
[ngStyle]="{'background-image': 'url(' + trip.thumb + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover', 'width': '100%', 'height': '100%', 'border-radius': '8px'}">
<div class="mask">
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding> {{trip.name}} </ion-col>
<ion-col class="ion-no-padding"> {{trip.name}} </ion-col>
</ion-row>
<ion-row>
<ion-col no-padding>
<ion-col class="ion-no-padding">
<ion-badge color="light">
<ion-text color="primary">
<ion-label>
......@@ -74,11 +74,11 @@
<div class="badges ion-text-right">
<div class="bookmark" *ngIf="!_AUTH.isAnonymous">
<ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'add')"
*ngIf="!trip.bookmarked" no-padding>
*ngIf="!trip.bookmarked" class="ion-no-padding">
<ion-icon name="heart-empty"></ion-icon>
</ion-button>
<ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'remove')"
*ngIf="trip.bookmarked" no-padding>
*ngIf="trip.bookmarked" class="ion-no-padding">
<ion-icon name="heart" color="danger"></ion-icon>
</ion-button>
</div>
......@@ -94,12 +94,12 @@
<div (click)="viewDetail(trip.id)"
[ngStyle]="{'background-image': 'url(' + trip.thumb + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover', 'width': '100%', 'height': '100%', 'border-radius': '8px'}">
<div class="mask">
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding> {{trip.name}} </ion-col>
<ion-col class="ion-no-padding"> {{trip.name}} </ion-col>
</ion-row>
<ion-row>
<ion-col no-padding>
<ion-col class="ion-no-padding">
<ion-badge color="light">
<ion-text color="primary">
<ion-label>
......@@ -158,11 +158,11 @@
<div class="card-wrapper" *ngFor="let trip of _TRIP.offersCardList">
<div *ngIf="!_AUTH.isAnonymous">
<ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'add')"
*ngIf="!trip.bookmarked" no-padding>
*ngIf="!trip.bookmarked" class="ion-no-padding">
<ion-icon name="heart-empty"></ion-icon>
</ion-button>
<ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'remove')"
*ngIf="trip.bookmarked" no-padding>
*ngIf="trip.bookmarked" class="ion-no-padding">
<ion-icon name="heart" color="danger"></ion-icon>
</ion-button>
</div>
......
......@@ -4,6 +4,9 @@
grid-gap: 20px 0;
grid-template-columns: 10px 1fr 0;
align-content: start;
overflow-y: scroll;
// width: 375px;
// height: 667px;
}
.app > * {
......@@ -40,12 +43,6 @@ ul {
padding: 0;
}
.app {
// width: 375px;
// height: 667px;
overflow-y: scroll;
}
.hs > li,
.item {
scroll-snap-align: center;
......
......@@ -6,6 +6,7 @@ import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { ScrollerPage } from './scroller.page';
import { TinderuiComponent } from "../../../components/tinderui/tinderui.component";
const routes: Routes = [
{
......@@ -21,6 +22,6 @@ const routes: Routes = [
IonicModule,
RouterModule.forChild(routes)
],
declarations: [ScrollerPage]
declarations: [ScrollerPage, TinderuiComponent]
})
export class ScrollerPageModule {}
......@@ -8,78 +8,22 @@
<!-- <ion-icon name="menu" size="large" color="light"></ion-icon> -->
</ion-menu-button>
</ion-buttons>
<ion-title>Swipez à droite</ion-title>
<ion-title>Swipez !!</ion-title>
<ion-chip slot="end" routerLink="/app/mode-carte" routerDirection="forward" routerLinkActive="active">
<ion-icon name="locate" color="dark" class="ion-no-margin"></ion-icon>
</ion-chip>
<ion-chip slot="end" routerLink="/app/dashboard" routerDirection="root" routerLinkActive="active">
<ion-icon name="albums" color="dark" class="ion-no-margin"></ion-icon>
</ion-chip>
<ion-chip slot="end" routerLink="/app/mes-merites" routerDirection="forward" routerLinkActive="active" *ngIf="!_AUTH.isAnonymous">
<!-- <ion-icon name="trending-up" color="blue"></ion-icon>
<ion-label color="dark" class="ion-padding-end">{{ _QST.pointsExp }}</ion-label> -->
<ion-icon name="ribbon" color="secondary"></ion-icon>
<ion-label color="dark">{{ _QST.pointsMerites }}</ion-label>
</ion-chip>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-slides>
<ion-slide>
<div class="skeleton ion-padding">
<ion-card>
<img src="https://ae01.alicdn.com/kf/HTB1ETgBe8Gw3KVjSZFDq6xWEpXaF/JBL-couteurs-filaires-3-5mm-oreillettes-basse-casque-d-coute-sportif-contr-le-mains-libres-en.jpg" />
<ion-card-header color="primary">
<ion-card-title>Lorem ipsum</ion-card-title>
</ion-card-header>
<ion-card-content>
Lorem ipsum sit dolor amet
</ion-card-content>
<!-- <ion-list>
<ion-item *ngIf="trip?.brand_adresse">
<ion-icon name="pin" color="primary" slot="start"></ion-icon>
<ion-label>Adresse : {{ trip.brand_adresse }}</ion-label>
</ion-item>
<ion-item href="tel://{{ trip.brand_tel }}" lines="none" *ngIf="trip?.brand_tel">
<ion-icon name="phone-portrait" color="primary" slot="start"></ion-icon>
<ion-label>Tél : {{ trip.brand_tel }}</ion-label>
</ion-item>
</ion-list> -->
</ion-card>
</div>
</ion-slide>
<ion-slide>
<div class="skeleton">
<ion-skeleton-text class="img" animated></ion-skeleton-text>
<ion-card-header>
<ion-card-subtitle color="primary">
<ion-skeleton-text style="width: 80%" animated></ion-skeleton-text>
</ion-card-subtitle>
<ion-card-title>
<ion-skeleton-text style="height: 20px" animated></ion-skeleton-text>
</ion-card-title>
</ion-card-header>
<ion-card-content no-padding padding-horizontal padding-bottom>
<ion-skeleton-text style="width: 80%" animated></ion-skeleton-text>
<ion-skeleton-text animated></ion-skeleton-text>
<ion-skeleton-text style="width: 80%" animated></ion-skeleton-text>
<ion-skeleton-text style="width: 50%" animated></ion-skeleton-text>
</ion-card-content>
</div>
</ion-slide>
<ion-slide>
<div class="skeleton">
<ion-skeleton-text class="img" animated></ion-skeleton-text>
<ion-card-header>
<ion-card-subtitle color="primary">
<ion-skeleton-text style="width: 80%" animated></ion-skeleton-text>
</ion-card-subtitle>
<ion-card-title>
<ion-skeleton-text style="height: 20px" animated></ion-skeleton-text>
</ion-card-title>
</ion-card-header>
<ion-card-content no-padding padding-horizontal padding-bottom>
<ion-skeleton-text style="width: 80%" animated></ion-skeleton-text>
<ion-skeleton-text animated></ion-skeleton-text>
<ion-skeleton-text style="width: 80%" animated></ion-skeleton-text>
<ion-skeleton-text style="width: 50%" animated></ion-skeleton-text>
</ion-card-content>
</div>
</ion-slide>
</ion-slides>
<app-tinderui [cards]="_TRIP.offersCardList" (choiceMade)="logChoice($event)"></app-tinderui>
</ion-content>
\ No newline at end of file
......@@ -12,3 +12,8 @@ ion-slide {
height: 100% !important;
}
}
ion-header {
ion-chip {
--background: #fff !important;
}
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
import { TripService } from '../../../services/trip-service';
import { AdsService } from '../../../services/ads.service';
import { QuestsService } from '../../../services/quests.service';
import { AuthService } from "../../../services/auth.service";
@Component({
selector: 'app-scroller',
......@@ -6,10 +10,27 @@ import { Component, OnInit } from '@angular/core';
styleUrls: ['./scroller.page.scss'],
})
export class ScrollerPage implements OnInit {
constructor() { }
cards;
constructor(
public _TRIP: TripService,
public _ADS: AdsService,
public _QST: QuestsService,
public _AUTH: AuthService,
) {
// this.cards = this._TRIP.offersCardList;
// this.loadTinderCards();
}
ngOnInit() {
}
ionViewDidEnter() {
// this._ADS.showBanner();
}
logChoice(event) {
console.log('log choice', event);
}
}
<ion-content padding>
<ion-content color="light" class="ion-padding">
<ion-refresher (ionRefresh)="doRefresh($event)">
<ion-refresher-content></ion-refresher-content>
</ion-refresher>
<p class="align-center" *ngIf="!_TRIP.brands">Chargement...</p>
<p class="align-center" *ngIf="!partenairesList">Chargement...</p>
<!--list of partners-->
<ion-card *ngFor="let partner of _TRIP.brands" tappable no-margin margin-bottom>
<div class="logo-container" *ngIf="partner.thumb">
<ion-card *ngFor="let partner of partenairesList" class="ion-no-margin ion-margin-bottom"
routerLink="/app/partenaire/{{ partner.id }}" routerDirection="forward" routerLinkActive="active">
<ion-item lines="none">
<ion-avatar slot="start">
<ion-img [src]="Cnf.DRUPAL_URL + partner.logo_thumb"></ion-img>
</ion-avatar>
<ion-label>
<ion-text color="primary">
<h3>{{ partner.titre }}</h3>
</ion-text>
<p *ngIf="partner.adresse">
<ion-icon color="primary" name="pin"></ion-icon>
<ion-label color="dark" class="text-1x">{{ partner.adresse }}</ion-label>
</p>
<p *ngIf="partner.telephone">
<ion-icon color="primary" name="phone-portrait"></ion-icon>
<ion-label color="dark" class="text-1x">{{ partner.telephone }}</ion-label>
</p>
<ion-grid class="ion-no-padding ion-margin-top">
<ion-row>
<ion-col class="ion-no-padding">
<p>
<ion-icon name="star" color="secondary"></ion-icon> 5 étoiles &nbsp; &nbsp;
</p>
</ion-col>
<ion-col class="ion-no-padding">
<p>
<ion-icon name="chatbubbles" color="medium"></ion-icon> 5 avis &nbsp; &nbsp;
</p>
</ion-col>
<ion-col class="ion-no-padding">
<p>
<ion-icon name="gift" color="medium"></ion-icon> 45 offres
</p>
</ion-col>
</ion-row>
</ion-grid>
</ion-label>
</ion-item>
<!-- <div class="logo-container" *ngIf="partner.thumb">
<img src="{{ partner.thumb }}" />
</div>
<ion-card-header>
<ion-card-title>{{ partner.label }}</ion-card-title>
<!-- <ion-card-subtitle color="dark" *ngIf="partner.adresse">
<ion-icon name="pin" size="large"></ion-icon>
{{ partner.adresse }}
</ion-card-subtitle> -->
</ion-card-header>
<ion-item *ngIf="partner.adresse">
<ion-icon color="primary" name="pin" item-start></ion-icon>
......@@ -42,6 +76,6 @@
</ion-item>
</div>
</ng-container>
</ion-list>
</ion-list> -->
</ion-card>
</ion-content>
\ No newline at end of file
......@@ -8,4 +8,15 @@ ion-card {
margin: 0 auto;
}
}
ion-item {
ion-avatar {
width: 20vw;
height: 20vw;
margin-right: 2vw;
border: 0.5px solid;
}
ion-icon {
float: left;
}
}
}
......@@ -3,6 +3,7 @@ import { LoadingController } from '@ionic/angular';
// import { ActivatedRoute } from '@angular/router';
import { TripService } from '../../../services/trip-service';
import { AlloService } from '../../../services/allo-service';
import * as Config from '../../../constants';
@Component({
selector: 'app-partenaires-list',
......@@ -12,10 +13,10 @@ import { AlloService } from '../../../services/allo-service';
export class PartenairesListPage implements OnInit {
public request: any;
public partenairesList: Array<any> = [];
public partenairesList: any = [];
public offresList: Array<any> = [];
private loading: any;
// private partnerId: any = null;
private Cnf;
constructor(
// private activatedRoute: ActivatedRoute,
......@@ -49,18 +50,24 @@ export class PartenairesListPage implements OnInit {
}
doRefresh(refresher) {
this._TRIP.fetchData();
this._TRIP.getData('partners').then(r => {
this.partenairesList = r.results;
setTimeout(() => {
console.log('Async operation has ended');
refresher.target.complete();
}, 2000);
setTimeout(() => {
console.log('Async operation has ended');
refresher.target.complete();
}, 2000);
});
}
ngOnInit() {
console.log('ngOnInit');
this.Cnf = Config;
// this.partnerId = this.activatedRoute.snapshot.paramMap.get('partnerid');
// this._ALLO.presentLoading();
this._TRIP.getData('partners').then(r => {
this.partenairesList = r.results;
});
}
ionViewDidEnter() {
......
<ion-content>
<!-- <ion-slides pager="true">
<ion-slide padding>
<ion-card>
<img src="../../assets/img/DSC09608.JPG">
<ion-item>
<ion-avatar slot="end">
<img src="../../assets/img/avatar.jpeg">
</ion-avatar>
<ion-label>
<h2>The green place</h2>
<p>Café / Restaurant</p>
</ion-label>
</ion-item>
</ion-card>
</ion-slide>
<ion-slide padding>
<ion-card>
<img src="../../assets/img/DSC09608.JPG">
<ion-item>
<ion-avatar slot="end">
<img src="../../assets/img/avatar.jpeg">
</ion-avatar>
<ion-label>
<h2>The green place</h2>
<p>Café / Restaurant</p>
</ion-label>
</ion-item>
</ion-card>
</ion-slide>
<ion-slide padding>
<ion-card>
<img src="../../assets/img/DSC09608.JPG">
<ion-item>
<ion-avatar slot="end">
<img src="../../assets/img/avatar.jpeg">
</ion-avatar>
<ion-label>
<h2>The green place</h2>
<p>Café / Restaurant</p>
</ion-label>
</ion-item>
</ion-card>
</ion-slide>
</ion-slides> -->
<div id="map" style="width:100%; height:100%;"></div>
<div style="position: fixed; bottom: 0; width: 100vw; z-index: 9999999;">
<div class="swiper-container">
<!-- Additional required wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<div class="swiper-slide" *ngFor="let brand of _TRIP.brands">
<ion-card color="light">
<!-- <img class="big" [src]="brand.thumb" /> -->
<ion-item>
<ion-avatar slot="end">
<img [src]="brand.thumb" />
</ion-avatar>
<ion-label>
<!-- <p>Restaurant</p> -->
<h3>{{ brand.label }}</h3>
<p>{{ brand.adresse }}</p>
<p>
<ion-icon name="star" color="secondary"></ion-icon> 5 étoiles &nbsp; &nbsp;
<ion-icon name="chatbubbles" color="medium"></ion-icon> 5 avis &nbsp; &nbsp;
<ion-icon name="gift" color="medium"></ion-icon> 45 offres
</p>
</ion-label>
</ion-item>
</ion-card>
</div>
</div>
<!-- If we need pagination -->
<div class="swiper-pagination"></div>
<!-- If we need scrollbar -->
<div class="swiper-scrollbar"></div>
</div>
</div>
</ion-content>
\ No newline at end of file
ion-slides {
height: 60vh;
width: 100vw;
position: absolute;
bottom: 0;
z-index: 99999;
// ion-slide {
// height: 50vh;
// width: 100vw;
// }
}
.map-popup {
.leaflet-popup-content {
width: 80vw !important;
margin: 0 !important;
}
}
ion-card {
// position: absolute;
width: calc(100vw - 20px);
// height: 50vh;
// top: 100vh;
transition: 0.5s;
h3 {
font-family: "Open Sans";
text-transform: uppercase;
color: var(--ion-color-primary);
}
ion-card-header {
ion-card-subtitle {
font-family: "Open Sans";
text-transform: uppercase;
color: var(--ion-color-primary);
}
ion-card-title {
font-family: "Open Sans Light";
text-transform: uppercase;
margin: 0 !important;
}
}
// img {
// height: 30vh;
// object-fit: cover;
// }
// &.show {
// top: initial !important;
// bottom: 0;
// }
}
......@@ -2,6 +2,7 @@ import { Component, OnInit } from '@angular/core';
import { LoadingController } from '@ionic/angular';
import { AlloService } from '../../../services/allo-service';
import { TripService } from '../../../services/trip-service';
import { MapsService } from '../../../services/maps.service';
import L from 'leaflet';
import 'leaflet.markercluster';
......@@ -14,93 +15,42 @@ export class PartenairesMapPage implements OnInit {
private map: any;
private loader: any;
public showCard = false;
public shownPartner = { label: '' };
constructor(
public loadingCtrl: LoadingController,
public _ALLO: AlloService,
public _TRIP: TripService
public _TRIP: TripService,
public _MAPS: MapsService
) { }
ionViewDidEnter() {
// this.loader = this.loadingCtrl.create({
// message: 'Chargement...'
// });
// this.loader.present();
this.loadmap();
setShowCard(value) {
this.showCard = value;
}
ionViewDidLeave() {
this.map.remove();
// this.partnerModal.dismiss();
setShowPartner(value) {
this.shownPartner = value;
}
loadmap() {
this.map = L.map('map', { attributionControl: false });
this.map.on('load', () => {
// this.loader.dismiss();
ionViewDidEnter() {
this._MAPS.loadMapGoogle();
this._TRIP.getData(true).then(services => {
// this._MAPS.setSwiper();
this._MAPS.loadMarkersGoogle(services.brands, true);
});
this.map.setView([34.255670, -6.578737], 13);
L
.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attributions: 'www.allo-testeurs.com',
maxZoom: 18
})
.addTo(this.map);
}
let markerGroup = L.markerClusterGroup();
// let markerGroup = L.featureGroup();
var greenIcon = L.icon({
iconUrl: '../../assets/icon/pin-coffee.png',
iconSize: [25, 40], // size of the icon
iconAnchor: [22, 94], // point of the icon which will correspond to marker's location
popupAnchor: [-3, -76] // point from which the popup should open relative to the iconAnchor
});
for (var i = 0; i < this._TRIP.brands.length; i++) {
let brand = this._TRIP.brands[i];
// let marker: any = L.marker([brand.latitude, brand.longitude], {icon: greenIcon} ).on('click', () => {
let popup = `<ion-card no-margin>
<div class="logo-container">
<img src="${ brand.thumb}">
</div>
<ion-item>
<ion-label>
<h1 color="primary">
<ion-text color="secondary">
${ brand.label}
</ion-text>
</h1>
<h2>
<ion-icon name="pin"></ion-icon>
<ion-text color="">
${ brand.adresse}
</ion-text>
</h2>
<h3>
<ion-icon name="phone-portrait"></ion-icon>
<ion-text color="medium">
${ brand.tel}
</ion-text>
</h3>
</ion-label>
</ion-item>
</ion-card>`;
let popupOptions =
{
'maxWidth': '350',
'className': 'map-popup'
}
let marker: any = L.marker([brand.latitude, brand.longitude])
.bindPopup(popup, popupOptions)
.on('click', () => {
// this.presentPartnerModal(brand.id);
})
markerGroup.addLayer(marker);
}
this.map.addLayer(markerGroup);
ionViewDidLeave() {
this._MAPS.removeMapGoogle();
}
ngOnInit() {
this._MAPS.showCard.subscribe(canShow => {
console.log(canShow);
this.showCard = canShow;
});
}
}
......@@ -18,36 +18,36 @@
</ion-row>
</ion-grid>
<ion-card color="gradgrey" no-margin margin-horizontal margin-bottom padding>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<!-- First column -->
<ion-col size="3" no-padding>
<ion-grid no-padding>
<ion-col size="3" class="ion-no-padding">
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
<!-- <ion-badge>#1</ion-badge> -->
<ion-img class="crown" src="../../assets/img/ressources/crown.png"></ion-img>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
<ion-avatar padding-bottom>
<ion-img src="../../assets/img/avatar.jpeg"></ion-img>
</ion-avatar>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
<ion-badge color="warning">Legendaire</ion-badge>
</ion-col>
</ion-row>
</ion-grid>
</ion-col>
<!-- Second column -->
<ion-col no-padding>
<ion-grid no-padding>
<ion-col class="ion-no-padding">
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
<ion-text>
<h2 no-margin>Nabil Sadki</h2>
<p no-margin margin-bottom>Membre depuis le : 28/08/2019</p>
......@@ -56,43 +56,43 @@
</ion-row>
<ion-row>
<ion-col class="ion-text-center" no-padding padding-top>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
Mérites
</ion-col>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
Carte Testeur
</ion-col>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
Level
</ion-col>
</ion-row>
<ion-row>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
<ion-chip>
<ion-icon name="ribbon" color="secondary" no-margin></ion-icon>
</ion-chip>
</ion-col>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
<ion-chip>
<ion-icon name="card" color="secondary" no-margin></ion-icon>
</ion-chip>
</ion-col>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
<ion-chip>
<ion-icon name="trending-up" color="secondary" no-margin></ion-icon>
</ion-chip>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
10 542
</ion-col>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
Oui
</ion-col>
<ion-col class="ion-text-center" no-padding>
<ion-col class="ion-text-center ion-no-padding">
14
</ion-col>
</ion-row>
......@@ -105,13 +105,13 @@
</ion-grid>
</ion-card>
<ion-card color="gradgrey" class="mini" no-margin margin-horizontal margin-bottom>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<!-- First column -->
<ion-col size="2" no-padding>
<ion-col size="2" class="ion-no-padding">
<ion-badge class="rank" color="secondary">#2</ion-badge>
</ion-col>
<ion-col class="ion-text-left" no-padding>
<ion-col class="ion-text-left ion-no-padding">
<ion-avatar class="ion-float-left">
<ion-img src="../../assets/img/avatar.jpeg"></ion-img>
</ion-avatar>
......@@ -133,13 +133,13 @@
</ion-grid>
</ion-card>
<ion-card color="gradgrey" class="mini" no-margin margin-horizontal margin-bottom>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<!-- First column -->
<ion-col size="2" no-padding>
<ion-col size="2" class="ion-no-padding">
<ion-badge class="rank" color="secondary">#3</ion-badge>
</ion-col>
<ion-col class="ion-text-left" no-padding>
<ion-col class="ion-text-left ion-no-padding">
<ion-avatar class="ion-float-left">
<ion-img src="../../assets/img/avatar.jpeg"></ion-img>
</ion-avatar>
......@@ -159,13 +159,13 @@
</ion-grid>
</ion-card>
<ion-card color="gradgrey" class="mini" no-margin margin-horizontal margin-bottom>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<!-- First column -->
<ion-col size="2" no-padding>
<ion-col size="2" class="ion-no-padding">
<ion-badge class="rank" color="rose">#4</ion-badge>
</ion-col>
<ion-col class="ion-text-left" no-padding>
<ion-col class="ion-text-left ion-no-padding">
<ion-avatar class="ion-float-left">
<ion-img src="../../assets/img/avatar.jpeg"></ion-img>
</ion-avatar>
......@@ -186,13 +186,13 @@
</ion-grid>
</ion-card>
<ion-card color="gradgrey" class="mini" no-margin margin-horizontal margin-bottom>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<!-- First column -->
<ion-col size="2" no-padding>
<ion-col size="2" class="ion-no-padding">
<ion-badge class="rank" color="blue">#5</ion-badge>
</ion-col>
<ion-col class="ion-text-left" no-padding>
<ion-col class="ion-text-left ion-no-padding">
<ion-avatar class="ion-float-left">
<ion-img src="../../assets/img/avatar.jpeg"></ion-img>
</ion-avatar>
......@@ -213,13 +213,13 @@
</ion-grid>
</ion-card>
<ion-card color="gradgrey" class="mini" no-margin margin-horizontal margin-bottom>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<!-- First column -->
<ion-col size="2" no-padding>
<ion-col size="2" class="ion-no-padding">
<ion-badge class="rank" color="blue">#6</ion-badge>
</ion-col>
<ion-col class="ion-text-left" no-padding>
<ion-col class="ion-text-left ion-no-padding">
<ion-avatar class="ion-float-left">
<!-- <ion-img src="../../assets/img/avatar.jpeg"></ion-img> -->
<ion-icon name="contact" color="dark"></ion-icon>
......@@ -240,13 +240,13 @@
</ion-grid>
</ion-card>
<ion-card color="gradgrey" class="mini" no-margin margin-horizontal margin-bottom>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<!-- First column -->
<ion-col size="2" no-padding>
<ion-col size="2" class="ion-no-padding">
<ion-badge class="rank" color="rose">#7</ion-badge>
</ion-col>
<ion-col class="ion-text-left" no-padding>
<ion-col class="ion-text-left ion-no-padding">
<ion-avatar class="ion-float-left">
<ion-img src="../../assets/img/avatar.jpeg"></ion-img>
</ion-avatar>
......@@ -267,13 +267,13 @@
</ion-grid>
</ion-card>
<ion-card color="gradgrey" class="mini" no-margin margin-horizontal margin-bottom>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<!-- First column -->
<ion-col size="2" no-padding>
<ion-col size="2" class="ion-no-padding">
<ion-badge class="rank" color="rose">#8</ion-badge>
</ion-col>
<ion-col class="ion-text-left" no-padding>
<ion-col class="ion-text-left ion-no-padding">
<ion-avatar class="ion-float-left">
<ion-img src="../../assets/img/avatar.jpeg"></ion-img>
</ion-avatar>
......@@ -293,13 +293,13 @@
</ion-grid>
</ion-card>
<ion-card color="gradgrey" class="mini" no-margin margin-horizontal margin-bottom>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<!-- First column -->
<ion-col size="2" no-padding>
<ion-col size="2" class="ion-no-padding">
<ion-badge class="rank" color="blue">#9</ion-badge>
</ion-col>
<ion-col class="ion-text-left" no-padding>
<ion-col class="ion-text-left ion-no-padding">
<ion-avatar class="ion-float-left">
<ion-img src="../../assets/img/avatar.jpeg"></ion-img>
</ion-avatar>
......@@ -320,13 +320,13 @@
</ion-grid>
</ion-card>
<ion-card color="gradgrey" class="mini" no-margin margin-horizontal margin-bottom>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<!-- First column -->
<ion-col size="2" no-padding>
<ion-col size="2" class="ion-no-padding">
<ion-badge class="rank" color="blue">#10</ion-badge>
</ion-col>
<ion-col class="ion-text-left" no-padding>
<ion-col class="ion-text-left ion-no-padding">
<ion-avatar class="ion-float-left">
<ion-img src="../../assets/img/avatar.jpeg"></ion-img>
</ion-avatar>
......@@ -354,7 +354,7 @@
</ion-avatar>
<ion-label margin>
<h2>Nabil Sadki</h2>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start">
<ion-chip outline="true" class="badge">
......@@ -377,7 +377,7 @@
</ion-avatar>
<ion-label margin>
<h2>Nabil Sadki</h2>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start">
<ion-chip outline="true" class="badge">
......@@ -400,7 +400,7 @@
</ion-avatar>
<ion-label margin>
<h2>Nabil Sadki</h2>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start">
<ion-chip outline="true" class="badge">
......
......@@ -19,7 +19,7 @@
<ion-label no-margin>
<h2>Everyday</h2>
<p>Connexion hebdomadaire.</p>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start" size="5">
<ion-chip outline="true">
......@@ -40,7 +40,7 @@
<ion-label no-margin>
<h2>On s'habitue</h2>
<p>Se connecter 7 fois successives à l'application.</p>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start" size="5">
<ion-chip outline="true">
......@@ -61,7 +61,7 @@
<ion-label no-margin>
<h2>Toujours en ligne!</h2>
<p>Se connecter 30 fois successives à l'application.</p>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start" size="5">
<ion-chip outline="true">
......@@ -87,7 +87,7 @@
<ion-label no-margin>
<h2>Viens, je te montre un truc</h2>
<p>Parrainer un(e) ami(e).</p>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start" size="5">
<ion-chip outline="true">
......@@ -108,7 +108,7 @@
<ion-label no-margin>
<h2>C'est super à 5!</h2>
<p>Parrainer 5 ami(e)s.</p>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start" size="5">
<ion-chip outline="true">
......@@ -129,7 +129,7 @@
<ion-label no-margin>
<h2>A 10, c'est encore mieux!!</h2>
<p>Parrainer 10 ami(e)s.</p>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start" size="5">
<ion-chip outline="true">
......@@ -150,7 +150,7 @@
<ion-label no-margin>
<h2>Father</h2>
<p>Parrainer 30 ami(e)s.</p>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start" size="5">
<ion-chip outline="true">
......@@ -171,7 +171,7 @@
<ion-label no-margin>
<h2>Godfather</h2>
<p>Parrainer 50 ami(e)s.</p>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start" size="5">
<ion-chip outline="true">
......
......@@ -23,7 +23,7 @@
<ion-label no-margin>
<h2>{{ item.title }}</h2>
<p>{{ item.description }}</p>
<ion-grid no-padding>
<ion-grid class="ion-no-padding">
<ion-row>
<ion-col no-padding class="ion-text-start" size="5">
<ion-chip outline="true">
......
import { TestBed } from '@angular/core/testing';
import { AdsService } from './ads.service';
describe('AdsService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: AdsService = TestBed.get(AdsService);
expect(service).toBeTruthy();
});
});
import { Injectable } from '@angular/core';
import { AdMobPro } from '@ionic-native/admob-pro/ngx';
@Injectable({
providedIn: 'root'
})
export class AdsService {
adsIds = {
// banners: 'ca-app-pub-8578682421434111/8730161551', // Allo
// interstitiel: 'ca-app-pub-8578682421434111/2429897966', // Allo
// rewards: 'ca-app-pub-8578682421434111/8369346704', // Allo
banners: 'ca-app-pub-3940256099942544/6300978111', // Google
interstitiel: 'ca-app-pub-3940256099942544/1033173712', // Google
interstitielVideo: 'ca-app-pub-3940256099942544/8691691433', // Google
rewards: 'ca-app-pub-3940256099942544/5224354917', // Google
};
constructor(
private admob: AdMobPro
) { }
showInterstitial() {
this.admob.prepareInterstitial({
adId: this.adsIds.interstitiel
})
.then(() => {
console.log('inter prepared');
this.admob.showInterstitial();
});
}
createBanner(auto: boolean) {
this.admob.createBanner({
adId: this.adsIds.banners,
position: 8,
autoShow: auto
})
.then(() => {
console.log('inter banner');
});
}
showBanner() {
this.admob.showBanner(this.admob.AD_POSITION.BOTTOM_CENTER);
}
hideBanner() {
this.admob.hideBanner();
}
}
import { TestBed } from '@angular/core/testing';
import { AppService } from './app.service';
describe('AppService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: AppService = TestBed.get(AppService);
expect(service).toBeTruthy();
});
});
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class AppService {
public $dashboard_header_buttons = new BehaviorSubject('main');
public $account_edit_mode = new BehaviorSubject(false);
constructor() { }
}
......@@ -22,8 +22,8 @@ export class AuthService {
public infoAvatar = '-';
public userId: any;
public userInfos: any;
public userToken: any;
public userRefreshToken: any;
public userToken = new BehaviorSubject('');
public userRefreshToken = new BehaviorSubject('');
authState = new BehaviorSubject(false);
public isAnonymous = false;
......@@ -51,8 +51,8 @@ export class AuthService {
this.infoAvatar = alloUser.user_infos.avatar;
this.userInfos = alloUser.user_infos;
this.userId = alloUser.user_infos.uid;
this.userToken = alloUser.access_token;
this.userRefreshToken = alloUser.refresh_token;
this.userToken.next(alloUser.access_token);
this.userRefreshToken.next(alloUser.refresh_token);
this._QST.pointsMerites = alloUser.user_infos.merites;
}
......@@ -68,7 +68,7 @@ export class AuthService {
this.storage.get('alloUser').then((alloUser) => {
if (alloUser) {
this.updateServiceProps(alloUser);
this.doRefreshToken();
// this.doRefreshToken();
}
});
}
......@@ -96,14 +96,15 @@ export class AuthService {
this.ga.trackEvent('Logout', 'Tapped button', 'Logout');
this.storage.remove('alloUser');
this.storage.remove('alloUserInfos');
this.storage.remove('WISHLIST');
this.infoNicename = null;
this.infoFullname = null;
this.infoEmail = null;
this.infoAvatar = null;
this.userId = null;
this.userInfos = null;
this.userToken = null;
this.userRefreshToken = null;
this.userToken.next(null);
this.userRefreshToken.next(null);
this.authState.next(false);
}
......@@ -148,13 +149,14 @@ export class AuthService {
}
doRefreshToken() {
// this._ALLO.presentLoading();
let authDataObj = {
grant_type: 'refresh_token',
refresh_token: this.userRefreshToken,
refresh_token: this.userRefreshToken.getValue(),
client_id: Config.DRUPAL_OAUTH_CLIENT_ID,
client_secret: 'Allo@Testeurs'
};
console.log('[OLD] > this.userToken', this.userToken, 'this.userRefreshToken', this.userRefreshToken);
console.log('[OLD] > this.userToken', this.userToken.getValue(), 'this.userRefreshToken', this.userRefreshToken.getValue());
return new Promise<any>((resolve, reject) => {
if (this.platform.is('cordova')) {
......@@ -168,15 +170,21 @@ export class AuthService {
alloUser.refresh_token = data.refresh_token;
this.setUser(alloUser).then(() => {
this.updateServiceProps(alloUser);
console.log('[NEW] > this.userToken', this.userToken, 'this.userRefreshToken', this.userRefreshToken);
console.log('[NEW] > this.userToken', this.userToken.getValue(), 'this.userRefreshToken', this.userRefreshToken.getValue());
this.authState.next(true);
});
});
this._ALLO.dismissLoading();
resolve(res);
},
err => {
console.log(err);
this._ALLO.presentToast('Session', 'Session expirée.<br>Veuillez vous reconnecter', 'top');
this._ALLO.dismissLoading();
this.getUser().then((alloUser) => {
if (alloUser) {
this._ALLO.presentToast('Session', 'Session expirée.<br>Veuillez vous reconnecter', 'top');
}
});
this.logOut();
reject(err);
}
......@@ -270,7 +278,7 @@ export class AuthService {
// Update user data
const csrfToken = result.data;
const header = {
'Authorization': 'Bearer ' + this.userToken,
'Authorization': 'Bearer ' + this.userToken.getValue(),
'Content-Type': 'application/json',
'X-CSRF-Token': csrfToken
};
......@@ -346,28 +354,32 @@ export class AuthService {
* @param status Error code
*/
getErrorMessage(error) {
const errObject = JSON.parse(error.error);
switch (error.status) {
case -3:
return 'Impossible de se connecter avec le serveur. Veuillez réessayer plus tard.';
break;
case 401:
switch (errObject.error) {
case 'invalid_credentials':
return 'Login et/ou mot de passe incorrects.';
break;
default:
return 'Erreur inconnue.';
break;
}
break;
case 422:
return 'Cette adresse email existe déjà. Merci de saisir une nouvelle adresse';
break;
try {
const errObject = JSON.parse(error.error);
switch (error.status) {
case -3:
return 'Impossible de se connecter avec le serveur. Veuillez réessayer plus tard.';
break;
case 401:
switch (errObject.error) {
case 'invalid_credentials':
return 'Login et/ou mot de passe incorrects.';
break;
default:
return 'Erreur serveur. Veuillez recommencer!';
break;
}
break;
case 422:
return 'Cette adresse email existe déjà. Merci de saisir une nouvelle adresse';
break;
default:
return 'Erreur inconnue';
break;
default:
return 'Erreur serveur. Veuillez recommencer!';
break;
}
} catch (e) {
return 'Erreur serveur. Veuillez recommencer!';
}
}
}
......@@ -47,7 +47,7 @@ export class DemandsService {
getDemands(traitee, sort) {
return new Promise<any>((resolve, reject) => {
const header = {
'Authorization': 'Bearer ' + this._AUTH.userToken
'Authorization': 'Bearer ' + this._AUTH.userToken.getValue()
};
this.httpAdv.sendRequest(Config.DRUPAL_URL + 'atapi/node/demande?sort=-' + sort + '&include=field_offre,field_partenaire,field_qrcode,field_abonne,field_code_de_merites&filter[field_demande_traitee_]=' + traitee,
{
......
......@@ -64,6 +64,10 @@ export class LocationService {
});
}
getCurrentLocation() {
return this.bgLocation.getCurrentLocation();
}
startTracking() {
if (this.platform.is('cordova')) {
console.log("[TRACK] start");
......
import { TestBed } from '@angular/core/testing';
import { MapsService } from './maps.service';
describe('MapsService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: MapsService = TestBed.get(MapsService);
expect(service).toBeTruthy();
});
});
import { Injectable, Component } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import {
GoogleMaps,
GoogleMap,
GoogleMapsEvent,
GoogleMapOptions,
CameraPosition,
MarkerOptions,
MarkerIcon,
Marker,
HtmlInfoWindow,
Environment
} from '@ionic-native/google-maps';
import L from 'leaflet';
import 'leaflet.markercluster';
import Swiper from 'swiper';
@Injectable({
providedIn: 'root'
})
export class MapsService {
private map: any;
public showCard = new BehaviorSubject(false);
public shownPartner = { label: '' };
private swiperObj;
private slidesMerkers = [];
constructor() { }
loadMapLeaf() {
this.map = L.map('map', { attributionControl: false });
this.map.on('load', () => {
// this.loader.dismiss();
});
this.map.setView([34.255670, -6.578737], 13);
L
.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attributions: 'www.allo-testeurs.com',
maxZoom: 18
})
.addTo(this.map);
}
loadMapGoogle() {
let mapOptions: GoogleMapOptions = {
controls: {
'compass': false,
'myLocationButton': false,
'indoorPicker': false,
'zoom': true,
'mapToolbar': true // currently Android only
},
camera: {
target: {
lat: 34.255670,
lng: -6.578737
},
zoom: 13,
// tilt: 30
}
};
this.map = GoogleMaps.create('map', mapOptions);
}
removeMapLeaf() {
this.map.remove();
}
removeMapGoogle() {
this.map.remove();
}
loadMarkersLeaf(items) {
let markerGroup = L.markerClusterGroup();
// let markerGroup = L.featureGroup();
var greenIcon = L.icon({
iconUrl: '../../assets/icon/pin-coffee.png',
iconSize: [25, 40], // size of the icon
iconAnchor: [22, 94], // point of the icon which will correspond to marker's location
popupAnchor: [-3, -76] // point from which the popup should open relative to the iconAnchor
});
for (var i = 0; i < items.length; i++) {
let brand = items[i];
// let marker: any = L.marker([brand.latitude, brand.longitude], {icon: greenIcon} ).on('click', () => {
let popup = `<ion-card no-margin>
<div class="logo-container">
<img src="${ brand.thumb}">
</div>
<ion-item>
<ion-label>
<h1 color="primary">
<ion-text color="secondary">
${ brand.label}
</ion-text>
</h1>
<h2>
<ion-icon name="pin"></ion-icon>
<ion-text color="">
${ brand.adresse}
</ion-text>
</h2>
<h3>
<ion-icon name="phone-portrait"></ion-icon>
<ion-text color="medium">
${ brand.tel}
</ion-text>
</h3>
</ion-label>
</ion-item>
</ion-card>`;
let popupOptions =
{
'maxWidth': '350',
'className': 'map-popup'
}
let marker: any = L.marker([brand.latitude, brand.longitude])
.bindPopup(popup, popupOptions)
.on('click', () => {
// this.presentPartnerModal(brand.id);
})
markerGroup.addLayer(marker);
}
this.map.addLayer(markerGroup);
}
loadMarkersGoogle(items, set_swiper?) {
if (items.length && set_swiper) {
this.setSwiper().then(swpr => {
console.log(swpr, this.swiperObj);
this.setMarkersGoogle(items, swpr);
});
} else {
this.setMarkersGoogle(items);
}
}
setMarkersGoogle(items, swpr?) {
for (var i = 0; i < items.length; i++) {
let brand = items[i];
this.slidesMerkers[brand.id] = i;
let icon: MarkerIcon = {
url: this.getRandomIcon(),
size: {
width: 44,
height: 61
}
};
let marker: Marker = this.map.addMarkerSync({
title: brand.label,
// icon: icon,
animation: 'DROP',
position: {
lat: brand.latitude,
lng: brand.longitude
}
});
marker.on(GoogleMapsEvent.MARKER_CLICK).subscribe(() => {
this.showCard.next(true);
this.shownPartner = brand;
swpr[1].slideTo(this.slidesMerkers[brand.id]);
});
}
}
setSwiper() {
return new Promise<any>((resolve, reject) => {
this.swiperObj = new Swiper('.swiper-container', {
slidesPerView: 'auto',
// centeredSlides: true,
// spaceBetween: 30,
fadeEffect: {
crossFade: true
},
});
resolve(this.swiperObj);
});
}
getRandomIcon() {
let items = [
// 'data:image/png;base64,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',
// 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkFFMzBDMTZBOTIxMTExRUFBQjU5QTc1MDMzODUwQ0JGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkFFMzBDMTZCOTIxMTExRUFBQjU5QTc1MDMzODUwQ0JGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QUUzMEMxNjg5MjExMTFFQUFCNTlBNzUwMzM4NTBDQkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QUUzMEMxNjk5MjExMTFFQUFCNTlBNzUwMzM4NTBDQkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7iN692AAAILklEQVR42uyb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'
//Coffee
'data:image/png;base64,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',
//Restaurant
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAB6CAYAAAA78ZQJAAAACXBIWXMAACxKAAAsSgF3enRNAAAZyUlEQVR4Ae2deXQUVb7Hv9VkX7oTloAEk8CgJCwGHNwGHXaXByNBxRn2xacOQVlcgzNHQM8QfDgPmBnF94cHiBLUGQc8M/DG5yjwBmZEnJFNEjbJDmQj3dmT7tQ7v9t1q6s63Z2q7upO43nfc/p09VK3K5/86nd/d/tdQRRF/L+Cp4hwYSsIQgaAsYpHknRs8XKKFcAJ6fgQgAZ6LYrioRBedo/qNQsWBIEA5kiPST5A+qOTEnT2EEWxIXR/mVohBywIwhIJ6izl++Y+fTAmNhYT4uORFhGFtIgImAUTxkRGQewSAYcIdHUBXSLoisvtnSh12GEVu3Cmox1nOttRbrfj2852Tz97GMA+eoiiWBKyPzZUgCVrXS0Aa0TAzN8fHR+Huf37496EeIyJiYVIABlICaYE1RNgEj2LguA6BmDr6sLR9hb8vb2VPc52dAP+iQR6Z9D/8GAD9gT25phozBs4AHMH9EdaVJQanAGAXe+zK0CZvRN/aW3Cpy1N+LK91XVtgE0EtgDYGkwXEjTA5AoEYJsSbN6wNAZXVMAKNmDl++RWPmq24ffNNlTaO53XGWTQhgOWogG6/SbS65tjY5A3PB3zBqW4AHkBXNrWhvLWdhxpaoLVbseZtjZAFNHgcOBbt1vdbDJhdGS0/PpH0bEwm/pgVFQ0RkVGI7GPqRtgDp6e/9DkBH2srcV53RJoURTXG8rDSMBKqzVHRmD50CHIG56hskYlYGuHHftr63HUZsMRWyPKOzoMu5aREugH4hJwT3Qc+4coAXP4/2hrwevXq1Hk+geWAlhiVLhnCGDJ124FsJheT+ifjO1js5hbcL/d6fXuqmocqK3Dgbrr3cqaOHEixo4di6SkJEyaNEl+X3lMOnHiBBoanHd0SUkJe9B79Hzy5Mlu5d4fm8BgP5ZgVgHmf/0fmq14vb4ajXSNTm0DsD5QtxEwYMklUAiUTa/zsoYhL3MY4JB8pwS4rKkVhZVXsb28Cja7Qz4/OzsbS5YsYQAJrFE6dOgQ9u3bx56VwBNNJjyRmIxl5r7sWHYfAmDt6sJvGmqx0yb/409K1nzC38sKCLAgCGMF4DB3CYUTxuLefsmSb3UCtrZ3YvvlcrxxsVQ+Lz09HatXr0ZOTg4yMjL8/n2tIqveuXMne5SWOq+D4C5LTMZSc1+n+xBc1vxlWyuWV1cwa5Z882JRFPf5xchfwEq4o5MTUTjhdqTFcpfgBPz2pTJsOlcCm93OzqHbf/369d1u91CKrHrr1q04fPiwDHqVpT+WWpIVlaEAa5cDC66Wodjlm5f6FTsTYL0P6iMwCYKNTh+dbBZLH5smNvz0QbFhzv1iw6PTxVMPTBAn9EviLk6cOHGiePDgQTGcRNeTnp4uX+NdMXHioSHDxIsZI8QLGZnieekxO8EiKqLAJbpZBQJ3xs2DxLLHp4sN8x6SAb89fpRojoxgF2Qxm8UdO3aEFVh3bdmyhV0nXW+iySRuT0lVAT43NFN8Jqm/35B1uQilW5iRNgiFk8arGgJ5/zqLdy6Uye6AbkeKBsJd5KOpPuCV4WJzMn7Rd6DzDpd8894mK9bWXNHtLkw64GbIPrevBdvvddX41o5OLD92Woa7bt06VnvfCHBJVNFSiLdq1Sr2epftOl6uvaL6zuwEC1Yk9ecvdwiCkKOpcI1uIUnqexVH97OIZQv/TbQu+YloXTSTuYjRyYmyS9i7d294+QCdIpfG3QH5X3IRxdKjaGimmCP5ZMHZHz3WEBchCAKFKLPMUZE4M/d+WCIiWJRA0cKMT/+OI9fqYTGbcejwYUNj2d4ShXNLly5lv06Wmz/gJqcxSo/ZlSU419FGb50URdHnH9yjixAEYTXvuz3w8H2wREXKny0/euJ7B5dEDZ8dO3awY/K9G+uuqT4vuCmNhXfUThIEYauvsnwCpkoNzp4mbJqQjTH9XIMO+SfOofBSBTv+PsHlUkIusF1noLkSTX3wqwGD+ctVgiB4Dey9Apb6F1jrZcbQwcjNHi5/duRKLTadOM+O6SJuJLh1r23E5dvuwHe33dnjdwkyVdgksuJip1tgmhqfiFmJssF5tWJfFkyuIZ387jvT7pDfpIhh7l+/YsdU69JFaJXjUhEcF8+iq75G8zlGqub5PFh3FKCrsZE9tIhanhRyUrNZEaYx5fUbiASXq/AIwmMlJ7mGb+i4cMYEzBx6k9TN2IV5f/kS+0uvsE4aCm20quPzP6L9048BuwNCZAxin12HPkOGhgxu3fN5sH28T45rqTk8/HKRpnOp1y4jPR1Wm42FaiuSB8jlvGetxxt113ifRbp775s3C2YmP+MHqZj5g1T5zSNVtQwupJpWq7oaatHx+V7522JrC1q2vApH+WX9pPwQwW36WN1Xk7J5o3zcWVEJh827RVM8v3PXLnZcYKuXR0NICy19MTgiEtLIzWr3c7sBlhw2G414Y9I41Wc/P/RP9kx+SY/f7TjYvSOKQd78SzjKvtNcjj+qfz4PzR/vVZ2Zsjkf5sdms+OrL67FpR9Pw8X7pvksnVp63FW8dV3t4nKTB7BnE7DM/TxPFsyGTNbeMxpp5nj5zd3FpShvbEF6WhrratQjR/E/PX6bQd70ChylwYHM4P5BDXfA5nwkKuBaJcvW4pOpF460r8mqsmKq7MiKu4Cb3X2xCjC3XnN0JHJ/eKuq8I3Hz7Ln9Rs26GoCk3sQ21q9fs4gb8wzHHLD83locYf7pgvutRfWMp/MZUpM7LFMumsXL2aDNt2sWBFReAfMrXf+6GGwREfJb+4uKnFab3q6rqiBJDbU9vydlmY0v/YSHCWXdJXtTQ3PvdwNbr8385Egwa1+IQ+NbnDT9+zSVDZFFaRPGtVWvMDSlx9OlEZ5nGXzA+lN5ntX/DBTVejGr86qCg+GGORXX4DjcmCQm7b8Fq0+4NZ4gJu2pwAxIzNZRXdx5mxcmDkbl+Z5NiTqGCJfDCmC4KLGx+R4+S6QO4KUFswc64xbhiDN4vK9p2oamPVSc5gcvV4Jrh6oHsUg/+I5OL676A9bdPzjGAOsVOKyRYh/7BEn3Od9wy2ZtwhtRefYo/mr415/h9dBXzSr/faUOBmw/N9RAmb0FowZpjrpbanFljN7tl/djyYdgCFBblq7Go5L+iE3u8El9RkyhD27h2oE9+Y9BYiW4JbNdcKVz/Phk8nQyOCq7J34XAF5SnwCP8zmboIBlhoW6VS5zbzlZlVhf75UyZ71Rg6qPzIjU8O3XBKbm9H00ko4Ll3QfE7nP46h48uvur3f8NpGlGWM6AY39QMn3C4vcIcV+o7zyeBIx6WJK5DcxPjYOP6S9U9wC2bW+5Nb1XD/VlENW0cnq9wC6W+IyLxd9zkM8nPPwnFRG2RP1utJBHewG9z2omL5m064uxCb5dsouLt0dxPjY2T3qgLMXtyXPlD15SPl1c4PAxwF7pOlHzAY5CY0rlwBx4XzPX6304P1ehKFatEjsxjccg9whxbuYj65J3HA5CaqFNHEHV4smFWL7oDJgqEozF+RH464/T6/zmaQn1kOx/meIWuRvaISrV9+hcqfqeGSZWdohMvFo4njrS43MT5WtuB06pE08b5MihzSLAmqAo5UOINpI+YxRE19xO9zxaYmNC5/Go5z5zx/brNB0NBQINW9no+qud3hUhysBy4UXJTdmKRbo2L44ViyYFbbjRnYV/WlU9XO6UPkf40YvDQl90fUvQ/6fT6D/NSTcBSrIRNc65z5EDV2P3a7LkWople8XipuVwMeEe0B8G2D1IBP1zh73Yyc2hQ1/VEG2l8RZNuyJ+AodlofwbXNmQ/72WK/SgwELhSAv1ZEEqTUCHlYLckkreRBupt7KLM2s2cjpzkJsXGIXfZCQGUwyIuXouOvn8M2d5HfcCNSB8txsL9SGl9jl2tCo8KCJ5mkIXmkJcWrfqbU5gRs9NwGU2oGYubnBlSG2NiEptxnYS/yD2789KlIO7AvILhcNPAA5iZcE8SlAVEmr+vkuAUHY7wt8q5JbOZ667u/Mbxsd5EbcDQ5/TNZbd91ryD+ft99v3rUkwFqntljtCLvnozYpc8G9TeS38yHeY3zNxIezUHqf+8zFK5SShehlGzBlpgo72cHSZE/msLG+lr/6z8N/4GkN/MRN8cZGiY+sThofwPVUTQVliaiTInvHirKFmxtM259hB5F3jsVsU+tMbTMpF9vkuH2tnrNRSgVed80xP78OUPKilu2GLFhAhfhApgUNXE6YlcEFsKRWn//R3R+q204PhQKG8CkqMn3I3bliwGVQS26uscXoPNsaCDT3GJIXZWeZOIpAf5Wes1nQaFS1JQHELf65YB+zQl5YUggc8AjXP0P+NrV+VNikvIsdKvkxqQ44zuaSB1qRU17EHHP5wX0qzQMXxMCyHytnhcxwIzgqWv1qq8kSaPKPRRgmKgTxzZvEWxPLGd9DFHTH0LCr38L08BBfv8EQa5+fCE6ggiZLzvIjHYt6z3e1swPSygOZjZ+6qp61SW3YD3zz/wV9fXali5DV009xHY76h9fgOSP3kdE9jhYPvoj63DvoDupS0SfW26FaLWhbcdO2M/0DI5B/ulCpHz4HqJGZhl63ZwNTQBU+uCqTrkDvsQkJaiw2to7cOqaC/JtKcnsma8nC5ZoSIj6eqkTh4s6cOoVFRVBjX3yKcQ+/TSipkxG9OxZML9fgIgehnW4CPK1ny4y3JI54EyF/6UW3RVphIPWO/MogrmJ0wo3QdOmaBAUQbRiGp5vWrVCBZers6gY1x7KYaPBnsC0/CofjopKzb9FkK8YDJnXT4phIpxz9Q0z36EC/KfzFaoC+MxKWo5ltGiCSdPLq9iQkC/RaHDFjNm4fO9UNoZWMm8xSp9+Bo7KSt2d7AS5ioaKDIIsA3YNdCqHj5hVqgD/rfSqqoD7hqSwZ6MB0zw0msVDI8daZa+sQsux4+zRUVkJ8/u7EP2o/rFCF2T/ujq56K6mdc/kf5UW/LWrgmNMGWBpNXmprb0Tf75QLn955nDnpA2qKXm8F6hoTjBN9qMJJv4oJmsEhhUWsDMTNm9C5N09LwVwF0GuDBAynx89VdHBQ/5XEQO7AEtiZvpnhZuwREdixrBUVYGBqKuyBC1v/tJvuNFZmUgvLEAfs+uPSnx3OyL86DgnyGzY3k/I/K5WTJfCFy53d5Jnt1ICZgT/pLBgKPxwoIC7rpSi5bcb2HRVf0RwafxMCZckmM2w/H6335DZrB6dkHlaBHIPSgv+okWuE2RYMmClm9h9xjVXd35WBmghDBUYCOTWgq0Q2/yDG5WViSEfFMBk9jw0T5CTKG4OAHKnjoiEc1jkmrLK3MNB1ywfudJy7+xhZyoBk1aMvUVVsF51fnNE0zxhTyK4g33A5SLIfQOAfO31fE3fpciBtw1mJbqGi2i+sKSTyuR3HgHTlCk+L4KUm+0ETAX70zfhKPHPz0VmZWLghwTXrOHbLshaJ6Eo1fjZF5q+x+dI04x2xfA83nfNFVatmVMBlsizqd5v/8s1VYkqu7V3OJuZeme4Q+Msd3cR3AEfvacZLhd9v99H72taEuCu5mO+57fRHcytd4W08AVS7Evz02gpl9I9wEt/MPsPFH57GWU2V22fe9stsi/mi0G0SoiJ0/V9us3JEvXC5YoclYV+9M/RCTkqNdXrZ9Tpxa2X1soprfc9m9N6RWBHj+vkpMqO/Zvecrfi8U7/tn7dOl1xcR8d01cDhcsVOTLLeQdohByZOhiRQ7wDJrhkXLSaSFm50ToNReXWzfK8jWiwf9Xus5dZ1iiu3DHDMbqfha141OMqIrJu17SUgDpvKOQSAoTLRZBTNEK2SGs4PInqnW3btrFP1vZLUfWcKdZpfOIps6tHwFLWu8MUsvElBFzvTHRaI/kira6CXETsotU+XUWfESNg3l1gGFwuBvlD35Atj+ZgwKoVHj8j15Azy5mJNyfBgqlx6pbbvkbZI3iE4WtMjp3w1jfnVVZMKQ3y7x7NjtesWaM5qjDdlI64l/4DkfdMhhDn6hwR4hMQ8+9PwrzjXQg9hGL+ivqBU49+ziafKEGTW0j55VrctNlziEZwad4D3bGZUdF4pV+K6nOy3iZnpsCT3lIx+sx4IggCmXz62jtHYu34LLYYnOdFm/fZMewvu/q9S8ahFLnBXbt2sblmlISD+n15Wkab6MC0soscsNckST2NKjNf/NaJCyorJlFSpNHJZtkfh2poKVTicEmUUiZL0alOKnBZb6mvDFQ+AUsnHqaFMG+fUi9GodQyeyaPB6VUpN42upW+L5Dd4U6LU7su8r2Kys3n6kwt8yJYAfnHi1DWqO5LSEuIw4H77/5eQVbC3dT/JjyS0D13P1lvowbrhRbAPKKg4/yvu48EjEk2Y/+0u2TI5ItDMVBqtMgwtMAl6y2wabNe6JjZwwoqPF/WzYrBIU+5k0GmYHySlPXvRhE1muju43Df8AIXzHqva7ZezYAlK6bs/Vh++F8evzMmyYzTM36M0ZZEVvHNnj07qIvHjRIZwtjsbHb3UbSwPSXVK1y91gudc9PYWlrKOEUPT7JERmD/xPGYm+ZM5LZhw4awdRmsAZGTwwyBDCIrKhqFg9IwPS7B6zm/u17Lrfew4bkrpWYgay/+/H+/8fo9grz9h6Pw9rgsmCOcfnncuHHMmsOlAqQWKCU5+uQTdlNiaWIyg0uQvYn6HApcmbE135p6s68mCeR7AHP+naOQmznU4zYMPEFzaVMrck8U4Wi9Eyw1SlavWcMWlvdG4lDqbuSdNpCWW23uNwh3x8SpMmCLUn53KLKvLrxSxhd+k/VqXnqlOwO2lGpxC8tj+cgUWCL6eAXMc7jvv1KDtUUXUd7mXInDQVOtHewU43TXkJ9VguV53Fcl9e8GEh4A01YQi66U8SKH6tmux68U44IgkFPNnveDIdh+z209Aua7EFCS/E3flcmgSbNmzWK+kB5GWjVBZY+9e5mPhSpBfjLbc0O1x4YPwJPLL/EF39tEUdSV18FfwHSLHKTj/dPvwoQBfTUBVm7z8E5FFc40q0M+WlxN4RLfkUArcLJSqkip44k9HzwoQyUNiYjEE4lJmBNvYRuYeNrmwRtg2pXgdw21XhPP9cgqgCT5VIsupv6IIw9N0AWYb1RS1tqGdyqvYn/9da+blPAV7QSbdyjxfTMgzbCxWq3dzhsSEYEHYxMxJ97MNi2B204wWgBTxfZw1WUeOfiVJD8QwHKFlzdmOPJGDtcNWLnVTllbO46wHWGacKa1xbnNjg7Rri+0zQ5tv3NPTKwE1ftWO1oA51ZX4K8tbDKJrorNEMBw7Q23g1pwRx6Y0G2bBz2APW0WVdbWgfKOdlZOWUcHyjs7GAW+j5Eo7UPHj3vaLEoP4M9aGpFbLc+VGOfvZiVG7ARDrbyJ5If3s6T5xgE2ejcurYBpR5iHq0p4XrQNgWwgZcQqIzY4d7SmHoUlVQYU1/uiik2CW+orN7AWBQxYigk30HHeiWJYO+03CEbPoph3l6vFtiTQzaIMWScn3UInbZ12LP/6jBFF9opou8qXauU50tuM2PLMyIWIzFUcqKphLbcbUdw1mIByPf0NvmQYYKmWZa5i+T+/RVmLvjCrt0WugW9z1gUsMmr7SUOX0qpcxTfOhKI3gsg1vGiwa+AKxlrlJSZBaDxa18D2kbsR9GLdFWXUYOgogeGAyVV0ieKrdEx7yZ22+V5F1Nv6n5YmfNYiX2OO0TvTBmW1vSiKW9lwv92O3FOBreYJpirsncx6JW0IZGtJbwpmOgPaodZ2xtaEtUXGZLY2Wk/VVPKOnJNGb/fLFTTA1AARpV1q3ymtxJHr3Xu8elNbG2rZVr/SpOnAknP6UFATckgbjbKx8PknzrLNqMNBX7a1YKu1znmNwCo9IxR6FYqMJ6tZ6Ga3Y34Y+GMKyZ6skftMdvm1EaoOBR2wVCsvMQloPHrdiu3lVzScFTw9qfC7nnZuMVohydnjDN3AQrdXLl7G6Sb/VnoGqi3WOrZnsgloNKIjR4tClhRJCt3YRIQFZ8/BavecKS9Yoj3st0h+twtYGYyQzJNCnXWKOoRKaVR5xYXQhW7kd5+oDZ3fVSqkgKVbModu0QN11/FGufblq4FoTnV5SP2uUiHPm8b8MbCSjgnwER/bjBmhdddrcNYV74bE7yrVK4nppFuUxccLzl+A1REcf/xRsw3vNjq7IKnREyq/q1RvZv5zxscOB35S7Dn5fSD6tqMdr16v5iVskxo9IVevAeb+mPVXtLRiRUmpYWVTpbastko51TSkflepXs1dqeyv2FNXhz319T2fpEGr6q+iwm7nQz9B62fQol5PDirdumyo6ZnSMpxu9b65nxa9aa3Dp63NrDHRBTwc6krNXWGRfVXqKmSNkIWlJX5Xeh822/BraYp/KBsTvhRO6W2pEXKSJgE+7MemfWc62/FqgzyavS2UjQlfChvAvFOIVXptbVhRVaHhLKdoqtOS2ipWufV2peausErQTLc0r/Q+aGjAHqs290lww6VSc1dYAYZ7pXe1Eqfbfc+vWFl/DX9vb2UttXCo1NwVdoDhVuk9XFGKMnunx+990GxjFRtcIxNht14sLAFLYpUe+dWFVyqYn1WKKrWVrpbahnCp1NwV8PzgYIo2HhVoxBcw/yzBgt/1TWHzg8miJ1WX80qNUrmEld9ViQCH80PaupHNlX7J0le8NHiYOCoyms+dJpeQFM7XH9YWzMWXKtDLH0XHypWaCGQHc0TYCN0QgKFY1aR4y+91E6FUOFdyKomiuITnrZCWVN0QSSluGAsm0dIx6kcO1jQnwwXg/wB+OPdxywvpbQAAAABJRU5ErkJggg==',
//Pizzeria
'data:image/png;base64,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',
//School
'data:image/png;base64,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',
//Sport
'data:image/png;base64,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',
//Vêtements
'data:image/png;base64,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',
//Bien-être
'data:image/png;base64,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',
//Fast-food
'data:image/png;base64,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',
//Santé
'data:image/png;base64,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',
];
return items[Math.floor(Math.random() * items.length)];
}
}
......@@ -17,7 +17,7 @@ export class QuestsService {
// setTimeout(() => {
// this.presentAlert('Congrats!', 'You are now ranked as a legendary tester!');
// }, 4000);
this._questFirstConnection();
// this._questFirstConnection();
}
async presentAlert(title, message) {
......
......@@ -5,7 +5,9 @@ import { Platform } from '@ionic/angular';
import { Storage } from '@ionic/storage';
import { Router } from '@angular/router';
import { GoogleAnalytics } from '@ionic-native/google-analytics/ngx';
import { BehaviorSubject } from 'rxjs';
import { AlloService } from './allo-service';
import { AuthService } from "./auth.service";
import * as Config from '../constants';
......@@ -15,11 +17,13 @@ export class TripService {
public filtredProducts: Array<any> = [];
public offersCardList: Array<any>;
public offersCardListPointer = 1;
public offersScrollerList = [];
public wishedProducts: Array<any> = [];
public brands: Array<any> = [];
public cats: Array<any> = [];
public request: any;
public filters = {};
public partners = new BehaviorSubject([]);
constructor(
private platform: Platform,
......@@ -28,7 +32,8 @@ export class TripService {
private storage: Storage,
private router: Router,
private ga: GoogleAnalytics,
private _ALLO: AlloService
private _ALLO: AlloService,
private _AUTH: AuthService
) {
this.fetchData();
}
......@@ -42,6 +47,8 @@ export class TripService {
this.httpAdv.get(Config.WORDPRESS_URL + 'services.json?' + Math.random(), {}, {})
.then((response) => {
const json = JSON.parse(response.data);
console.log(json);
this.storage.set('REST_services', json);
this.setData(json);
});
......@@ -55,20 +62,69 @@ export class TripService {
});
}
getData(type, pager?) {
return new Promise<any>((resolve, reject) => {
let request = Config.DRUPAL_URL + 'vatapi/' + type + (pager ? '?page=' + pager.next_page : '');
this.httpAdv.sendRequest(request,
{
method: 'get', serializer: 'json', timeout: 5000
}
)
.then((response) => {
const json = JSON.parse(response.data);
resolve(json);
})
.catch(err => {
reject(err);
});
});
}
getOffer(id) {
console.log('rr', id);
return new Promise<any>((resolve, reject) => {
let request = Config.DRUPAL_URL + 'vatapi/offer/' + id;
this.httpAdv.sendRequest(request,
{
method: 'get', serializer: 'json', timeout: 5000
}
)
.then((response) => {
const json = JSON.parse(response.data);
resolve(json);
})
.catch(err => {
reject(err);
});
});
}
setDataPromise(type, data) {
return new Promise<any>((resolve, reject) => {
let aData = this._ALLO.jsonToArray(data);
this[type].next(aData);
console.log('setDataPromise', this[type].getValue());
});
}
setData(data) {
if (null !== data && 'object' === typeof data && data.hasOwnProperty('products')) {
var products = this._ALLO.jsonToArray(data.products);
this.products = this._ALLO.shuffleArray(products);
this.storage.get('WISHLIST').then(wishList => {
this.products.forEach((element) => {
element.hidden = true;
element.bookmarked = false;
if (wishList.indexOf(element.id) > -1) {
element.bookmarked = true;
this.wishedProducts.push(element);
}
});
if (wishList) {
this.products.forEach((element) => {
element.hidden = true;
element.bookmarked = false;
if (wishList.indexOf(element.id) > -1) {
element.bookmarked = true;
this.wishedProducts.push(element);
}
});
}
});
setTimeout(() => {
this.resetData();
......@@ -200,7 +256,7 @@ export class TripService {
this.router.navigateByUrl('/app/details-offre/' + id);
}
wishList(offer, action) {
wishList(offer, action, toast?) {
this.ga.trackEvent('Wishlist', action, 'Offre : [' + offer.id + '] ' + offer.name);
return new Promise<any>((resolve, reject) => {
this.storage.get('WISHLIST').then(
......@@ -208,10 +264,15 @@ export class TripService {
if (wishList) {
switch (action) {
case 'add':
wishList.push(offer.id);
this.wishedProducts.push(offer);
wishList = Array.from(new Set(wishList));
if (wishList.indexOf(offer.id) === -1) {
wishList.push(offer.id);
this.wishedProducts.push(offer);
wishList = Array.from(new Set(wishList));
}
offer.bookmarked = true;
if (toast) {
this._ALLO.presentToast('', 'Offre bien ajoutée aux favoris!', 'bottom')
}
break;
case 'remove':
if (wishList.indexOf(offer.id) > -1) {
......
......@@ -7,7 +7,8 @@
<base href="/" />
<meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="viewport"
content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" />
......@@ -16,14 +17,17 @@
<!-- add to homescreen for ios -->
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.4.0/dist/leaflet.css" crossorigin=""/>
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.4.1/dist/MarkerCluster.css" crossorigin=""/>
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.4.1/dist/MarkerCluster.Default.css" crossorigin=""/>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.4.0/dist/leaflet.css" crossorigin="" />
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.4.1/dist/MarkerCluster.css" crossorigin="" />
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.4.1/dist/MarkerCluster.Default.css"
crossorigin="" />
<link rel="stylesheet" href="https://unpkg.com/swiper/css/swiper.css">
<link rel="stylesheet" href="https://unpkg.com/swiper/css/swiper.min.css">
</head>
<body>
<app-root></app-root>
<script src="https://unpkg.com/leaflet@1.4.0/dist/leaflet.js" crossorigin=""></script>
</body>
</body>
</html>
</html>
\ No newline at end of file
......@@ -3,6 +3,7 @@ import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
import 'hammerjs';
if (environment.production) {
enableProdMode();
......
......@@ -3,27 +3,12 @@
/** Ionic CSS Variables **/
@import url('https://fonts.googleapis.com/css?family=Abel');
@font-face {
font-family: "Open Sans";
src: url("../assets/fonts/opensans/regular/OpenSans-Regular-webfont.eot");
src: url("../assets/fonts/opensans/regular/OpenSans-Regular-webfont.eot?#iefix") format("embedded-opentype"),
url("../assets/fonts/opensans/regular/OpenSans-Regular-webfont.woff") format("woff"),
url("../assets/fonts/opensans/regular/OpenSans-Regular-webfont.ttf") format("truetype"),
url("../assets/fonts/opensans/regular/OpenSans-Regular-webfont.svg#open_sansregular") format("svg");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "Open Sans Light";
src: url("../assets/fonts/opensans/light/OpenSans-Light-webfont.eot");
src: url("../assets/fonts/opensans/light/OpenSans-Light-webfont.eot?#iefix") format("embedded-opentype"),
url("../assets/fonts/opensans/light/OpenSans-Light-webfont.woff") format("woff"),
url("../assets/fonts/opensans/light/OpenSans-Light-webfont.ttf") format("truetype"),
url("../assets/fonts/opensans/light/OpenSans-Light-webfont.svg#open_sanslight") format("svg");
font-weight: normal;
font-style: normal;
}
:root {
/** Main font **/
--ion-font-family: 'Montserrat', sans-serif;
--ion-font-weight: 300;
/** primary **/
--ion-color-primary: #f93129;
--ion-color-primary-rgb: 249, 49, 41;
......@@ -35,7 +20,7 @@
/** secondary **/
--ion-color-secondary: #f7b32b;
--ion-color-secondary-rgb: 247, 179, 43;
--ion-color-secondary-contrast: #000000;
--ion-color-secondary-contrast: #ffffff;
--ion-color-secondary-contrast-rgb: 0, 0, 0;
--ion-color-secondary-shade: #d99e26;
--ion-color-secondary-tint: #f8bb40;
......@@ -155,6 +140,10 @@
--ion-font-family: "Open Sans";
}
* {
font-weight: 300;
}
.ion-color-gradgrey {
--ion-color-base: var(--ion-color-gradgrey);
--ion-color-base-rgb: var(--ion-color-gradgrey-rgb);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment