├── .browserslistrc ├── .eslintignore ├── .eslintrc ├── .github ├── ISSUE_TEMPLATE │ └── bug_report.md ├── assets │ ├── android.png │ └── ios.png ├── banner.png └── workflows │ ├── build.yaml │ └── lint-format.yml ├── .gitignore ├── .gitmodules ├── .prettierrc.yml ├── LICENSE ├── README.md ├── android ├── .gitignore ├── .idea │ ├── .gitignore │ ├── compiler.xml │ ├── jarRepositories.xml │ └── misc.xml ├── app │ ├── .npmignore │ ├── build.gradle │ ├── capacitor.build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── getcapacitor │ │ │ └── myapp │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ │ ├── capacitor.config.json │ │ │ └── capacitor.plugins.json │ │ ├── ic_launcher-playstore.png │ │ ├── java │ │ │ └── in │ │ │ │ └── beaconcha │ │ │ │ └── mobile │ │ │ │ └── MainActivity.java │ │ └── res │ │ │ ├── drawable-anydpi-v24 │ │ │ └── ic_notification.xml │ │ │ ├── drawable-hdpi │ │ │ └── ic_notification.png │ │ │ ├── drawable-mdpi │ │ │ └── ic_notification.png │ │ │ ├── drawable-port-hdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-mdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-xhdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-xxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-xxxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-v31 │ │ │ └── widget_bg_long.xml │ │ │ ├── drawable-xhdpi │ │ │ └── ic_notification.png │ │ │ ├── drawable-xxhdpi │ │ │ └── ic_notification.png │ │ │ ├── drawable │ │ │ ├── ic_alert_circle_outline.xml │ │ │ ├── ic_baseline_wifi_protected_setup_24.xml │ │ │ ├── ic_checkmark_circle_outline.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── ic_lock_closed_outline.xml │ │ │ ├── splash.png │ │ │ ├── widget_bg_long.xml │ │ │ ├── widget_bg_square.xml │ │ │ ├── widget_preview_long.png │ │ │ └── widget_preview_square.png │ │ │ ├── layout │ │ │ ├── activity_main.xml │ │ │ ├── widget_long.xml │ │ │ ├── widget_long_rpl.xml │ │ │ └── widget_square.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher_background.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher_background.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher_background.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher_background.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher_adaptive_back.png │ │ │ ├── ic_launcher_background.png │ │ │ └── ic_launcher_round.png │ │ │ ├── values-v31 │ │ │ └── styles.xml │ │ │ ├── values │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ │ ├── xml-v31 │ │ │ ├── widgetinfo_long.xml │ │ │ ├── widgetinfo_long_rpl.xml │ │ │ └── widgetinfo_square.xml │ │ │ └── xml │ │ │ ├── config.xml │ │ │ ├── file_paths.xml │ │ │ ├── widgetinfo_long.xml │ │ │ ├── widgetinfo_long_rpl.xml │ │ │ └── widgetinfo_square.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── getcapacitor │ │ └── myapp │ │ └── ExampleUnitTest.java ├── build.gradle ├── capacitor.settings.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── variables.gradle ├── angular.json ├── capacitor.config.json ├── e2e ├── protractor.conf.js ├── src │ ├── app.e2e-spec.ts │ └── app.po.ts └── tsconfig.json ├── ionic.config.json ├── ios ├── .gitignore └── App │ ├── App.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── App.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ ├── App │ ├── App-Bridging-Header.h │ ├── App.entitlements │ ├── AppDelegate.swift │ ├── AppRelease.entitlements │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-114.png │ │ │ ├── Icon-29.png │ │ │ ├── Icon-40.png │ │ │ ├── Icon-57.png │ │ │ ├── Icon-60.png │ │ │ ├── ios-marketing-1024x1024.png │ │ │ ├── iphone-29x29@2x.png │ │ │ ├── iphone-29x29@3x.png │ │ │ ├── iphone-40x40@2x.png │ │ │ ├── iphone-40x40@3x.png │ │ │ ├── iphone-60x60@2x.png │ │ │ ├── iphone-60x60@3x.png │ │ │ ├── mac-128x128.png │ │ │ ├── mac-16x16.png │ │ │ ├── mac-256x256.png │ │ │ ├── mac-32x32.png │ │ │ └── mac-512x512.png │ │ ├── Contents.json │ │ └── Splash.imageset │ │ │ ├── Contents.json │ │ │ ├── Default-Portrait~ipad.png │ │ │ ├── Default@2x_universal_anyany.png │ │ │ └── Default@2x~iphone-1.png │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ ├── StorageMirror.m │ ├── StorageMirror.swift │ ├── capacitor.config.json │ └── config.xml │ ├── Beaconchain WidgetExtension.entitlements │ ├── Podfile │ └── Podfile.lock ├── karma.conf.js ├── package-lock.json ├── package.json ├── resources ├── android │ └── 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 ├── ios │ └── splash │ │ ├── Default-1792h~iphone.png │ │ ├── Default-2436h.png │ │ ├── Default-2688h~iphone.png │ │ ├── Default-568h@2x~iphone.png │ │ ├── Default-667h.png │ │ ├── Default-736h.png │ │ ├── Default-Landscape-1792h~iphone.png │ │ ├── Default-Landscape-2436h.png │ │ ├── Default-Landscape-2688h~iphone.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 └── windows │ └── splash │ ├── Splash.scale-100.png │ ├── Splash.scale-125.png │ ├── Splash.scale-150.png │ ├── Splash.scale-200.png │ └── Splash.scale-400.png ├── src ├── app │ ├── app-routing.module.ts │ ├── app.component.html │ ├── app.component.scss │ ├── app.component.ts │ ├── app.module.ts │ ├── components │ │ ├── ad │ │ │ ├── ad.component.html │ │ │ ├── ad.component.scss │ │ │ ├── ad.component.spec.ts │ │ │ ├── ad.component.ts │ │ │ └── ad.module.ts │ │ ├── block │ │ │ ├── block.component.html │ │ │ ├── block.component.scss │ │ │ ├── block.component.spec.ts │ │ │ ├── block.component.ts │ │ │ └── block.module.ts │ │ ├── clientupdate │ │ │ ├── clientupdate.component.html │ │ │ ├── clientupdate.component.scss │ │ │ ├── clientupdate.component.spec.ts │ │ │ ├── clientupdate.component.ts │ │ │ └── clientupdate.module.ts │ │ ├── dashboard │ │ │ ├── dashboard.component.html │ │ │ ├── dashboard.component.scss │ │ │ ├── dashboard.component.ts │ │ │ ├── dashboard.module.ts │ │ │ ├── dashboard.spec.ts │ │ │ ├── performance-item.component.html │ │ │ ├── performance-item.component.scss │ │ │ ├── performance-item.component.ts │ │ │ └── performance-item.module.ts │ │ ├── help │ │ │ ├── help.component.html │ │ │ ├── help.component.scss │ │ │ ├── help.component.spec.ts │ │ │ ├── help.component.ts │ │ │ └── help.module.ts │ │ ├── machinechart │ │ │ ├── machinechart.component.html │ │ │ ├── machinechart.component.scss │ │ │ ├── machinechart.component.spec.ts │ │ │ ├── machinechart.component.ts │ │ │ └── machinechart.module.ts │ │ ├── message │ │ │ ├── message.component.html │ │ │ ├── message.component.scss │ │ │ ├── message.component.spec.ts │ │ │ ├── message.component.ts │ │ │ └── message.module.ts │ │ ├── offline │ │ │ ├── offline.component.html │ │ │ ├── offline.component.scss │ │ │ ├── offline.component.spec.ts │ │ │ ├── offline.component.ts │ │ │ └── offline.module.ts │ │ └── validator │ │ │ ├── validator.component.html │ │ │ ├── validator.component.scss │ │ │ ├── validator.component.spec.ts │ │ │ ├── validator.component.ts │ │ │ └── validator.module.ts │ ├── controllers │ │ ├── MachineController.ts │ │ └── OverviewController.ts │ ├── models │ │ └── StorageTypes.ts │ ├── pages │ │ ├── block-detail │ │ │ ├── block-detail-routing.module.ts │ │ │ ├── block-detail.module.ts │ │ │ ├── block-detail.page.html │ │ │ ├── block-detail.page.scss │ │ │ ├── block-detail.page.spec.ts │ │ │ └── block-detail.page.ts │ │ ├── clients │ │ │ ├── clients-routing.module.ts │ │ │ ├── clients.module.ts │ │ │ ├── clients.page.html │ │ │ ├── clients.page.scss │ │ │ ├── clients.page.spec.ts │ │ │ └── clients.page.ts │ │ ├── dev │ │ │ ├── dev-routing.module.ts │ │ │ ├── dev.module.ts │ │ │ ├── dev.page.html │ │ │ ├── dev.page.scss │ │ │ ├── dev.page.spec.ts │ │ │ └── dev.page.ts │ │ ├── helppage │ │ │ ├── helppage-routing.module.ts │ │ │ ├── helppage.module.ts │ │ │ ├── helppage.page.html │ │ │ ├── helppage.page.scss │ │ │ ├── helppage.page.spec.ts │ │ │ └── helppage.page.ts │ │ ├── licences │ │ │ ├── licences-routing.module.ts │ │ │ ├── licences.module.ts │ │ │ ├── licences.page.html │ │ │ ├── licences.page.scss │ │ │ ├── licences.page.spec.ts │ │ │ └── licences.page.ts │ │ ├── logview │ │ │ ├── logview-routing.module.ts │ │ │ ├── logview.module.ts │ │ │ ├── logview.page.html │ │ │ ├── logview.page.scss │ │ │ ├── logview.page.spec.ts │ │ │ └── logview.page.ts │ │ ├── machine-detail │ │ │ ├── machine-detail-routing.module.ts │ │ │ ├── machine-detail.module.ts │ │ │ ├── machine-detail.page.html │ │ │ ├── machine-detail.page.scss │ │ │ ├── machine-detail.page.spec.ts │ │ │ └── machine-detail.page.ts │ │ ├── machines │ │ │ ├── machines-routing.module.ts │ │ │ ├── machines.module.ts │ │ │ ├── machines.page.html │ │ │ ├── machines.page.scss │ │ │ ├── machines.page.spec.ts │ │ │ └── machines.page.ts │ │ ├── merge-checklist │ │ │ ├── merge-checklist-routing.module.ts │ │ │ ├── merge-checklist.module.ts │ │ │ ├── merge-checklist.page.html │ │ │ ├── merge-checklist.page.scss │ │ │ ├── merge-checklist.page.spec.ts │ │ │ └── merge-checklist.page.ts │ │ ├── notifications │ │ │ ├── notifications-routing.module.ts │ │ │ ├── notifications.module.ts │ │ │ ├── notifications.page.html │ │ │ ├── notifications.page.scss │ │ │ ├── notifications.page.spec.ts │ │ │ └── notifications.page.ts │ │ ├── subscribe │ │ │ ├── subscribe-routing.module.ts │ │ │ ├── subscribe.module.ts │ │ │ ├── subscribe.page.html │ │ │ ├── subscribe.page.scss │ │ │ ├── subscribe.page.spec.ts │ │ │ └── subscribe.page.ts │ │ └── validatordetail │ │ │ ├── validatordetail-routing.module.ts │ │ │ ├── validatordetail.module.ts │ │ │ ├── validatordetail.page.html │ │ │ ├── validatordetail.page.scss │ │ │ ├── validatordetail.page.spec.ts │ │ │ └── validatordetail.page.ts │ ├── pipes │ │ ├── delegater.pipi.ts │ │ ├── fadeoutpipe.pipe.ts │ │ ├── mcurrency.pipe.ts │ │ ├── percentageabs.pipe.ts │ │ ├── pipes.module.ts │ │ └── valuestyle.pipe.ts │ ├── requests │ │ └── requests.ts │ ├── services │ │ ├── alert.service.ts │ │ ├── alerts.service.spec.ts │ │ ├── api.service.spec.ts │ │ ├── api.service.ts │ │ ├── boot-preload.service.ts │ │ ├── storage.service.spec.ts │ │ ├── storage.service.ts │ │ ├── sync.service.spec.ts │ │ ├── sync.service.ts │ │ ├── unitconv.service.spec.ts │ │ └── unitconv.service.ts │ ├── tab-blocks │ │ ├── tab-blocks-routing.module.ts │ │ ├── tab-blocks.module.ts │ │ ├── tab-blocks.page.html │ │ ├── tab-blocks.page.scss │ │ ├── tab-blocks.page.spec.ts │ │ └── tab-blocks.page.ts │ ├── tab-dashboard │ │ ├── tab-dashboard-routing.module.ts │ │ ├── tab-dashboard.module.ts │ │ ├── tab-dashboard.page.html │ │ ├── tab-dashboard.page.scss │ │ ├── tab-dashboard.page.spec.ts │ │ └── tab-dashboard.page.ts │ ├── tab-preferences │ │ ├── notification-base.ts │ │ ├── tab-preferences-routing.module.ts │ │ ├── tab-preferences.module.ts │ │ ├── tab-preferences.page.html │ │ ├── tab-preferences.page.scss │ │ ├── tab-preferences.page.spec.ts │ │ └── tab-preferences.page.ts │ ├── tab-validators │ │ ├── tab-validators-routing.module.ts │ │ ├── tab-validators.module.ts │ │ ├── tab-validators.page.html │ │ ├── tab-validators.page.scss │ │ ├── tab-validators.page.spec.ts │ │ └── tab-validators.page.ts │ ├── tabs │ │ ├── tabs-routing.module.ts │ │ ├── tabs.module.ts │ │ ├── tabs.page.html │ │ ├── tabs.page.scss │ │ ├── tabs.page.spec.ts │ │ └── tabs.page.ts │ └── utils │ │ ├── AdUtils.ts │ │ ├── BlockUtils.ts │ │ ├── CacheModule.ts │ │ ├── ClientUpdateUtils.ts │ │ ├── CustomTimeAgoFormatter.ts │ │ ├── EthereumUnits.ts │ │ ├── FirebaseUtils.ts │ │ ├── FlavorUtils.ts │ │ ├── HighchartOptions.ts │ │ ├── InfiniteScrollDataSource.ts │ │ ├── MachineUtils.ts │ │ ├── MathUtils.ts │ │ ├── MerchantUtils.ts │ │ ├── NetworkData.ts │ │ ├── OAuthUtils.ts │ │ ├── ThemeUtils.ts │ │ ├── ValidatorSyncUtils.ts │ │ └── ValidatorUtils.ts ├── assets │ ├── ads │ │ └── beaconchain_sample_ad.gif │ ├── fonts │ │ ├── Montserrat-Medium.ttf │ │ ├── Mukta-Light.ttf │ │ └── Mukta-Medium.ttf │ ├── icon │ │ ├── ad-icon.png │ │ └── favicon.png │ └── shapes.svg ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── global.scss ├── index.html ├── main.ts ├── polyfills.ts ├── test.ts ├── theme │ └── variables.scss └── zone-flags.ts ├── storage-mirror ├── .eslintignore ├── .gitignore ├── .prettierignore ├── CONTRIBUTING.md ├── Package.swift ├── README.md ├── StorageMirror.podspec ├── android │ ├── .gitignore │ ├── app │ │ ├── .npmignore │ │ ├── build.gradle │ │ ├── capacitor.build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── getcapacitor │ │ │ │ └── myapp │ │ │ │ └── ExampleInstrumentedTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets │ │ │ │ ├── capacitor.config.json │ │ │ │ └── capacitor.plugins.json │ │ │ ├── ic_launcher-playstore.png │ │ │ ├── java │ │ │ │ └── in │ │ │ │ │ └── beaconcha │ │ │ │ │ └── mobile │ │ │ │ │ └── MainActivity.java │ │ │ └── res │ │ │ │ ├── drawable-anydpi-v24 │ │ │ │ └── ic_notification.xml │ │ │ │ ├── drawable-hdpi │ │ │ │ └── ic_notification.png │ │ │ │ ├── drawable-mdpi │ │ │ │ └── ic_notification.png │ │ │ │ ├── drawable-port-hdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-port-mdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-port-xhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-port-xxhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-port-xxxhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-v31 │ │ │ │ └── widget_bg_long.xml │ │ │ │ ├── drawable-xhdpi │ │ │ │ └── ic_notification.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ └── ic_notification.png │ │ │ │ ├── drawable │ │ │ │ ├── ic_alert_circle_outline.xml │ │ │ │ ├── ic_baseline_wifi_protected_setup_24.xml │ │ │ │ ├── ic_checkmark_circle_outline.xml │ │ │ │ ├── ic_launcher_foreground.xml │ │ │ │ ├── ic_lock_closed_outline.xml │ │ │ │ ├── splash.png │ │ │ │ ├── widget_bg_long.xml │ │ │ │ ├── widget_bg_square.xml │ │ │ │ ├── widget_preview_long.png │ │ │ │ └── widget_preview_square.png │ │ │ │ ├── layout │ │ │ │ ├── activity_main.xml │ │ │ │ ├── widget_long.xml │ │ │ │ ├── widget_long_rpl.xml │ │ │ │ └── widget_square.xml │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ └── ic_launcher_round.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher_background.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher_background.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher_background.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher_background.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher_adaptive_back.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── values-v31 │ │ │ │ └── styles.xml │ │ │ │ ├── values │ │ │ │ ├── attrs.xml │ │ │ │ ├── colors.xml │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ │ ├── xml-v31 │ │ │ │ ├── widgetinfo_long.xml │ │ │ │ ├── widgetinfo_long_rpl.xml │ │ │ │ └── widgetinfo_square.xml │ │ │ │ └── xml │ │ │ │ ├── config.xml │ │ │ │ ├── file_paths.xml │ │ │ │ ├── widgetinfo_long.xml │ │ │ │ ├── widgetinfo_long_rpl.xml │ │ │ │ └── widgetinfo_square.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── getcapacitor │ │ │ └── myapp │ │ │ └── ExampleUnitTest.java │ ├── build.gradle │ ├── capacitor.settings.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── proguard-rules.pro │ ├── settings.gradle │ ├── src │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── getcapacitor │ │ │ │ └── android │ │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── at │ │ │ │ │ └── bitfly │ │ │ │ │ └── storagemirror │ │ │ │ │ ├── StorageMirror.java │ │ │ │ │ └── StorageMirrorPlugin.java │ │ │ └── res │ │ │ │ └── .gitkeep │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── getcapacitor │ │ │ └── ExampleUnitTest.java │ └── variables.gradle ├── ios │ ├── .gitignore │ ├── Sources │ │ └── StorageMirrorPlugin │ │ │ ├── StorageMirror.swift │ │ │ └── StorageMirrorPlugin.swift │ └── Tests │ │ └── StorageMirrorPluginTests │ │ └── StorageMirrorPluginTests.swift ├── package-lock.json ├── package.json ├── rollup.config.js ├── src │ ├── definitions.ts │ └── index.ts └── tsconfig.json ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.spec.json └── tslint.json /.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | > 0.5% 12 | last 2 versions 13 | Firefox ESR 14 | not dead 15 | not IE 9-11 # For IE 9-11 support, remove 'not'. -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .angular 4 | src/zone-flags.ts -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "project": "./tsconfig.json" 6 | }, 7 | "plugins": [ 8 | "@typescript-eslint" 9 | ], 10 | "extends": [ 11 | "eslint:recommended", 12 | "plugin:@typescript-eslint/eslint-recommended", 13 | "plugin:@typescript-eslint/recommended" 14 | ], 15 | "rules": { 16 | "@typescript-eslint/await-thenable": "error", 17 | "require-await": "off", 18 | "@typescript-eslint/require-await": "error", 19 | "@typescript-eslint/no-misused-promises": [ 20 | "error", 21 | { 22 | "checksVoidReturn": false 23 | } 24 | ], 25 | "no-shadow": "off", 26 | "@typescript-eslint/no-shadow": "error" 27 | // "@typescript-eslint/no-floating-promises": "error" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Phone (please complete the following information):** 27 | - OS: [e.g. iOS 14.5] 28 | - App Version [e.g. 22] 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /.github/assets/android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/.github/assets/android.png -------------------------------------------------------------------------------- /.github/assets/ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/.github/assets/ios.png -------------------------------------------------------------------------------- /.github/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/.github/banner.png -------------------------------------------------------------------------------- /.github/workflows/build.yaml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | build: 13 | name: Build 14 | runs-on: ubuntu-latest 15 | strategy: 16 | matrix: 17 | node-version: [16.x] 18 | steps: 19 | - name: Check out code 20 | uses: actions/checkout@v3 21 | 22 | - name: Use Node.js 23 | uses: actions/setup-node@v3 24 | with: 25 | node-version: ${{ matrix.node-version }} 26 | 27 | - name: Build Storage Mirror 28 | run: | 29 | cd storage-mirror 30 | npm ci 31 | npm run build 32 | 33 | - name: Dependency install 34 | run: | 35 | npm install @ionic/cli@6.20.4 native-run@1.3.0 36 | npm install 37 | npm install storage-mirror 38 | 39 | - name: Build 40 | run: | 41 | ./node_modules/@ionic/cli/bin/ionic build --prod --release 42 | 43 | #- name: Test 44 | # run: ./node_modules/@angular/cli/bin/ng test 45 | -------------------------------------------------------------------------------- /.github/workflows/lint-format.yml: -------------------------------------------------------------------------------- 1 | name: Lint & Format 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | lint-format: 13 | name: lint-format 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Checkout Repository 17 | uses: actions/checkout@v3 18 | - name: Setup Node Environment 19 | uses: actions/setup-node@v3 20 | with: 21 | node-version: 16 22 | - name: Install Dependencies 23 | run: npm ci 24 | - name: Check File Format 25 | run: npm run prettier-check 26 | - name: Lint Files 27 | run: npm run lint -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Specifies intentionally untracked files to ignore when using Git 2 | # http://git-scm.com/docs/gitignore 3 | 4 | *~ 5 | *.sw[mnpcod] 6 | .tmp 7 | *.tmp 8 | *.tmp.* 9 | *.sublime-project 10 | *.sublime-workspace 11 | .DS_Store 12 | Thumbs.db 13 | UserInterfaceState.xcuserstate 14 | $RECYCLE.BIN/ 15 | .angular 16 | .env 17 | bundle*.zip 18 | 19 | *.log 20 | log.txt 21 | npm-debug.log* 22 | 23 | /.idea 24 | /.ionic 25 | /.sass-cache 26 | /.sourcemaps 27 | /.versions 28 | /.vscode 29 | /coverage 30 | /dist 31 | /node_modules 32 | /platforms 33 | /plugins 34 | /www 35 | /www-sourcemap 36 | /android/app/src/prod/google-services.json 37 | /android/app/src/beta/google-services.json 38 | /ios/App/GoogleService-Info.plist 39 | /appassets 40 | /android/.idea 41 | android/.idea/jarRepositories.xml 42 | android/.idea/misc.xml 43 | /src/environments/environment.prod.ts 44 | ios/GoogleService-Info.plist 45 | /tmp 46 | /local_env 47 | /storage-mirror 48 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "android/app/src/main/java/in/beaconcha/mobile/widget"] 2 | path = android/app/src/main/java/in/beaconcha/mobile/widget 3 | url = git@gitlab.bitfly.at:bitfly/eth2/app-android-widget.git 4 | [submodule "ios/App/Beaconchain Widget"] 5 | path = ios/App/Beaconchain Widget 6 | url = git@gitlab.bitfly.at:bitfly/eth2/app-ios-widget.git 7 | -------------------------------------------------------------------------------- /.prettierrc.yml: -------------------------------------------------------------------------------- 1 | trailingComma: "es5" 2 | tabWidth: 2 3 | useTabs: true 4 | semi: false 5 | singleQuote: true 6 | bracketSpacing: true 7 | bracketSameLine: true 8 | printWidth: 150 -------------------------------------------------------------------------------- /android/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /android/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | -------------------------------------------------------------------------------- /android/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | -------------------------------------------------------------------------------- /android/app/.npmignore: -------------------------------------------------------------------------------- 1 | /build/* 2 | !/build/.npmkeep 3 | -------------------------------------------------------------------------------- /android/app/capacitor.build.gradle: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN 2 | 3 | android { 4 | compileOptions { 5 | sourceCompatibility JavaVersion.VERSION_17 6 | targetCompatibility JavaVersion.VERSION_17 7 | } 8 | } 9 | 10 | apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" 11 | dependencies { 12 | implementation project(':byteowls-capacitor-oauth2') 13 | implementation project(':capacitor-app') 14 | implementation project(':capacitor-browser') 15 | implementation project(':capacitor-clipboard') 16 | implementation project(':capacitor-device') 17 | implementation project(':capacitor-haptics') 18 | implementation project(':capacitor-keyboard') 19 | implementation project(':capacitor-local-notifications') 20 | implementation project(':capacitor-preferences') 21 | implementation project(':capacitor-push-notifications') 22 | implementation project(':capacitor-splash-screen') 23 | implementation project(':capacitor-status-bar') 24 | implementation project(':capacitor-toast') 25 | implementation project(':capacitor-navigationbarnx') 26 | implementation project(':storage-mirror') 27 | implementation "com.android.billingclient:billing:7.0.0" 28 | } 29 | 30 | 31 | if (hasProperty('postBuildExtras')) { 32 | postBuildExtras() 33 | } 34 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /android/app/src/main/assets/capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "in.beaconcha.mobile", 3 | "appName": "Beaconchain Dashboard", 4 | "bundledWebRuntime": false, 5 | "npmClient": "npm", 6 | "webDir": "www", 7 | "plugins": { 8 | "SplashScreen": { 9 | "launchAutoHide": false, 10 | "androidScaleType": "CENTER_CROP" 11 | }, 12 | "CapacitorHttp": { 13 | "enabled": true 14 | } 15 | }, 16 | "android": { 17 | "flavor": "prod" 18 | }, 19 | "server": { 20 | "androidScheme": "http" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/main/java/in/beaconcha/mobile/MainActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | package in.beaconcha.mobile; 22 | import com.getcapacitor.BridgeActivity; 23 | 24 | public class MainActivity extends BridgeActivity { 25 | 26 | } 27 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable-hdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable-mdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable-port-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable-port-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable-port-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable-port-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable-port-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v31/widget_bg_long.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable-xhdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable-xxhdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_alert_circle_outline.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_baseline_wifi_protected_setup_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_checkmark_circle_outline.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_lock_closed_outline.xml: -------------------------------------------------------------------------------- 1 | 6 | 13 | 20 | 21 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/widget_bg_long.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/widget_bg_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/widget_preview_long.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable/widget_preview_long.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/widget_preview_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/drawable/widget_preview_square.png -------------------------------------------------------------------------------- /android/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #29283a 4 | #171e26 5 | #1c242e 6 | #FFFFFF 7 | #AAFFFFFF 8 | #AAFFFFFF 9 | #FFFFFF 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #2F2E42 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Beaconchain 4 | Beta 5 | Beaconchain 6 | in.beaconcha.mobile 7 | beaconchainmobile 8 | beaconchainmobilebeta 9 | ca-app-pub-7702781910716874~9110869348 10 | Adds a larger resizable widget with six properties, two of them are Rocketpool specific. 11 | Adds a larger resizable widget with four properties. 12 | Adds a small resizable widget showing one property. 13 | 14 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml-v31/widgetinfo_long.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml-v31/widgetinfo_long_rpl.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml-v31/widgetinfo_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/widgetinfo_long.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/widgetinfo_long_rpl.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/widgetinfo_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | package com.getcapacitor.myapp; 22 | 23 | import org.junit.Test; 24 | 25 | import static org.junit.Assert.*; 26 | 27 | /** 28 | * Example local unit test, which will execute on the development machine (host). 29 | * 30 | * @see Testing documentation 31 | */ 32 | public class ExampleUnitTest { 33 | @Test 34 | public void addition_isCorrect() throws Exception { 35 | assertEquals(4, 2 + 2); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext.kotlin_version = '1.8.0' 5 | 6 | repositories { 7 | google() 8 | mavenCentral() 9 | } 10 | dependencies { 11 | classpath 'com.android.tools.build:gradle:8.8.2' 12 | if (!getGradle().getStartParameter().getTaskRequests().toString().contains("Nogoogle")) { 13 | classpath 'com.google.gms:google-services:4.4.0' 14 | } 15 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 16 | 17 | // NOTE: Do not place your application dependencies here; they belong 18 | // in the individual module build.gradle files 19 | } 20 | } 21 | 22 | apply from: "variables.gradle" 23 | 24 | allprojects { 25 | repositories { 26 | google() 27 | mavenCentral() 28 | } 29 | } 30 | 31 | task clean(type: Delete) { 32 | delete rootProject.buildDir 33 | } 34 | 35 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | 19 | # AndroidX package structure to make it clearer which packages are bundled with the 20 | # Android operating system, and which are packaged with your app's APK 21 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 22 | android.useAndroidX=true 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | include ':capacitor-cordova-android-plugins' 3 | project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') 4 | 5 | apply from: 'capacitor.settings.gradle' -------------------------------------------------------------------------------- /android/variables.gradle: -------------------------------------------------------------------------------- 1 | ext { 2 | minSdkVersion = 22 3 | compileSdkVersion = 34 4 | targetSdkVersion = 34 5 | androidxActivityVersion = '1.8.0' 6 | androidxAppCompatVersion = '1.6.1' 7 | androidxCoordinatorLayoutVersion = '1.2.0' 8 | androidxCoreVersion = '1.12.0' 9 | androidxFragmentVersion = '1.6.2' 10 | coreSplashScreenVersion = '1.0.1' 11 | androidxWebkitVersion = '1.9.0' 12 | junitVersion = '4.13.2' 13 | androidxJunitVersion = '1.1.5' 14 | androidxEspressoCoreVersion = '3.5.1' 15 | cordovaAndroidVersion = '10.1.1' 16 | //firebaseMessagingVersion = '23.3.1' 17 | } -------------------------------------------------------------------------------- /capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "in.beaconcha.mobile", 3 | "appName": "Beaconchain Dashboard", 4 | "bundledWebRuntime": false, 5 | "npmClient": "npm", 6 | "webDir": "www", 7 | "plugins": { 8 | "SplashScreen": { 9 | "launchAutoHide": false, 10 | "androidScaleType": "CENTER_CROP" 11 | }, 12 | "CapacitorHttp": { 13 | "enabled": true 14 | } 15 | }, 16 | "android": { 17 | "flavor": "prod" 18 | }, 19 | "server": { 20 | "androidScheme": "http" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /e2e/protractor.conf.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This is the default license template. 3 | * 4 | * File: protractor.conf.js 5 | * Author: bob 6 | * Copyright (c) 2021 bob 7 | * 8 | * To edit this license information: Press Ctrl+Shift+P and press 'Create new License Template...'. 9 | */ 10 | 11 | // @ts-check 12 | // Protractor configuration file, see link for more information 13 | // https://github.com/angular/protractor/blob/master/lib/config.ts 14 | 15 | const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); 16 | 17 | /** 18 | * @type { import("protractor").Config } 19 | */ 20 | exports.config = { 21 | allScriptsTimeout: 11000, 22 | specs: [ 23 | './src/**/*.e2e-spec.ts' 24 | ], 25 | capabilities: { 26 | browserName: 'chrome' 27 | }, 28 | directConnect: true, 29 | baseUrl: 'http://localhost:4200/', 30 | framework: 'jasmine', 31 | jasmineNodeOpts: { 32 | showColors: true, 33 | defaultTimeoutInterval: 30000, 34 | print: function() {} 35 | }, 36 | onPrepare() { 37 | require('ts-node').register({ 38 | project: require('path').join(__dirname, './tsconfig.json') 39 | }); 40 | jasmine.getEnv().addReporter(new SpecReporter({ 41 | spec: { 42 | displayStacktrace: StacktraceOption.PRETTY 43 | } 44 | })); 45 | } 46 | }; 47 | -------------------------------------------------------------------------------- /e2e/src/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { AppPage } from './app.po'; 22 | 23 | describe('new App', () => { 24 | let page: AppPage; 25 | 26 | beforeEach(() => { 27 | page = new AppPage(); 28 | }); 29 | 30 | it('should display welcome message', () => { 31 | page.navigateTo(); 32 | expect(page.getPageTitle()).toContain('Tab 1'); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /e2e/src/app.po.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { browser, by, element } from 'protractor'; 22 | 23 | export class AppPage { 24 | navigateTo() { 25 | return browser.get('/'); 26 | } 27 | 28 | getPageTitle() { 29 | return element(by.css('ion-title')).getText(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "module": "commonjs", 6 | "target": "es2017", 7 | "types": [ 8 | "jasmine", 9 | "jasminewd2", 10 | "node" 11 | ] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ionic.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "validator-app", 3 | "integrations": { 4 | "capacitor": {} 5 | }, 6 | "type": "angular" 7 | } 8 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | # NPM renames .gitignore to .npmignore 2 | # In order to prevent that, we remove the initial "." 3 | # And the CLI then renames it 4 | 5 | App/build 6 | App/Pods 7 | App/App/public 8 | DerivedData 9 | xcuserdata 10 | 11 | # Cordova plugins for Capacitor 12 | capacitor-cordova-ios-plugins 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/App/App.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/App/App/App-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | -------------------------------------------------------------------------------- /ios/App/App/App.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | com.apple.security.application-groups 8 | 9 | group.in.beaconcha.mobile2 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /ios/App/App/AppRelease.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | com.apple.security.application-groups 8 | 9 | group.in.beaconcha.mobile2 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-114.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-29.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-40.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-57.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/ios-marketing-1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/ios-marketing-1024x1024.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-29x29@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-29x29@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-40x40@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-40x40@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-60x60@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/iphone-60x60@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/mac-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/mac-128x128.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/mac-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/mac-16x16.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/mac-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/mac-256x256.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/mac-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/mac-32x32.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/mac-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/AppIcon.appiconset/mac-512x512.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Default-Portrait~ipad.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Default@2x~iphone-1.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Default@2x_universal_anyany.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/Default-Portrait~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/Splash.imageset/Default-Portrait~ipad.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/Default@2x_universal_anyany.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x_universal_anyany.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~iphone-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~iphone-1.png -------------------------------------------------------------------------------- /ios/App/App/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /ios/App/App/StorageMirror.m: -------------------------------------------------------------------------------- 1 | // 2 | // StorageMirror.m 3 | // App 4 | // 5 | // Created by Kai Pflaume on 28.04.21. 6 | // 7 | 8 | #import 9 | 10 | CAP_PLUGIN(StorageMirror, "StorageMirror", 11 | CAP_PLUGIN_METHOD(reflect, CAPPluginReturnNone); 12 | ) 13 | -------------------------------------------------------------------------------- /ios/App/App/StorageMirror.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StorageMirror.swift 3 | // App 4 | // 5 | // Created by Kai Pflaume on 28.04.21. 6 | // 7 | 8 | import Foundation 9 | import Capacitor 10 | 11 | @objc(StorageMirror) 12 | public class StorageMirror: CAPPlugin { 13 | 14 | let defaults = UserDefaults.standard 15 | let shared = UserDefaults(suiteName: "group.in.beaconcha.mobile2") 16 | 17 | @objc func reflect(_ call: CAPPluginCall) { 18 | let keysToReflect = call.getArray("keys", String.self) ?? [] 19 | keysToReflect.forEach { key in 20 | let value = defaults.string(forKey: key) ?? "" 21 | shared?.set(value, forKey: key) 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ios/App/App/capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "in.beaconcha.mobile", 3 | "appName": "Beaconchain Dashboard", 4 | "bundledWebRuntime": false, 5 | "npmClient": "npm", 6 | "webDir": "www", 7 | "plugins": { 8 | "SplashScreen": { 9 | "launchAutoHide": false, 10 | "androidScaleType": "CENTER_CROP" 11 | }, 12 | "CapacitorHttp": { 13 | "enabled": true 14 | } 15 | }, 16 | "android": { 17 | "flavor": "prod" 18 | }, 19 | "server": { 20 | "androidScheme": "http" 21 | }, 22 | "packageClassList": [ 23 | "OAuth2ClientPlugin", 24 | "AppPlugin", 25 | "CAPBrowserPlugin", 26 | "ClipboardPlugin", 27 | "DevicePlugin", 28 | "HapticsPlugin", 29 | "KeyboardPlugin", 30 | "LocalNotificationsPlugin", 31 | "PreferencesPlugin", 32 | "PushNotificationsPlugin", 33 | "SplashScreenPlugin", 34 | "StatusBarPlugin", 35 | "ToastPlugin", 36 | "NavigationBar", 37 | "StorageMirrorPlugin", 38 | "CDVPlugin" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /ios/App/App/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/App/Beaconchain WidgetExtension.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.in.beaconcha.mobile2 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-land-hdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-land-ldpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-land-mdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-land-xhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-land-xxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-land-xxxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-port-hdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-port-ldpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-port-mdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-port-xhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-port-xxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/android/splash/drawable-port-xxxhdpi-screen.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-1792h~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-1792h~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-2436h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-2436h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-2688h~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-2688h~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-568h@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-568h@2x~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-667h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-667h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-736h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape-1792h~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-Landscape-1792h~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape-2436h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-Landscape-2436h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape-2688h~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-Landscape-2688h~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-Landscape-736h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-Landscape@2x~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape@~ipadpro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-Landscape@~ipadpro.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-Landscape~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-Portrait@2x~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait@~ipadpro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-Portrait@~ipadpro.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default-Portrait~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default@2x~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default@2x~universal~anyany.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default@2x~universal~anyany.png -------------------------------------------------------------------------------- /resources/ios/splash/Default~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/ios/splash/Default~iphone.png -------------------------------------------------------------------------------- /resources/windows/splash/Splash.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/windows/splash/Splash.scale-100.png -------------------------------------------------------------------------------- /resources/windows/splash/Splash.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/windows/splash/Splash.scale-125.png -------------------------------------------------------------------------------- /resources/windows/splash/Splash.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/windows/splash/Splash.scale-150.png -------------------------------------------------------------------------------- /resources/windows/splash/Splash.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/windows/splash/Splash.scale-200.png -------------------------------------------------------------------------------- /resources/windows/splash/Splash.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/resources/windows/splash/Splash.scale-400.png -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/app/app.component.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | -------------------------------------------------------------------------------- /src/app/components/ad/ad.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | Ad 5 |
6 |
7 | -------------------------------------------------------------------------------- /src/app/components/ad/ad.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { AdComponent } from './ad.component' 5 | 6 | describe('AdComponent', () => { 7 | let component: AdComponent 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [AdComponent], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(AdComponent) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/components/ad/ad.module.ts: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2021 bitfly explorer GmbH 2 | // 3 | // This file is part of Beaconchain Dashboard. 4 | // 5 | // Beaconchain Dashboard is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // Beaconchain Dashboard is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with Beaconchain Dashboard. If not, see . 17 | 18 | import { NgModule } from '@angular/core' 19 | import { CommonModule } from '@angular/common' 20 | import { FormsModule } from '@angular/forms' 21 | 22 | import { IonicModule } from '@ionic/angular' 23 | 24 | import { AdComponent } from './ad.component' 25 | 26 | @NgModule({ 27 | imports: [CommonModule, FormsModule, IonicModule], 28 | declarations: [AdComponent], 29 | exports: [AdComponent], 30 | }) 31 | export class AdComponentModule {} 32 | -------------------------------------------------------------------------------- /src/app/components/block/block.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 | 6 | {{ block.blockNumber }} 7 |
8 | 9 |
10 | Reward: {{ producerReward | mcurrency : 'WEI' : unit.pref.Exec }} 11 | 12 | Proposer: {{ block.posConsensus.proposerIndex }} 13 | 14 | 15 | To: {{ feeRecipient | slice : 0 : 8 }}…{{ feeRecipient | slice : 35 : 42 }} 16 | To: {{ resolvedName }} 19 | 20 | 21 | {{ timestamp | timeago }} 22 | 23 |
24 |
25 |
26 |
27 | -------------------------------------------------------------------------------- /src/app/components/block/block.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { BlockComponent } from './block.component' 5 | 6 | describe('BlockComponent', () => { 7 | let component: BlockComponent 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(waitForAsync(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [BlockComponent], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(BlockComponent) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/components/block/block.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { CommonModule } from '@angular/common' 23 | import { FormsModule } from '@angular/forms' 24 | 25 | import { IonicModule } from '@ionic/angular' 26 | 27 | import { BlockComponent } from './block.component' 28 | import { PipesModule } from '../../pipes/pipes.module' 29 | 30 | @NgModule({ 31 | imports: [CommonModule, FormsModule, IonicModule, PipesModule], 32 | declarations: [BlockComponent], 33 | exports: [BlockComponent], 34 | }) 35 | export class BlockComponentModule {} 36 | -------------------------------------------------------------------------------- /src/app/components/clientupdate/clientupdate.component.html: -------------------------------------------------------------------------------- 1 | 20 | 21 |
22 |
23 | 24 | 25 | 26 | {{ data.client.name }} Update: {{ version }} available 27 | 28 | 29 | 30 |
31 |
32 | -------------------------------------------------------------------------------- /src/app/components/clientupdate/clientupdate.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { CommonModule } from '@angular/common' 23 | import { FormsModule } from '@angular/forms' 24 | 25 | import { IonicModule } from '@ionic/angular' 26 | 27 | import { ClientupdateComponent } from './clientupdate.component' 28 | 29 | @NgModule({ 30 | imports: [CommonModule, FormsModule, IonicModule], 31 | declarations: [ClientupdateComponent], 32 | exports: [ClientupdateComponent], 33 | }) 34 | export class ClientupdateComponentModule {} 35 | -------------------------------------------------------------------------------- /src/app/components/dashboard/performance-item.component.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2023 bitfly explorer GmbH 3 | * // 4 | * // This file is part of Beaconchain Dashboard. 5 | * // 6 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 7 | * // it under the terms of the GNU General Public License as published by 8 | * // the Free Software Foundation, either version 3 of the License, or 9 | * // (at your option) any later version. 10 | * // 11 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 12 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * // GNU General Public License for more details. 15 | * // 16 | * // You should have received a copy of the GNU General Public License 17 | * // along with Beaconchain Dashboard. If not, see . 18 | */ 19 | 20 | @import '../../../theme/variables.scss'; 21 | 22 | .grid-cell { 23 | width: 50%; 24 | float: left; 25 | margin-bottom: 7px; 26 | margin-top: 7px; 27 | } 28 | 29 | .left { 30 | text-align: start !important; 31 | } 32 | 33 | .right { 34 | text-align: end !important; 35 | } 36 | -------------------------------------------------------------------------------- /src/app/components/help/help.component.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | @import '../../../theme/variables.scss'; 22 | 23 | .primary { 24 | background: var(--x-update-messages-background) !important; 25 | } 26 | 27 | .primary ion-label { 28 | font-size: bold; 29 | color: var(--x-toolbar-title-color); 30 | } 31 | 32 | .primary ion-item { 33 | --background: var(--x-update-messages-background) !important; 34 | } 35 | 36 | .first-item-group { 37 | margin-top: var(--x-first-item-group-margin-top) !important; 38 | } 39 | 40 | .primary ion-icon { 41 | color: var(--x-toolbar-title-color) !important; 42 | } 43 | -------------------------------------------------------------------------------- /src/app/components/help/help.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { CommonModule } from '@angular/common' 23 | import { FormsModule } from '@angular/forms' 24 | 25 | import { IonicModule } from '@ionic/angular' 26 | 27 | import { HelpComponent } from './help.component' 28 | import { RouterModule } from '@angular/router' 29 | 30 | @NgModule({ 31 | imports: [CommonModule, FormsModule, IonicModule, RouterModule], 32 | declarations: [HelpComponent], 33 | exports: [HelpComponent], 34 | }) 35 | export class HelpComponentModule {} 36 | -------------------------------------------------------------------------------- /src/app/components/machinechart/machinechart.component.scss: -------------------------------------------------------------------------------- 1 | @import '../../../theme/variables.scss'; 2 | 3 | .nothingfound ion-icon { 4 | width: 100%; 5 | display: flex; 6 | justify-content: center; 7 | text-align: center; 8 | padding-bottom: 12px; 9 | font-size: 55px; 10 | color: var(--ion-text-color-lighter); 11 | } 12 | 13 | .nothingfound { 14 | text-align: center; 15 | padding: 50px; 16 | 17 | padding-top: 45px; 18 | color: var(--ion-text-color-lighter); 19 | background-color: var(--background-color); 20 | } 21 | 22 | .nothingfound ion-label { 23 | margin-left: 6%; 24 | margin-right: 6%; 25 | } 26 | 27 | .circle { 28 | margin-top: 6px; 29 | width: 9px; 30 | height: 9px; 31 | border-radius: 50%; 32 | opacity: 0.85; 33 | } 34 | 35 | .offline { 36 | background-color: var(--traffic-light-red); 37 | } 38 | 39 | .attention { 40 | background-color: var(--traffic-light-orange); 41 | } 42 | 43 | .online { 44 | background-color: var(--traffic-light-green); 45 | } 46 | 47 | ion-card-header { 48 | --background: var(--ion-card-background); 49 | background: var(--ion-card-background); 50 | padding-bottom: 0px !important; 51 | margin-bottom: 0px !important; 52 | } 53 | 54 | ion-card-subtitle { 55 | --background: var(--ion-card-background) !important; 56 | background: var(--ion-card-background) !important; 57 | padding-bottom: 0px !important; 58 | margin-bottom: 0px !important; 59 | height: 24px; 60 | } 61 | 62 | .more-icon { 63 | opacity: 0.7; 64 | } 65 | -------------------------------------------------------------------------------- /src/app/components/machinechart/machinechart.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { MachinechartComponent } from './machinechart.component' 5 | 6 | describe('MachinechartComponent', () => { 7 | let component: MachinechartComponent 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [MachinechartComponent], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(MachinechartComponent) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/components/message/message.component.html: -------------------------------------------------------------------------------- 1 | 20 | 21 |
22 |
23 | 24 | 25 | 26 | 27 | {{ title }} 28 | 29 | 30 | 31 | 32 |
33 |
34 | -------------------------------------------------------------------------------- /src/app/components/message/message.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { CommonModule } from '@angular/common' 23 | import { FormsModule } from '@angular/forms' 24 | 25 | import { IonicModule } from '@ionic/angular' 26 | 27 | import { MessageComponent } from './message.component' 28 | 29 | @NgModule({ 30 | imports: [CommonModule, FormsModule, IonicModule], 31 | declarations: [MessageComponent], 32 | exports: [MessageComponent], 33 | }) 34 | export class MessageComponentModule {} 35 | -------------------------------------------------------------------------------- /src/app/components/offline/offline.component.html: -------------------------------------------------------------------------------- 1 | 20 | 21 |
22 |
23 | 24 | 25 | No connection. Pull to refresh. 26 | 27 |
28 |
29 | -------------------------------------------------------------------------------- /src/app/components/offline/offline.component.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | @import '../../../theme/variables.scss'; 22 | 23 | .inner { 24 | padding-top: 5px; 25 | padding-bottom: 5px; 26 | background-color: var(--ion-color-warning) !important; 27 | --ion-item-background: var(--ion-color-warning) !important; 28 | } 29 | 30 | ion-label, 31 | ion-icon { 32 | color: #fff !important; 33 | } 34 | 35 | .background { 36 | background-color: var(--ion-toolbar-background); 37 | } 38 | -------------------------------------------------------------------------------- /src/app/components/offline/offline.component.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { Component } from '@angular/core' 22 | 23 | @Component({ 24 | selector: 'app-offline', 25 | templateUrl: './offline.component.html', 26 | styleUrls: ['./offline.component.scss'], 27 | }) 28 | export class OfflineComponent {} 29 | -------------------------------------------------------------------------------- /src/app/components/offline/offline.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { CommonModule } from '@angular/common' 23 | import { FormsModule } from '@angular/forms' 24 | 25 | import { IonicModule } from '@ionic/angular' 26 | 27 | import { OfflineComponent } from './offline.component' 28 | 29 | @NgModule({ 30 | imports: [CommonModule, FormsModule, IonicModule], 31 | declarations: [OfflineComponent], 32 | exports: [OfflineComponent], 33 | }) 34 | export class OfflineComponentModule {} 35 | -------------------------------------------------------------------------------- /src/app/components/validator/validator.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { CommonModule } from '@angular/common' 23 | import { FormsModule } from '@angular/forms' 24 | 25 | import { IonicModule } from '@ionic/angular' 26 | 27 | import { ValidatorComponent } from './validator.component' 28 | import { PipesModule } from '../../pipes/pipes.module' 29 | 30 | @NgModule({ 31 | imports: [CommonModule, FormsModule, IonicModule, PipesModule], 32 | declarations: [ValidatorComponent], 33 | exports: [ValidatorComponent], 34 | }) 35 | export class ValidatorComponentModule {} 36 | -------------------------------------------------------------------------------- /src/app/pages/block-detail/block-detail-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { Routes, RouterModule } from '@angular/router' 3 | 4 | import { BlockDetailPage } from './block-detail.page' 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: BlockDetailPage, 10 | }, 11 | ] 12 | 13 | @NgModule({ 14 | imports: [RouterModule.forChild(routes)], 15 | exports: [RouterModule], 16 | }) 17 | export class BlockDetailPageRoutingModule {} 18 | -------------------------------------------------------------------------------- /src/app/pages/block-detail/block-detail.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { CommonModule } from '@angular/common' 3 | import { FormsModule } from '@angular/forms' 4 | 5 | import { IonicModule } from '@ionic/angular' 6 | 7 | import { BlockDetailPageRoutingModule } from './block-detail-routing.module' 8 | 9 | import { BlockDetailPage } from './block-detail.page' 10 | import { PipesModule } from 'src/app/pipes/pipes.module' 11 | 12 | @NgModule({ 13 | imports: [CommonModule, FormsModule, IonicModule, BlockDetailPageRoutingModule, PipesModule], 14 | declarations: [BlockDetailPage], 15 | }) 16 | export class BlockDetailPageModule {} 17 | -------------------------------------------------------------------------------- /src/app/pages/block-detail/block-detail.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { BlockDetailPage } from './block-detail.page' 5 | 6 | describe('BlockDetailPage', () => { 7 | let component: BlockDetailPage 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(waitForAsync(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [BlockDetailPage], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(BlockDetailPage) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/pages/clients/clients-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { Routes, RouterModule } from '@angular/router' 3 | 4 | import { ClientsPage } from './clients.page' 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: ClientsPage, 10 | }, 11 | ] 12 | 13 | @NgModule({ 14 | imports: [RouterModule.forChild(routes)], 15 | exports: [RouterModule], 16 | }) 17 | export class ClientsPageRoutingModule {} 18 | -------------------------------------------------------------------------------- /src/app/pages/clients/clients.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { CommonModule } from '@angular/common' 3 | import { FormsModule } from '@angular/forms' 4 | 5 | import { IonicModule } from '@ionic/angular' 6 | 7 | import { ClientsPageRoutingModule } from './clients-routing.module' 8 | 9 | import { ClientsPage } from './clients.page' 10 | 11 | @NgModule({ 12 | imports: [CommonModule, FormsModule, IonicModule, ClientsPageRoutingModule], 13 | declarations: [ClientsPage], 14 | }) 15 | export class ClientsPageModule {} 16 | -------------------------------------------------------------------------------- /src/app/pages/clients/clients.page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/src/app/pages/clients/clients.page.scss -------------------------------------------------------------------------------- /src/app/pages/clients/clients.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { ClientsPage } from './clients.page' 5 | 6 | describe('ClientsPage', () => { 7 | let component: ClientsPage 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(waitForAsync(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ClientsPage], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(ClientsPage) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/pages/dev/dev-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { Routes, RouterModule } from '@angular/router' 3 | 4 | import { DevPage } from './dev.page' 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: DevPage, 10 | }, 11 | ] 12 | 13 | @NgModule({ 14 | imports: [RouterModule.forChild(routes)], 15 | exports: [RouterModule], 16 | }) 17 | export class DevPageRoutingModule {} 18 | -------------------------------------------------------------------------------- /src/app/pages/dev/dev.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { CommonModule } from '@angular/common' 3 | import { FormsModule } from '@angular/forms' 4 | 5 | import { IonicModule } from '@ionic/angular' 6 | 7 | import { DevPageRoutingModule } from './dev-routing.module' 8 | 9 | import { DevPage } from './dev.page' 10 | 11 | @NgModule({ 12 | imports: [CommonModule, FormsModule, IonicModule, DevPageRoutingModule], 13 | declarations: [DevPage], 14 | }) 15 | export class DevPageModule {} 16 | -------------------------------------------------------------------------------- /src/app/pages/dev/dev.page.scss: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2021 bitfly explorer GmbH 2 | // 3 | // This file is part of Beaconchain Dashboard. 4 | // 5 | // Beaconchain Dashboard is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // Beaconchain Dashboard is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with Beaconchain Dashboard. If not, see . 17 | 18 | ion-back-button { 19 | color: #fff; 20 | } 21 | -------------------------------------------------------------------------------- /src/app/pages/dev/dev.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { DevPage } from './dev.page' 5 | 6 | describe('DevPage', () => { 7 | let component: DevPage 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [DevPage], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(DevPage) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/pages/helppage/helppage-routing.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { Routes, RouterModule } from '@angular/router' 23 | 24 | import { HelppagePage } from './helppage.page' 25 | 26 | const routes: Routes = [ 27 | { 28 | path: '', 29 | component: HelppagePage, 30 | }, 31 | ] 32 | 33 | @NgModule({ 34 | imports: [RouterModule.forChild(routes)], 35 | exports: [RouterModule], 36 | }) 37 | export class HelppagePageRoutingModule {} 38 | -------------------------------------------------------------------------------- /src/app/pages/helppage/helppage.page.html: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | Guides & FAQ 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/app/pages/helppage/helppage.page.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | .container { 22 | margin-top: 5px; 23 | } 24 | -------------------------------------------------------------------------------- /src/app/pages/licences/licences-routing.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { Routes, RouterModule } from '@angular/router' 23 | 24 | import { LicencesPage } from './licences.page' 25 | 26 | const routes: Routes = [ 27 | { 28 | path: '', 29 | component: LicencesPage, 30 | }, 31 | ] 32 | 33 | @NgModule({ 34 | imports: [RouterModule.forChild(routes)], 35 | exports: [RouterModule], 36 | }) 37 | export class LicencesPageRoutingModule {} 38 | -------------------------------------------------------------------------------- /src/app/pages/licences/licences.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { CommonModule } from '@angular/common' 23 | import { FormsModule } from '@angular/forms' 24 | 25 | import { IonicModule } from '@ionic/angular' 26 | 27 | import { LicencesPageRoutingModule } from './licences-routing.module' 28 | 29 | import { LicencesPage } from './licences.page' 30 | 31 | @NgModule({ 32 | imports: [CommonModule, FormsModule, IonicModule, LicencesPageRoutingModule], 33 | declarations: [LicencesPage], 34 | }) 35 | export class LicencesPageModule {} 36 | -------------------------------------------------------------------------------- /src/app/pages/licences/licences.page.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | @import '../../../theme/variables.scss'; 22 | 23 | ion-buttons { 24 | --color: #fff; 25 | color: #fff; 26 | } 27 | -------------------------------------------------------------------------------- /src/app/pages/logview/logview-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { Routes, RouterModule } from '@angular/router' 3 | 4 | import { LogviewPage } from './logview.page' 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: LogviewPage, 10 | }, 11 | ] 12 | 13 | @NgModule({ 14 | imports: [RouterModule.forChild(routes)], 15 | exports: [RouterModule], 16 | }) 17 | export class LogviewPageRoutingModule {} 18 | -------------------------------------------------------------------------------- /src/app/pages/logview/logview.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { CommonModule } from '@angular/common' 3 | import { FormsModule } from '@angular/forms' 4 | 5 | import { IonicModule } from '@ionic/angular' 6 | 7 | import { LogviewPageRoutingModule } from './logview-routing.module' 8 | 9 | import { LogviewPage } from './logview.page' 10 | 11 | @NgModule({ 12 | imports: [CommonModule, FormsModule, IonicModule, LogviewPageRoutingModule], 13 | declarations: [LogviewPage], 14 | }) 15 | export class LogviewPageModule {} 16 | -------------------------------------------------------------------------------- /src/app/pages/logview/logview.page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Logview 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 |
24 |
{{ log.text }}
25 |
26 | + 27 | - 28 |
29 |
30 |
31 | 32 |

{{ log.extra }}

33 |
34 |
35 |
36 | -------------------------------------------------------------------------------- /src/app/pages/logview/logview.page.scss: -------------------------------------------------------------------------------- 1 | span { 2 | padding-top: 8px; 3 | padding-bottom: 8px; 4 | padding-left: 5px; 5 | padding-right: 5px; 6 | min-width: 100%; 7 | } 8 | 9 | .logs { 10 | user-select: text; 11 | } 12 | 13 | .error { 14 | background-color: #ff0000; 15 | } 16 | 17 | .error .open { 18 | background-color: #e70000; 19 | } 20 | 21 | .warn { 22 | background-color: #e9be00; 23 | } 24 | 25 | .warn .open { 26 | background-color: #d4ad00; 27 | } 28 | 29 | .log { 30 | background-color: #85858535; 31 | } 32 | 33 | .log .open { 34 | background-color: #858585c7; 35 | } 36 | -------------------------------------------------------------------------------- /src/app/pages/logview/logview.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { LogviewPage } from './logview.page' 5 | 6 | describe('LogviewPage', () => { 7 | let component: LogviewPage 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(waitForAsync(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [LogviewPage], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(LogviewPage) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/pages/machine-detail/machine-detail-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { Routes, RouterModule } from '@angular/router' 3 | 4 | import { MachineDetailPage } from './machine-detail.page' 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: MachineDetailPage, 10 | }, 11 | ] 12 | 13 | @NgModule({ 14 | imports: [RouterModule.forChild(routes)], 15 | exports: [RouterModule], 16 | }) 17 | export class MachineDetailPageRoutingModule {} 18 | -------------------------------------------------------------------------------- /src/app/pages/machine-detail/machine-detail.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { CommonModule } from '@angular/common' 3 | import { FormsModule } from '@angular/forms' 4 | 5 | import { IonicModule } from '@ionic/angular' 6 | 7 | import { MachineDetailPageRoutingModule } from './machine-detail-routing.module' 8 | 9 | import { MachineDetailPage } from './machine-detail.page' 10 | import { TooltipModule } from 'ng2-tooltip-directive-major-angular-updates' 11 | import { PipesModule } from '../../pipes/pipes.module' 12 | import { MachineChartComponentModule } from 'src/app/components/machinechart/machinechart.module' 13 | import { MessageComponentModule } from 'src/app/components/message/message.module' 14 | 15 | @NgModule({ 16 | imports: [ 17 | CommonModule, 18 | FormsModule, 19 | IonicModule, 20 | MachineDetailPageRoutingModule, 21 | TooltipModule, 22 | PipesModule, 23 | MachineChartComponentModule, 24 | MessageComponentModule, 25 | ], 26 | declarations: [MachineDetailPage], 27 | }) 28 | export class MachineDetailPageModule {} 29 | -------------------------------------------------------------------------------- /src/app/pages/machine-detail/machine-detail.page.scss: -------------------------------------------------------------------------------- 1 | @import '../../../theme/variables.scss'; 2 | 3 | ion-segment-button { 4 | color: var(--x-toolbar-title-color); 5 | 6 | font-family: 'Varela'; 7 | font-size: 0.75em; 8 | --indicator-height: 0px !important; 9 | text-transform: none !important; 10 | --ripple-color: transparent !important; 11 | //transition: color 0.15s ease; 12 | opacity: 0.65; 13 | } 14 | 15 | ion-segment { 16 | background-color: var(--ion-toolbar-background); 17 | } 18 | 19 | .segment-button-checked { 20 | opacity: 1; 21 | } 22 | 23 | .value { 24 | text-align: end; 25 | font-weight: bold !important; 26 | font-size: 1.05em !important; 27 | } 28 | 29 | .performances { 30 | margin-left: 10px; 31 | margin-right: 10px; 32 | } 33 | 34 | .data-container { 35 | } 36 | 37 | .sync-alert { 38 | color: var(--traffic-light-orange) !important; 39 | --color: var(--traffic-light-orange) !important; 40 | } 41 | 42 | .sync-alert-container { 43 | padding-top: 0px !important; 44 | margin-top: 0px !important; 45 | padding-left: 0px !important; 46 | padding-right: 0px !important; 47 | margin-left: 0px !important; 48 | margin-right: 0px !important; 49 | } 50 | 51 | .alert-icon { 52 | display: inline-block; 53 | vertical-align: middle; 54 | } 55 | 56 | .alert-text { 57 | color: var(--ion-text-color) !important; 58 | } 59 | -------------------------------------------------------------------------------- /src/app/pages/machine-detail/machine-detail.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { MachineDetailPage } from './machine-detail.page' 5 | 6 | describe('MachineDetailPage', () => { 7 | let component: MachineDetailPage 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [MachineDetailPage], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(MachineDetailPage) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/pages/machines/machines-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { Routes, RouterModule } from '@angular/router' 3 | 4 | import { MachinesPage } from './machines.page' 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: MachinesPage, 10 | }, 11 | ] 12 | 13 | @NgModule({ 14 | imports: [RouterModule.forChild(routes)], 15 | exports: [RouterModule], 16 | }) 17 | export class MachinesPageRoutingModule {} 18 | -------------------------------------------------------------------------------- /src/app/pages/machines/machines.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { CommonModule } from '@angular/common' 3 | import { FormsModule } from '@angular/forms' 4 | 5 | import { IonicModule } from '@ionic/angular' 6 | 7 | import { MachinesPageRoutingModule } from './machines-routing.module' 8 | import { MachinesPage } from './machines.page' 9 | import { MachineChartComponentModule } from 'src/app/components/machinechart/machinechart.module' 10 | import { PipesModule } from 'src/app/pipes/pipes.module' 11 | import { AdComponentModule } from 'src/app/components/ad/ad.module' 12 | 13 | @NgModule({ 14 | imports: [CommonModule, FormsModule, IonicModule, MachinesPageRoutingModule, MachineChartComponentModule, PipesModule, AdComponentModule], 15 | declarations: [MachinesPage], 16 | }) 17 | export class MachinesPageModule {} 18 | -------------------------------------------------------------------------------- /src/app/pages/machines/machines.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { MachinesPage } from './machines.page' 5 | 6 | describe('MachinesPage', () => { 7 | let component: MachinesPage 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [MachinesPage], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(MachinesPage) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/pages/merge-checklist/merge-checklist-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { Routes, RouterModule } from '@angular/router' 3 | 4 | import { MergeChecklistPage } from './merge-checklist.page' 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: MergeChecklistPage, 10 | }, 11 | ] 12 | 13 | @NgModule({ 14 | imports: [RouterModule.forChild(routes)], 15 | exports: [RouterModule], 16 | }) 17 | export class MergeChecklistPageRoutingModule {} 18 | -------------------------------------------------------------------------------- /src/app/pages/merge-checklist/merge-checklist.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { CommonModule } from '@angular/common' 3 | import { FormsModule } from '@angular/forms' 4 | 5 | import { IonicModule } from '@ionic/angular' 6 | 7 | import { MergeChecklistPageRoutingModule } from './merge-checklist-routing.module' 8 | 9 | import { MergeChecklistPage } from './merge-checklist.page' 10 | 11 | @NgModule({ 12 | imports: [CommonModule, FormsModule, IonicModule, MergeChecklistPageRoutingModule], 13 | declarations: [MergeChecklistPage], 14 | }) 15 | export class MergeChecklistPageModule {} 16 | -------------------------------------------------------------------------------- /src/app/pages/merge-checklist/merge-checklist.page.scss: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2022 bitfly explorer GmbH 2 | // 3 | // This file is part of Beaconchain Dashboard. 4 | // 5 | // Beaconchain Dashboard is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // 10 | // Beaconchain Dashboard is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | // GNU General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU General Public License 16 | // along with Beaconchain Dashboard. If not, see . 17 | 18 | .hint { 19 | opacity: 0.65; 20 | font-size: 0.8rem; 21 | } 22 | -------------------------------------------------------------------------------- /src/app/pages/merge-checklist/merge-checklist.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { MergeChecklistPage } from './merge-checklist.page' 5 | 6 | describe('MergeChecklistPage', () => { 7 | let component: MergeChecklistPage 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(waitForAsync(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [MergeChecklistPage], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(MergeChecklistPage) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/pages/notifications/notifications-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { Routes, RouterModule } from '@angular/router' 3 | 4 | import { NotificationsPage } from './notifications.page' 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: NotificationsPage, 10 | }, 11 | ] 12 | 13 | @NgModule({ 14 | imports: [RouterModule.forChild(routes)], 15 | exports: [RouterModule], 16 | }) 17 | export class NotificationsPageRoutingModule {} 18 | -------------------------------------------------------------------------------- /src/app/pages/notifications/notifications.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { CommonModule } from '@angular/common' 3 | import { FormsModule } from '@angular/forms' 4 | 5 | import { IonicModule } from '@ionic/angular' 6 | 7 | import { NotificationsPageRoutingModule } from './notifications-routing.module' 8 | 9 | import { NotificationsPage } from './notifications.page' 10 | 11 | @NgModule({ 12 | imports: [CommonModule, FormsModule, IonicModule, NotificationsPageRoutingModule], 13 | declarations: [NotificationsPage], 14 | }) 15 | export class NotificationsPageModule {} 16 | -------------------------------------------------------------------------------- /src/app/pages/notifications/notifications.page.scss: -------------------------------------------------------------------------------- 1 | @import '../../../theme/variables.scss'; 2 | 3 | .range { 4 | margin-left: 50px !important; 5 | } 6 | 7 | .range-locked { 8 | padding-left: 1px !important; 9 | margin-left: 0px !important; 10 | } 11 | 12 | .pseudo-disabled { 13 | opacity: 0.3 !important; 14 | } 15 | 16 | ion-note { 17 | color: var(--text-color); 18 | font-size: 15px; 19 | font-weight: bold; 20 | } 21 | 22 | .active-count { 23 | font-size: 0.85rem; 24 | opacity: 0.8; 25 | } 26 | 27 | .notificationnote { 28 | margin: 14px; 29 | opacity: 0.9; 30 | font-size: 0.95em; 31 | } 32 | 33 | .notificationnote strong { 34 | color: var(--ion-color-primary); 35 | } 36 | -------------------------------------------------------------------------------- /src/app/pages/notifications/notifications.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { NotificationsPage } from './notifications.page' 5 | 6 | describe('NotificationsPage', () => { 7 | let component: NotificationsPage 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [NotificationsPage], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(NotificationsPage) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/pages/subscribe/subscribe-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { Routes, RouterModule } from '@angular/router' 3 | 4 | import { SubscribePage } from './subscribe.page' 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: SubscribePage, 10 | }, 11 | ] 12 | 13 | @NgModule({ 14 | imports: [RouterModule.forChild(routes)], 15 | exports: [RouterModule], 16 | }) 17 | export class SubscribePageRoutingModule {} 18 | -------------------------------------------------------------------------------- /src/app/pages/subscribe/subscribe.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { CommonModule } from '@angular/common' 3 | import { FormsModule } from '@angular/forms' 4 | 5 | import { IonicModule } from '@ionic/angular' 6 | 7 | import { SubscribePageRoutingModule } from './subscribe-routing.module' 8 | 9 | import { SubscribePage } from './subscribe.page' 10 | import { PipesModule } from '../../pipes/pipes.module' 11 | 12 | @NgModule({ 13 | imports: [CommonModule, FormsModule, IonicModule, SubscribePageRoutingModule, PipesModule], 14 | declarations: [SubscribePage], 15 | }) 16 | export class SubscribePageModule {} 17 | -------------------------------------------------------------------------------- /src/app/pages/subscribe/subscribe.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { SubscribePage } from './subscribe.page' 5 | 6 | describe('SubscribePage', () => { 7 | let component: SubscribePage 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [SubscribePage], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(SubscribePage) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/pages/validatordetail/validatordetail-routing.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { Routes, RouterModule } from '@angular/router' 23 | 24 | import { ValidatordetailPage } from './validatordetail.page' 25 | 26 | const routes: Routes = [ 27 | { 28 | path: '', 29 | component: ValidatordetailPage, 30 | }, 31 | ] 32 | 33 | @NgModule({ 34 | imports: [RouterModule.forChild(routes)], 35 | exports: [RouterModule], 36 | }) 37 | export class ValidatordetailPageRoutingModule {} 38 | -------------------------------------------------------------------------------- /src/app/pages/validatordetail/validatordetail.page.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | @import '../../../theme/variables.scss'; 22 | 23 | // Makes the iOS top bounce in our primary color 24 | // and the bottom bounce in main themes color 25 | ion-content { 26 | --background: linear-gradient(0deg, var(--ion-background-color) 60%, var(--ion-toolbar-background) 40%); 27 | } 28 | 29 | ion-refresher-content { 30 | --color: #fff !important; 31 | } 32 | -------------------------------------------------------------------------------- /src/app/pipes/delegater.pipi.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { Pipe, PipeTransform } from '@angular/core' 22 | import { ProcessedStats } from '../controllers/MachineController' 23 | 24 | @Pipe({ 25 | name: 'delegate', 26 | }) 27 | export class DelegatorPipe implements PipeTransform { 28 | // TODO: improve this typing, unknown not working when used with async pipe in template, investigate 29 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 30 | transform(data: ProcessedStats, delegateMethod: (any: ProcessedStats) => any) { 31 | return delegateMethod(data) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/app/pipes/fadeoutpipe.pipe.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { Pipe, PipeTransform } from '@angular/core' 22 | 23 | @Pipe({ 24 | name: 'fadeoutpipe', 25 | }) 26 | export class FadeoutpipePipe implements PipeTransform { 27 | transform(currentY: number, fullHide: number): number { 28 | if (currentY <= 0) return 1 29 | const opacity = 1 - currentY / fullHide 30 | if (opacity <= 0) return 0 31 | return opacity 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/app/services/alerts.service.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { TestBed } from '@angular/core/testing' 22 | 23 | import { AlertService } from './alert.service' 24 | 25 | describe('AlertService', () => { 26 | let service: AlertService 27 | 28 | beforeEach(() => { 29 | TestBed.configureTestingModule({}) 30 | service = TestBed.inject(AlertService) 31 | }) 32 | 33 | it('should be created', () => { 34 | expect(service).toBeTruthy() 35 | }) 36 | }) 37 | -------------------------------------------------------------------------------- /src/app/services/api.service.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { TestBed } from '@angular/core/testing' 22 | 23 | import { ApiService } from './api.service' 24 | 25 | describe('ApiService', () => { 26 | let service: ApiService 27 | 28 | beforeEach(() => { 29 | TestBed.configureTestingModule({}) 30 | service = TestBed.inject(ApiService) 31 | }) 32 | 33 | it('should be created', () => { 34 | expect(service).toBeTruthy() 35 | }) 36 | }) 37 | -------------------------------------------------------------------------------- /src/app/services/storage.service.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { TestBed } from '@angular/core/testing' 22 | 23 | import { StorageService } from './storage.service' 24 | 25 | describe('StorageService', () => { 26 | let service: StorageService 27 | 28 | beforeEach(() => { 29 | TestBed.configureTestingModule({}) 30 | service = TestBed.inject(StorageService) 31 | }) 32 | 33 | it('should be created', () => { 34 | expect(service).toBeTruthy() 35 | }) 36 | }) 37 | -------------------------------------------------------------------------------- /src/app/services/sync.service.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { TestBed } from '@angular/core/testing' 22 | 23 | import { SyncService } from './sync.service' 24 | 25 | describe('SyncService', () => { 26 | let service: SyncService 27 | 28 | beforeEach(() => { 29 | TestBed.configureTestingModule({}) 30 | service = TestBed.inject(SyncService) 31 | }) 32 | 33 | it('should be created', () => { 34 | expect(service).toBeTruthy() 35 | }) 36 | }) 37 | -------------------------------------------------------------------------------- /src/app/services/unitconv.service.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { TestBed } from '@angular/core/testing' 22 | 23 | import { UnitconvService } from './unitconv.service' 24 | 25 | describe('UnitconvService', () => { 26 | let service: UnitconvService 27 | 28 | beforeEach(() => { 29 | TestBed.configureTestingModule({}) 30 | service = TestBed.inject(UnitconvService) 31 | }) 32 | 33 | it('should be created', () => { 34 | expect(service).toBeTruthy() 35 | }) 36 | }) 37 | -------------------------------------------------------------------------------- /src/app/tab-blocks/tab-blocks-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { Routes, RouterModule } from '@angular/router' 3 | 4 | import { TabBlocksPage } from './tab-blocks.page' 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: TabBlocksPage, 10 | }, 11 | ] 12 | 13 | @NgModule({ 14 | imports: [RouterModule.forChild(routes)], 15 | exports: [RouterModule], 16 | }) 17 | export class TabBlocksPageRoutingModule {} 18 | -------------------------------------------------------------------------------- /src/app/tab-blocks/tab-blocks.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core' 2 | import { CommonModule } from '@angular/common' 3 | import { FormsModule } from '@angular/forms' 4 | 5 | import { IonicModule } from '@ionic/angular' 6 | 7 | import { TabBlocksPageRoutingModule } from './tab-blocks-routing.module' 8 | 9 | import { TabBlocksPage } from './tab-blocks.page' 10 | import { BlockComponentModule } from '../components/block/block.module' 11 | import { AdComponentModule } from '../components/ad/ad.module' 12 | import { PipesModule } from '../pipes/pipes.module' 13 | import { ScrollingModule } from '@angular/cdk/scrolling' 14 | 15 | @NgModule({ 16 | imports: [ 17 | CommonModule, 18 | ScrollingModule, 19 | FormsModule, 20 | IonicModule, 21 | TabBlocksPageRoutingModule, 22 | BlockComponentModule, 23 | AdComponentModule, 24 | PipesModule, 25 | ], 26 | declarations: [TabBlocksPage], 27 | }) 28 | export class TabBlocksPageModule {} 29 | -------------------------------------------------------------------------------- /src/app/tab-blocks/tab-blocks.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' 2 | import { IonicModule } from '@ionic/angular' 3 | 4 | import { TabBlocksPage } from './tab-blocks.page' 5 | 6 | describe('TabBlocksPage', () => { 7 | let component: TabBlocksPage 8 | let fixture: ComponentFixture 9 | 10 | beforeEach(waitForAsync(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [TabBlocksPage], 13 | imports: [IonicModule.forRoot()], 14 | }).compileComponents() 15 | 16 | fixture = TestBed.createComponent(TabBlocksPage) 17 | component = fixture.componentInstance 18 | fixture.detectChanges() 19 | })) 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /src/app/tab-dashboard/tab-dashboard-routing.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { RouterModule, Routes } from '@angular/router' 23 | import { Tab1Page } from './tab-dashboard.page' 24 | 25 | const routes: Routes = [ 26 | { 27 | path: '', 28 | component: Tab1Page, 29 | }, 30 | ] 31 | 32 | @NgModule({ 33 | imports: [RouterModule.forChild(routes)], 34 | exports: [RouterModule], 35 | }) 36 | export class Tab1PageRoutingModule {} 37 | -------------------------------------------------------------------------------- /src/app/tab-preferences/tab-preferences-routing.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { RouterModule, Routes } from '@angular/router' 23 | import { Tab3Page } from './tab-preferences.page' 24 | 25 | const routes: Routes = [ 26 | { 27 | path: '', 28 | component: Tab3Page, 29 | }, 30 | ] 31 | 32 | @NgModule({ 33 | imports: [RouterModule.forChild(routes)], 34 | exports: [RouterModule], 35 | }) 36 | export class Tab3PageRoutingModule {} 37 | -------------------------------------------------------------------------------- /src/app/tab-validators/tab-validators-routing.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { NgModule } from '@angular/core' 22 | import { RouterModule, Routes } from '@angular/router' 23 | import { Tab2Page } from './tab-validators.page' 24 | 25 | const routes: Routes = [ 26 | { 27 | path: '', 28 | component: Tab2Page, 29 | }, 30 | ] 31 | 32 | @NgModule({ 33 | imports: [RouterModule.forChild(routes)], 34 | exports: [RouterModule], 35 | }) 36 | export class Tab2PageRoutingModule {} 37 | -------------------------------------------------------------------------------- /src/app/tabs/tabs.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { IonicModule } from '@ionic/angular' 22 | import { NgModule } from '@angular/core' 23 | import { CommonModule } from '@angular/common' 24 | import { FormsModule } from '@angular/forms' 25 | 26 | import { TabsPageRoutingModule } from './tabs-routing.module' 27 | 28 | import { TabsPage } from './tabs.page' 29 | 30 | @NgModule({ 31 | imports: [IonicModule, CommonModule, FormsModule, TabsPageRoutingModule], 32 | declarations: [TabsPage], 33 | }) 34 | export class TabsPageModule {} 35 | -------------------------------------------------------------------------------- /src/app/tabs/tabs.page.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | ion-tab-bar { 22 | --border-top: var(--tab-top-border); 23 | border-top: var(--tab-top-border); 24 | } 25 | -------------------------------------------------------------------------------- /src/app/utils/FlavorUtils.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core' 2 | 3 | import { App } from '@capacitor/app' 4 | import { Capacitor } from '@capacitor/core' 5 | 6 | @Injectable({ 7 | providedIn: 'root', 8 | }) 9 | export default class FlavorUtils { 10 | async isBetaFlavor(): Promise { 11 | if (!Capacitor.isNativePlatform()) return false 12 | const info = await App.getInfo() 13 | return info.id.indexOf('beta') > 0 14 | } 15 | 16 | async isNoGoogleFlavor(): Promise { 17 | if (!Capacitor.isNativePlatform()) return false 18 | const info = await App.getInfo() 19 | return info.id.indexOf('nogoo') > 0 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/assets/ads/beaconchain_sample_ad.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/src/assets/ads/beaconchain_sample_ad.gif -------------------------------------------------------------------------------- /src/assets/fonts/Montserrat-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/src/assets/fonts/Montserrat-Medium.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Mukta-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/src/assets/fonts/Mukta-Light.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Mukta-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/src/assets/fonts/Mukta-Medium.ttf -------------------------------------------------------------------------------- /src/assets/icon/ad-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/src/assets/icon/ad-icon.png -------------------------------------------------------------------------------- /src/assets/icon/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/src/assets/icon/favicon.png -------------------------------------------------------------------------------- /src/assets/shapes.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 Bitfly GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | export const environment = { 22 | production: true, 23 | } 24 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | import { enableProdMode } from '@angular/core' 22 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' 23 | 24 | import { AppModule } from './app/app.module' 25 | import { environment } from './environments/environment' 26 | 27 | if (environment.production) { 28 | enableProdMode() 29 | } 30 | 31 | platformBrowserDynamic() 32 | .bootstrapModule(AppModule) 33 | .catch((err) => console.log(err)) 34 | -------------------------------------------------------------------------------- /src/zone-flags.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2021 bitfly explorer GmbH 3 | * // Manuel Caspari (manuel@bitfly.at) 4 | * // 5 | * // This file is part of Beaconchain Dashboard. 6 | * // 7 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 8 | * // it under the terms of the GNU General Public License as published by 9 | * // the Free Software Foundation, either version 3 of the License, or 10 | * // (at your option) any later version. 11 | * // 12 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 13 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * // GNU General Public License for more details. 16 | * // 17 | * // You should have received a copy of the GNU General Public License 18 | * // along with Beaconchain Dashboard. If not, see . 19 | */ 20 | 21 | /** 22 | * Prevents Angular change detection from 23 | * running with certain Web Component callbacks 24 | */ 25 | // eslint-disable-next-line @typescript-eslint/no-extra-semi, @typescript-eslint/no-explicit-any 26 | ;(window as any).__Zone_disable_customElements = true 27 | -------------------------------------------------------------------------------- /storage-mirror/.eslintignore: -------------------------------------------------------------------------------- 1 | build 2 | dist 3 | example-app 4 | -------------------------------------------------------------------------------- /storage-mirror/.gitignore: -------------------------------------------------------------------------------- 1 | # node files 2 | dist 3 | node_modules 4 | 5 | # iOS files 6 | Pods 7 | Podfile.lock 8 | Package.resolved 9 | Build 10 | xcuserdata 11 | /.build 12 | /Packages 13 | xcuserdata/ 14 | DerivedData/ 15 | .swiftpm/configuration/registries.json 16 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata 17 | .netrc 18 | 19 | 20 | # macOS files 21 | .DS_Store 22 | 23 | 24 | 25 | # Based on Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore 26 | 27 | # Built application files 28 | *.apk 29 | *.ap_ 30 | 31 | # Files for the ART/Dalvik VM 32 | *.dex 33 | 34 | # Java class files 35 | *.class 36 | 37 | # Generated files 38 | bin 39 | gen 40 | out 41 | 42 | # Gradle files 43 | .gradle 44 | build 45 | 46 | # Local configuration file (sdk path, etc) 47 | local.properties 48 | 49 | # Proguard folder generated by Eclipse 50 | proguard 51 | 52 | # Log Files 53 | *.log 54 | 55 | # Android Studio Navigation editor temp files 56 | .navigation 57 | 58 | # Android Studio captures folder 59 | captures 60 | 61 | # IntelliJ 62 | *.iml 63 | .idea 64 | 65 | # Keystore files 66 | # Uncomment the following line if you do not want to check your keystore files in. 67 | #*.jks 68 | 69 | # External native build folder generated in Android Studio 2.2 and later 70 | .externalNativeBuild 71 | -------------------------------------------------------------------------------- /storage-mirror/.prettierignore: -------------------------------------------------------------------------------- 1 | build 2 | dist 3 | example-app 4 | -------------------------------------------------------------------------------- /storage-mirror/Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version: 5.9 2 | import PackageDescription 3 | 4 | let package = Package( 5 | name: "StorageMirror", 6 | platforms: [.iOS(.v13)], 7 | products: [ 8 | .library( 9 | name: "StorageMirror", 10 | targets: ["StorageMirrorPlugin"]) 11 | ], 12 | dependencies: [ 13 | .package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", branch: "main") 14 | ], 15 | targets: [ 16 | .target( 17 | name: "StorageMirrorPlugin", 18 | dependencies: [ 19 | .product(name: "Capacitor", package: "capacitor-swift-pm"), 20 | .product(name: "Cordova", package: "capacitor-swift-pm") 21 | ], 22 | path: "ios/Sources/StorageMirrorPlugin"), 23 | .testTarget( 24 | name: "StorageMirrorPluginTests", 25 | dependencies: ["StorageMirrorPlugin"], 26 | path: "ios/Tests/StorageMirrorPluginTests") 27 | ] 28 | ) -------------------------------------------------------------------------------- /storage-mirror/README.md: -------------------------------------------------------------------------------- 1 | # storage-mirror 2 | 3 | Plugin mirrors given storage keys to a shared group storage, for example to be used by widgets 4 | 5 | ## Install 6 | 7 | ```bash 8 | npm install storage-mirror 9 | npx cap sync 10 | ``` 11 | 12 | ## API 13 | 14 | 15 | 16 | * [`reflect(...)`](#reflect) 17 | 18 | 19 | 20 | 21 | 22 | 23 | ### reflect(...) 24 | 25 | ```typescript 26 | reflect(options: { keys: string[]; }) => Promise 27 | ``` 28 | 29 | | Param | Type | 30 | | ------------- | -------------------------------- | 31 | | **`options`** | { keys: string[]; } | 32 | 33 | -------------------- 34 | 35 | 36 | -------------------------------------------------------------------------------- /storage-mirror/StorageMirror.podspec: -------------------------------------------------------------------------------- 1 | require 'json' 2 | 3 | package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) 4 | 5 | Pod::Spec.new do |s| 6 | s.name = 'StorageMirror' 7 | s.version = package['version'] 8 | s.summary = package['description'] 9 | s.license = package['license'] 10 | s.homepage = package['repository']['url'] 11 | s.author = package['author'] 12 | s.source = { :git => package['repository']['url'], :tag => s.version.to_s } 13 | s.source_files = 'ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}' 14 | s.ios.deployment_target = '13.0' 15 | s.dependency 'Capacitor' 16 | s.swift_version = '5.1' 17 | end 18 | -------------------------------------------------------------------------------- /storage-mirror/android/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /storage-mirror/android/app/.npmignore: -------------------------------------------------------------------------------- 1 | /build/* 2 | !/build/.npmkeep 3 | -------------------------------------------------------------------------------- /storage-mirror/android/app/capacitor.build.gradle: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN 2 | 3 | android { 4 | compileOptions { 5 | sourceCompatibility JavaVersion.VERSION_17 6 | targetCompatibility JavaVersion.VERSION_17 7 | } 8 | } 9 | 10 | apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" 11 | dependencies { 12 | implementation project(':byteowls-capacitor-oauth2') 13 | implementation project(':capacitor-app') 14 | implementation project(':capacitor-browser') 15 | implementation project(':capacitor-clipboard') 16 | implementation project(':capacitor-device') 17 | implementation project(':capacitor-haptics') 18 | implementation project(':capacitor-keyboard') 19 | implementation project(':capacitor-local-notifications') 20 | implementation project(':capacitor-preferences') 21 | implementation project(':capacitor-push-notifications') 22 | implementation project(':capacitor-splash-screen') 23 | implementation project(':capacitor-status-bar') 24 | implementation project(':capacitor-toast') 25 | implementation project(':capawesome-capacitor-app-update') 26 | implementation project(':capgo-capacitor-updater') 27 | implementation project(':capacitor-navigationbarnx') 28 | implementation project(':storage-mirror') 29 | implementation "com.android.billingclient:billing:7.0.0" 30 | } 31 | 32 | 33 | if (hasProperty('postBuildExtras')) { 34 | postBuildExtras() 35 | } 36 | -------------------------------------------------------------------------------- /storage-mirror/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/assets/capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "in.beaconcha.mobile", 3 | "appName": "Beaconchain Dashboard", 4 | "bundledWebRuntime": false, 5 | "npmClient": "npm", 6 | "webDir": "www", 7 | "plugins": { 8 | "SplashScreen": { 9 | "launchAutoHide": false, 10 | "androidScaleType": "CENTER_CROP" 11 | }, 12 | "CapacitorCookies": { 13 | "enabled": true 14 | }, 15 | "CapacitorHttp": { 16 | "enabled": true 17 | }, 18 | "CapacitorUpdater": { 19 | "autoUpdate": false 20 | } 21 | }, 22 | "android": { 23 | "flavor": "prod" 24 | }, 25 | "server": { 26 | "androidScheme": "http" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable-hdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable-hdpi/ic_notification.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable-mdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable-mdpi/ic_notification.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable-port-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable-port-hdpi/splash.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable-port-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable-port-mdpi/splash.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable-port-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable-port-xhdpi/splash.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable-port-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable-port-xxhdpi/splash.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable-port-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable-port-xxxhdpi/splash.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable-v31/widget_bg_long.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable-xhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable-xhdpi/ic_notification.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable-xxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable-xxhdpi/ic_notification.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable/ic_alert_circle_outline.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable/ic_baseline_wifi_protected_setup_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable/ic_checkmark_circle_outline.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable/ic_lock_closed_outline.xml: -------------------------------------------------------------------------------- 1 | 6 | 13 | 20 | 21 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable/splash.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable/widget_bg_long.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable/widget_bg_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable/widget_preview_long.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable/widget_preview_long.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/drawable/widget_preview_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/drawable/widget_preview_square.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #29283a 4 | #171e26 5 | #1c242e 6 | #FFFFFF 7 | #AAFFFFFF 8 | #AAFFFFFF 9 | #FFFFFF 10 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #2F2E42 4 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Beaconchain 4 | Beta 5 | Beaconchain 6 | in.beaconcha.mobile 7 | beaconchainmobile 8 | beaconchainmobilebeta 9 | ca-app-pub-7702781910716874~9110869348 10 | Adds a larger resizable widget with six properties, two of them are Rocketpool specific. 11 | Adds a larger resizable widget with four properties. 12 | Adds a small resizable widget showing one property. 13 | 14 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/xml-v31/widgetinfo_long.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/xml-v31/widgetinfo_long_rpl.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/xml-v31/widgetinfo_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/xml/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/xml/widgetinfo_long.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/xml/widgetinfo_long_rpl.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/main/res/xml/widgetinfo_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /storage-mirror/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * // Copyright (C) 2020 - 2024 bitfly explorer GmbH 3 | * // 4 | * // This file is part of Beaconchain Dashboard. 5 | * // 6 | * // Beaconchain Dashboard is free software: you can redistribute it and/or modify 7 | * // it under the terms of the GNU General Public License as published by 8 | * // the Free Software Foundation, either version 3 of the License, or 9 | * // (at your option) any later version. 10 | * // 11 | * // Beaconchain Dashboard is distributed in the hope that it will be useful, 12 | * // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * // GNU General Public License for more details. 15 | * // 16 | * // You should have received a copy of the GNU General Public License 17 | * // along with Beaconchain Dashboard. If not, see . 18 | */ 19 | 20 | package com.getcapacitor.myapp; 21 | 22 | import org.junit.Test; 23 | 24 | import static org.junit.Assert.*; 25 | 26 | /** 27 | * Example local unit test, which will execute on the development machine (host). 28 | * 29 | * @see Testing documentation 30 | */ 31 | public class ExampleUnitTest { 32 | @Test 33 | public void addition_isCorrect() throws Exception { 34 | assertEquals(4, 2 + 2); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /storage-mirror/android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | 19 | # AndroidX package structure to make it clearer which packages are bundled with the 20 | # Android operating system, and which are packaged with your app's APK 21 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 22 | android.useAndroidX=true 23 | -------------------------------------------------------------------------------- /storage-mirror/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /storage-mirror/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-all.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /storage-mirror/android/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /storage-mirror/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':capacitor-android' 2 | project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') -------------------------------------------------------------------------------- /storage-mirror/android/src/androidTest/java/com/getcapacitor/android/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.getcapacitor.android; 2 | 3 | import static org.junit.Assert.*; 4 | 5 | import android.content.Context; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | import androidx.test.platform.app.InstrumentationRegistry; 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * @see Testing documentation 15 | */ 16 | @RunWith(AndroidJUnit4.class) 17 | public class ExampleInstrumentedTest { 18 | 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 23 | 24 | assertEquals("com.getcapacitor.android", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /storage-mirror/android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /storage-mirror/android/src/main/java/at/bitfly/storagemirror/StorageMirror.java: -------------------------------------------------------------------------------- 1 | package at.bitfly.storagemirror; 2 | 3 | import android.util.Log; 4 | 5 | public class StorageMirror { 6 | 7 | public void reflect(String[] keys) { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /storage-mirror/android/src/main/java/at/bitfly/storagemirror/StorageMirrorPlugin.java: -------------------------------------------------------------------------------- 1 | package at.bitfly.storagemirror; 2 | 3 | import com.getcapacitor.JSObject; 4 | import com.getcapacitor.Plugin; 5 | import com.getcapacitor.PluginCall; 6 | import com.getcapacitor.PluginMethod; 7 | import com.getcapacitor.annotation.CapacitorPlugin; 8 | 9 | @CapacitorPlugin(name = "StorageMirror") 10 | public class StorageMirrorPlugin extends Plugin { 11 | 12 | @PluginMethod 13 | public void echo(PluginCall call) { 14 | call.resolve(new JSObject()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /storage-mirror/android/src/main/res/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gobitfly/eth2-beaconchain-explorer-app/0c3e95b0f0bdd6fb5a4ea474eb5be4e33871232c/storage-mirror/android/src/main/res/.gitkeep -------------------------------------------------------------------------------- /storage-mirror/android/src/test/java/com/getcapacitor/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.getcapacitor; 2 | 3 | import static org.junit.Assert.*; 4 | 5 | import org.junit.Test; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | 14 | @Test 15 | public void addition_isCorrect() throws Exception { 16 | assertEquals(4, 2 + 2); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /storage-mirror/android/variables.gradle: -------------------------------------------------------------------------------- 1 | ext { 2 | minSdkVersion = 22 3 | compileSdkVersion = 34 4 | targetSdkVersion = 34 5 | androidxActivityVersion = '1.8.0' 6 | androidxAppCompatVersion = '1.6.1' 7 | androidxCoordinatorLayoutVersion = '1.2.0' 8 | androidxCoreVersion = '1.12.0' 9 | androidxFragmentVersion = '1.6.2' 10 | coreSplashScreenVersion = '1.0.1' 11 | androidxWebkitVersion = '1.9.0' 12 | junitVersion = '4.13.2' 13 | androidxJunitVersion = '1.1.5' 14 | androidxEspressoCoreVersion = '3.5.1' 15 | cordovaAndroidVersion = '10.1.1' 16 | //firebaseMessagingVersion = '23.3.1' 17 | } -------------------------------------------------------------------------------- /storage-mirror/ios/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .build 3 | /Packages 4 | xcuserdata/ 5 | DerivedData/ 6 | .swiftpm/configuration/registries.json 7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata 8 | .netrc -------------------------------------------------------------------------------- /storage-mirror/ios/Sources/StorageMirrorPlugin/StorageMirror.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | @objc public class StorageMirror: NSObject { 4 | let defaults = UserDefaults.standard 5 | let shared = UserDefaults(suiteName: "group.in.beaconcha.mobile2") 6 | 7 | @objc public func reflect(_ value: Array) -> Void { 8 | value.forEach { key in 9 | let value = defaults.string(forKey: key) ?? "" 10 | shared?.set(value, forKey: key) 11 | } 12 | return 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /storage-mirror/ios/Sources/StorageMirrorPlugin/StorageMirrorPlugin.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Capacitor 3 | 4 | /** 5 | * Please read the Capacitor iOS Plugin Development Guide 6 | * here: https://capacitorjs.com/docs/plugins/ios 7 | */ 8 | @objc(StorageMirrorPlugin) 9 | public class StorageMirrorPlugin: CAPPlugin, CAPBridgedPlugin { 10 | public let identifier = "StorageMirrorPlugin" 11 | public let jsName = "StorageMirror" 12 | public let pluginMethods: [CAPPluginMethod] = [ 13 | CAPPluginMethod(name: "reflect", returnType: CAPPluginReturnPromise) 14 | ] 15 | private let implementation = StorageMirror() 16 | 17 | @objc func reflect(_ call: CAPPluginCall) { 18 | let keysToReflect = call.getArray("keys", String.self) ?? [] 19 | implementation.reflect(keysToReflect) 20 | call.resolve() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /storage-mirror/ios/Tests/StorageMirrorPluginTests/StorageMirrorPluginTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import StorageMirrorPlugin 3 | 4 | class StorageMirrorTests: XCTestCase { 5 | func testEcho() { 6 | // This is an example of a functional test case for a plugin. 7 | // Use XCTAssert and related functions to verify your tests produce the correct results. 8 | 9 | let implementation = StorageMirror() 10 | let value = "Hello, World!" 11 | let result = implementation.echo(value) 12 | 13 | XCTAssertEqual(value, result) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /storage-mirror/rollup.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | input: 'dist/esm/index.js', 3 | output: [ 4 | { 5 | file: 'dist/plugin.js', 6 | format: 'iife', 7 | name: 'capacitorStorageMirror', 8 | globals: { 9 | '@capacitor/core': 'capacitorExports', 10 | }, 11 | sourcemap: true, 12 | inlineDynamicImports: true, 13 | }, 14 | { 15 | file: 'dist/plugin.cjs.js', 16 | format: 'cjs', 17 | sourcemap: true, 18 | inlineDynamicImports: true, 19 | }, 20 | ], 21 | external: ['@capacitor/core'], 22 | }; 23 | -------------------------------------------------------------------------------- /storage-mirror/src/definitions.ts: -------------------------------------------------------------------------------- 1 | export interface StorageMirrorPlugin { 2 | reflect(options: { keys: string[] }): Promise; 3 | } 4 | -------------------------------------------------------------------------------- /storage-mirror/src/index.ts: -------------------------------------------------------------------------------- 1 | import { registerPlugin } from '@capacitor/core'; 2 | 3 | import type { StorageMirrorPlugin } from './definitions'; 4 | 5 | const StorageMirror = registerPlugin('StorageMirror'); 6 | 7 | export * from './definitions'; 8 | export { StorageMirror }; 9 | -------------------------------------------------------------------------------- /storage-mirror/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowUnreachableCode": false, 4 | "declaration": true, 5 | "esModuleInterop": true, 6 | "inlineSources": true, 7 | "lib": ["dom", "es2017"], 8 | "module": "esnext", 9 | "moduleResolution": "node", 10 | "noFallthroughCasesInSwitch": true, 11 | "noUnusedLocals": true, 12 | "noUnusedParameters": true, 13 | "outDir": "dist/esm", 14 | "pretty": true, 15 | "sourceMap": true, 16 | "strict": true, 17 | "target": "es2017" 18 | }, 19 | "files": ["src/index.ts"] 20 | } 21 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/app", 5 | "types": [] 6 | }, 7 | "files": [ 8 | "src/main.ts", 9 | "src/polyfills.ts" 10 | ], 11 | "include": [ 12 | "src/**/*.ts", 13 | "src/**/*.d.ts" 14 | ], 15 | "exclude": [ 16 | "src/**/*.spec.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist/out-tsc", 6 | "sourceMap": true, 7 | "allowSyntheticDefaultImports": true, 8 | "noImplicitThis": false, 9 | "esModuleInterop": true, 10 | "declaration": false, 11 | "downlevelIteration": true, 12 | "experimentalDecorators": true, 13 | "module": "esnext", 14 | "moduleResolution": "node", 15 | "importHelpers": true, 16 | "target": "ES2022", 17 | "lib": ["es2018", "dom"] 18 | }, 19 | "angularCompilerOptions": { 20 | "fullTemplateTypeCheck": true, 21 | "strictInjectionParameters": true 22 | }, 23 | 24 | } -------------------------------------------------------------------------------- /tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/spec", 5 | "types": [ 6 | "jasmine", 7 | "node" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "src/**/*.spec.ts", 16 | "src/**/*.d.ts" 17 | ] 18 | } --------------------------------------------------------------------------------