http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/job/job.component.html ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/job/job.component.html b/ui/angular/src/app/job/job.component.html index 813d0c4..2fb87a2 100644 --- a/ui/angular/src/app/job/job.component.html +++ b/ui/angular/src/app/job/job.component.html @@ -22,7 +22,8 @@ under the License. <i class="fa fa-plus"></i> Create Job </a> --> - <a role="button" routerLink="/createjob/batch" class="btn btn-primary btn-o btn-wide dropdown-toggle" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <a role="button" routerLink="/createjob/batch" class="btn btn-primary btn-o btn-wide dropdown-toggle" + id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-plus"></i> Create Job </a> @@ -34,105 +35,109 @@ under the License. <div id="modelContainer"> <table class="table table-striped reco" [mfData]="results" #mf="mfDataTable" [mfRowsOnPage]="10"> <thead> - <tr style="background-color:#7D95CC"> - <th st-ratio="15">Job Name</th> - <th st-ratio="15">Previous Fire Time</th> - <th st-ratio="20">Next Fire Time</th> - <th st-ratio="15">Job State</th> - <!-- <th st-ratio="5">Cron Expression</th> --> - <th st-ratio="5">Action</th> - <th st-ratio="5">Metric</th> - </tr> + <tr style="background-color:#7D95CC"> + <th st-ratio="15">Job Name</th> + <th st-ratio="15">Previous Fire Time</th> + <th st-ratio="20">Next Fire Time</th> + <th st-ratio="15">Job State</th> + <!-- <th st-ratio="5">Cron Expression</th> --> + <th st-ratio="5">Action</th> + <th st-ratio="5">Metric</th> + </tr> </thead> <tbody> - <tr *ngIf="!results"> - <td colspan="7" style="text-align:center;display:none"> - No content! - </td> - <!-- <td class="icon" style="border-top-style:none"> - <span class="fa fa-spinner fa-spin fa-3x fa-fw"></span> - </td> --> - </tr> + <tr *ngIf="!results"> + <td colspan="7" style="text-align:center;display:none"> + No content! + </td> + <!-- <td class="icon" style="border-top-style:none"> + <span class="fa fa-spinner fa-spin fa-3x fa-fw"></span> + </td> --> + </tr> </tbody> <tbody *ngFor="let row of mf.data"> - <tr> - <td (click)="showInstances(row)" [ngClass]="{accordion:true}" style="cursor: pointer;"> - <i *ngIf="!row.showDetail" class="fa fa-chevron-circle-right blue"></i> - <i *ngIf="row.showDetail" class="fa fa-chevron-circle-down blue"></i> {{row.jobName}} - <!-- -{{(row.createTime | date: 'yyyy/MM/dd HH:mm:ss') || 'N/A' }} --> - </td> - <td [hidden]="row.previousFireTime!=-1">--/--/-- --:--</td> - <td [hidden]="row.previousFireTime==-1">{{(row.jobState.previousFireTime | date: 'yyyy/MM/dd HH:mm:ss') || 'N/A' }}</td> - <td>{{(row.jobState.nextFireTime | date: 'yyyy/MM/dd HH:mm:ss') || 'N/A' }}</td> - <td> + <tr> + <td (click)="showInstances(row)" [ngClass]="{accordion:true}" style="cursor: pointer;"> + <i *ngIf="!row.showDetail" class="fa fa-chevron-circle-right blue"></i> + <i *ngIf="row.showDetail" class="fa fa-chevron-circle-down blue"></i> {{row.jobName}} + <!-- -{{(row.createTime | date: 'yyyy/MM/dd HH:mm:ss') || 'N/A' }} --> + </td> + <td [hidden]="row.previousFireTime!=-1">--/--/-- --:--</td> + <td [hidden]="row.previousFireTime==-1">{{(row.jobState.previousFireTime | date: 'yyyy/MM/dd HH:mm:ss') || 'N/A' + }} + </td> + <td>{{(row.jobState.nextFireTime | date: 'yyyy/MM/dd HH:mm:ss') || 'N/A' }}</td> + <td> <span *ngIf='row.jobState.state == "NORMAL"' class="normal">{{row.jobState.state}} </span> - <span *ngIf='row.jobState.state != "NORMAL"' class='unnormal'>{{row.jobState.state}}</span> - </td> - <!-- <td>{{row.cronExpression}}</td> --> - <td> - - <a (click)="remove(row)" title="delete" style="text-decoration:none"> - <i class="fa fa-trash-o po"></i> - </a> - <a routerLink="/job/{{row.id}}" title="subscribe"> - <i class="fa fa-eye"></i> - </a> - <a *ngIf="row.action==='START'" (click)="stateMag(row)" title="Start" style="text-decoration:none"> - <i class="fa fa-play"></i> - </a> - <a *ngIf="row.action!=='START'" (click)="stateMag(row)" title="Stop" style="text-decoration:none"> - <i class="fa fa-stop"></i> - </a> - </td> - <td> - - <a (click)="show(row)"> - <i class="fa fa-bar-chart po"></i> - </a> - </td> - </tr> - <tr *ngIf="row.showDetail"> - <td colspan="7" style="padding:20px 30px 10px 30px;"> - <table class="table table-striped co" [mfData]="allInstances" #mf2="mfDataTable" [mfRowsOnPage]="10"> - <thead> - <tr style="background-color:#7D95CC"> - <th style="width:30%">AppID</th> - <th style="width:25%">Time</th> - <th style="width:20%">State</th> - </tr> - </thead> - <tbody> - <tr *ngIf="!allInstances"> - <td colspan="7" style="text-align:center">No content.</td> - </tr> - <tr *ngFor="let item of mf2.data"> - <td><a href={{item.appUri}} target="_blank" style="color:white">{{item.appId}}</a></td> - <td>{{item.timestamp | date: 'yyyy/MM/dd HH:mm:ss'}}</td> - <td>{{item.state}}</td> - </tr> - </tbody> - <tfoot> - <tr> - <td class="text-center" colspan="8" style="background-color:#1f1f1f;" id="pagination"> - <mfBootstrapPaginator></mfBootstrapPaginator> - </td> - </tr> - </tfoot> - </table> - </td> - </tr> + <span *ngIf='row.jobState.state != "NORMAL"' class='unnormal'>{{row.jobState.state}}</span> + </td> + <!-- <td>{{row.cronExpression}}</td> --> + <td> + + <a (click)="remove(row)" title="delete" style="text-decoration:none"> + <i class="fa fa-trash-o po"></i> + </a> + <a routerLink="/job/{{row.id}}" title="subscribe"> + <i class="fa fa-eye"></i> + </a> + <a *ngIf="row.action==='START'" (click)="stateMag(row)" title="Start" style="text-decoration:none"> + <i class="fa fa-play"></i> + </a> + <a *ngIf="row.action!=='START'" (click)="stateMag(row)" title="Stop" style="text-decoration:none"> + <i class="fa fa-stop"></i> + </a> + </td> + <td> + + <a (click)="show(row)"> + <i class="fa fa-bar-chart po"></i> + </a> + </td> + </tr> + <tr *ngIf="row.showDetail"> + <td colspan="7" style="padding:20px 30px 10px 30px;"> + <table class="table table-striped co" [mfData]="allInstances" #mf2="mfDataTable" [mfRowsOnPage]="10"> + <thead> + <tr style="background-color:#7D95CC"> + <th style="width:30%">AppID</th> + <th style="width:25%">Time</th> + <th style="width:20%">State</th> + </tr> + </thead> + <tbody> + <tr *ngIf="!allInstances"> + <td colspan="7" style="text-align:center">No content.</td> + </tr> + <tr *ngFor="let item of mf2.data"> + <td><a href={{item.appUri}} target="_blank" style="color:white">{{item.appId}}</a></td> + <td>{{item.timestamp | date: 'yyyy/MM/dd HH:mm:ss'}}</td> + <td>{{item.state}}</td> + </tr> + </tbody> + <tfoot> + <tr> + <td class="text-center" colspan="8" style="background-color:#1f1f1f;" id="pagination"> + <mfBootstrapPaginator></mfBootstrapPaginator> + </td> + </tr> + </tfoot> + </table> + </td> + </tr> </tbody> <tfoot> - <tr> - <td colspan="8" class="text-right"> - <mfBootstrapPaginator></mfBootstrapPaginator> - </td> - </tr> + <tr> + <td colspan="8" class="text-right"> + <mfBootstrapPaginator></mfBootstrapPaginator> + </td> + </tr> </tfoot> </table> </div> - <div class="modal fade" id="deleteJobConfirmation" role="dialog" tabindex="-1" [ngClass]="{'in': visibleAnimate}" *ngIf="deletedRow" [ngStyle]="{'display': visible ? 'block' : 'none', 'opacity': visibleAnimate ? 1 : 0}" (click)="onContainerClicked($event)"> + <div class="modal fade" id="deleteJobConfirmation" role="dialog" tabindex="-1" [ngClass]="{'in': visibleAnimate}" + *ngIf="deletedRow" [ngStyle]="{'display': visible ? 'block' : 'none', 'opacity': visibleAnimate ? 1 : 0}" + (click)="onContainerClicked($event)"> <div class="modal-dialog modal-xg modal-lg"> <div class="modal-content"> <div class="modal-header">
http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/job/job.component.spec.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/job/job.component.spec.ts b/ui/angular/src/app/job/job.component.spec.ts index 2caf041..a8c0ede 100644 --- a/ui/angular/src/app/job/job.component.spec.ts +++ b/ui/angular/src/app/job/job.component.spec.ts @@ -16,9 +16,9 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { JobComponent } from './job.component'; +import {JobComponent} from './job.component'; describe('JobComponent', () => { let component: JobComponent; @@ -26,9 +26,9 @@ describe('JobComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ JobComponent ] + declarations: [JobComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/job/job.component.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/job/job.component.ts b/ui/angular/src/app/job/job.component.ts index 1334f2f..f558de3 100644 --- a/ui/angular/src/app/job/job.component.ts +++ b/ui/angular/src/app/job/job.component.ts @@ -16,13 +16,13 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { Component, OnInit } from "@angular/core"; -import { HttpClient } from "@angular/common/http"; -import { DataTableModule } from "angular2-datatable"; -import { ServiceService } from "../service/service.service"; -import { DatePipe } from "@angular/common"; -import { Router } from "@angular/router"; -import { ToasterModule, ToasterService, ToasterConfig } from "angular2-toaster"; +import {Component, OnInit} from "@angular/core"; +import {HttpClient} from "@angular/common/http"; +import {DataTableModule} from "angular2-datatable"; +import {ServiceService} from "../service/service.service"; +import {DatePipe} from "@angular/common"; +import {Router} from "@angular/router"; +import {ToasterModule, ToasterService, ToasterConfig} from "angular2-toaster"; import * as $ from "jquery"; @Component({ @@ -43,8 +43,8 @@ export class JobComponent implements OnInit { deleteId: string; deleteIndex: number; action: string; - modalWndMsg:string; - isStop:boolean; + modalWndMsg: string; + isStop: boolean; private toasterService: ToasterService; @@ -80,28 +80,28 @@ export class JobComponent implements OnInit { show(row) { var curjob = row.jobName; - this.router.navigate(['/detailed/'+curjob]); + this.router.navigate(['/detailed/' + curjob]); } confirmDelete() { - let self=this; - if(this.isStop){ + let self = this; + if (this.isStop) { $("#save").attr("disabled", "true"); let actionUrl = this.serviceService.config.uri.modifyJobs + "/" + this.deleteId + "?action=" + "stop"; this.http.put(actionUrl, {}).subscribe(data => { - let self=this; - self.hide(); - var result = JSON.parse(JSON.stringify(data)); - self.results[self.deleteIndex].action = 'START'; - self.results[self.deleteIndex].jobState.state = result["job.state"].state; - self.isStop=false; - }, - err => { - this.toasterService.pop("error", "Error!", "Failed to manage job state!"); - console.log("Error when manage job state"); - }); + let self = this; + self.hide(); + var result = JSON.parse(JSON.stringify(data)); + self.results[self.deleteIndex].action = 'START'; + self.results[self.deleteIndex].jobState.state = result["job.state"].state; + self.isStop = false; + }, + err => { + this.toasterService.pop("error", "Error!", "Failed to manage job state!"); + console.log("Error when manage job state"); + }); } - else{ + else { let deleteJob = this.serviceService.config.uri.deleteJob; let deleteUrl = deleteJob + "/" + this.deleteId; $("#save").attr("disabled", "true"); @@ -109,7 +109,7 @@ export class JobComponent implements OnInit { data => { let self = this; self.hide(); - setTimeout(function() { + setTimeout(function () { self.results.splice(self.deleteIndex, 1); }, 0); }, @@ -122,8 +122,8 @@ export class JobComponent implements OnInit { } - stateMag(row){ - if(row.action.toLowerCase()=="stop"){ + stateMag(row) { + if (row.action.toLowerCase() == "stop") { $("#save").removeAttr("disabled"); this.isStop = true; this.modalWndMsg = "Stop the job with the below information?"; @@ -133,17 +133,17 @@ export class JobComponent implements OnInit { this.deleteIndex = this.results.indexOf(row); this.deleteId = row.id; } - else{ + else { let actionUrl = this.serviceService.config.uri.modifyJobs + "/" + row.id + "?action=" + row.action.toLowerCase(); this.http.put(actionUrl, {}).subscribe(data => { - var result = JSON.parse(JSON.stringify(data)); - row.action = (row.action === 'STOP' ? 'START' : 'STOP'); - row.jobState.state = result["job.state"].state; - }, - err => { - this.toasterService.pop("error", "Error!", "Failed to manage job state!"); - console.log("Error when manage job state"); - }); + var result = JSON.parse(JSON.stringify(data)); + row.action = (row.action === 'STOP' ? 'START' : 'STOP'); + row.jobState.state = result["job.state"].state; + }, + err => { + this.toasterService.pop("error", "Error!", "Failed to manage job state!"); + console.log("Error when manage job state"); + }); } } @@ -161,7 +161,7 @@ export class JobComponent implements OnInit { this.http.get(getInstanceUrl).subscribe(data => { row.showDetail = !row.showDetail; this.allInstances = data; - setTimeout(function() { + setTimeout(function () { $(".pagination").css("marginBottom", "-10px"); }, 0); }); @@ -169,7 +169,9 @@ export class JobComponent implements OnInit { } toCamel(myString): string { - return myString.replace(/[.]([a-z])/g, function(g) { return g[1].toUpperCase(); }) + return myString.replace(/[.]([a-z])/g, function (g) { + return g[1].toUpperCase(); + }) } swapJson(json): any { @@ -184,13 +186,13 @@ export class JobComponent implements OnInit { var self = this; let allJobs = this.serviceService.config.uri.allJobs; this.http.get(allJobs).subscribe(data => { - let trans = Object.keys(data).map(function(index) { + let trans = Object.keys(data).map(function (index) { let job = self.swapJson(data[index]); job.showDetail = false; job.action = (job.jobState.toStart === true) ? 'START' : 'STOP'; return job; }); - this.results = Object.assign([],trans).reverse(); + this.results = Object.assign([], trans).reverse(); }); } } http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/loader/loader.component.css ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/loader/loader.component.css b/ui/angular/src/app/loader/loader.component.css index 9eb55e5..44f7bf4 100644 --- a/ui/angular/src/app/loader/loader.component.css +++ b/ui/angular/src/app/loader/loader.component.css @@ -17,8 +17,8 @@ specific language governing permissions and limitations under the License. */ .icon { - color: #fff; - position: absolute; - left: 50%; - padding-top: 20%; - } \ No newline at end of file + color: #fff; + position: absolute; + left: 50%; + padding-top: 20%; +} http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/loader/loader.component.spec.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/loader/loader.component.spec.ts b/ui/angular/src/app/loader/loader.component.spec.ts index af609a5..61757bc 100644 --- a/ui/angular/src/app/loader/loader.component.spec.ts +++ b/ui/angular/src/app/loader/loader.component.spec.ts @@ -16,9 +16,9 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { LoaderComponent } from './loader.component'; +import {LoaderComponent} from './loader.component'; describe('CreateMeasureComponent', () => { let component: LoaderComponent; @@ -26,9 +26,9 @@ describe('CreateMeasureComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ LoaderComponent ] + declarations: [LoaderComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/loader/loader.component.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/loader/loader.component.ts b/ui/angular/src/app/loader/loader.component.ts index 801f97d..0262396 100644 --- a/ui/angular/src/app/loader/loader.component.ts +++ b/ui/angular/src/app/loader/loader.component.ts @@ -1,28 +1,30 @@ -import { Component, OnInit, OnDestroy } from "@angular/core"; -import { Subscription } from "rxjs/Subscription"; -import { LoaderService } from "./loader.service"; -import { LoadingState } from "./loader.state"; +import {Component, OnInit, OnDestroy} from "@angular/core"; +import {Subscription} from "rxjs/Subscription"; +import {LoaderService} from "./loader.service"; +import {LoadingState} from "./loader.state"; @Component({ - selector: "app-loader", - templateUrl: "./loader.component.html", - styleUrls: ["./loader.component.css"] + selector: "app-loader", + templateUrl: "./loader.component.html", + styleUrls: ["./loader.component.css"] }) export class LoaderComponent implements OnInit { - show = false; - private subscription: Subscription; - constructor( - private loaderService: LoaderService - ) { } + show = false; + private subscription: Subscription; - ngOnInit() { - this.subscription = this.loaderService.LoadingState - .subscribe((state: LoadingState) => { - this.show = state.show; - }); - } + constructor( + private loaderService: LoaderService + ) { + } - ngOnDestroy() { - this.subscription.unsubscribe(); - } -} \ No newline at end of file + ngOnInit() { + this.subscription = this.loaderService.LoadingState + .subscribe((state: LoadingState) => { + this.show = state.show; + }); + } + + ngOnDestroy() { + this.subscription.unsubscribe(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/loader/loader.service.spec.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/loader/loader.service.spec.ts b/ui/angular/src/app/loader/loader.service.spec.ts index 8d0cd3a..522dbea 100644 --- a/ui/angular/src/app/loader/loader.service.spec.ts +++ b/ui/angular/src/app/loader/loader.service.spec.ts @@ -16,9 +16,9 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { LoaderService } from './loader.service'; +import {LoaderService} from './loader.service'; describe('CreateMeasureComponent', () => { let component: LoaderService; @@ -26,9 +26,9 @@ describe('CreateMeasureComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ LoaderService ] + declarations: [LoaderService] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/loader/loader.service.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/loader/loader.service.ts b/ui/angular/src/app/loader/loader.service.ts index acd4eb5..2844ae9 100644 --- a/ui/angular/src/app/loader/loader.service.ts +++ b/ui/angular/src/app/loader/loader.service.ts @@ -16,23 +16,24 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { Injectable } from "@angular/core"; -import { Subject } from "rxjs/Subject"; -import { LoadingState } from "./loader.state"; +import {Injectable} from "@angular/core"; +import {Subject} from "rxjs/Subject"; +import {LoadingState} from "./loader.state"; @Injectable() export class LoaderService { - private loaderSubject = new Subject<LoadingState>(); - LoadingState = this.loaderSubject.asObservable(); + private loaderSubject = new Subject<LoadingState>(); + LoadingState = this.loaderSubject.asObservable(); - constructor() { } + constructor() { + } - show() { - this.loaderSubject.next(<LoadingState>{show: true}); - } + show() { + this.loaderSubject.next(<LoadingState>{show: true}); + } - hide() { - this.loaderSubject.next(<LoadingState>{show: false}); - } -} \ No newline at end of file + hide() { + this.loaderSubject.next(<LoadingState>{show: false}); + } +} http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/loader/loader.state.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/loader/loader.state.ts b/ui/angular/src/app/loader/loader.state.ts index fc56233..b0ef236 100644 --- a/ui/angular/src/app/loader/loader.state.ts +++ b/ui/angular/src/app/loader/loader.state.ts @@ -17,5 +17,5 @@ specific language governing permissions and limitations under the License. */ export interface LoadingState { - show: boolean; -} \ No newline at end of file + show: boolean; +} http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/login/login.component.css ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/login/login.component.css b/ui/angular/src/app/login/login.component.css index 0091b44..4d5a5b1 100644 --- a/ui/angular/src/app/login/login.component.css +++ b/ui/angular/src/app/login/login.component.css @@ -17,6 +17,7 @@ specific language governing permissions and limitations under the License. */ @import url("../../../node_modules/bootstrap/dist/css/bootstrap.css"); + #content { background-color: #1a237e; background-position: center center; @@ -25,6 +26,7 @@ under the License. background-size: cover; height: 100vh; } + hr { margin-bottom: 30px; } @@ -79,4 +81,4 @@ hr { padding: 8px 12px; border-radius: 4px; text-align: center; -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/login/login.component.html ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/login/login.component.html b/ui/angular/src/app/login/login.component.html index 3e1c47e..c77925c 100644 --- a/ui/angular/src/app/login/login.component.html +++ b/ui/angular/src/app/login/login.component.html @@ -44,14 +44,18 @@ under the License. <div style="text-align:center;margin-bottom:30px;"> <img src="../assets/img/logo.png" class="img-rounded" style="width:80%;"> </div> - <input type="input" class="form-control" placeholder="username" autocomplete="on" style="margin-bottom:20px;" (focus)="focus($event)"> - <input type="password" class="form-control" placeholder="password" autocomplete="on" (keyup)="submit($event)" (focus)="focus($event)"> + <input type="input" class="form-control" placeholder="username" autocomplete="on" style="margin-bottom:20px;" + (focus)="focus($event)"> + <input type="password" class="form-control" placeholder="password" autocomplete="on" (keyup)="submit($event)" + (focus)="focus($event)"> <div class="checkbox"> <label style="color:white;"> <input type="checkbox" value="remember-me" checked>Remember me </label> </div> - <button class="btn btn-default btn-large btn-block" id="login-btn" (click)="login()" style="margin-bottom: 20px;">Log in</button> + <button class="btn btn-default btn-large btn-block" id="login-btn" (click)="login()" + style="margin-bottom: 20px;">Log in + </button> <div id="loginMsg">Login failed. Try again.</div> </div> </div> http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/login/login.component.spec.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/login/login.component.spec.ts b/ui/angular/src/app/login/login.component.spec.ts index db3a317..8475f0a 100644 --- a/ui/angular/src/app/login/login.component.spec.ts +++ b/ui/angular/src/app/login/login.component.spec.ts @@ -16,9 +16,9 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { LoginComponent } from './login.component'; +import {LoginComponent} from './login.component'; describe('LoginComponent', () => { let component: LoginComponent; @@ -26,9 +26,9 @@ describe('LoginComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ LoginComponent ] + declarations: [LoginComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/login/login.component.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/login/login.component.ts b/ui/angular/src/app/login/login.component.ts index 6c80431..187ef00 100644 --- a/ui/angular/src/app/login/login.component.ts +++ b/ui/angular/src/app/login/login.component.ts @@ -16,12 +16,12 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { Component, OnInit } from "@angular/core"; -import { ServiceService } from "../service/service.service"; -import { UserService } from "../service/user.service"; -import { Router } from "@angular/router"; -import { LocationStrategy, HashLocationStrategy } from "@angular/common"; -import { HttpClient } from "@angular/common/http"; +import {Component, OnInit} from "@angular/core"; +import {ServiceService} from "../service/service.service"; +import {UserService} from "../service/user.service"; +import {Router} from "@angular/router"; +import {LocationStrategy, HashLocationStrategy} from "@angular/common"; +import {HttpClient} from "@angular/common/http"; @Component({ selector: "app-login", @@ -34,12 +34,15 @@ export class LoginComponent implements OnInit { timestamp: Date; fullName: string; results: any; + constructor( private router: Router, private http: HttpClient, public serviceService: ServiceService, public userService: UserService - ) {} + ) { + } + loginBtnWait() { $("#login-btn") .addClass("disabled") @@ -80,7 +83,7 @@ export class LoginComponent implements OnInit { var password = $("input:eq(1)").val(); var loginUrl = this.serviceService.config.uri.login; this.loginBtnWait(); - this.http.post(loginUrl, { username: name, password: password }).subscribe( + this.http.post(loginUrl, {username: name, password: password}).subscribe( data => { this.results = data; if (this.results.status == 0) { @@ -105,9 +108,10 @@ export class LoginComponent implements OnInit { } ); } + ngOnInit() { this.ntAccount = this.userService.getCookie("ntAccount"); this.fullName = this.userService.getCookie("fullName"); this.timestamp = new Date(); } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/ac/ac.component.css ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/ac/ac.component.css b/ui/angular/src/app/measure/create-measure/ac/ac.component.css index 83562af..aa8c215 100644 --- a/ui/angular/src/app/measure/create-measure/ac/ac.component.css +++ b/ui/angular/src/app/measure/create-measure/ac/ac.component.css @@ -16,7 +16,6 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ - @import url('../../../../../node_modules/angular2-toaster/toaster.css'); @import url('../../measure.component.css'); @@ -59,19 +58,19 @@ div.tree div.tree-children::before { left: 5px } -div.tree treenode>div>.node-wrapper { +div.tree treenode > div > .node-wrapper { margin-left: 24px } -div.tree treenode>div>.node-wrapper>.node-content-wrapper { +div.tree treenode > div > .node-wrapper > .node-content-wrapper { margin-left: 4px } -div.tree treenode>div.tree-node-leaf>.node-wrapper { +div.tree treenode > div.tree-node-leaf > .node-wrapper { margin-left: 0 } -div.tree treenode>div::before { +div.tree treenode > div::before { content: ""; position: absolute; border-bottom: 1px dotted #23527c; @@ -80,7 +79,7 @@ div.tree treenode>div::before { left: 7px } -div.tree treenode>div .toggle-children-wrapper { +div.tree treenode > div .toggle-children-wrapper { width: 13px; height: 13px; border: 1px solid #23527c; @@ -93,7 +92,7 @@ div.tree treenode>div .toggle-children-wrapper { z-index: 1 } -div.tree treenode>div .toggle-children-wrapper::before { +div.tree treenode > div .toggle-children-wrapper::before { content: ""; display: inline-block; width: 7px; @@ -103,7 +102,7 @@ div.tree treenode>div .toggle-children-wrapper::before { left: 2px } -div.tree treenode>div .toggle-children-wrapper.toggle-children-wrapper-collapsed::after { +div.tree treenode > div .toggle-children-wrapper.toggle-children-wrapper-collapsed::after { content: ""; display: inline-block; height: 7px; @@ -113,18 +112,18 @@ div.tree treenode>div .toggle-children-wrapper.toggle-children-wrapper-collapsed left: 5px } -div.tree treenode>div .toggle-children-wrapper .toggle-children { +div.tree treenode > div .toggle-children-wrapper .toggle-children { display: none } -div.tree treenode>div .node-content-wrapper { +div.tree treenode > div .node-content-wrapper { margin-left: 4px } -div.tree>treenode>div::before { +div.tree > treenode > div::before { left: 14px } -div.tree>treenode>div>.node-wrapper>treenodeexpander>.toggle-children-wrapper { +div.tree > treenode > div > .node-wrapper > treenodeexpander > .toggle-children-wrapper { left: 22px } http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/ac/ac.component.html ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/ac/ac.component.html b/ui/angular/src/app/measure/create-measure/ac/ac.component.html index bcdddd3..648ae7d 100644 --- a/ui/angular/src/app/measure/create-measure/ac/ac.component.html +++ b/ui/angular/src/app/measure/create-measure/ac/ac.component.html @@ -67,7 +67,8 @@ under the License. </ul> </div> <div id="step-1" *ngIf="currentStep == 1" class="formStep"> - <label class="stepDesc">This step let you choose the single source of truth for data quality comparision with target. Currently you can only select the attributes from one schema</label> + <label class="stepDesc">This step let you choose the single source of truth for data quality comparision with + target. Currently you can only select the attributes from one schema</label> <div class="container-fluid"> <div class="col-md-4 col-lg-4 col-sm-4"> <fieldset> @@ -84,32 +85,34 @@ under the License. <div style="margin-top:10px;"> <label>View schema:</label> <i style="color:#fff;font-weight: bold;">{{currentDBstr}}{{currentTable}} - </i> + </i> </div> <div style="margin-top:5px;"> <table class="table table-striped"> <thead> - <tr style="background-color:#7D95CC"> - <th> - <input type="checkbox" (click)="toggleAll()" [checked]="selectedAll" /> - </th> - <th>Column Name</th> - <th>Type</th> - <th>Comment</th> - </tr> + <tr style="background-color:#7D95CC"> + <th> + <input type="checkbox" (click)="toggleAll()" [checked]="selectedAll"/> + </th> + <th>Column Name</th> + <th>Type</th> + <th>Comment</th> + </tr> </thead> <tbody> - <tr *ngIf="!schemaCollection || schemaCollection.length == 0"> - <td colspan="5" style="text-align:center"><span class="highlight">Please select a schema from the left tree first</span></td> - </tr> - <tr *ngFor="let row of schemaCollection"> - <td> - <input type="checkbox" (click)='toggleSelection(row)' [checked]="row.selected" value={{row.name}} /> - </td> - <td>{{row.name}}</td> - <td>{{row.type}}</td> - <td>{{row.comment}}</td> - </tr> + <tr *ngIf="!schemaCollection || schemaCollection.length == 0"> + <td colspan="5" style="text-align:center"><span class="highlight">Please select a schema from the left tree first</span> + </td> + </tr> + <tr *ngFor="let row of schemaCollection"> + <td> + <input type="checkbox" (click)='toggleSelection(row)' [checked]="row.selected" + value={{row.name}}/> + </td> + <td>{{row.name}}</td> + <td>{{row.type}}</td> + <td>{{row.comment}}</td> + </tr> </tbody> </table> </div> @@ -146,27 +149,28 @@ under the License. <div style="margin-top:5px;"> <table st-table="schemaCollectionTarget" class="table table-striped"> <thead> - <tr style="background-color:#7D95CC"> - <th> - <input type="checkbox" (click)="toggleAllTarget()" [checked]="selectedAllTarget" /> - </th> - <th>Column Name</th> - <th>Type</th> - <th>Comment</th> - </tr> + <tr style="background-color:#7D95CC"> + <th> + <input type="checkbox" (click)="toggleAllTarget()" [checked]="selectedAllTarget"/> + </th> + <th>Column Name</th> + <th>Type</th> + <th>Comment</th> + </tr> </thead> <tbody> - <tr *ngIf="!schemaCollectionTarget || schemaCollectionTarget.length == 0"> - <td colspan="5" style="text-align:center"><span class="highlight">Please select a schema from the left tree first</span></td> - </tr> - <tr *ngFor="let row of schemaCollectionTarget"> - <td> - <input type="checkbox" (click)='toggleSelectionTarget(row)' [checked]="row.selected" /> - </td> - <td>{{row.name}}</td> - <td>{{row.type}}</td> - <td>{{row.comment}}</td> - </tr> + <tr *ngIf="!schemaCollectionTarget || schemaCollectionTarget.length == 0"> + <td colspan="5" style="text-align:center"><span class="highlight">Please select a schema from the left tree first</span> + </td> + </tr> + <tr *ngFor="let row of schemaCollectionTarget"> + <td> + <input type="checkbox" (click)='toggleSelectionTarget(row)' [checked]="row.selected"/> + </td> + <td>{{row.name}}</td> + <td>{{row.type}}</td> + <td>{{row.comment}}</td> + </tr> </tbody> </table> </div> @@ -185,7 +189,8 @@ under the License. </div> </div> <div id="step-3" *ngIf="currentStep == 3" class="formStep"> - <label class="stepDesc">This step let you map the target data fields to source fields, you can choose the related fields from dropdown list of source</label> + <label class="stepDesc">This step let you map the target data fields to source fields, you can choose the + related fields from dropdown list of source</label> <div class="container-fluid"> <div class="col-md-12 col-lg-12 col-sm-12"> <fieldset> @@ -196,39 +201,44 @@ under the License. <div class="container col-md-12 col-lg-12 col-sm-12"> <table class="table table-striped"> <thead> - <tr style="background-color:#7D95CC;font-size:20px"> - <th style="width:40%;">Target Fields</th> - <th style="width:10%;text-align:center">Map To</th> - <th style="width:40%;text-align:center">Source Fields</th> - </tr> + <tr style="background-color:#7D95CC;font-size:20px"> + <th style="width:40%;">Target Fields</th> + <th style="width:10%;text-align:center">Map To</th> + <th style="width:40%;text-align:center">Source Fields</th> + </tr> </thead> <tbody> - <tr *ngFor="let item of selectionTarget; let i=index"> - <td>{{currentDBTarget}}.{{currentTableTarget}}.{{item}}</td> - <td style="text-align:center;"> - <select class="form-control" style="background:#00FFFF;font-weight:bold" id="mapRule" name='mapRule-{{i}}' [(ngModel)]="matches[i]" value="matches[i]"> - <option *ngFor="let func of matchFunctions">{{func}}</option> - </select> - </td> - <td> - <select class="form-control" [(ngModel)]='mappings[i]' name="mappings{{i}}" (ngModelChange)="addMapping($event,i)" value="mappings[i]"> - <option *ngFor="let itemSrc of selection" [ngValue]="itemSrc"> - {{currentDB}}.{{currentTable}}.{{itemSrc}}</option> - </select> - </td> - </tr> + <tr *ngFor="let item of selectionTarget; let i=index"> + <td>{{currentDBTarget}}.{{currentTableTarget}}.{{item}}</td> + <td style="text-align:center;"> + <select class="form-control" style="background:#00FFFF;font-weight:bold" id="mapRule" + name='mapRule-{{i}}' [(ngModel)]="matches[i]" value="matches[i]"> + <option *ngFor="let func of matchFunctions">{{func}}</option> + </select> + </td> + <td> + <select class="form-control" [(ngModel)]='mappings[i]' name="mappings{{i}}" + (ngModelChange)="addMapping($event,i)" value="mappings[i]"> + <option *ngFor="let itemSrc of selection" [ngValue]="itemSrc"> + {{currentDB}}.{{currentTable}}.{{itemSrc}} + </option> + </select> + </td> + </tr> </tbody> </table> <p> <label style="color:#B2C831">Accuracy Calculation Formula as Below:</label> </p> - <div class="col-md-12 col-lg-12 col-sm-12" style="color:#fff;font-size:16px;display: flex;align-items: center"> + <div class="col-md-12 col-lg-12 col-sm-12" + style="color:#fff;font-size:16px;display: flex;align-items: center"> <div class="" style="text-align:right;display:block;float:left;width:20%;"> Accuracy Rate(%) = </div> <div class="" style="text-align:center;display:block;float:left;margin:0 10px 0 10px"> <div class="formula-text-up" style="border-bottom:1px solid;"> - Total Count of Matched records between <span class="badge">{{selectionTarget.length}}</span> <span style="color:green;">{{currentTableTarget}}</span> and <span class="badge">{{mappings.length}} + Total Count of Matched records between <span class="badge">{{selectionTarget.length}}</span> + <span style="color:green;">{{currentTableTarget}}</span> and <span class="badge">{{mappings.length}} </span> <span style="color:green;">{{currentTable}}</span> fields </div> <div> @@ -255,7 +265,8 @@ under the License. </div> </div> <div id="step-4" *ngIf="currentStep == 4" class="formStep"> - <label class="stepDesc">Please complete the partition configuration for {{currentTable}} and {{currentTableTarget}}</label> + <label class="stepDesc">Please complete the partition configuration for {{currentTable}} and + {{currentTableTarget}}</label> <div class="container-fluid"> <div class="col-md-12 col-lg-12 col-sm-12"> <fieldset> @@ -267,13 +278,15 @@ under the License. <div class="form-group" style="text-align:center"> {{currentDB}}.{{currentTable}} </div> - <app-configuration [data]="srcconfig" [location]="src_location" (event)="getSrc($event)"></app-configuration> + <app-configuration [data]="srcconfig" [location]="src_location" + (event)="getSrc($event)"></app-configuration> </div> <div class="col-md-6 col-lg-6 col-sm-6" id="target"> <div class="form-group" style="text-align:center"> {{currentDB}}.{{currentTableTarget}} </div> - <app-configuration [data]="tgtconfig" [location]="tgt_location" (event)="getTgt($event)"></app-configuration> + <app-configuration [data]="tgtconfig" [location]="tgt_location" + (event)="getTgt($event)"></app-configuration> </div> </div> </fieldset> @@ -299,12 +312,15 @@ under the License. </legend> <div class="y-scrollable"> <div class="col-md-12 col-lg-12 col-sm-12" style="margin-top:20px;"> - <div class="form-group" [ngClass]="{'has-error':acName.dirty&&acName.invalid, 'has-success':acName.valid}"> + <div class="form-group" + [ngClass]="{'has-error':acName.dirty&&acName.invalid, 'has-success':acName.valid}"> <label class="col-md-2 col-lg-2 col-sm-2 control-label"> Measure Name<span class="symbol required"></span>: </label> <div class="col-md-10 col-lg-10 col-sm-10 "> - <input type="text" class="form-control" [(ngModel)]="name" name="acName" #acName="ngModel" placeholder="Please input the measure name" required pattern="^[a-zA-Z0-9_-]*$" id="acName"> + <input type="text" class="form-control" [(ngModel)]="name" name="acName" #acName="ngModel" + placeholder="Please input the measure name" required pattern="^[a-zA-Z0-9_-]*$" + id="acName"> <span class="error text-small block " *ngIf="acName.dirty && (acName.errors?.required)"> Measure Name is required</span> <span class="error text-small block " *ngIf="acName.dirty && (acName.errors?.pattern)">Only letter, number, "-" and "_" are allowed</span> @@ -317,7 +333,8 @@ under the License. Measure Description: </label> <div class="col-md-10 col-lg-10 col-sm-10 "> - <input type="text" class="form-control" [(ngModel)]="desc" placeholder="Please input detailed description of your measure" name="desc"> + <input type="text" class="form-control" [(ngModel)]="desc" + placeholder="Please input detailed description of your measure" name="desc"> </div> </div> </div> @@ -340,8 +357,10 @@ under the License. Source:<span class="symbol required"></span>: </label> <div class="col-md-10 col-lg-10 col-sm-10"> - <input type="text" class="form-control" name="DataAsset" [(ngModel)]="currentTable" #prDataSource="ngModel" name="prDataSource" [readonly]="true" required> - <span class="error text-small block " *ngIf="prDataSource.dirty && (prDataSource.errors?.required)">Data source is required</span> + <input type="text" class="form-control" name="DataAsset" [(ngModel)]="currentTable" + #prDataSource="ngModel" name="prDataSource" [readonly]="true" required> + <span class="error text-small block " + *ngIf="prDataSource.dirty && (prDataSource.errors?.required)">Data source is required</span> </div> </div> </div> @@ -351,8 +370,10 @@ under the License. Target:<span class="symbol required"></span>: </label> <div class="col-md-10 col-lg-10 col-sm-10"> - <input type="text" class="form-control" name="DataAsset" [(ngModel)]="currentTableTarget" #prDataTarget="ngModel" name="prDataTarget" [readonly]="true" required> - <span class="error text-small block " *ngIf="prDataTarget.dirty && (prDataTarget.errors?.required)">Data target is required</span> + <input type="text" class="form-control" name="DataAsset" [(ngModel)]="currentTableTarget" + #prDataTarget="ngModel" name="prDataTarget" [readonly]="true" required> + <span class="error text-small block " + *ngIf="prDataTarget.dirty && (prDataTarget.errors?.required)">Data target is required</span> </div> </div> </div> @@ -369,7 +390,9 @@ under the License. </div> <div style="color:#b2c831"> <p> - <i class="fa fa-info-circle"></i> After submitted, please go to "<a class="bark-link" routerLink="/measures">Measures</a>" to check the measure status + <i class="fa fa-info-circle"></i> After submitted, please go to "<a class="bark-link" + routerLink="/measures">Measures</a>" + to check the measure status </p> </div> </fieldset> @@ -385,7 +408,9 @@ under the License. </div> </div> </div> - <div class="modal fade" id="confirm" role="dialog" #modal tabindex="-1" [ngClass]="{'in': visibleAnimate}" [ngStyle]="{'display': visible ? 'block' : 'none', 'opacity': visibleAnimate ? 1 : 0}" (click)="onContainerClicked($event)"> + <div class="modal fade" id="confirm" role="dialog" #modal tabindex="-1" [ngClass]="{'in': visibleAnimate}" + [ngStyle]="{'display': visible ? 'block' : 'none', 'opacity': visibleAnimate ? 1 : 0}" + (click)="onContainerClicked($event)"> <div class="modal-dialog modal-xg modal-lg"> <div class="modal-content"> <div class="modal-header"> @@ -522,13 +547,15 @@ under the License. <p> <label style="color:#B2C831">Accuracy Calculation Formula as Below:</label> </p> - <div class="col-md-12 col-lg-12 col-sm-12" style="color:#fff;font-size:16px;display: flex; align-items: center"> + <div class="col-md-12 col-lg-12 col-sm-12" + style="color:#fff;font-size:16px;display: flex; align-items: center"> <div class="" style="text-align:right;display:block;float:left;width:20%;"> Accuracy Rate(%) = </div> <div class="" style="text-align:center;display:block;float:left;margin:0 10px 0 10px"> <div class="formula-text-up" style="border-bottom:1px solid;"> - Total Count of Matched records between <span class="badge">{{selectionTarget.length}}</span> <span style="color:green;">{{currentTableTarget}}</span> and <span class="badge">{{mappings.length}} + Total Count of Matched records between <span class="badge">{{selectionTarget.length}}</span> + <span style="color:green;">{{currentTableTarget}}</span> and <span class="badge">{{mappings.length}} </span> <span style="color:green;">{{currentTable}}</span> fields </div> <div> http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/ac/ac.component.spec.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/ac/ac.component.spec.ts b/ui/angular/src/app/measure/create-measure/ac/ac.component.spec.ts index ee0762d..20f793d 100644 --- a/ui/angular/src/app/measure/create-measure/ac/ac.component.spec.ts +++ b/ui/angular/src/app/measure/create-measure/ac/ac.component.spec.ts @@ -16,9 +16,9 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { AcComponent } from './ac.component'; +import {AcComponent} from './ac.component'; describe('AcComponent', () => { let component: AcComponent; @@ -26,9 +26,9 @@ describe('AcComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ AcComponent ] + declarations: [AcComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/ac/ac.component.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/ac/ac.component.ts b/ui/angular/src/app/measure/create-measure/ac/ac.component.ts index fd51c22..9492ad8 100644 --- a/ui/angular/src/app/measure/create-measure/ac/ac.component.ts +++ b/ui/angular/src/app/measure/create-measure/ac/ac.component.ts @@ -16,16 +16,16 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { Component, OnInit, AfterViewChecked, ViewChild } from "@angular/core"; -import { FormControl } from "@angular/forms"; -import { FormsModule, Validator } from "@angular/forms"; -import { ServiceService } from "../../../service/service.service"; -import { TREE_ACTIONS, KEYS, IActionMapping, ITreeOptions } from "angular-tree-component"; -import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; -import { ToasterModule, ToasterService } from "angular2-toaster"; +import {Component, OnInit, AfterViewChecked, ViewChild} from "@angular/core"; +import {FormControl} from "@angular/forms"; +import {FormsModule, Validator} from "@angular/forms"; +import {ServiceService} from "../../../service/service.service"; +import {TREE_ACTIONS, KEYS, IActionMapping, ITreeOptions} from "angular-tree-component"; +import {BrowserAnimationsModule} from "@angular/platform-browser/animations"; +import {ToasterModule, ToasterService} from "angular2-toaster"; import * as $ from "jquery"; -import { Router } from "@angular/router"; -import { HttpClient } from "@angular/common/http"; +import {Router} from "@angular/router"; +import {HttpClient} from "@angular/common/http"; class node { name: string; @@ -36,20 +36,24 @@ class node { parent: string; location: string; } + class Col { name: string; type: string; comment: string; selected: boolean; + constructor(name: string, type: string, comment: string, selected: boolean) { this.name = name; this.type = type; this.comment = comment; this.selected = false; } + getSelected() { return this.selected; } + setSelected(selected) { this.selected = selected; } @@ -325,7 +329,7 @@ export class AcComponent implements OnInit, AfterViewChecked { } } - formValidation = function(step) { + formValidation = function (step) { if (step == undefined) { step = this.currentStep; } @@ -350,9 +354,11 @@ export class AcComponent implements OnInit, AfterViewChecked { prev(form) { this.currentStep--; } + goTo(i) { this.currentStep = i; } + submit(form) { // form.$setPristine(); // this.finalgrp = []; @@ -469,13 +475,13 @@ export class AcComponent implements OnInit, AfterViewChecked { if (!this.tgt_needpath || this.tgt_path == "") { this.deletePredicates(1); } - var mappingRule = function(src, tgt, matches) { + var mappingRule = function (src, tgt, matches) { var rules; rules = "source." + src + matches + "target." + tgt; return rules; }; var self = this; - var rules = this.mappings.map(function(item, i) { + var rules = this.mappings.map(function (item, i) { return mappingRule(item, self.selectionTarget[i], self.matches[i]); }); rule = rules.join(" AND "); @@ -485,11 +491,11 @@ export class AcComponent implements OnInit, AfterViewChecked { setTimeout(() => (this.visibleAnimate = true), 100); } - deleteUnit(index){ + deleteUnit(index) { delete this.newMeasure["data.sources"][index]["connectors"][0]["data.unit"]; } - deletePredicates(index){ + deletePredicates(index) { delete this.newMeasure["data.sources"][index]["connectors"][0]["predicates"]; } @@ -504,7 +510,7 @@ export class AcComponent implements OnInit, AfterViewChecked { }, err => { let response = JSON.parse(err.error); - if(response.code === '40901'){ + if (response.code === '40901') { this.toasterService.pop("error", "Error!", "Measure name already exists!"); } else { this.toasterService.pop("error", "Error!", "Error when creating measure"); @@ -585,6 +591,7 @@ export class AcComponent implements OnInit, AfterViewChecked { nodeList: object[]; nodeListTarget: object[]; + constructor( toasterService: ToasterService, private http: HttpClient, @@ -637,9 +644,9 @@ export class AcComponent implements OnInit, AfterViewChecked { }); $("fieldset").height( $(stepSelection).height() - - $(stepSelection + ">.stepDesc").height() - - $(".btn-container").height() - - 130 + $(stepSelection + ">.stepDesc").height() - + $(".btn-container").height() - + 130 ); $(".y-scrollable").css({ // 'max-height': $('fieldset').height()- $('.add-dataset').outerHeight() http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/configuration/configuration.component.html ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/configuration/configuration.component.html b/ui/angular/src/app/measure/create-measure/configuration/configuration.component.html index 9f4a926..713017b 100644 --- a/ui/angular/src/app/measure/create-measure/configuration/configuration.component.html +++ b/ui/angular/src/app/measure/create-measure/configuration/configuration.component.html @@ -22,7 +22,8 @@ under the License. Where: </label> <div class="col-md-10 col-lg-10 col-sm-10 "> - <input type="text" class="form-control" id="where" name="where" placeholder=" dt=#YYYYMMdd# AND hour=#HH#" [(ngModel)]="where" (change)="upward()"> + <input type="text" class="form-control" id="where" name="where" placeholder=" dt=#YYYYMMdd# AND hour=#HH#" + [(ngModel)]="where" (change)="upward()"> </div> </div> </div> @@ -66,6 +67,7 @@ under the License. please write the Done file path relative to {{location}} </div> <div style="margin-left:45px"> - <input type="text" class="form-control" id="path" [(ngModel)]="path" name="filepath" (change)="upward()" placeholder="/dt=#YYYYMMdd#/hour=#HH#/_DONE"> + <input type="text" class="form-control" id="path" [(ngModel)]="path" name="filepath" (change)="upward()" + placeholder="/dt=#YYYYMMdd#/hour=#HH#/_DONE"> </div> </div> http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/configuration/configuration.component.spec.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/configuration/configuration.component.spec.ts b/ui/angular/src/app/measure/create-measure/configuration/configuration.component.spec.ts index a16f934..20262a2 100644 --- a/ui/angular/src/app/measure/create-measure/configuration/configuration.component.spec.ts +++ b/ui/angular/src/app/measure/create-measure/configuration/configuration.component.spec.ts @@ -17,9 +17,9 @@ specific language governing permissions and limitations under the License. */ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { ConfigurationComponent } from './configuration.component'; +import {ConfigurationComponent} from './configuration.component'; describe('ConfigurationComponent', () => { let component: ConfigurationComponent; @@ -27,9 +27,9 @@ describe('ConfigurationComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ ConfigurationComponent ] + declarations: [ConfigurationComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/configuration/configuration.component.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/configuration/configuration.component.ts b/ui/angular/src/app/measure/create-measure/configuration/configuration.component.ts index 5d0fac4..ff86f99 100644 --- a/ui/angular/src/app/measure/create-measure/configuration/configuration.component.ts +++ b/ui/angular/src/app/measure/create-measure/configuration/configuration.component.ts @@ -17,7 +17,7 @@ specific language governing permissions and limitations under the License. */ -import { Component, OnInit, EventEmitter, Input, Output } from "@angular/core"; +import {Component, OnInit, EventEmitter, Input, Output} from "@angular/core"; import * as $ from "jquery"; @Component({ @@ -38,7 +38,9 @@ export class ConfigurationComponent implements OnInit { }; @Input() location: string; - constructor() {} + constructor() { + } + num: number; path: string; where: string; @@ -117,4 +119,4 @@ export class ConfigurationComponent implements OnInit { this.needpath = this.data.needpath; this.path = this.data.path; } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/create-measure.component.css ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/create-measure.component.css b/ui/angular/src/app/measure/create-measure/create-measure.component.css index af70368..ad67a18 100644 --- a/ui/angular/src/app/measure/create-measure/create-measure.component.css +++ b/ui/angular/src/app/measure/create-measure/create-measure.component.css @@ -16,7 +16,6 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ - @import url('../../../../node_modules/angular2-toaster/toaster.css'); @import url('../measure.component.css'); @@ -45,19 +44,19 @@ div.tree div.tree-children::before { left: 5px } -div.tree treenode>div>.node-wrapper { +div.tree treenode > div > .node-wrapper { margin-left: 24px } -div.tree treenode>div>.node-wrapper>.node-content-wrapper { +div.tree treenode > div > .node-wrapper > .node-content-wrapper { margin-left: 4px } -div.tree treenode>div.tree-node-leaf>.node-wrapper { +div.tree treenode > div.tree-node-leaf > .node-wrapper { margin-left: 0 } -div.tree treenode>div::before { +div.tree treenode > div::before { content: ""; position: absolute; border-bottom: 1px dotted #23527c; @@ -66,7 +65,7 @@ div.tree treenode>div::before { left: 7px } -div.tree treenode>div .toggle-children-wrapper { +div.tree treenode > div .toggle-children-wrapper { width: 13px; height: 13px; border: 1px solid #23527c; @@ -79,7 +78,7 @@ div.tree treenode>div .toggle-children-wrapper { z-index: 1 } -div.tree treenode>div .toggle-children-wrapper::before { +div.tree treenode > div .toggle-children-wrapper::before { content: ""; display: inline-block; width: 7px; @@ -89,7 +88,7 @@ div.tree treenode>div .toggle-children-wrapper::before { left: 2px } -div.tree treenode>div .toggle-children-wrapper.toggle-children-wrapper-collapsed::after { +div.tree treenode > div .toggle-children-wrapper.toggle-children-wrapper-collapsed::after { content: ""; display: inline-block; height: 7px; @@ -99,19 +98,19 @@ div.tree treenode>div .toggle-children-wrapper.toggle-children-wrapper-collapsed left: 5px } -div.tree treenode>div .toggle-children-wrapper .toggle-children { +div.tree treenode > div .toggle-children-wrapper .toggle-children { display: none } -div.tree treenode>div .node-content-wrapper { +div.tree treenode > div .node-content-wrapper { margin-left: 4px } -div.tree>treenode>div::before { +div.tree > treenode > div::before { left: 14px } -div.tree>treenode>div>.node-wrapper>treenodeexpander>.toggle-children-wrapper { +div.tree > treenode > div > .node-wrapper > treenodeexpander > .toggle-children-wrapper { left: 22px } http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/create-measure.component.html ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/create-measure.component.html b/ui/angular/src/app/measure/create-measure/create-measure.component.html index 5cbbd42..22ff6b6 100644 --- a/ui/angular/src/app/measure/create-measure/create-measure.component.html +++ b/ui/angular/src/app/measure/create-measure/create-measure.component.html @@ -22,164 +22,168 @@ under the License. </div> <div class="row"> <div class="row"> - <div class="col-lg-6 col-md-6 col-sm-6 ruletypes"> - <section id="panel-1" class="panel panel-red" style="cursor:pointer" (click)="click('ac')"> - <div class="panel-heading"> - <span style="font-size:20px">Accuracy</span> - <span class="pull-right" style="font-size:20px"> + <div class="col-lg-6 col-md-6 col-sm-6 ruletypes"> + <section id="panel-1" class="panel panel-red" style="cursor:pointer" (click)="click('ac')"> + <div class="panel-heading"> + <span style="font-size:20px">Accuracy</span> + <span class="pull-right" style="font-size:20px"> <span class="fa fa-arrow-circle-right" (click)="click('ac')"></span> </span> - </div> - <div class="swMain panel-body"> - <label class="label-definition">Definition: Measured by how the values agree with an identified source of truth</label> - <ul style="border-radius:0; background: none"> - <li> - <a class="selected"> - <div class="stepNumber"> - 1 - </div> - <span class="stepDesc text-small"> Choose Source </span> - </a> - </li> - <li> - <a> - <div class="stepNumber"> - 2 - </div> - <span class="stepDesc text-small"> Choose Target </span> - </a> - </li> - <li> - <a> - <div class="stepNumber"> - 3 - </div> - <span class="stepDesc text-small"> Mapping Source and Target </span> - </a> - </li> - <li> - <a> - <div class="stepNumber"> - 4 - </div> - <span class="stepDesc text-small"> Partition Configuration </span> - </a> - </li> - <li> - <a> - <div class="stepNumber"> - 5 - </div> - <span class="stepDesc text-small"> Configuration </span> - </a> - </li> - </ul> - <div> - <ol> - <li>Select the source dataset and fields which will be used for comparision</li> - <li>Select the target dataset and fields which will be used for comparision</li> - <li>Mapping the target fields with source</li> - <li>Set partition configuration for source dataset and target dataset</li> - <li>Set basic configuration for your model (name, system, threshold, etc.)</li> - </ol> </div> - </div> - <div class="panel-footer stepDesc"> - <label>Example:</label> suppose source table A has 1000 records and target table B only has 999 records pefectly matched with A for selected fields, then Accuracy Rate(%) = 999/1000 * 100% = 99.9% - </div> - </section> - </div> - <div class="col-lg-6 col-md-6 col-sm-6 ruletypes"> - <section id="panel-2" class="panel panel-primary" (click)="click('pr')"> - <div class="panel-heading"> - <span style="font-size:20px">Data Profiling</span> - <span class="pull-right" style="font-size:20px"> + <div class="swMain panel-body"> + <label class="label-definition">Definition: Measured by how the values agree with an identified source of + truth</label> + <ul style="border-radius:0; background: none"> + <li> + <a class="selected"> + <div class="stepNumber"> + 1 + </div> + <span class="stepDesc text-small"> Choose Source </span> + </a> + </li> + <li> + <a> + <div class="stepNumber"> + 2 + </div> + <span class="stepDesc text-small"> Choose Target </span> + </a> + </li> + <li> + <a> + <div class="stepNumber"> + 3 + </div> + <span class="stepDesc text-small"> Mapping Source and Target </span> + </a> + </li> + <li> + <a> + <div class="stepNumber"> + 4 + </div> + <span class="stepDesc text-small"> Partition Configuration </span> + </a> + </li> + <li> + <a> + <div class="stepNumber"> + 5 + </div> + <span class="stepDesc text-small"> Configuration </span> + </a> + </li> + </ul> + <div> + <ol> + <li>Select the source dataset and fields which will be used for comparision</li> + <li>Select the target dataset and fields which will be used for comparision</li> + <li>Mapping the target fields with source</li> + <li>Set partition configuration for source dataset and target dataset</li> + <li>Set basic configuration for your model (name, system, threshold, etc.)</li> + </ol> + </div> + </div> + <div class="panel-footer stepDesc"> + <label>Example:</label> suppose source table A has 1000 records and target table B only has 999 records + pefectly matched with A for selected fields, then Accuracy Rate(%) = 999/1000 * 100% = 99.9% + </div> + </section> + </div> + <div class="col-lg-6 col-md-6 col-sm-6 ruletypes"> + <section id="panel-2" class="panel panel-primary" (click)="click('pr')"> + <div class="panel-heading"> + <span style="font-size:20px">Data Profiling</span> + <span class="pull-right" style="font-size:20px"> <span class="fa fa-arrow-circle-right"></span> </span> - </div> - <div class="swMain panel-body"> - <label class="label-definition">Definition: Data profiling is the process of examining the data available in an existing data set and collecting statistics and information about that data</label> - <ul style="border-radius:0; background: none"> - <li> - <a class="selected" style="cursor:default"> - <div class="stepNumber"> - 1 - </div> - <span class="stepDesc text-small"> Choose Target </span> - </a> - </li> - <li> - <a style="cursor:default"> - <div class="stepNumber"> - 2 - </div> - <span class="stepDesc text-small">Define/Select Models </span> - </a> - </li> - <li> - <a style="cursor:default"> - <div class="stepNumber"> - 3 - </div> - <span class="stepDesc text-small"> Partition Configuration </span> - </a> - </li> - <li> - <a style="cursor:default"> - <div class="stepNumber"> - 4 - </div> - <span class="stepDesc text-small"> Configuration </span> - </a> - </li> - </ul> - <div> - <ol> - <li>Select the target dataset and fields which want to be checked</li> - <li>Define your syntax check logic which will be applied on the selected fields</li> - <li>Set partition configuration for target dataset</li> - <li>Set basic configuration for your model(name, system, threshold, etc.)</li> - </ol> </div> - </div> - <div class="panel-footer stepDesc"> - <label>Example:</label> Check the data range(minimum, maximum) within a set of allowable values - </div> - </section> + <div class="swMain panel-body"> + <label class="label-definition">Definition: Data profiling is the process of examining the data available in + an existing data set and collecting statistics and information about that data</label> + <ul style="border-radius:0; background: none"> + <li> + <a class="selected" style="cursor:default"> + <div class="stepNumber"> + 1 + </div> + <span class="stepDesc text-small"> Choose Target </span> + </a> + </li> + <li> + <a style="cursor:default"> + <div class="stepNumber"> + 2 + </div> + <span class="stepDesc text-small">Define/Select Models </span> + </a> + </li> + <li> + <a style="cursor:default"> + <div class="stepNumber"> + 3 + </div> + <span class="stepDesc text-small"> Partition Configuration </span> + </a> + </li> + <li> + <a style="cursor:default"> + <div class="stepNumber"> + 4 + </div> + <span class="stepDesc text-small"> Configuration </span> + </a> + </li> + </ul> + <div> + <ol> + <li>Select the target dataset and fields which want to be checked</li> + <li>Define your syntax check logic which will be applied on the selected fields</li> + <li>Set partition configuration for target dataset</li> + <li>Set basic configuration for your model(name, system, threshold, etc.)</li> + </ol> + </div> + </div> + <div class="panel-footer stepDesc"> + <label>Example:</label> Check the data range(minimum, maximum) within a set of allowable values + </div> + </section> + </div> </div> - </div> - <div class="row"> - <div class="col-lg-6 col-md-6 col-sm-6 ruletypes"> - <section id="panel-3" class="panel panel-green" (click)="click('pub')"> - <div class="panel-heading"> - <span style="font-size:20px">Publish</span> - <span class="pull-right" style="font-size:20px"> + <div class="row"> + <div class="col-lg-6 col-md-6 col-sm-6 ruletypes"> + <section id="panel-3" class="panel panel-green" (click)="click('pub')"> + <div class="panel-heading"> + <span style="font-size:20px">Publish</span> + <span class="pull-right" style="font-size:20px"> <span class="fa fa-arrow-circle-right"></span> </span> - </div> - <div class="swMain panel-body"> - <label class="label-definition">Definition: Publish is the process of storing user's own quality data and visualizing it</label> - <ul style="border-radius:0; background: none"> - <li> - <div class="selected1child" style="cursor:default"> - <div class="stepNumber"> - 1 + </div> + <div class="swMain panel-body"> + <label class="label-definition">Definition: Publish is the process of storing user's own quality data and + visualizing it</label> + <ul style="border-radius:0; background: none"> + <li> + <div class="selected1child" style="cursor:default"> + <div class="stepNumber"> + 1 + </div> + <span class="stepDesc text-small"> Configuration </span> </div> - <span class="stepDesc text-small"> Configuration </span> - </div> - </li> - </ul> - <div> - <ol> - <li>Set basic configuration for your model(name, system, threshold, etc.)</li> - </ol> + </li> + </ul> + <div> + <ol> + <li>Set basic configuration for your model(name, system, threshold, etc.)</li> + </ol> + </div> </div> - </div> - <div class="panel-footer stepDesc"> - <label>Example: any data</label> ... - </div> - </section> + <div class="panel-footer stepDesc"> + <label>Example: any data</label> ... + </div> + </section> + </div> </div> </div> </div> -</div> http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/create-measure.component.spec.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/create-measure.component.spec.ts b/ui/angular/src/app/measure/create-measure/create-measure.component.spec.ts index 6e073a3..d6079c2 100644 --- a/ui/angular/src/app/measure/create-measure/create-measure.component.spec.ts +++ b/ui/angular/src/app/measure/create-measure/create-measure.component.spec.ts @@ -16,9 +16,9 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { CreateMeasureComponent } from './create-measure.component'; +import {CreateMeasureComponent} from './create-measure.component'; describe('CreateMeasureComponent', () => { let component: CreateMeasureComponent; @@ -26,9 +26,9 @@ describe('CreateMeasureComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ CreateMeasureComponent ] + declarations: [CreateMeasureComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/create-measure.component.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/create-measure.component.ts b/ui/angular/src/app/measure/create-measure/create-measure.component.ts index 9166e22..bd7071d 100644 --- a/ui/angular/src/app/measure/create-measure/create-measure.component.ts +++ b/ui/angular/src/app/measure/create-measure/create-measure.component.ts @@ -16,16 +16,16 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { Component, OnInit, AfterViewInit } from "@angular/core"; -import { FormControl } from "@angular/forms"; -import { FormsModule } from "@angular/forms"; +import {Component, OnInit, AfterViewInit} from "@angular/core"; +import {FormControl} from "@angular/forms"; +import {FormsModule} from "@angular/forms"; -import { TREE_ACTIONS, KEYS, IActionMapping, ITreeOptions } from "angular-tree-component"; -import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; -import { ToasterModule, ToasterService, ToasterConfig } from "angular2-toaster"; +import {TREE_ACTIONS, KEYS, IActionMapping, ITreeOptions} from "angular-tree-component"; +import {BrowserAnimationsModule} from "@angular/platform-browser/animations"; +import {ToasterModule, ToasterService, ToasterConfig} from "angular2-toaster"; import * as $ from "jquery"; -import { HttpService } from '../../service/http.service'; -import { Router } from "@angular/router"; +import {HttpService} from '../../service/http.service'; +import {Router} from "@angular/router"; @Component({ selector: "app-create-measure", @@ -33,23 +33,25 @@ import { Router } from "@angular/router"; styleUrls: ["./create-measure.component.css"] }) export class CreateMeasureComponent implements AfterViewInit { - constructor(private router: Router) {} + constructor(private router: Router) { + } click(type) { this.router.navigate(["/createmeasure" + type]); } + ngAfterViewInit() { $("#panel-2 >.panel-body").css({ height: - $("#panel-1 >.panel-body").outerHeight() + - $("#panel-1 >.panel-footer").outerHeight() - - $("#panel-2 >.panel-footer").outerHeight() + $("#panel-1 >.panel-body").outerHeight() + + $("#panel-1 >.panel-footer").outerHeight() - + $("#panel-2 >.panel-footer").outerHeight() }); $("#panel-4 >.panel-body").css({ height: - $("#panel-3 >.panel-body").outerHeight() + - $("#panel-3 >.panel-footer").outerHeight() - - $("#panel-4 >.panel-footer").outerHeight() + $("#panel-3 >.panel-body").outerHeight() + + $("#panel-3 >.panel-footer").outerHeight() - + $("#panel-4 >.panel-footer").outerHeight() }); } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.spec.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.spec.ts b/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.spec.ts index dddc650..d5245d8 100644 --- a/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.spec.ts +++ b/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.spec.ts @@ -16,9 +16,9 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { PrConfirmModal } from './confirmModal.component'; +import {PrConfirmModal} from './confirmModal.component'; describe('PrConfirmModalComponent', () => { let component: PrConfirmModal; @@ -26,7 +26,7 @@ describe('PrConfirmModalComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ PrConfirmModal ] + declarations: [PrConfirmModal] }) .compileComponents(); })); http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.ts ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.ts b/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.ts index d19022c..5ab2010 100644 --- a/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.ts +++ b/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.ts @@ -34,7 +34,8 @@ export class PrConfirmModal { @Output() hide: EventEmitter<Object> = new EventEmitter<Object>(); @Output() saveMeasure: EventEmitter<Object> = new EventEmitter<Object>(); - constructor() {} + constructor() { + } hideModal() { this.hide.emit(); http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/b306d872/ui/angular/src/app/measure/create-measure/pr/pr.component.css ---------------------------------------------------------------------- diff --git a/ui/angular/src/app/measure/create-measure/pr/pr.component.css b/ui/angular/src/app/measure/create-measure/pr/pr.component.css index 8217c9c..1e1d728 100644 --- a/ui/angular/src/app/measure/create-measure/pr/pr.component.css +++ b/ui/angular/src/app/measure/create-measure/pr/pr.component.css @@ -16,7 +16,6 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ - @import url('../../../../../node_modules/angular2-toaster/toaster.css'); @import url('../../measure.component.css');
