<!DOCTYPE html>
<html>

  <head>
    <base href="." />
    <title>angular2 stocks dash</title>
    <link rel="stylesheet" href="style.css" />
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

    <!-- Optional theme -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

    <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script>
    <script src="https://unpkg.com/zone.js/dist/zone.js"></script>
    <script src="https://unpkg.com/zone.js/dist/long-stack-trace-zone.js"></script>
    <script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script>
    <script src="https://unpkg.com/systemjs@0.19.31/dist/system.js"></script>
    <script src="config.js"></script>
    <script>
    System.import('app')
      .catch(console.error.bind(console));
  </script>
  </head>

  <body>
   <div class="container">
    <div class="row">
      <app-root>Loading...</app-root>
    </div>
  </div>
  </body>

</html>
/* Styles go here */


### Angular Starter Plunker - Typescript
System.config({
  //use typescript for compilation
  transpiler: 'typescript',
  //typescript compiler options
  typescriptOptions: {
    emitDecoratorMetadata: true
  },
  paths: {
    'npm:': 'https://unpkg.com/'
  },
  //map tells the System loader where to look for things
  map: {
    
    'app': './src',
    
    '@angular/core': 'npm:@angular/core@2.3.1/bundles/core.umd.js',
    '@angular/common': 'npm:@angular/common@2.3.1/bundles/common.umd.js',
    '@angular/compiler': 'npm:@angular/compiler@2.3.1/bundles/compiler.umd.js',
    '@angular/platform-browser': 'npm:@angular/platform-browser@2.3.1/bundles/platform-browser.umd.js',
    '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@2.3.1/bundles/platform-browser-dynamic.umd.js',
    '@angular/http': 'npm:@angular/http@2.3.1/bundles/http.umd.js',
    '@angular/router': 'npm:@angular/router@2.3.1/bundles/router.umd.js',
    '@angular/forms': 'npm:@angular/forms@2.3.1/bundles/forms.umd.js',
    
    '@angular/core/testing': 'npm:@angular/core/bundles/core-testing.umd.js',
    '@angular/common/testing': 'npm:@angular/common/bundles/common-testing.umd.js',
    '@angular/compiler/testing': 'npm:@angular/compiler/bundles/compiler-testing.umd.js',
    '@angular/platform-browser/testing': 'npm:@angular/platform-browser/bundles/platform-browser-testing.umd.js',
    '@angular/platform-browser-dynamic/testing': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.js',
    '@angular/http/testing': 'npm:@angular/http/bundles/http-testing.umd.js',
    '@angular/router/testing': 'npm:@angular/router/bundles/router-testing.umd.js',
    
    'rxjs': 'npm:rxjs',
    'typescript': 'npm:typescript@2.0.2/lib/typescript.js'
  },
  //packages defines our app package
  packages: {
    app: {
      main: './main.ts',
      defaultExtension: 'ts'
    },
    rxjs: {
      defaultExtension: 'js'
    }
  }
});
//main entry point
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {AppModule} from './app';

platformBrowserDynamic().bootstrapModule(AppModule)
import { Component, trigger, state, style, animate, transition } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { StockService } from './stockservice';

@Component({
  selector: 'app-root',
  templateUrl: './src/app.component.html',
  styleUrls: ['./src/app.component.css'],
  animations: [
    trigger('trending', [
      state('DOWN', style({
        'background-color': 'red'
      })),
      state('UP', style({
        'background-color': 'green'
      })),
      transition('UP => DOWN', [
        style({transform: 'translateX(-100%)'}),
        animate(3000)
      ]),
      transition('DOWN => UP', [
        style({transform: 'translateY(-100%)'}),
        animate(200)
      ])
    ])
  ],
  providers: [StockService]
})
export class AppComponent {
  title = 'Stock Dashboard';
  stockPrices = [];
  stockService: StockService;
  constructor(stockService: StockService) {
    this.stockService = stockService;
  }

  getStockPrices() {
    this.stockService.getStockPrices().then(prices => {
      console.log('just got prices: ', prices);
      this.stockPrices = prices;
    });
  }

  ngOnInit() {
    // check for updated prices
    setInterval(() => {this.getStockPrices(); }, 1000);
  }

}





@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
<!-- src/app/app.component.html -->
<h1>
  {{title}}
</h1>

<!--top-Header-menu-->
<ul class="nav nav-pills">
  <li role="presentation" class="active"><a href="#">Stock Summary</a></li>
  <li role="presentation"><a href="#">Add New</a></li>
  <li role="presentation"><a href="https://github.com/tranc99/stockportfolio" target="_blank">About StockDashboard</a></li>
</ul>

<hr>
<h2>Welcome, here are the latest updates on your stock picks.</h2>
<br>

<div class="row-fluid">
  <div class="widget-box">
          <div class="widget-content nopadding">
            <table class="table table-bordered data-table">
              <thead>
                <tr>
                  <th>Stock Symbol</th>
                  <th>Price</th>
                  <th>Bought At</th>
                  <th>Quantity</th>
                  <th>Total Value</th>
                  <th>Current Trend</th>
                </tr>
              </thead>
              <tbody>
                <tr class="gradeX" *ngFor="let stock of stockPrices" [@trending]="stock.trend">
                  <td>{{stock.symbol}}</td>
                  <td>USD {{stock.price}}</td>
                  <td>{{stock.bought_price}}</td>
                  <td class="center">{{stock.quantity}}</td>
                  <td>{{stock.price * stock.quantity}}</td>
                  <td>{{stock.trend}}</td>
                </tr>
              </tbody>
            </table>
          </div>
        </div>
</div>
/*   src/app.component.css   */
.movable {
  background: coral;
  height: 200px;
  width: 200px;
  text-align: center;
  font-size: 20px;
  color: white;
  font-weight: bold;
  margin-bottom: 10px;
  position: relative;
}

tr {
  color: white;
  background: fuchsia;
}

th {
  color: white;
}
import { Injectable } from '@angular/core';

@Injectable()
export class StockService {
  static stocks: any;

  getStockPrices = () => {
    //setInterval(() => {this.computePrices(); }, 1000);
    StockService.computePrices(StockService.stocks);
    return Promise.resolve(StockService.stocks);
  }

  static incrementPrice = (stock, index) => {
    var price = stock.price;
    price += 5;
    if (price > 120) {
      price = 120;
    }
    StockService.stocks[index].compute = StockService.uptrend;
    StockService.stocks[index].trend = 'UP';
    StockService.stocks[index].price = price;
  }

  static decreasePrice = (stock, index) => {
    var price = stock.price;
    price -= 5;
    if (price < 0) {
      price = 0;
    }
    StockService.stocks[index].compute = StockService.downtrend;
    StockService.stocks[index].trend = 'DOWN';
    StockService.stocks[index].price = price;
  }

  static computePrices = (input) => {
    console.log('computing new prices');
    input.forEach(function(stock, index) {
      if (stock.price >= 120) {
        StockService.decreasePrice(stock, index);
      }
      if (stock.price <= 0) {
        StockService.incrementPrice(stock, index)
      }

      input[index].price = stock.compute.call(null, stock);
    });
    return input;
  }

  static uptrend = (stock) => {
    return stock.price + 5;
  }

  static downtrend = function(stock) {
    return stock.price - 5;
  }

  constructor() {
    StockService.stocks = [
                    { symbol: "GOOG", price: 120, compute: StockService.uptrend, bought_price: 50, quantity: 0, total_value: 21000, trend: 'UP' },
                    { symbol: "YHOO", price: 100, compute: StockService.uptrend, bought_price: 100, quantity: 0, total_value: 21000, trend: 'UP' },
                    { symbol: "MSFT", price: 20, compute: StockService.uptrend, bought_price: 120, quantity: 0, total_value: 21000, trend: 'UP' },
                    { symbol: "AAPL", price: 200, compute: StockService.uptrend, bought_price: 85, quantity: 20, total_value: 21000, trend: 'UP' },
                  ];
    console.log("Stocks from the stock service ", StockService.stocks.toString());

  }

}