├── .editorconfig ├── .gitignore ├── LICENSE ├── README.md ├── config.xml ├── ionic.config.json ├── package-lock.json ├── package.json ├── readme ├── action1.png ├── action2.png ├── action3.png ├── history.png ├── home.png ├── home2.png ├── list.png ├── logo.png ├── push.png ├── splashscreen.png ├── 스크린샷 2018-11-09 오전 12.50.59.png └── 스크린샷 2018-11-09 오전 12.51.02.png ├── resources ├── README.md ├── android │ ├── icon │ │ ├── drawable-hdpi-icon.png │ │ ├── drawable-ldpi-icon.png │ │ ├── drawable-mdpi-icon.png │ │ ├── drawable-xhdpi-icon.png │ │ ├── drawable-xxhdpi-icon.png │ │ └── drawable-xxxhdpi-icon.png │ └── splash │ │ ├── drawable-land-hdpi-screen.png │ │ ├── drawable-land-ldpi-screen.png │ │ ├── drawable-land-mdpi-screen.png │ │ ├── drawable-land-xhdpi-screen.png │ │ ├── drawable-land-xxhdpi-screen.png │ │ ├── drawable-land-xxxhdpi-screen.png │ │ ├── drawable-port-hdpi-screen.png │ │ ├── drawable-port-ldpi-screen.png │ │ ├── drawable-port-mdpi-screen.png │ │ ├── drawable-port-xhdpi-screen.png │ │ ├── drawable-port-xxhdpi-screen.png │ │ └── drawable-port-xxxhdpi-screen.png ├── icon.png ├── ios │ ├── icon │ │ ├── icon-1024.png │ │ ├── icon-40.png │ │ ├── icon-40@2x.png │ │ ├── icon-40@3x.png │ │ ├── icon-50.png │ │ ├── icon-50@2x.png │ │ ├── icon-60.png │ │ ├── icon-60@2x.png │ │ ├── icon-60@3x.png │ │ ├── icon-72.png │ │ ├── icon-72@2x.png │ │ ├── icon-76.png │ │ ├── icon-76@2x.png │ │ ├── icon-83.5@2x.png │ │ ├── icon-small.png │ │ ├── icon-small@2x.png │ │ ├── icon-small@3x.png │ │ ├── icon.png │ │ └── icon@2x.png │ └── splash │ │ ├── Default-568h@2x~iphone.png │ │ ├── Default-667h.png │ │ ├── Default-736h.png │ │ ├── Default-Landscape-736h.png │ │ ├── Default-Landscape@2x~ipad.png │ │ ├── Default-Landscape@~ipadpro.png │ │ ├── Default-Landscape~ipad.png │ │ ├── Default-Portrait@2x~ipad.png │ │ ├── Default-Portrait@~ipadpro.png │ │ ├── Default-Portrait~ipad.png │ │ ├── Default@2x~iphone.png │ │ ├── Default@2x~universal~anyany.png │ │ └── Default~iphone.png └── splash.png ├── src ├── app │ ├── app.component.ts │ ├── app.html │ ├── app.module.ts │ ├── app.scss │ └── main.ts ├── assets │ ├── icon │ │ ├── 5@2x.png │ │ ├── Group 3.png │ │ ├── Group 3@1x.png │ │ ├── Group 3@3x.png │ │ ├── bottomBar.png │ │ ├── favicon.ico │ │ ├── giphy.gif │ │ ├── group5.png │ │ ├── group5@2x.png │ │ ├── group5@3x.png │ │ ├── icCancel.png │ │ ├── icGps.png │ │ ├── icGps@2x.png │ │ ├── icGps@3x.png │ │ ├── icMarker.png │ │ ├── icMarker@2x.png │ │ ├── icMarker@3x.png │ │ ├── ic_GPS2.png │ │ ├── ic_GPS2@2x.png │ │ ├── ic_eq_history.png │ │ ├── ic_eq_history@2x.png │ │ ├── ic_search.png │ │ ├── ic_survival-book.png │ │ ├── logo.png │ │ ├── logo@2x.png │ │ └── logo@3x.png │ ├── imgs │ │ ├── currentMarkerImage.png │ │ ├── group.png │ │ ├── guide10.png │ │ ├── guide10@2x.png │ │ ├── guide10@3x.png │ │ ├── guide11.png │ │ ├── guide11@2x.png │ │ ├── guide11@3x.png │ │ ├── guide9.png │ │ ├── guide9@2x.png │ │ ├── guide9@3x.png │ │ ├── icMarker.png │ │ ├── logo.png │ │ └── shelterMarkerImage.png │ └── shelter.json ├── components │ ├── components.module.ts │ └── google-map │ │ ├── google-map.html │ │ ├── google-map.scss │ │ └── google-map.ts ├── index.html ├── key │ └── firebaseKey.ts ├── manifest.json ├── pages │ ├── eq-behavior │ │ ├── eq-behavior.html │ │ ├── eq-behavior.module.ts │ │ ├── eq-behavior.scss │ │ └── eq-behavior.ts │ ├── eq-detail │ │ ├── eq-detail.html │ │ ├── eq-detail.module.ts │ │ ├── eq-detail.scss │ │ └── eq-detail.ts │ ├── eq-history │ │ ├── eq-history.html │ │ ├── eq-history.module.ts │ │ ├── eq-history.scss │ │ └── eq-history.ts │ ├── find-shelter │ │ ├── find-shelter.html │ │ ├── find-shelter.module.ts │ │ ├── find-shelter.scss │ │ └── find-shelter.ts │ ├── home │ │ ├── home.html │ │ ├── home.scss │ │ ├── home.ts │ │ └── json-typings.d.ts │ ├── list │ │ ├── list.html │ │ ├── list.module.ts │ │ ├── list.scss │ │ └── list.ts │ ├── setting │ │ ├── setting.html │ │ ├── setting.module.ts │ │ ├── setting.scss │ │ └── setting.ts │ └── tabs │ │ ├── tabs.html │ │ └── tabs.ts ├── pipes │ ├── date │ │ └── date.ts │ ├── distance │ │ └── distance.ts │ └── pipes.module.ts ├── providers │ └── alert │ │ └── alert.ts ├── service-worker.js └── theme │ └── variables.scss ├── tsconfig.json └── tslint.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs 2 | # editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | 10 | # We recommend you to keep these unchanged 11 | end_of_line = lf 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [*.md] 17 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Specifies intentionally untracked files to ignore when using Git 2 | # http://git-scm.com/docs/gitignore 3 | 4 | *~ 5 | *.sw[mnpcod] 6 | *.log 7 | *.tmp 8 | *.tmp.* 9 | log.txt 10 | *.sublime-project 11 | *.sublime-workspace 12 | .vscode/ 13 | npm-debug.log* 14 | 15 | .idea/ 16 | .sourcemaps/ 17 | .sass-cache/ 18 | .tmp/ 19 | .versions/ 20 | coverage/ 21 | dist/ 22 | node_modules/ 23 | tmp/ 24 | temp/ 25 | hooks/ 26 | platforms/ 27 | plugins/ 28 | plugins/android.json 29 | plugins/ios.json 30 | www/ 31 | $RECYCLE.BIN/ 32 | 33 | .DS_Store 34 | Thumbs.db 35 | UserInterfaceState.xcuserstate 36 | 37 | serviceAccountKey.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 esquake 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | # ESQUAKE: 지진에서 탈출하라!! 6 | ## Introduction 7 | #### 🏃‍♀️ Escape+Earthquake : 지진에서 탈출하라! 🏃‍♂️ 8 | 9 | 10 | ESQUAKE는 지진 발생 알림과 동시에 가장 가까운 대피소를 알려주는 어플리케이션입니다. 11 | 12 | 강진이 발생했을 경우, 아무것도 생각이 나지 않는 혼란 속에 빠지게 됩니다. 13 | 14 | 만약 혼자 낯선 곳에서 강한 지진을 겪게 된다면 의지할 곳은 스마트폰 밖에 없겠죠. 15 | 16 | 그러나, 공포에 떨고 두려움이 가득한 상황 속에서 침착하게 주변 대피소를 찾는 것은 사실상 불가능에 가깝습니다. 17 | 18 | 그래서 저희 어플리케이션은 지진 발생 시 푸쉬 알림을 제공함과 동시에, **가장 가까운 대피소**를 바로 알려줍니다. 19 | 20 | ## Overview 21 | ### 메인화면 22 | > 앱을 켜자마자 GPS 주소 혹은 입력된 주소를 기준으로 가까운 대피소를 하단 카드 형식으로 볼 수 있습니다. 23 | 24 |

25 | 26 |

27 | 28 | ### 지진 푸시를 통해 들어왔을 경우 29 | > 현재 온 지진에 대한 정보와 함께 GPS 주소 혹은 입력 주소 기준 가까운 대피소를 하단 카드 형식으로 볼 수 있습니다. 30 | 31 |

32 | 33 |

34 | 35 | ### 대피소 리스트 36 | > 하단 카드를 누르면 총 인원, 전화번호를 포함한 대피소의 더 자세한 정보를 리스트 형식으로 볼 수 있습니다. 37 | 38 |

39 | 40 |

41 | 42 | ### 지진행동지침 43 | > 앱 내 데이터베이스에 저장된 지진행동지침 핸드북을 볼 수 있습니다. 인터넷 연결이 안되는 상황에도 열람이 가능합니다. 44 | 45 |

46 | 47 |

48 | 49 | 50 | ## License 51 | Copyright (C) 2018-present, OpenHackEsquake 52 | 53 | ``` 54 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 55 | 56 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 57 | 58 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 59 | -------------------------------------------------------------------------------- /config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ESQUAKE 4 | The project from openHack 2018 5 | Esquake Team 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ionic.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "google", 3 | "integrations": { 4 | "cordova": {} 5 | }, 6 | "type": "ionic-angular" 7 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "esquake", 3 | "version": "0.0.1", 4 | "author": "Esquake team", 5 | "homepage": "https://github.com/esquake/esquake", 6 | "private": true, 7 | "scripts": { 8 | "start": "ionic-app-scripts serve", 9 | "clean": "ionic-app-scripts clean", 10 | "build": "ionic-app-scripts build", 11 | "lint": "ionic-app-scripts lint" 12 | }, 13 | "dependencies": { 14 | "@angular/animations": "5.2.11", 15 | "@angular/common": "5.2.11", 16 | "@angular/compiler": "5.2.11", 17 | "@angular/compiler-cli": "5.2.11", 18 | "@angular/core": "5.2.11", 19 | "@angular/forms": "5.2.11", 20 | "@angular/http": "5.2.11", 21 | "@angular/platform-browser": "5.2.11", 22 | "@angular/platform-browser-dynamic": "5.2.11", 23 | "@ionic-native/core": "~4.15.0", 24 | "@ionic-native/onesignal": "^4.17.0", 25 | "@ionic-native/splash-screen": "~4.15.0", 26 | "@ionic-native/status-bar": "~4.15.0", 27 | "@types/google-maps": "^3.2.0", 28 | "@ionic-native/geolocation": "^4.17.0", 29 | "@ionic-native/native-geocoder": "^4.17.0", 30 | "@ionic/storage": "2.2.0", 31 | "angularfire2": "5.0.0-rc.4", 32 | "cordova-android": "^7.1.1", 33 | "cordova-plugin-device": "^2.0.2", 34 | "cordova-plugin-ionic-keyboard": "^2.1.3", 35 | "cordova-plugin-ionic-webview": "^2.2.0", 36 | "cordova-plugin-splashscreen": "^5.0.2", 37 | "cordova-plugin-statusbar": "^2.4.2", 38 | "cordova-plugin-whitelist": "^1.3.3", 39 | "cordova-plugin-geolocation": "^4.0.1", 40 | "cordova-plugin-nativegeocoder": "^3.1.2", 41 | "firebase": "^4.9.0", 42 | "ionic-angular": "3.9.2", 43 | "ionicons": "3.0.0", 44 | "onesignal-cordova-plugin": "^2.4.5", 45 | "rxjs": "5.5.11", 46 | "sw-toolbox": "3.6.0", 47 | "zone.js": "0.8.26" 48 | }, 49 | "devDependencies": { 50 | "@ionic/app-scripts": "3.2.0", 51 | "@ionic/lab": "1.0.13", 52 | "typescript": "~2.6.2" 53 | }, 54 | "description": "esquake, from openhack project", 55 | "cordova": { 56 | "plugins": { 57 | "onesignal-cordova-plugin": {}, 58 | "cordova-plugin-whitelist": {}, 59 | "cordova-plugin-statusbar": {}, 60 | "cordova-plugin-device": {}, 61 | "cordova-plugin-splashscreen": {}, 62 | "cordova-plugin-ionic-webview": { 63 | "ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+" 64 | }, 65 | "cordova-plugin-ionic-keyboard": {}, 66 | "cordova-plugin-nativegeocoder": {}, 67 | "cordova-plugin-geolocation": { 68 | "GEOLOCATION_USAGE_DESCRIPTION": "To locate you" 69 | } 70 | }, 71 | "platforms": [ 72 | "android" 73 | ] 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /readme/action1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/action1.png -------------------------------------------------------------------------------- /readme/action2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/action2.png -------------------------------------------------------------------------------- /readme/action3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/action3.png -------------------------------------------------------------------------------- /readme/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/history.png -------------------------------------------------------------------------------- /readme/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/home.png -------------------------------------------------------------------------------- /readme/home2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/home2.png -------------------------------------------------------------------------------- /readme/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/list.png -------------------------------------------------------------------------------- /readme/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/logo.png -------------------------------------------------------------------------------- /readme/push.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/push.png -------------------------------------------------------------------------------- /readme/splashscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/splashscreen.png -------------------------------------------------------------------------------- /readme/스크린샷 2018-11-09 오전 12.50.59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/스크린샷 2018-11-09 오전 12.50.59.png -------------------------------------------------------------------------------- /readme/스크린샷 2018-11-09 오전 12.51.02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/readme/스크린샷 2018-11-09 오전 12.51.02.png -------------------------------------------------------------------------------- /resources/README.md: -------------------------------------------------------------------------------- 1 | These are Cordova resources. You can replace icon.png and splash.png and run 2 | `ionic cordova resources` to generate custom icons and splash screens for your 3 | app. See `ionic cordova resources --help` for details. 4 | 5 | Cordova reference documentation: 6 | 7 | - Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html 8 | - Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/ 9 | -------------------------------------------------------------------------------- /resources/android/icon/drawable-hdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/icon/drawable-hdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-ldpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/icon/drawable-ldpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-mdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/icon/drawable-mdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/icon/drawable-xhdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xxhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/icon/drawable-xxhdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xxxhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/icon/drawable-xxxhdpi-icon.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-land-hdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-land-ldpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-land-mdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-land-xhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-land-xxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-land-xxxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-port-hdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-port-ldpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-port-mdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-port-xhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-port-xxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/android/splash/drawable-port-xxxhdpi-screen.png -------------------------------------------------------------------------------- /resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/icon.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-1024.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-40.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-40@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-40@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-50.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-50@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-60.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-60@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-60@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-72.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-72@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-76.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-76@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-83.5@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-small.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-small@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon-small@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon.png -------------------------------------------------------------------------------- /resources/ios/icon/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/icon/icon@2x.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-568h@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default-568h@2x~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-667h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default-667h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default-736h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default-Landscape-736h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default-Landscape@2x~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape@~ipadpro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default-Landscape@~ipadpro.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default-Landscape~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default-Portrait@2x~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait@~ipadpro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default-Portrait@~ipadpro.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default-Portrait~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default@2x~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default@2x~universal~anyany.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default@2x~universal~anyany.png -------------------------------------------------------------------------------- /resources/ios/splash/Default~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/ios/splash/Default~iphone.png -------------------------------------------------------------------------------- /resources/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/resources/splash.png -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { Platform } from 'ionic-angular'; 3 | import { StatusBar } from '@ionic-native/status-bar'; 4 | import { SplashScreen } from '@ionic-native/splash-screen'; 5 | 6 | import { TabsPage } from '../pages/tabs/tabs'; 7 | 8 | import { OneSignal as OneSignalNative } from '@ionic-native/onesignal'; 9 | 10 | @Component({ 11 | templateUrl: 'app.html' 12 | }) 13 | export class MyApp { 14 | rootPage:any = TabsPage; 15 | 16 | constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen, 17 | private oneSignalNative: OneSignalNative) { 18 | platform.ready().then(() => { 19 | // Okay, so the platform is ready and our plugins are available. 20 | // Here you can do any higher level native things you might need. 21 | statusBar.styleDefault(); 22 | splashScreen.hide(); 23 | 24 | if (platform.is('cordova')) { 25 | if(!platform.is('ios')) statusBar.overlaysWebView(false); 26 | this.oneSignalNative.startInit('21519cdf-0edf-4a14-a8e8-03d3fed6116b', '461474507874'); 27 | this.oneSignalNative.enableVibrate(true); 28 | this.oneSignalNative.enableSound(true); 29 | this.oneSignalNative.inFocusDisplaying(this.oneSignalNative.OSInFocusDisplayOption.None); 30 | this.oneSignalNative.endInit(); 31 | } 32 | }); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/app/app.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, ErrorHandler } from '@angular/core'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular'; 4 | import { HttpModule } from '@angular/http'; 5 | import { MyApp } from './app.component'; 6 | 7 | // Pages 8 | import { HomePage } from '../pages/home/home'; 9 | import { TabsPage } from '../pages/tabs/tabs'; 10 | import { EqBehaviorPage } from '../pages/eq-behavior/eq-behavior'; 11 | import { EqHistoryPage } from '../pages/eq-history/eq-history'; 12 | import { SettingPage } from '../pages/setting/setting'; 13 | import { ListPage } from '../pages/list/list'; 14 | import { EqDetailPage } from '../pages/eq-detail/eq-detail'; 15 | import { FindShelterPage } from '../pages/find-shelter/find-shelter'; 16 | 17 | import { StatusBar } from '@ionic-native/status-bar'; 18 | import { SplashScreen } from '@ionic-native/splash-screen'; 19 | import { OneSignal } from '@ionic-native/onesignal'; 20 | 21 | import { AngularFireModule } from 'angularfire2'; 22 | import { AngularFirestoreModule } from 'angularfire2/firestore'; 23 | import { firebaseKey } from '../key/firebaseKey'; 24 | 25 | import { GoogleMapComponent } from '../components/google-map/google-map' 26 | import { Geolocation } from '@ionic-native/geolocation'; 27 | import { NativeGeocoder } from '@ionic-native/native-geocoder'; 28 | 29 | import { PipesModule } from '../pipes/pipes.module'; 30 | import { AlertProvider } from '../providers/alert/alert'; 31 | 32 | export const firebaseConfig = { 33 | apiKey: firebaseKey['apiKey'], 34 | authDomain: firebaseKey['authDomain'], 35 | databaseURL: firebaseKey['databaseURL'], 36 | projectId: firebaseKey['projectId'], 37 | storageBucket: firebaseKey['storageBucket'], 38 | messagingSenderId: firebaseKey['messagingSenderId'] 39 | }; 40 | 41 | @NgModule({ 42 | declarations: [ 43 | MyApp, 44 | HomePage, 45 | TabsPage, 46 | EqBehaviorPage, 47 | EqHistoryPage, 48 | EqDetailPage, 49 | FindShelterPage, 50 | SettingPage, 51 | ListPage, 52 | GoogleMapComponent 53 | ], 54 | imports: [ 55 | BrowserModule, 56 | IonicModule.forRoot(MyApp, { 57 | iconMode: 'md', 58 | menuType: 'overlay', 59 | statusbarPadding: false, 60 | }), 61 | AngularFireModule.initializeApp(firebaseConfig), 62 | AngularFirestoreModule, 63 | PipesModule, 64 | HttpModule 65 | ], 66 | bootstrap: [IonicApp], 67 | entryComponents: [ 68 | MyApp, 69 | HomePage, 70 | TabsPage, 71 | EqBehaviorPage, 72 | EqHistoryPage, 73 | EqDetailPage, 74 | FindShelterPage, 75 | SettingPage, 76 | ListPage, 77 | GoogleMapComponent 78 | ], 79 | providers: [ 80 | StatusBar, 81 | SplashScreen, 82 | {provide: ErrorHandler, useClass: IonicErrorHandler}, 83 | OneSignal, 84 | NativeGeocoder, 85 | Geolocation, 86 | AlertProvider 87 | ] 88 | }) 89 | export class AppModule {} 90 | -------------------------------------------------------------------------------- /src/app/app.scss: -------------------------------------------------------------------------------- 1 | // http://ionicframework.com/docs/theming/ 2 | 3 | 4 | // App Global Sass 5 | // -------------------------------------------------- 6 | // Put style rules here that you want to apply globally. These 7 | // styles are for the entire app and not just one component. 8 | // Additionally, this file can be also used as an entry point 9 | // to import other Sass files to be included in the output CSS. 10 | // 11 | // Shared Sass variables, which can be used to adjust Ionic's 12 | // default Sass variables, belong in "theme/variables.scss". 13 | // 14 | // To declare rules for a specific mode, create a child rule 15 | // for the .md, .ios, or .wp mode classes. The mode class is 16 | // automatically applied to the element in the app. 17 | -------------------------------------------------------------------------------- /src/app/main.ts: -------------------------------------------------------------------------------- 1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 2 | 3 | import { AppModule } from './app.module'; 4 | 5 | platformBrowserDynamic().bootstrapModule(AppModule); 6 | -------------------------------------------------------------------------------- /src/assets/icon/5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/5@2x.png -------------------------------------------------------------------------------- /src/assets/icon/Group 3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/Group 3.png -------------------------------------------------------------------------------- /src/assets/icon/Group 3@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/Group 3@1x.png -------------------------------------------------------------------------------- /src/assets/icon/Group 3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/Group 3@3x.png -------------------------------------------------------------------------------- /src/assets/icon/bottomBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/bottomBar.png -------------------------------------------------------------------------------- /src/assets/icon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/favicon.ico -------------------------------------------------------------------------------- /src/assets/icon/giphy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/giphy.gif -------------------------------------------------------------------------------- /src/assets/icon/group5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/group5.png -------------------------------------------------------------------------------- /src/assets/icon/group5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/group5@2x.png -------------------------------------------------------------------------------- /src/assets/icon/group5@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/group5@3x.png -------------------------------------------------------------------------------- /src/assets/icon/icCancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/icCancel.png -------------------------------------------------------------------------------- /src/assets/icon/icGps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/icGps.png -------------------------------------------------------------------------------- /src/assets/icon/icGps@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/icGps@2x.png -------------------------------------------------------------------------------- /src/assets/icon/icGps@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/icGps@3x.png -------------------------------------------------------------------------------- /src/assets/icon/icMarker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/icMarker.png -------------------------------------------------------------------------------- /src/assets/icon/icMarker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/icMarker@2x.png -------------------------------------------------------------------------------- /src/assets/icon/icMarker@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/icMarker@3x.png -------------------------------------------------------------------------------- /src/assets/icon/ic_GPS2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/ic_GPS2.png -------------------------------------------------------------------------------- /src/assets/icon/ic_GPS2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/ic_GPS2@2x.png -------------------------------------------------------------------------------- /src/assets/icon/ic_eq_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/ic_eq_history.png -------------------------------------------------------------------------------- /src/assets/icon/ic_eq_history@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/ic_eq_history@2x.png -------------------------------------------------------------------------------- /src/assets/icon/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/ic_search.png -------------------------------------------------------------------------------- /src/assets/icon/ic_survival-book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/ic_survival-book.png -------------------------------------------------------------------------------- /src/assets/icon/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/logo.png -------------------------------------------------------------------------------- /src/assets/icon/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/logo@2x.png -------------------------------------------------------------------------------- /src/assets/icon/logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/icon/logo@3x.png -------------------------------------------------------------------------------- /src/assets/imgs/currentMarkerImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/currentMarkerImage.png -------------------------------------------------------------------------------- /src/assets/imgs/group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/group.png -------------------------------------------------------------------------------- /src/assets/imgs/guide10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/guide10.png -------------------------------------------------------------------------------- /src/assets/imgs/guide10@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/guide10@2x.png -------------------------------------------------------------------------------- /src/assets/imgs/guide10@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/guide10@3x.png -------------------------------------------------------------------------------- /src/assets/imgs/guide11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/guide11.png -------------------------------------------------------------------------------- /src/assets/imgs/guide11@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/guide11@2x.png -------------------------------------------------------------------------------- /src/assets/imgs/guide11@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/guide11@3x.png -------------------------------------------------------------------------------- /src/assets/imgs/guide9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/guide9.png -------------------------------------------------------------------------------- /src/assets/imgs/guide9@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/guide9@2x.png -------------------------------------------------------------------------------- /src/assets/imgs/guide9@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/guide9@3x.png -------------------------------------------------------------------------------- /src/assets/imgs/icMarker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/icMarker.png -------------------------------------------------------------------------------- /src/assets/imgs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/logo.png -------------------------------------------------------------------------------- /src/assets/imgs/shelterMarkerImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Esquake/esquake-client/bdafb3d8ade20163f532b306f0da37cbbdf465aa/src/assets/imgs/shelterMarkerImage.png -------------------------------------------------------------------------------- /src/components/components.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { GoogleMapComponent } from './google-map/google-map'; 3 | @NgModule({ 4 | declarations: [GoogleMapComponent], 5 | imports: [], 6 | exports: [GoogleMapComponent] 7 | }) 8 | export class ComponentsModule {} 9 | -------------------------------------------------------------------------------- /src/components/google-map/google-map.html: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /src/components/google-map/google-map.scss: -------------------------------------------------------------------------------- 1 | google-map { 2 | scroll-content{ 3 | padding: 0px !important; 4 | } 5 | #map { 6 | height: 100%; 7 | width: 100%; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/components/google-map/google-map.ts: -------------------------------------------------------------------------------- 1 | import { Component, ViewChild } from '@angular/core'; 2 | import { Geolocation } from '@ionic-native/geolocation'; 3 | import { Platform } from 'ionic-angular'; 4 | import * as products from "../../assets/shelter.json"; 5 | import { NativeGeocoder, NativeGeocoderReverseResult, NativeGeocoderForwardResult, NativeGeocoderOptions } from '@ionic-native/native-geocoder'; 6 | 7 | @Component({ 8 | selector: 'google-map', 9 | templateUrl: 'google-map.html' 10 | }) 11 | 12 | export class GoogleMapComponent { 13 | 14 | @ViewChild("map") mapElement; 15 | map: any; 16 | coords: any; 17 | address: any; 18 | private shelter: any; 19 | constructor(private geolocation: Geolocation, 20 | private platform: Platform, 21 | private nativeGeocoder: NativeGeocoder) { 22 | this.coords = { 23 | lat: null, 24 | lng: null 25 | } 26 | } 27 | 28 | search() { 29 | let options: NativeGeocoderOptions = { 30 | useLocale: true, 31 | maxResults: 5 32 | }; 33 | 34 | this.nativeGeocoder.forwardGeocode(this.address); 35 | 36 | } 37 | 38 | ngOnInit() { 39 | this.platform.ready().then(() => { 40 | this.geolocation.getCurrentPosition().then(pos => { 41 | this.coords.lat = pos.coords.latitude 42 | this.coords.lng = pos.coords.longitude 43 | console.log(this.coords.lat, this.coords.lng) 44 | this.getNearestShelter(5); 45 | this.initMap(); 46 | }).catch((error) => { 47 | console.log(error); 48 | console.log(JSON.stringify(error)); 49 | console.log("error"); 50 | }) 51 | }) 52 | console.log(this.coords) 53 | } 54 | 55 | getNearestShelter(max) { 56 | var local_shelter = this.getNearShelter(20); 57 | // console.log(local_shelter); 58 | for (let index = 0; index < local_shelter.length; index++) { 59 | local_shelter[index]["dist"] = this.getDistance(this.coords, local_shelter[index]); 60 | // console.log(this.getDistance(this.coords, local_shelter[index])) 61 | // console.log("shel"+local_shelter[index]); 62 | } 63 | 64 | var rShelter = local_shelter.sort(function (a, b) { 65 | return a.dist - b.dist; 66 | }).slice(0, max); 67 | this.shelter = rShelter; 68 | return rShelter; 69 | } 70 | 71 | getNearShelter(key) { 72 | return products["records"]; 73 | } 74 | 75 | getDistance(from, to) { 76 | var theta = from.lng - to.lng; 77 | var dist = Math.sin(this.deg2rad(from.lat)) * Math.sin(this.deg2rad(to.lat)) 78 | + Math.cos(this.deg2rad(from.lat)) * Math.cos(this.deg2rad(to.lat)) 79 | * Math.cos(this.deg2rad(theta)); 80 | 81 | dist = Math.acos(dist); 82 | dist = this.rad2deg(dist); 83 | dist *= 60 * 1852; 84 | return dist; 85 | } 86 | 87 | deg2rad(deg) { 88 | return (deg * Math.PI / 180.0); 89 | } 90 | 91 | rad2deg(rad) { 92 | return (rad * 180.0 / Math.PI); 93 | } 94 | 95 | initMap() { 96 | console.log(this.shelter) 97 | let mapOptions: google.maps.MapOptions = { 98 | center: this.coords, 99 | zoom: 13, 100 | mapTypeId: google.maps.MapTypeId.ROADMAP 101 | } 102 | this.map = new google.maps.Map(this.mapElement.nativeElement, mapOptions) 103 | //현 위치 마커 104 | let marker: google.maps.Marker = new google.maps.Marker({ 105 | map: this.map, 106 | position: this.coords, 107 | icon: { url : '../../assets/imgs/currentMarkerImage.png'} 108 | }); 109 | 110 | var service = new google.maps.places.PlacesService(this.map); 111 | 112 | 113 | var otherMarker, i; 114 | var infowindow = new google.maps.InfoWindow(); 115 | 116 | for (i = 0; i < this.shelter.length; i++) { 117 | console.log(this.shelter[i]['dist']) 118 | otherMarker = new google.maps.Marker({ 119 | position: new google.maps.LatLng(this.shelter[i]['lat'], this.shelter[i]['lng']), 120 | map: this.map, 121 | icon: { url : '../../assets/imgs/icMarker.png'} 122 | }); 123 | 124 | google.maps.event.addListener(otherMarker, 'click', (function (otherMarker,i) { 125 | return function () { 126 | infowindow.setContent(this.shelter[i]['name']); 127 | infowindow.open(this.map, this); 128 | } 129 | })(marker, i)); 130 | } 131 | } 132 | 133 | } 134 | 135 | 136 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ESQUAKE 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /src/key/firebaseKey.ts: -------------------------------------------------------------------------------- 1 | export const firebaseKey = { 2 | //"apiKey": "AIzaSyB7Qe9SIzfB7tMQOQqAHxE7vgs4LhWVy8U", 3 | "apiKey": "AIzaSyBQ3M0MISy5O49CCqOOqYEAEoppYWm1DxQ", 4 | "authDomain": "esquake-d87b2.firebaseapp.com", 5 | "databaseURL": "https://esquake-d87b2.firebaseio.com", 6 | "projectId": "esquake-d87b2", 7 | "storageBucket": "esquake-d87b2.appspot.com", 8 | "messagingSenderId": "461474507874" 9 | } -------------------------------------------------------------------------------- /src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ionic", 3 | "short_name": "Ionic", 4 | "start_url": "index.html", 5 | "display": "standalone", 6 | "icons": [{ 7 | "src": "assets/imgs/logo.png", 8 | "sizes": "512x512", 9 | "type": "image/png" 10 | }], 11 | "background_color": "#4e8ef7", 12 | "theme_color": "#4e8ef7" 13 | } -------------------------------------------------------------------------------- /src/pages/eq-behavior/eq-behavior.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/pages/eq-behavior/eq-behavior.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { EqBehaviorPage } from './eq-behavior'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | EqBehaviorPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(EqBehaviorPage), 11 | ], 12 | }) 13 | export class EqBehaviorPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/eq-behavior/eq-behavior.scss: -------------------------------------------------------------------------------- 1 | page-eq-behavior { 2 | font-family: "Noto Sans", "Noto Sans CJK KR"; 3 | } 4 | 5 | .toolbar-background{ 6 | background-color: white; 7 | } 8 | 9 | .no-scroll .scroll-content{ 10 | overflow: hidden; 11 | } 12 | -------------------------------------------------------------------------------- /src/pages/eq-behavior/eq-behavior.ts: -------------------------------------------------------------------------------- 1 | import { Component, ViewChild } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, ViewController, Slides } from 'ionic-angular'; 3 | 4 | /** 5 | * Generated class for the EqBehaviorPage page. 6 | * 7 | * See https://ionicframework.com/docs/components/#navigation for more info on 8 | * Ionic pages and navigation. 9 | */ 10 | 11 | @IonicPage() 12 | @Component({ 13 | selector: 'page-eq-behavior', 14 | templateUrl: 'eq-behavior.html', 15 | }) 16 | export class EqBehaviorPage { 17 | 18 | constructor(public navCtrl: NavController, public navParams: NavParams, 19 | public viewCtrl: ViewController) { 20 | } 21 | 22 | slides = [ 23 | { 24 | image: "../../assets/imgs/guide9.png", 25 | }, 26 | { 27 | image: "../../assets/imgs/guide10.png", 28 | }, 29 | { 30 | image: "../../assets/imgs/guide11.png", 31 | } 32 | ]; 33 | 34 | ionViewDidLoad() { 35 | // console.log('ionViewDidLoad EqBehaviorPage'); 36 | } 37 | 38 | dismiss(){ 39 | this.viewCtrl.dismiss(); 40 | } 41 | slideChanged(){ 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/pages/eq-detail/eq-detail.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | eq-detail 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/pages/eq-detail/eq-detail.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { EqDetailPage } from './eq-detail'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | EqDetailPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(EqDetailPage), 11 | ], 12 | }) 13 | export class EqDetailPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/eq-detail/eq-detail.scss: -------------------------------------------------------------------------------- 1 | page-eq-detail { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/eq-detail/eq-detail.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams } from 'ionic-angular'; 3 | 4 | /** 5 | * Generated class for the EqDetailPage page. 6 | * 7 | * See https://ionicframework.com/docs/components/#navigation for more info on 8 | * Ionic pages and navigation. 9 | */ 10 | 11 | @IonicPage() 12 | @Component({ 13 | selector: 'page-eq-detail', 14 | templateUrl: 'eq-detail.html', 15 | }) 16 | export class EqDetailPage { 17 | 18 | constructor(public navCtrl: NavController, public navParams: NavParams) { 19 | } 20 | 21 | ionViewDidLoad() { 22 | // console.log('ionViewDidLoad EqDetailPage'); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/pages/eq-history/eq-history.html: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 |
10 | 11 | 12 | 13 | {{item.tmEqk | DatePipe}} 14 | 15 | 16 | 17 | 규모 {{ item.mt }} 18 | 19 | 20 | 21 | {{ item.loc }} 22 | 23 | 24 | 42 |
43 | 44 | 45 |
46 | -------------------------------------------------------------------------------- /src/pages/eq-history/eq-history.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { EqHistoryPage } from './eq-history'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | EqHistoryPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(EqHistoryPage), 11 | ], 12 | }) 13 | export class EqHistoryPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/eq-history/eq-history.scss: -------------------------------------------------------------------------------- 1 | page-eq-history { 2 | font-family: "Noto Sans", "Noto Sans CJK KR"; 3 | } 4 | 5 | .toolbar-background{ 6 | background-color: white; 7 | } 8 | 9 | 10 | .no-scroll .scroll-content{ 11 | overflow: hidden; 12 | margin:0; 13 | // background-color: #fbfbfb; 14 | background-color: rgb(245, 245, 245); 15 | } 16 | 17 | 18 | .container{ 19 | display:flex; 20 | flex-direction: column; 21 | align-items: center; 22 | background-color: rgb(248, 248, 248); 23 | } 24 | 25 | .eq-item{ 26 | background-color: white; 27 | width: 100%; 28 | // height: 130px; 29 | margin-top: 20px; 30 | padding: 10px; 31 | } 32 | .item-time{ 33 | margin-left:8px; 34 | font-weight:500; 35 | font-size: 14px; 36 | } 37 | 38 | .item-mag{ 39 | margin-left: 8px; 40 | font-weight: 800; 41 | color: #0f997b; 42 | font-size: 20px; 43 | width: 30%; 44 | } 45 | 46 | .item-effect{ 47 | font-size: 12px; 48 | font-weight: 300; 49 | } 50 | .item-info { 51 | margin-bottom: 14px; 52 | } 53 | 54 | .item-location{ 55 | margin-left: 8px; 56 | font-size: 14px; 57 | font-weight: 300; 58 | margin-right:8px; 59 | width:100%; 60 | } 61 | -------------------------------------------------------------------------------- /src/pages/eq-history/eq-history.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, ViewController } from 'ionic-angular'; 3 | import { AngularFirestore, AngularFirestoreCollection } from 'angularfire2/firestore'; 4 | 5 | import { Observable } from 'rxjs/Observable'; 6 | 7 | @IonicPage() 8 | @Component({ 9 | selector: 'page-eq-history', 10 | templateUrl: 'eq-history.html', 11 | }) 12 | export class EqHistoryPage { 13 | 14 | history: Observable; 15 | earthquake: any; 16 | constructor(public navCtrl: NavController, public navParams: NavParams, 17 | public viewCtrl:ViewController, public afs: AngularFirestore 18 | ) { 19 | this.afs.collection('earthquake', ref => ref.orderBy('tmEqk', 'desc')).valueChanges().subscribe(data => { 20 | // console.log(data); 21 | this.earthquake = data ; 22 | }) 23 | } 24 | 25 | ionViewDidLoad() { 26 | // console.log('ionViewDidLoad EqHistoryPage'); 27 | } 28 | 29 | dismiss(){ 30 | this.viewCtrl.dismiss(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/pages/find-shelter/find-shelter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 주소 검색 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |

찾으시는 주소가 없습니다.

26 |
27 | 28 |
29 | 30 |

{{recent}}

31 |
32 |
33 | 34 | 35 |

{{road}}

36 |
37 |
-------------------------------------------------------------------------------- /src/pages/find-shelter/find-shelter.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { FindShelterPage } from './find-shelter'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | FindShelterPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(FindShelterPage), 11 | ], 12 | }) 13 | export class FindShelterPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/find-shelter/find-shelter.scss: -------------------------------------------------------------------------------- 1 | page-find-shelter { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/find-shelter/find-shelter.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams, ViewController } from 'ionic-angular'; 3 | import { Http } from '@angular/http'; 4 | 5 | @IonicPage() 6 | @Component({ 7 | selector: 'page-find-shelter', 8 | templateUrl: 'find-shelter.html', 9 | }) 10 | export class FindShelterPage { 11 | Searchse : any = 'road'; 12 | srchwrd : any = ''; 13 | roads = []; // 주소 검색 결과 14 | recents = []; // 최근 검색 내역 15 | recentflag : boolean = false; // 최근 검색 내역이 없는 경우 16 | searchflag : boolean = false; // 검색 여부 17 | nthflag : boolean = false; // 찾는 주소 없을 경우 18 | selectedaddress : string; // user가 검색한 주소 선택한 경우 19 | 20 | constructor(public navCtrl: NavController, public navParams: NavParams, 21 | public viewCtrl: ViewController, private http : Http) { 22 | // empty road array 안해주면 계속 전에 검색했던 주소들 다 프린트 됨 23 | this.nthflag = false; 24 | this.roads = []; 25 | 26 | // 여기서는 default 로 최근검색기록 확인, print 27 | // console.log(this.recents.length); 28 | // if (this.recents.length == 0) this.recentflag = false; 29 | // else this.recentflag = true; 30 | } 31 | 32 | ionViewDidLoad() { 33 | // console.log('ionViewDidLoad FindShelterPage'); 34 | } 35 | 36 | setLocation(data) { 37 | this.selectedaddress = data; 38 | this.viewCtrl.dismiss(this.selectedaddress); 39 | } 40 | dismissModal(){ 41 | this.viewCtrl.dismiss(this.selectedaddress); 42 | } 43 | datapassing(){ 44 | // search 버튼 누르면 검색했다는 뜻 && datapassing() 실행 45 | // => datapassing() 실행하면 this.recents에 push 46 | // push 할 때, 이미 recents array 에 있으면 추가 하지 않음 47 | var _j = 0; 48 | for(_j = 0; _j < this.recents.length; _j++){ 49 | if (this.recents[_j] == this.srchwrd) break; 50 | } 51 | if (_j == this.recents.length) this.recents.push(this.srchwrd) 52 | 53 | // recentflag 바꿔서 최근검색기록은 print 안되도록 54 | this.recentflag = false; 55 | 56 | // nthflag 바꿔서 찾으시는 주소 없다고 안 뜨도록 57 | this.nthflag = false; 58 | 59 | // 새로운 검색기록 roads에 push 하기 전에 empty roads array 60 | this.roads = []; 61 | 62 | this.getMessages(this.Searchse, this.srchwrd).subscribe((data) => { 63 | // console.log(data) 64 | // console.log(JSON.parse(data['_body'])['NewAddressListResponse']['newAddressListAreaCd']) 65 | // console.log(JSON.parse(data['_body'])['NewAddressListResponse']['cmmMsgHeader']['totalCount']) 얘가 반환값이 있는지 없는지를, 몇개인지를 알려주는 element임! 66 | 67 | if (JSON.parse(data['_body'])['NewAddressListResponse']['cmmMsgHeader']['totalCount'] == ""){ 68 | // 반환 값이 아예 없는 애들 -> exception 처리 69 | // console.log('length error') 70 | this.nthflag = true; 71 | } 72 | else if (JSON.parse(data['_body'])['NewAddressListResponse']['cmmMsgHeader']['totalCount'] == "1"){ 73 | // 반환 값이 하나인 애들 74 | console.log('접근방식 다른 애들 (결과가 하나 뿐인 애들)') 75 | this.roads.push(JSON.parse(data['_body'])['NewAddressListResponse']['newAddressListAreaCd']['lnmAdres']) 76 | } 77 | else { 78 | // 반환 값이 2 이상인 애들 79 | for (var _i = 0; _i < JSON.parse(data['_body'])['NewAddressListResponse']['newAddressListAreaCd'].length; _i++) { 80 | // console.log('for loop') 81 | this.roads.push(JSON.parse(data['_body'])['NewAddressListResponse']['newAddressListAreaCd'][_i]['lnmAdres']) 82 | } 83 | } 84 | }); 85 | } 86 | 87 | // gototest() { 88 | // this.navCtrl.push(TestPage); 89 | // } 90 | 91 | getMessages(par1, par2) { 92 | // var headers = new Headers(); 93 | // headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); 94 | // console.log('get message'); 95 | // console.log(par1, par2) 96 | var url = `http://openapi.epost.go.kr/postal/retrieveNewAdressAreaCdService/retrieveNewAdressAreaCdService/getNewAddressListAreaCd?ServiceKey=CTwTNEheKCyHIBYx4sz7Lxkf4vg%2Bkh6f2G%2BvypL6qqZk2j90baTIMesmZNhoIcM4%2FSUio%2FJ3xEMe3xZ6JSn7Lg%3D%3D&searchSe=${par1}&srchwrd=${par2}`; 97 | return this.http.get(url); 98 | } 99 | 100 | findLocation() { 101 | var url = `http://www.juso.go.kr/addrlink/addrCoordApiJsonp.do` 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /src/pages/home/home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ title }} 6 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 |
22 |
{{ data.name }}
23 |
{{ data.dist | DistancePipe}}m
24 |
25 |
{{ data.road_address }}
26 |
27 |
28 | 29 |
30 | -------------------------------------------------------------------------------- /src/pages/home/home.scss: -------------------------------------------------------------------------------- 1 | // page-home { 2 | // #map { 3 | // height: 50%; 4 | // width: 50%; 5 | // } 6 | // } 7 | 8 | page-home { 9 | font-family: "Noto Sans", "Noto Sans CJK KR"; 10 | 11 | ion-slides { 12 | height: 96px; 13 | padding: 0; 14 | margin: 0; 15 | } 16 | } 17 | 18 | // ion-sliders { 19 | // height: 96px !important; 20 | // } 21 | 22 | .scroll-content { 23 | padding: 0 !important; 24 | } 25 | 26 | .shelter-location-slide .slides { 27 | // height : 30% !important; 28 | } 29 | 30 | .shelter-location-slide { 31 | position: fixed; 32 | bottom: 5%; 33 | z-index: 3; 34 | } 35 | 36 | .shelter-location { 37 | 38 | box-shadow: 0 5px 5px rgba(0, 0, 0, 0.05); 39 | // top: 80%; 40 | // z-index: 1; 41 | 42 | height: 96px !important; 43 | width: 100%; 44 | padding-right: 5%; 45 | padding-left: 5%; 46 | 47 | .slide-zoom { 48 | height: 100%; 49 | background-color: white; 50 | padding: 14px; 51 | } 52 | 53 | #shelter-info { 54 | display: flex; 55 | 56 | div { 57 | width: 50%; 58 | } 59 | 60 | #shelter-name { 61 | font-size: 18px; 62 | font-weight: bold; 63 | text-align: left; 64 | } 65 | 66 | #shelter-distance { 67 | font-size: 16px; 68 | color: rgb(16, 102, 230); 69 | text-align: right; 70 | } 71 | } 72 | 73 | #shelter-address { 74 | margin-top: 10px; 75 | font-size: 12px; 76 | text-align: left; 77 | color: rgb(51, 51, 51); 78 | } 79 | 80 | } 81 | 82 | .map { 83 | background-color: #d8d3d3; 84 | } 85 | 86 | #map { 87 | height: 100%; 88 | width: 100%; 89 | position: relative; 90 | 91 | .gm-control-active.gm-fullscreen-control, .gmnoprint { 92 | display: none; 93 | } 94 | } 95 | 96 | div.loading-wrapper { 97 | background-color: transparent !important; 98 | -webkit-box-shadow: rgba(0, 0, 0, 0) !important; 99 | box-shadow: rgba(0, 0, 0, 0) !important; 100 | } -------------------------------------------------------------------------------- /src/pages/home/home.ts: -------------------------------------------------------------------------------- 1 | import { LoadingController, ModalController, Slides } from 'ionic-angular'; 2 | import { Component, ViewChild } from '@angular/core'; 3 | import { Geolocation } from '@ionic-native/geolocation'; 4 | import { Platform } from 'ionic-angular'; 5 | import * as products from "../../assets/shelter.json"; 6 | import { NativeGeocoder, NativeGeocoderReverseResult, NativeGeocoderForwardResult, NativeGeocoderOptions } from '@ionic-native/native-geocoder'; 7 | 8 | // Pages 9 | import { FindShelterPage } from '../find-shelter/find-shelter'; 10 | 11 | 12 | @Component({ 13 | selector: 'page-home', 14 | templateUrl: 'home.html' 15 | }) 16 | export class HomePage { 17 | @ViewChild(Slides) slides: Slides; 18 | @ViewChild("map") mapElement; 19 | map: any; 20 | coords: any; 21 | address: any; 22 | temps:any[] = []; 23 | title: string = '현재 위치'; 24 | 25 | changeLocation:any; 26 | 27 | private shelter: any; 28 | constructor(private geolocation: Geolocation, private platform: Platform, 29 | public loadingCtrl: LoadingController, private nativeGeocoder: NativeGeocoder, 30 | public modalCtrl : ModalController) { 31 | 32 | this.coords = { 33 | lat: null, 34 | lng: null 35 | } 36 | } 37 | 38 | search() { 39 | let options: NativeGeocoderOptions = { 40 | useLocale: true, 41 | maxResults: 5 42 | }; 43 | 44 | this.nativeGeocoder.forwardGeocode(this.address); 45 | 46 | } 47 | 48 | ngOnInit() { 49 | let loading = this.loadingCtrl.create({ 50 | spinner: 'hide', 51 | content: ` 52 |
53 |
54 | 55 |
56 |
`, 57 | }); 58 | loading.present(); 59 | this.platform.ready().then(() => { 60 | this.geolocation.getCurrentPosition().then(pos => { 61 | this.coords.lat = pos.coords.latitude 62 | this.coords.lng = pos.coords.longitude 63 | // this.coords.lat = 36.1028648 64 | // this.coords.lng = 129.3898267 65 | // console.log(this.coords.lat, this.coords.lng) 66 | 67 | this.getNearestShelter(5); 68 | this.initMap(); 69 | loading.dismiss(); 70 | // console.log('아마..') 71 | }).catch((error) => { 72 | console.log(error); 73 | // console.log(JSON.stringify(error)); 74 | // console.log("error"); 75 | }) 76 | }) 77 | // console.log(this.coords) 78 | } 79 | 80 | getNearestShelter(max) { 81 | var local_shelter = this.getNearShelter(20); 82 | // console.log(local_shelter); 83 | for (let index = 0; index < local_shelter.length; index++) { 84 | local_shelter[index]["dist"] = this.getDistance(this.coords, local_shelter[index]); 85 | // console.log(this.getDistance(this.coords, local_shelter[index])) 86 | // console.log("shel"+local_shelter[index]); 87 | } 88 | 89 | var rShelter = local_shelter.sort(function (a, b) { 90 | return a.dist - b.dist; 91 | }).slice(0, max); 92 | 93 | this.shelter = rShelter; 94 | return rShelter; 95 | } 96 | 97 | getNearShelter(key) { 98 | return products["records"]; 99 | } 100 | 101 | getDistance(from, to) { 102 | var theta = from.lng - to.lng; 103 | var dist = Math.sin(this.deg2rad(from.lat)) * Math.sin(this.deg2rad(to.lat)) 104 | + Math.cos(this.deg2rad(from.lat)) * Math.cos(this.deg2rad(to.lat)) 105 | * Math.cos(this.deg2rad(theta)); 106 | 107 | dist = Math.acos(dist); 108 | dist = this.rad2deg(dist); 109 | dist *= 60 * 1852; 110 | return dist; 111 | } 112 | 113 | deg2rad(deg) { 114 | return (deg * Math.PI / 180.0); 115 | } 116 | 117 | rad2deg(rad) { 118 | return (rad * 180.0 / Math.PI); 119 | } 120 | 121 | slideChanged() { 122 | let currentIndex = this.slides.getActiveIndex(); 123 | // console.log('Current index is', currentIndex); 124 | // console.log(this.shelter[currentIndex]); 125 | // console.log(this.shelter[currentIndex]['lat']); 126 | // console.log(this.shelter[currentIndex]['lng']); 127 | 128 | this.map.setCenter({ 129 | lat:parseFloat(this.shelter[currentIndex]['lat']), 130 | lng:parseFloat(this.shelter[currentIndex]['lng']) 131 | }) 132 | } 133 | 134 | getCurrent() { 135 | this.ngOnInit(); 136 | } 137 | 138 | initMap() { 139 | // console.log(this.shelter) 140 | let mapOptions: google.maps.MapOptions = { 141 | center: this.coords, 142 | zoom: 16, 143 | mapTypeId: google.maps.MapTypeId.ROADMAP 144 | } 145 | this.map = new google.maps.Map(this.mapElement.nativeElement, mapOptions) 146 | //현 위치 마커 147 | let marker: google.maps.Marker = new google.maps.Marker({ 148 | map: this.map, 149 | position: this.coords, 150 | icon: { url : '../../assets/imgs/currentMarkerImage.png'} 151 | }); 152 | 153 | // var service = new google.maps.places.PlacesService(this.map); 154 | 155 | 156 | var otherMarker, i; 157 | var infowindow = new google.maps.InfoWindow(); 158 | 159 | for (i = 0; i < this.shelter.length; i++) { 160 | // console.log("`_~"); 161 | // console.log(this.shelter[i]['dist']); 162 | this.temps.push(this.shelter[i]) 163 | otherMarker = new google.maps.Marker({ 164 | position: new google.maps.LatLng(this.shelter[i]['lat'], this.shelter[i]['lng']), 165 | map: this.map, 166 | icon: { url : '../../assets/imgs/icMarker.png'} 167 | }); 168 | 169 | // google.maps.event.addListener(otherMarker, 'click', (function (otherMarker,i) { 170 | // return function () { 171 | // console.log("멀까임") 172 | // infowindow.setContent(this.shelter[i]['name']); 173 | // infowindow.open(this.map, this); 174 | // } 175 | // })(marker, i)); 176 | } 177 | // console.log(this.temps) 178 | } 179 | showModal() { 180 | let profileModal = this.modalCtrl.create(FindShelterPage); 181 | 182 | profileModal.onDidDismiss(data => { this.title = data; }); 183 | 184 | profileModal.present(); 185 | } 186 | } 187 | 188 | 189 | -------------------------------------------------------------------------------- /src/pages/home/json-typings.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.json" { 2 | const value: any; 3 | export default value; 4 | } -------------------------------------------------------------------------------- /src/pages/list/list.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | list 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/pages/list/list.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { ListPage } from './list'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | ListPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(ListPage), 11 | ], 12 | }) 13 | export class ListPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/list/list.scss: -------------------------------------------------------------------------------- 1 | page-list { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/list/list.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams } from 'ionic-angular'; 3 | 4 | /** 5 | * Generated class for the ListPage page. 6 | * 7 | * See https://ionicframework.com/docs/components/#navigation for more info on 8 | * Ionic pages and navigation. 9 | */ 10 | 11 | @IonicPage() 12 | @Component({ 13 | selector: 'page-list', 14 | templateUrl: 'list.html', 15 | }) 16 | export class ListPage { 17 | 18 | constructor(public navCtrl: NavController, public navParams: NavParams) { 19 | } 20 | 21 | ionViewDidLoad() { 22 | // console.log('ionViewDidLoad ListPage'); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/pages/setting/setting.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 환경설정 4 | 5 | 6 | 7 | 8 |
9 | 10 |
11 | 12 |
13 | 14 | 15 | 규모 2.0 이상 16 | 17 | 18 | 규모 3.0 이상 19 | 20 | 21 | 규모 4.0 이상 22 | 23 | 24 | 25 | 지진 알림의 최소 규모를 설정합니다 26 |
27 |
28 | -------------------------------------------------------------------------------- /src/pages/setting/setting.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IonicPageModule } from 'ionic-angular'; 3 | import { SettingPage } from './setting'; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | SettingPage, 8 | ], 9 | imports: [ 10 | IonicPageModule.forChild(SettingPage), 11 | ], 12 | }) 13 | export class SettingPageModule {} 14 | -------------------------------------------------------------------------------- /src/pages/setting/setting.scss: -------------------------------------------------------------------------------- 1 | page-setting { 2 | font-family: "Noto Sans", "Noto Sans CJK KR"; 3 | ion-range { 4 | margin: 0 20px; 5 | } 6 | .setting-info { 7 | text-align: center; 8 | } 9 | .setting-notification { 10 | margin: 0 10%; 11 | } 12 | .setting-image { 13 | text-align: center; 14 | margin: 20%; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/pages/setting/setting.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IonicPage, NavController, NavParams } from 'ionic-angular'; 3 | import { AlertProvider } from '../../providers/alert/alert'; 4 | /** 5 | * Generated class for the SettingPage page. 6 | * 7 | * See https://ionicframework.com/docs/components/#navigation for more info on 8 | * Ionic pages and navigation. 9 | */ 10 | 11 | @IonicPage() 12 | @Component({ 13 | selector: 'page-setting', 14 | templateUrl: 'setting.html', 15 | }) 16 | export class SettingPage { 17 | 18 | minNotification: any = 2; 19 | 20 | constructor(public navCtrl: NavController, public navParams: NavParams, 21 | public AlertProvider:AlertProvider,) { 22 | } 23 | 24 | ionViewDidLoad() { 25 | // console.log('ionViewDidLoad SettingPage'); 26 | } 27 | changet() { 28 | // console.log(this.minNotification); 29 | this.AlertProvider.presentToast(`${this.minNotification}이상의 지진만 알림받습니다.`) 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/pages/tabs/tabs.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/pages/tabs/tabs.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | // Pages 4 | import { HomePage } from '../home/home'; 5 | import { EqBehaviorPage } from '../eq-behavior/eq-behavior'; 6 | import { SettingPage } from '../setting/setting'; 7 | import { EqHistoryPage } from '../eq-history/eq-history'; 8 | 9 | @Component({ 10 | templateUrl: 'tabs.html' 11 | }) 12 | export class TabsPage { 13 | 14 | tab1Root = HomePage; 15 | tab2Root = EqHistoryPage; 16 | tab3Root = EqBehaviorPage; 17 | tab4Root = SettingPage; 18 | 19 | constructor() { 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/pipes/date/date.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | 3 | /** 4 | * Generated class for the DatePipe pipe. 5 | * 6 | * See https://angular.io/api/core/Pipe for more info on Angular Pipes. 7 | */ 8 | @Pipe({ 9 | name: 'DatePipe', 10 | }) 11 | export class DatePipe implements PipeTransform { 12 | /** 13 | * Takes a value and makes it lowercase. 14 | */ 15 | transform(date: string) { 16 | // console.log(date.length); 17 | if (date.length == 14) { 18 | return `${date.slice(2,4)}/${date.slice(4,6)}/${date.slice(6,8)} ${date.slice(8,10)}:${date.slice(10,12)}:${date.slice(12,)}`; 19 | } 20 | else { 21 | return date; 22 | } 23 | // ex) 20181102071951 24 | // console.log(date.slice(0,4)) 25 | // console.log(date.slice(4,6)) 26 | // console.log(date.slice(6,8)) 27 | // console.log(date.slice(8,10)) 28 | // console.log(date.slice(10,12)) 29 | // console.log(date.slice(12,)) 30 | 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/pipes/distance/distance.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | 3 | /** 4 | * Generated class for the DistancePipe pipe. 5 | * 6 | * See https://angular.io/api/core/Pipe for more info on Angular Pipes. 7 | */ 8 | @Pipe({ 9 | name: 'DistancePipe', 10 | }) 11 | export class DistancePipe implements PipeTransform { 12 | /** 13 | * Takes a value and makes it lowercase. 14 | */ 15 | transform(value: string) { 16 | 17 | 18 | return parseInt(value) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/pipes/pipes.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { DatePipe } from './date/date'; 3 | import { DistancePipe } from './distance/distance'; 4 | @NgModule({ 5 | declarations: [DatePipe, 6 | DistancePipe], 7 | imports: [], 8 | exports: [DatePipe, 9 | DistancePipe] 10 | }) 11 | export class PipesModule {} 12 | -------------------------------------------------------------------------------- /src/providers/alert/alert.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { ToastController} from 'ionic-angular'; 3 | 4 | @Injectable() 5 | export class AlertProvider { 6 | constructor(public toastCtrl: ToastController) {} 7 | 8 | presentToast(text) { 9 | let toast = this.toastCtrl.create({ 10 | message: text, 11 | duration: 3000, 12 | position: 'bottom' 13 | }); 14 | toast.present(); 15 | } 16 | } -------------------------------------------------------------------------------- /src/service-worker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Check out https://googlechromelabs.github.io/sw-toolbox/ for 3 | * more info on how to use sw-toolbox to custom configure your service worker. 4 | */ 5 | 6 | 7 | 'use strict'; 8 | importScripts('./build/sw-toolbox.js'); 9 | 10 | self.toolbox.options.cache = { 11 | name: 'ionic-cache' 12 | }; 13 | 14 | // pre-cache our key assets 15 | self.toolbox.precache( 16 | [ 17 | './build/main.js', 18 | './build/vendor.js', 19 | './build/main.css', 20 | './build/polyfills.js', 21 | 'index.html', 22 | 'manifest.json' 23 | ] 24 | ); 25 | 26 | // dynamically cache any other local assets 27 | self.toolbox.router.any('/*', self.toolbox.fastest); 28 | 29 | // for any other requests go to the network, cache, 30 | // and then only use that cached resource if your user goes offline 31 | self.toolbox.router.default = self.toolbox.networkFirst; 32 | -------------------------------------------------------------------------------- /src/theme/variables.scss: -------------------------------------------------------------------------------- 1 | // Ionic Variables and Theming. For more info, please see: 2 | // http://ionicframework.com/docs/theming/ 3 | 4 | // Font path is used to include ionicons, 5 | // roboto, and noto sans fonts 6 | $font-path: "../assets/fonts"; 7 | 8 | 9 | // The app direction is used to include 10 | // rtl styles in your app. For more info, please see: 11 | // http://ionicframework.com/docs/theming/rtl-support/ 12 | $app-direction: ltr; 13 | 14 | 15 | @import "ionic.globals"; 16 | 17 | 18 | // Shared Variables 19 | // -------------------------------------------------- 20 | // To customize the look and feel of this app, you can override 21 | // the Sass variables found in Ionic's source scss files. 22 | // To view all the possible Ionic variables, see: 23 | // http://ionicframework.com/docs/theming/overriding-ionic-variables/ 24 | 25 | $loading-ios-background : trasparent; 26 | $loading-md-background : transparent; 27 | $loading-md-box-shadow-color : rgba(0, 0, 0, 0); 28 | 29 | $cordova-ios-statusbar-padding: 0px; 30 | 31 | $range-ios-knob-background-color: rgb(16, 102, 230); 32 | $range-ios-knob-width: 35px; 33 | $range-ios-bar-height: 5px; 34 | $range-ios-tick-height: 15px; 35 | $range-ios-tick-width: 15px; 36 | $range-ios-tick-border-radius: 15px; 37 | 38 | $range-md-knob-background-color: rgb(16, 102, 230); 39 | $range-md-knob-width: 35px; 40 | $range-md-bar-height: 5px; 41 | $range-md-tick-height: 15px; 42 | $range-md-tick-width: 15px; 43 | $range-md-tick-border-radius: 15px; 44 | $range-md-tick-background-color: #bdbdbd; 45 | $range-md-tick-active-background-color: rgb(16, 102, 230); 46 | 47 | ion-navbar.toolbar { 48 | text-align: center; 49 | .toolbar-title-ios, .toolbar-title-md { 50 | font-size: 1.7rem !important; 51 | font-weight: 400 !important; 52 | } 53 | } 54 | .header-ios{ 55 | padding-top: 20px; 56 | } 57 | // Named Color Variables 58 | // -------------------------------------------------- 59 | // Named colors makes it easy to reuse colors on various components. 60 | // It's highly recommended to change the default colors 61 | // to match your app's branding. Ionic uses a Sass map of 62 | // colors so you can add, rename and remove colors as needed. 63 | // The "primary" color is the only required color in the map. 64 | 65 | $colors: ( 66 | primary: #488aff, 67 | secondary: #32db64, 68 | danger: #f53d3d, 69 | light: #f4f4f4, 70 | dark: #222, 71 | main: rgb(16, 102, 230), 72 | ); 73 | 74 | 75 | // App iOS Variables 76 | // -------------------------------------------------- 77 | // iOS only Sass variables can go here 78 | 79 | 80 | 81 | 82 | // App Material Design Variables 83 | // -------------------------------------------------- 84 | // Material Design only Sass variables can go here 85 | 86 | 87 | 88 | 89 | // App Windows Variables 90 | // -------------------------------------------------- 91 | // Windows only Sass variables can go here 92 | 93 | 94 | 95 | 96 | // App Theme 97 | // -------------------------------------------------- 98 | // Ionic apps can have different themes applied, which can 99 | // then be future customized. This import comes last 100 | // so that the above variables are used and Ionic's 101 | // default are overridden. 102 | 103 | @import "ionic.theme.default"; 104 | 105 | 106 | // Ionicons 107 | // -------------------------------------------------- 108 | // The premium icon font for Ionic. For more info, please see: 109 | // http://ionicframework.com/docs/ionicons/ 110 | 111 | @import "ionic.ionicons"; 112 | 113 | 114 | // Fonts 115 | // -------------------------------------------------- 116 | 117 | @import "roboto"; 118 | @import "noto-sans"; 119 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "declaration": false, 5 | "emitDecoratorMetadata": true, 6 | "experimentalDecorators": true, 7 | "lib": [ 8 | "dom", 9 | "es2015" 10 | ], 11 | "module": "es2015", 12 | "moduleResolution": "node", 13 | "sourceMap": true, 14 | "target": "es5" 15 | }, 16 | "include": [ 17 | "src/**/*.ts" 18 | ], 19 | "exclude": [ 20 | "node_modules", 21 | "src/**/*.spec.ts", 22 | "src/**/__tests__/*.ts" 23 | ], 24 | "compileOnSave": false, 25 | "atom": { 26 | "rewriteTsconfig": false 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-duplicate-variable": true, 4 | "no-unused-variable": [ 5 | true 6 | ] 7 | }, 8 | "rulesDirectory": [ 9 | "node_modules/tslint-eslint-rules/dist/rules" 10 | ] 11 | } 12 | --------------------------------------------------------------------------------