diff --git a/app/.docker/docker-insight.dockerfile b/app/.docker/docker-insight.dockerfile
new file mode 100644
index 000000000..59d475f79
--- /dev/null
+++ b/app/.docker/docker-insight.dockerfile
@@ -0,0 +1,10 @@
+FROM node:8.11.1
+MAINTAINER SonicWizard
+COPY . /var/www
+#WORKDIR /var/www
+
+COPY ./.docker/scripts /scripts
+RUN chmod +rx /scripts/replace.sh
+
+EXPOSE 8100
+ENTRYPOINT ["/scripts/replace.sh"]
diff --git a/app/.docker/env/btc.production.env-example b/app/.docker/env/btc.production.env-example
new file mode 100644
index 000000000..32a22c6dc
--- /dev/null
+++ b/app/.docker/env/btc.production.env-example
@@ -0,0 +1,5 @@
+RUN_DIR=/var/www
+DEFAULT_CURRENCY=BTC
+API_PREFIX=/api
+IONIC_PATH=/api
+IONIC_PROXY_URL=https://insight.bitpay.com/api
diff --git a/app/.docker/scripts/replace.sh b/app/.docker/scripts/replace.sh
new file mode 100755
index 000000000..f6b69c65d
--- /dev/null
+++ b/app/.docker/scripts/replace.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+echo "current directory is $PWD"
+echo "run directory is ${RUN_DIR}"
+echo "running in..."
+cd ${RUN_DIR}
+pwd
+echo "copying ionic.config.json template..."
+cp .docker/templates/ionic.config.json .
+npm install
+npm rebuild node-sass
+npm install -g replace
+replace '%DEFAULT_CURRENCY%' ${DEFAULT_CURRENCY} src/providers/currency/currency.ts
+replace '%API_PREFIX%' ${API_PREFIX} src/providers/api/api.ts
+replace '%IONIC_PATH%' ${IONIC_PATH} ionic.config.json
+replace '%IONIC_PROXY_URL%' ${IONIC_PROXY_URL} ionic.config.json
+npm start
diff --git a/app/.docker/templates/ionic.config.json b/app/.docker/templates/ionic.config.json
new file mode 100644
index 000000000..72e75e29d
--- /dev/null
+++ b/app/.docker/templates/ionic.config.json
@@ -0,0 +1,14 @@
+{
+ "name": "insight",
+ "app_id": "",
+ "type": "ionic-angular",
+ "integrations": {
+ "cordova": {}
+ },
+ "proxies": [
+ {
+ "path": "%IONIC_PATH%",
+ "proxyUrl": "%IONIC_PROXY_URL%"
+ }
+ ]
+}
diff --git a/app/.gitignore b/app/.gitignore
index 7e2a5fe2a..67d0f9620 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -38,3 +38,6 @@ $RECYCLE.BIN/
.DS_Store
Thumbs.db
UserInterfaceState.xcuserstate
+
+# .docker env
+.docker/env/*.env
diff --git a/app/docker-compose.yml b/app/docker-compose.yml
new file mode 100644
index 000000000..5dc9caa07
--- /dev/null
+++ b/app/docker-compose.yml
@@ -0,0 +1,30 @@
+version: '2'
+
+services:
+ insight-ui-btc:
+ container_name: insight-ui-btc-${ENV}
+ build:
+ context: .
+ dockerfile: .docker/docker-insight.dockerfile
+ ports:
+ - "4447:8100"
+ env_file:
+ - ./.docker/env/btc.${ENV}.env
+ networks:
+ - insight-network
+
+ insight-ui-bch:
+ container_name: insight-ui-bch-${ENV}
+ build:
+ context: .
+ dockerfile: .docker/docker-insight.dockerfile
+ ports:
+ - "4448:8100"
+ env_file:
+ - ./.docker/env/bch.${ENV}.env
+ networks:
+ - insight-network
+
+networks:
+ insight-network:
+ driver: bridge
diff --git a/app/ionic.config.json b/app/ionic.config.json
index b8b1ec48d..7c3895ef6 100644
--- a/app/ionic.config.json
+++ b/app/ionic.config.json
@@ -8,7 +8,7 @@
"proxies": [
{
"path": "/api",
- "proxyUrl": "https://bch-insight.bitpay.com/api"
+ "proxyUrl": "https://insight.bitpay.com/api"
}
]
}
diff --git a/app/package-lock.json b/app/package-lock.json
index 6e1876176..c15cef79c 100644
--- a/app/package-lock.json
+++ b/app/package-lock.json
@@ -12315,7 +12315,7 @@
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"dev": true,
"requires": {
- "delayed-stream": "1.0.0"
+ "delayed-stream": "~1.0.0"
}
},
"debug": {
@@ -12333,9 +12333,9 @@
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"dev": true,
"requires": {
- "asynckit": "0.4.0",
+ "asynckit": "^0.4.0",
"combined-stream": "1.0.6",
- "mime-types": "2.1.16"
+ "mime-types": "^2.1.12"
}
},
"isarray": {
diff --git a/app/src/app/app.component.ts b/app/src/app/app.component.ts
index 8fae2869e..23e2f2408 100644
--- a/app/src/app/app.component.ts
+++ b/app/src/app/app.component.ts
@@ -2,6 +2,7 @@ import { Component, ViewChild } from '@angular/core';
import { Platform, MenuController, Nav } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
+import { CurrencyProvider } from '../providers/currency/currency';
import {
HomePage
} from '../pages';
@@ -24,6 +25,7 @@ export class InsightApp {
platform: Platform,
menu: MenuController,
splash: SplashScreen,
+ public currency: CurrencyProvider,
status: StatusBar
) {
this.menu = menu;
@@ -39,8 +41,6 @@ export class InsightApp {
{ title: 'Home', component: HomePage },
{ title: 'Blocks', component: 'blocks' },
{ title: 'Broadcast Transaction', component: 'BroadcastTxPage' }
- // { title: 'Verify Signed Message', component: VerifyMessagePage },
- // { title: 'Node Status', component: NodeStatusPage }
];
}
@@ -57,6 +57,8 @@ export class InsightApp {
// close the menu when clicking a link from the menu
this.menu.close();
// navigate to the new page if it is not the current page
- this.nav.setRoot(page.component);
+ this.nav.setRoot(page.component, {
+ 'selectedCurrency': this.currency.selectedCurrency
+ });
}
}
diff --git a/app/src/app/app.module.ts b/app/src/app/app.module.ts
index f3b205084..7191e7725 100644
--- a/app/src/app/app.module.ts
+++ b/app/src/app/app.module.ts
@@ -5,11 +5,12 @@ import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import { InsightApp } from './app.component';
-import { PagesModule, HomePage, BlocksPage, NodeStatusPage, VerifyMessagePage } from '../pages';
+import { PagesModule, HomePage, BlocksPage } from '../pages';
import { BlocksService, StorageService } from '../services';
import { ApiProvider } from '../providers/api/api';
import { CurrencyProvider } from '../providers/currency/currency';
import { BlocksProvider } from '../providers/blocks/blocks';
+import { DefaultProvider } from '../providers/default/default';
@NgModule({
declarations: [
@@ -25,9 +26,7 @@ import { BlocksProvider } from '../providers/blocks/blocks';
entryComponents: [
InsightApp,
HomePage,
- BlocksPage,
- NodeStatusPage,
- VerifyMessagePage
+ BlocksPage
],
providers: [
StatusBar,
@@ -37,7 +36,8 @@ import { BlocksProvider } from '../providers/blocks/blocks';
{provide: ErrorHandler, useClass: IonicErrorHandler},
ApiProvider,
CurrencyProvider,
- BlocksProvider
+ BlocksProvider,
+ DefaultProvider
]
})
diff --git a/app/src/app/app.spec.ts b/app/src/app/app.spec.ts
index e7b865dab..eadde1be2 100644
--- a/app/src/app/app.spec.ts
+++ b/app/src/app/app.spec.ts
@@ -5,6 +5,10 @@ import { NavMock } from '../mocks';
import { PopoverController, MenuController } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
+import { ApiProvider } from '../providers/api/api';
+import { CurrencyProvider } from '../providers/currency/currency';
+import { DefaultProvider } from '../providers/default/default';
+import { HttpModule } from '@angular/http';
describe('InsightApp', () => {
let injector: TestBed;
@@ -12,13 +16,19 @@ describe('InsightApp', () => {
beforeEach(() => {
TestBed.configureTestingModule({
+ imports: [
+ HttpModule
+ ],
providers: [
PopoverController,
InsightApp,
Platform,
MenuController,
SplashScreen,
- StatusBar
+ StatusBar,
+ ApiProvider,
+ CurrencyProvider,
+ DefaultProvider
]
});
injector = getTestBed();
diff --git a/app/src/components/head-nav/head-nav.ts b/app/src/components/head-nav/head-nav.ts
index dfdf99804..b41315bea 100644
--- a/app/src/components/head-nav/head-nav.ts
+++ b/app/src/components/head-nav/head-nav.ts
@@ -6,6 +6,7 @@ import { ApiProvider } from '../../providers/api/api';
import { CurrencyProvider } from '../../providers/currency/currency';
import { ActionSheetController } from 'ionic-angular';
import { PopoverController } from 'ionic-angular';
+import { ToastController } from 'ionic-angular';
import { DenominationComponent } from '../denomination/denomination';
/**
@@ -24,7 +25,6 @@ export class HeadNavComponent {
public loading: boolean;
@Input() public title: string;
public q: string;
- public badQuery: boolean = false;
constructor(
private navCtrl: NavController,
@@ -32,7 +32,8 @@ export class HeadNavComponent {
private api: ApiProvider,
public currency: CurrencyProvider,
public actionSheetCtrl: ActionSheetController,
- public popoverCtrl: PopoverController
+ public popoverCtrl: PopoverController,
+ public toastCtrl: ToastController
) {
}
@@ -46,6 +47,7 @@ export class HeadNavComponent {
console.log('block', data);
let parsedData: any = JSON.parse(data._body);
this.navCtrl.push('block-detail', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'blockHash': parsedData.hash
});
}.bind(this),
@@ -56,6 +58,7 @@ export class HeadNavComponent {
console.log('tx', data);
let parsedData: any = JSON.parse(data._body);
this.navCtrl.push('transaction', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'txId': parsedData.txid
});
}.bind(this),
@@ -66,6 +69,7 @@ export class HeadNavComponent {
console.log('addr', data);
let parsedData: any = JSON.parse(data._body);
this.navCtrl.push('address', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'addrStr': parsedData.addrStr
});
}.bind(this),
@@ -73,8 +77,10 @@ export class HeadNavComponent {
this.http.get(apiPrefix + 'block-index/' + this.q).subscribe(
function (data: any): void {
this.resetSearch();
+ console.log('height', data);
let parsedData: any = JSON.parse(data._body);
this.navCtrl.push('block-detail', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'blockHash': parsedData.blockHash
});
}.bind(this),
@@ -93,17 +99,17 @@ export class HeadNavComponent {
/* tslint:disable:no-unused-variable */
private reportBadQuery(): void {
- this.badQuery = true;
- console.log('badQuery', this.badQuery);
+ this.presentToast();
+ }
- setTimeout(
- function (): void {
- this.badQuery = false;
- console.log('badQuery', this.badQuery);
- }.bind(this),
- 2000
- );
- };
+ private presentToast(): void {
+ const toast: any = this.toastCtrl.create({
+ message: 'No matching records found!',
+ duration: 3000,
+ position: 'top'
+ });
+ toast.present();
+ }
private resetSearch(): void {
this.q = '';
diff --git a/app/src/components/latest-blocks/latest-blocks.ts b/app/src/components/latest-blocks/latest-blocks.ts
index c38720e18..324ffc3bc 100644
--- a/app/src/components/latest-blocks/latest-blocks.ts
+++ b/app/src/components/latest-blocks/latest-blocks.ts
@@ -1,6 +1,7 @@
import { Component, NgZone, Input } from '@angular/core';
import { BlocksProvider } from '../../providers/blocks/blocks';
import { NavController } from 'ionic-angular';
+import { CurrencyProvider } from '../../providers/currency/currency';
/**
* Generated class for the LatestBlocksComponent component.
@@ -21,7 +22,7 @@ export class LatestBlocksComponent {
@Input() public showTimeAs: string;
private reloadInterval: any;
- constructor(private blocksProvider: BlocksProvider, private navCtrl: NavController, ngZone: NgZone) {
+ constructor(private blocksProvider: BlocksProvider, private navCtrl: NavController, ngZone: NgZone, public currency: CurrencyProvider) {
this.loadBlocks();
const seconds: number = 15;
ngZone.runOutsideAngular(() => {
@@ -51,6 +52,7 @@ export class LatestBlocksComponent {
public goToBlock(blockHash: string): void {
this.navCtrl.push('block-detail', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'blockHash': blockHash
});
}
@@ -62,7 +64,9 @@ export class LatestBlocksComponent {
}
public goToBlocks(): void {
- this.navCtrl.push('blocks');
+ this.navCtrl.push('blocks', {
+ 'selectedCurrency': this.currency.selectedCurrency
+ });
}
private ngOnDestroy(): void {
diff --git a/app/src/components/latest-transactions/latest-transactions.ts b/app/src/components/latest-transactions/latest-transactions.ts
index 5facbe46e..d93d27496 100644
--- a/app/src/components/latest-transactions/latest-transactions.ts
+++ b/app/src/components/latest-transactions/latest-transactions.ts
@@ -59,6 +59,7 @@ export class LatestTransactionsComponent {
public goToTx(txId: string): void {
this.navCtrl.push('transaction', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'txId': txId
});
}
diff --git a/app/src/components/transaction/transaction.html b/app/src/components/transaction/transaction.html
index 7a678c099..48f38a7dd 100644
--- a/app/src/components/transaction/transaction.html
+++ b/app/src/components/transaction/transaction.html
@@ -47,10 +47,8 @@
-
-
+
+
{{ item.scriptSig.asm }}
@@ -87,7 +85,7 @@
Locking Script
-
{{vout.scriptPubKey.asm}}
+
{{ vout.scriptPubKey.asm }}
@@ -128,4 +126,4 @@
-
\ No newline at end of file
+
diff --git a/app/src/components/transaction/transaction.ts b/app/src/components/transaction/transaction.ts
index 8d5cc19e2..4d1f3473e 100644
--- a/app/src/components/transaction/transaction.ts
+++ b/app/src/components/transaction/transaction.ts
@@ -33,12 +33,14 @@ export class TransactionComponent {
public goToTx(txId: string): void {
this.navCtrl.push('transaction', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'txId': txId
});
}
public goToAddress(addrStr: string): void {
this.navCtrl.push('address', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'addrStr': addrStr
});
}
diff --git a/app/src/pages/address/address.ts b/app/src/pages/address/address.ts
index 459f4de38..3d920f913 100644
--- a/app/src/pages/address/address.ts
+++ b/app/src/pages/address/address.ts
@@ -12,7 +12,7 @@ import { CurrencyProvider } from '../../providers/currency/currency';
*/
@IonicPage({
name: 'address',
- segment: 'address/:addrStr'
+ segment: ':selectedCurrency/address/:addrStr'
})
@Component({
selector: 'page-address',
diff --git a/app/src/pages/block-detail/block-detail.ts b/app/src/pages/block-detail/block-detail.ts
index 95bdaf82a..af17fba34 100644
--- a/app/src/pages/block-detail/block-detail.ts
+++ b/app/src/pages/block-detail/block-detail.ts
@@ -12,7 +12,7 @@ import { CurrencyProvider } from '../../providers/currency/currency';
*/
@IonicPage({
name: 'block-detail',
- segment: 'block/:blockHash'
+ segment: ':selectedCurrency/block/:blockHash'
})
@Component({
selector: 'page-block-detail',
@@ -45,14 +45,15 @@ export class BlockDetailPage {
public goToPreviousBlock(): void {
this.navCtrl.push('block-detail', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'blockHash': this.block.previousblockhash
});
}
public goToNextBlock(): void {
this.navCtrl.push('block-detail', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'blockHash': this.block.nextblockhash
});
}
-
}
diff --git a/app/src/pages/blocks/blocks.ts b/app/src/pages/blocks/blocks.ts
index 757235ad0..8283ea113 100644
--- a/app/src/pages/blocks/blocks.ts
+++ b/app/src/pages/blocks/blocks.ts
@@ -10,7 +10,7 @@ import { BlocksProvider } from '../../providers/blocks/blocks';
*/
@IonicPage({
name: 'blocks',
- segment: 'blocks'
+ segment: ':selectedCurrency/blocks'
})
@Component({
selector: 'page-blocks',
diff --git a/app/src/pages/broadcast-tx/broadcast-tx.ts b/app/src/pages/broadcast-tx/broadcast-tx.ts
index 4d6b4b5ea..4da23431a 100644
--- a/app/src/pages/broadcast-tx/broadcast-tx.ts
+++ b/app/src/pages/broadcast-tx/broadcast-tx.ts
@@ -5,7 +5,9 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Http } from '@angular/http';
import { ApiProvider } from '../../providers/api/api';
-@IonicPage()
+@IonicPage({
+ segment: ':selectedCurrency/broadcast-tx'
+})
@Component({
selector: 'page-broadcast-tx',
templateUrl: 'broadcast-tx.html'
diff --git a/app/src/pages/broadcastTxPage/broadcastTxPage.html b/app/src/pages/broadcastTxPage/broadcastTxPage.html
deleted file mode 100644
index 4b60667b6..000000000
--- a/app/src/pages/broadcastTxPage/broadcastTxPage.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
- {{title}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/pages/broadcastTxPage/broadcastTxPage.scss b/app/src/pages/broadcastTxPage/broadcastTxPage.scss
deleted file mode 100644
index 424e9590e..000000000
--- a/app/src/pages/broadcastTxPage/broadcastTxPage.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.broadcastTxPage {
-
-}
diff --git a/app/src/pages/broadcastTxPage/broadcastTxPage.spec.ts b/app/src/pages/broadcastTxPage/broadcastTxPage.spec.ts
deleted file mode 100644
index cd1505518..000000000
--- a/app/src/pages/broadcastTxPage/broadcastTxPage.spec.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { ComponentFixture, async } from '@angular/core/testing';
-import { TestUtils } from '../../test';
-import { BroadcastTxPage } from './broadcastTxPage';
-
-let fixture: ComponentFixture = null;
-let instance: any = null;
-
-describe('BroadcastTxPage', () => {
-
- beforeEach(async(() => TestUtils.beforeEachCompiler([BroadcastTxPage]).then(compiled => {
- fixture = compiled.fixture;
- instance = compiled.instance;
- fixture.detectChanges();
- })));
-
- afterEach(() => {
- fixture.destroy();
- });
-
- it('initializes', () => {
- expect(instance).toBeTruthy();
- });
-
- it('has a send method', () => {
- spyOn(instance, 'send');
- instance.send();
- expect(instance.send).toHaveBeenCalled();
- });
-});
diff --git a/app/src/pages/broadcastTxPage/broadcastTxPage.ts b/app/src/pages/broadcastTxPage/broadcastTxPage.ts
deleted file mode 100644
index 40563eff5..000000000
--- a/app/src/pages/broadcastTxPage/broadcastTxPage.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { Component } from '@angular/core';
-import { NavController } from 'ionic-angular';
-import { FormBuilder, FormGroup, Validators } from '@angular/forms';
-
-@Component({
- templateUrl: './broadcastTxPage.html'
-})
-
-export class BroadcastTxPage {
-
- public title: string;
- private nav: NavController;
- public transaction: string;
- public txForm: FormGroup;
-
- constructor(nav: NavController, public formBuilder: FormBuilder) {
- this.nav = nav;
- this.title = 'Broadcast Transaction';
- this.txForm = formBuilder.group({
- rawData: ['', Validators.pattern(/^[0-9A-Fa-f]+$/)]
- });
- }
-
- public send(): void {
- let postData: any = {
- rawtx: this.transaction
- };
-
- console.log('the postData is', postData);
- }
-}
diff --git a/app/src/pages/index.ts b/app/src/pages/index.ts
index d15516e7d..4bf13e4b4 100644
--- a/app/src/pages/index.ts
+++ b/app/src/pages/index.ts
@@ -1,5 +1,3 @@
-export * from './nodeStatusPage/nodeStatusPage';
-export * from './verifyMessagePage/verifyMessagePage';
export * from './home/home';
export * from './blocks/blocks';
export * from './broadcast-tx/broadcast-tx';
diff --git a/app/src/pages/nodeStatusPage/nodeStatusPage.html b/app/src/pages/nodeStatusPage/nodeStatusPage.html
deleted file mode 100644
index 68df7da39..000000000
--- a/app/src/pages/nodeStatusPage/nodeStatusPage.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- {{title}}
-
-
-
-
-
-
Node Status
-
-
\ No newline at end of file
diff --git a/app/src/pages/nodeStatusPage/nodeStatusPage.scss b/app/src/pages/nodeStatusPage/nodeStatusPage.scss
deleted file mode 100644
index ea2ee8a8e..000000000
--- a/app/src/pages/nodeStatusPage/nodeStatusPage.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.nodeStatusPage {
-
-}
diff --git a/app/src/pages/nodeStatusPage/nodeStatusPage.spec.ts b/app/src/pages/nodeStatusPage/nodeStatusPage.spec.ts
deleted file mode 100644
index 385774ad4..000000000
--- a/app/src/pages/nodeStatusPage/nodeStatusPage.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, async } from '@angular/core/testing';
-import { TestUtils } from '../../test';
-import { NodeStatusPage } from './nodeStatusPage';
-
-let fixture: ComponentFixture = null;
-let instance: any = null;
-
-describe('NodeStatusPage', () => {
-
- beforeEach(async(() => TestUtils.beforeEachCompiler([NodeStatusPage]).then(compiled => {
- fixture = compiled.fixture;
- instance = compiled.instance;
- fixture.detectChanges();
- })));
-
- afterEach(() => {
- fixture.destroy();
- });
-
- it('initializes', () => {
- expect(instance).toBeTruthy();
- });
-});
diff --git a/app/src/pages/nodeStatusPage/nodeStatusPage.ts b/app/src/pages/nodeStatusPage/nodeStatusPage.ts
deleted file mode 100644
index b2e971cea..000000000
--- a/app/src/pages/nodeStatusPage/nodeStatusPage.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component } from '@angular/core';
-import { NavController } from 'ionic-angular';
-
-@Component({
- templateUrl: './nodeStatusPage.html'
-})
-
-export class NodeStatusPage {
-
- public title: string;
- private nav: NavController;
-
- constructor(nav: NavController) {
- this.nav = nav;
- this.title = 'Node Status';
- }
-}
diff --git a/app/src/pages/pages.module.ts b/app/src/pages/pages.module.ts
index 25bc562c4..a01705529 100644
--- a/app/src/pages/pages.module.ts
+++ b/app/src/pages/pages.module.ts
@@ -7,16 +7,12 @@ import { HeadNavComponentModule } from '../components/head-nav/head-nav.module';
import { LatestTransactionsComponentModule } from '../components/latest-transactions/latest-transactions.module';
import { LatestBlocksComponentModule } from '../components/latest-blocks/latest-blocks.module';
import {
- HomePage,
- NodeStatusPage,
- VerifyMessagePage
+ HomePage
} from './index';
@NgModule({
declarations: [
- HomePage,
- NodeStatusPage,
- VerifyMessagePage
+ HomePage
],
imports: [
IonicModule,
diff --git a/app/src/pages/transaction/transaction.ts b/app/src/pages/transaction/transaction.ts
index 0d3eabb94..fa1ebb90d 100644
--- a/app/src/pages/transaction/transaction.ts
+++ b/app/src/pages/transaction/transaction.ts
@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Http } from '@angular/http';
import { ApiProvider } from '../../providers/api/api';
+import { CurrencyProvider } from '../../providers/currency/currency';
/**
* Generated class for the TransactionPage page.
@@ -11,7 +12,7 @@ import { ApiProvider } from '../../providers/api/api';
*/
@IonicPage({
name: 'transaction',
- segment: 'tx/:txId'
+ segment: ':selectedCurrency/tx/:txId'
})
@Component({
selector: 'page-transaction',
@@ -23,7 +24,13 @@ export class TransactionPage {
private txId: string;
public tx: any = {};
- constructor(public navCtrl: NavController, public navParams: NavParams, private http: Http, private api: ApiProvider) {
+ constructor(
+ public navCtrl: NavController,
+ public navParams: NavParams,
+ private http: Http,
+ private api: ApiProvider,
+ public currency: CurrencyProvider
+ ) {
this.txId = navParams.get('txId');
}
@@ -42,6 +49,7 @@ export class TransactionPage {
public goToBlock(blockHash: string): void {
this.navCtrl.push('block-detail', {
+ 'selectedCurrency': this.currency.selectedCurrency,
'blockHash': blockHash
});
}
diff --git a/app/src/pages/verifyMessagePage/verifyMessagePage.html b/app/src/pages/verifyMessagePage/verifyMessagePage.html
deleted file mode 100644
index e3d82a9c4..000000000
--- a/app/src/pages/verifyMessagePage/verifyMessagePage.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
- {{title}}
-
-
-
-
-
-
-
-
- Bitcoin comes with a way of signing arbitrary messages.
-
- This form can be used to verify that a message comes from a specific Bitcoin address.
-
-
-
- Address
-
-
-
-
- Signature
-
-
-
-
- Message
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/pages/verifyMessagePage/verifyMessagePage.scss b/app/src/pages/verifyMessagePage/verifyMessagePage.scss
deleted file mode 100644
index 22f8efba7..000000000
--- a/app/src/pages/verifyMessagePage/verifyMessagePage.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.verifyMessagePage {
-
-}
diff --git a/app/src/pages/verifyMessagePage/verifyMessagePage.spec.ts b/app/src/pages/verifyMessagePage/verifyMessagePage.spec.ts
deleted file mode 100644
index 7f5fae6e3..000000000
--- a/app/src/pages/verifyMessagePage/verifyMessagePage.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, async } from '@angular/core/testing';
-import { TestUtils } from '../../test';
-import { VerifyMessagePage } from './verifyMessagePage';
-
-let fixture: ComponentFixture = null;
-let instance: any = null;
-
-describe('VerifyMessagePage', () => {
-
- beforeEach(async(() => TestUtils.beforeEachCompiler([VerifyMessagePage]).then(compiled => {
- fixture = compiled.fixture;
- instance = compiled.instance;
- fixture.detectChanges();
- })));
-
- afterEach(() => {
- fixture.destroy();
- });
-
- it('initializes', () => {
- expect(instance).toBeTruthy();
- });
-});
diff --git a/app/src/pages/verifyMessagePage/verifyMessagePage.ts b/app/src/pages/verifyMessagePage/verifyMessagePage.ts
deleted file mode 100644
index 4e29d90e8..000000000
--- a/app/src/pages/verifyMessagePage/verifyMessagePage.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component } from '@angular/core';
-import { NavController } from 'ionic-angular';
-
-@Component({
- templateUrl: './verifyMessagePage.html'
-})
-
-export class VerifyMessagePage {
-
- public title: string;
- private nav: NavController;
-
- constructor(nav: NavController) {
- this.nav = nav;
- this.title = 'Verify Signed Message';
- }
-}
diff --git a/app/src/providers/api/api.spec.ts b/app/src/providers/api/api.spec.ts
new file mode 100644
index 000000000..a3315df35
--- /dev/null
+++ b/app/src/providers/api/api.spec.ts
@@ -0,0 +1,31 @@
+/* tslint:disable:no-unused-variable */
+import { TestBed, ComponentFixture, inject } from '@angular/core/testing';
+import { HttpModule } from '@angular/http';
+import { ApiProvider } from '../api/api';
+import { DefaultProvider } from '../default/default';
+
+describe('ApiProvider', () => {
+ let api: ApiProvider;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ HttpModule
+ ],
+ providers: [
+ ApiProvider,
+ DefaultProvider
+ ]
+ });
+ });
+
+ beforeEach(inject([ApiProvider], provider => {
+ api = provider;
+ }));
+
+ it('initialises', () => {
+ expect(api).not.toBeNull();
+ expect(api.apiPrefix).toBe('/api/');
+ });
+
+});
diff --git a/app/src/providers/api/api.ts b/app/src/providers/api/api.ts
index a76ccd6e7..267d24257 100644
--- a/app/src/providers/api/api.ts
+++ b/app/src/providers/api/api.ts
@@ -1,6 +1,7 @@
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
+import { DefaultProvider } from '../../providers/default/default';
/*
Generated class for the ApiProvider provider.
@@ -13,9 +14,11 @@ export class ApiProvider {
public apiPrefix: string;
- constructor(public http: Http) {
- // TODO Make this an API call
- this.apiPrefix = '/api/';
+ constructor(
+ public http: Http,
+ private defaults: DefaultProvider
+ ) {
+ this.apiPrefix = defaults.getDefault('%API_PREFIX%') + '/';
}
}
diff --git a/app/src/providers/blocks/blocks.spec.ts b/app/src/providers/blocks/blocks.spec.ts
index a39ab645d..11d8fe429 100644
--- a/app/src/providers/blocks/blocks.spec.ts
+++ b/app/src/providers/blocks/blocks.spec.ts
@@ -3,6 +3,7 @@ import { Http, HttpModule, BaseRequestOptions, Response, ResponseOptions } from
import { MockBackend } from '@angular/http/testing';
import { BlocksProvider } from './blocks';
import { ApiProvider } from '../api/api';
+import { DefaultProvider } from '../../providers/default/default';
describe('Blocks Provider', () => {
beforeEach(async(() => {
@@ -12,6 +13,7 @@ describe('Blocks Provider', () => {
providers: [
BlocksProvider,
ApiProvider,
+ DefaultProvider,
MockBackend,
BaseRequestOptions,
{
diff --git a/app/src/providers/currency/currency.spec.ts b/app/src/providers/currency/currency.spec.ts
index 02fa17a59..310138bd1 100644
--- a/app/src/providers/currency/currency.spec.ts
+++ b/app/src/providers/currency/currency.spec.ts
@@ -3,6 +3,7 @@ import { TestBed, ComponentFixture, inject } from '@angular/core/testing';
import { HttpModule } from '@angular/http';
import { CurrencyProvider } from './currency';
import { ApiProvider } from '../api/api';
+import { DefaultProvider } from '../default/default';
describe('CurrencyProvider', () => {
let currency: CurrencyProvider;
@@ -14,13 +15,14 @@ describe('CurrencyProvider', () => {
],
providers: [
ApiProvider,
- CurrencyProvider
+ CurrencyProvider,
+ DefaultProvider
]
});
});
- beforeEach(inject([CurrencyProvider], _cp => {
- currency = _cp;
+ beforeEach(inject([CurrencyProvider], provider => {
+ currency = provider;
}));
it('initialises', () => {
diff --git a/app/src/providers/currency/currency.ts b/app/src/providers/currency/currency.ts
index 08662767d..125d996d6 100644
--- a/app/src/providers/currency/currency.ts
+++ b/app/src/providers/currency/currency.ts
@@ -1,6 +1,7 @@
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { ApiProvider } from '../../providers/api/api';
+import { DefaultProvider } from '../../providers/default/default';
import 'rxjs/add/operator/map';
/*
@@ -13,6 +14,7 @@ import 'rxjs/add/operator/map';
export class CurrencyProvider {
public defaultCurrency: string;
+ public selectedCurrency: string;
public currencySymbol: string;
public factor: number = 1;
private bitstamp: number;
@@ -20,9 +22,13 @@ export class CurrencyProvider {
private loading: boolean;
public explorers: any = [];
- constructor(public http: Http, private api: ApiProvider) {
- // TODO Make this an API call
- this.defaultCurrency = 'BTC';
+ constructor(
+ public http: Http,
+ private api: ApiProvider,
+ private defaults: DefaultProvider
+ ) {
+ this.defaultCurrency = defaults.getDefault('%DEFAULT_CURRENCY%');
+ this.selectedCurrency = this.defaultCurrency.toLowerCase();
this.currencySymbol = this.defaultCurrency;
let url: string = this.api.apiPrefix + 'explorers';
diff --git a/app/src/providers/default/default.spec.ts b/app/src/providers/default/default.spec.ts
new file mode 100644
index 000000000..ccc073a1f
--- /dev/null
+++ b/app/src/providers/default/default.spec.ts
@@ -0,0 +1,29 @@
+/* tslint:disable:no-unused-variable */
+import { TestBed, ComponentFixture, inject } from '@angular/core/testing';
+import { HttpModule } from '@angular/http';
+import { DefaultProvider } from './default';
+
+describe('DefaultProvider', () => {
+ let defaults: DefaultProvider;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ HttpModule
+ ],
+ providers: [
+ DefaultProvider
+ ]
+ });
+ });
+
+ beforeEach(inject([DefaultProvider], provider => {
+ defaults = provider;
+ }));
+
+ it('has defaults', () => {
+ expect(defaults).not.toBeNull();
+ expect(defaults.getDefault('%DEFAULT_CURRENCY%')).toBe('BTC');
+ expect(defaults.getDefault('%API_PREFIX%')).toBe('/api');
+ });
+});
diff --git a/app/src/providers/default/default.ts b/app/src/providers/default/default.ts
new file mode 100644
index 000000000..19a7dc369
--- /dev/null
+++ b/app/src/providers/default/default.ts
@@ -0,0 +1,27 @@
+import { Injectable } from '@angular/core';
+import { Http } from '@angular/http';
+import 'rxjs/add/operator/map';
+
+/*
+ Generated class for the DefaultProvider provider.
+
+ See https://angular.io/docs/ts/latest/guide/dependency-injection.html
+ for more info on providers and Angular DI.
+*/
+@Injectable()
+export class DefaultProvider {
+ private defaults: {
+ '%DEFAULT_CURRENCY%': string,
+ '%API_PREFIX%': string
+ }= {
+ '%DEFAULT_CURRENCY%': 'BTC',
+ '%API_PREFIX%': '/api'
+ };
+
+ constructor(public http: Http) {
+ }
+
+ public getDefault(str: string): string {
+ return (this.defaults[str] !== undefined) ? this.defaults[str] : str;
+ }
+}