cleanup
This commit is contained in:
parent
74f11f0f1b
commit
ad4af5aa1f
|
@ -1,13 +0,0 @@
|
||||||
# Editor configuration, see http://editorconfig.org
|
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
insert_final_newline = true
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
|
|
||||||
[*.md]
|
|
||||||
max_line_length = off
|
|
||||||
trim_trailing_whitespace = false
|
|
|
@ -1 +0,0 @@
|
||||||
{"sections":[{"sections":[],"fieldGroups":[{"id":"dataSummaryGroup","title":"Data Summary","value":null,"description":null,"extendedDescription":null,"defaultVisibility":true,"page":null,"ordinal":"1","compositeFields":[{"id":"dataSummaryFS","ordinal":1,"fields":[{"id":"dataSummary","title":null,"description":null,"extendedDescription":null,"defaultVisibility":null,"page":null,"ordinal":1,"multiplicity":{"min":1,"max":1},"defaultValue":{"type":null,"value":null},"viewStyle":{"cssClass":null,"renderStyle":"textarea"},"visible":{"style":null,"rules":[]}}],"multiplicity":{"min":1,"max":1}}]}],"defaultVisibility":true,"page":null,"id":"datasummary","title":"Data Summary","description":null,"ordinal":"1"},{"sections":[{"sections":[],"fieldGroups":[{"id":"FindDataMetadataGroup","title":null,"value":null,"description":null,"extendedDescription":null,"defaultVisibility":true,"page":null,"ordinal":"2","compositeFields":[{"id":"useMetadataQ211FS","ordinal":1,"fields":[{"id":"useMetadataQ211","title":"Q2.1.1 Will you use metadata to describe the data?","description":"User can select from a list of metadata standards. If they cannot find the standard in the list provided then they should choose \"not listed\". Selecting this will result in a field in which the user can insert the URL to the description of the metadata scheme used. A \"comments\" box should exist to allow users to add comments. They may select more than one metadata standard. They may specify more than one URL when selecting \"not listed\". They are also presented with a field in which to specify the location of the metadata service. Users can select the \"no metadata\" button to specify no metadata will be used to describe the data.","extendedDescription":null,"defaultVisibility":true,"page":null,"ordinal":1,"multiplicity":{"min":1,"max":1},"defaultValue":{"type":null,"value":null},"viewStyle":{"cssClass":null,"renderStyle":"booleanDesicion"},"visible":{"style":null,"rules":[]}}],"multiplicity":{"min":1,"max":1}}]}],"defaultVisibility":true,"page":null,"id":"dataMetadata","title":"2.1 Making data findable, including provisions for metadata","description":null,"ordinal":"3"}],"fieldGroups":[],"defaultVisibility":null,"page":null,"id":"fairData","title":"2 Fair Data","description":null,"ordinal":null}],"label":"Horizon 2020 template"}
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,33 +0,0 @@
|
||||||
// Karma configuration file, see link for more information
|
|
||||||
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
|
||||||
|
|
||||||
module.exports = function (config) {
|
|
||||||
config.set({
|
|
||||||
basePath: '',
|
|
||||||
frameworks: ['jasmine', '@angular/cli'],
|
|
||||||
plugins: [
|
|
||||||
require('karma-jasmine'),
|
|
||||||
require('karma-chrome-launcher'),
|
|
||||||
require('karma-jasmine-html-reporter'),
|
|
||||||
require('karma-coverage-istanbul-reporter'),
|
|
||||||
require('@angular/cli/plugins/karma')
|
|
||||||
],
|
|
||||||
client:{
|
|
||||||
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
|
||||||
},
|
|
||||||
coverageIstanbulReporter: {
|
|
||||||
reports: [ 'html', 'lcovonly' ],
|
|
||||||
fixWebpackSourcePaths: true
|
|
||||||
},
|
|
||||||
angularCli: {
|
|
||||||
environment: 'dev'
|
|
||||||
},
|
|
||||||
reporters: ['progress', 'kjhtml'],
|
|
||||||
port: 9876,
|
|
||||||
colors: true,
|
|
||||||
logLevel: config.LOG_INFO,
|
|
||||||
autoWatch: true,
|
|
||||||
browsers: ['Chrome'],
|
|
||||||
singleRun: false
|
|
||||||
});
|
|
||||||
};
|
|
|
@ -24,27 +24,9 @@
|
||||||
"@angular/platform-browser-dynamic": "5.1.1",
|
"@angular/platform-browser-dynamic": "5.1.1",
|
||||||
"@angular/router": "5.1.1",
|
"@angular/router": "5.1.1",
|
||||||
"@covalent/core": "^1.0.0-rc.1",
|
"@covalent/core": "^1.0.0-rc.1",
|
||||||
"@ng-bootstrap/ng-bootstrap": "1.0.0-beta.7",
|
|
||||||
"@ngui/auto-complete": "^0.16.0",
|
|
||||||
"@ngx-translate/core": "^9.0.1",
|
"@ngx-translate/core": "^9.0.1",
|
||||||
"@ngx-translate/http-loader": "^2.0.0",
|
"@ngx-translate/http-loader": "^2.0.0",
|
||||||
"angular-2-data-table": "^0.1.2",
|
|
||||||
"angular-google-signin": "^0.1.5",
|
|
||||||
"angular2-datatable": "^0.6.0",
|
|
||||||
"angular2-draggable": "^1.0.7",
|
|
||||||
"angular2-number-picker": "^0.8.8",
|
|
||||||
"angular2-uuid": "^1.1.1",
|
|
||||||
"bootstrap": "^3.3.7",
|
|
||||||
"core-js": "^2.4.1",
|
"core-js": "^2.4.1",
|
||||||
"flat": "^4.0.0",
|
|
||||||
"jquery": "^3.2.1",
|
|
||||||
"jspdf": "^1.3.5",
|
|
||||||
"moment": "^2.19.1",
|
|
||||||
"ng-sidebar": "^6.0.4",
|
|
||||||
"ng2-datepicker": "^2.1.3",
|
|
||||||
"ng4-loading-spinner": "^1.0.27",
|
|
||||||
"ngx-webstorage": "^2.0.1",
|
|
||||||
"primeng": "^5.0.2",
|
|
||||||
"rxjs": "^5.4.2",
|
"rxjs": "^5.4.2",
|
||||||
"zone.js": "^0.8.17"
|
"zone.js": "^0.8.17"
|
||||||
},
|
},
|
||||||
|
@ -52,20 +34,8 @@
|
||||||
"@angular/cli": "1.6.1",
|
"@angular/cli": "1.6.1",
|
||||||
"@angular/compiler-cli": "^5.1.1",
|
"@angular/compiler-cli": "^5.1.1",
|
||||||
"@angular/language-service": "^5.1.1",
|
"@angular/language-service": "^5.1.1",
|
||||||
"@types/jasmine": "~2.8.2",
|
|
||||||
"@types/jasminewd2": "~2.0.2",
|
|
||||||
"@types/node": "^8.5.1",
|
"@types/node": "^8.5.1",
|
||||||
"angular-ide": "^0.9.31",
|
|
||||||
"codelyzer": "~4.0.2",
|
"codelyzer": "~4.0.2",
|
||||||
"jasmine-core": "~2.8.0",
|
|
||||||
"jasmine-spec-reporter": "~4.2.1",
|
|
||||||
"karma": "~1.7.0",
|
|
||||||
"karma-chrome-launcher": "~2.2.0",
|
|
||||||
"karma-cli": "~1.0.1",
|
|
||||||
"karma-coverage-istanbul-reporter": "^1.2.1",
|
|
||||||
"karma-jasmine": "~1.1.0",
|
|
||||||
"karma-jasmine-html-reporter": "^0.2.2",
|
|
||||||
"protractor": "~5.2.2",
|
|
||||||
"ts-node": "~4.0.1",
|
"ts-node": "~4.0.1",
|
||||||
"tslint": "~5.8.0",
|
"tslint": "~5.8.0",
|
||||||
"typescript": "2.4.2"
|
"typescript": "2.4.2"
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
// Protractor configuration file, see link for more information
|
|
||||||
// https://github.com/angular/protractor/blob/master/lib/config.ts
|
|
||||||
|
|
||||||
const { SpecReporter } = require('jasmine-spec-reporter');
|
|
||||||
|
|
||||||
exports.config = {
|
|
||||||
allScriptsTimeout: 11000,
|
|
||||||
specs: [
|
|
||||||
'./e2e/**/*.e2e-spec.ts'
|
|
||||||
],
|
|
||||||
capabilities: {
|
|
||||||
'browserName': 'chrome'
|
|
||||||
},
|
|
||||||
directConnect: true,
|
|
||||||
baseUrl: 'http://localhost:4200/',
|
|
||||||
framework: 'jasmine',
|
|
||||||
jasmineNodeOpts: {
|
|
||||||
showColors: true,
|
|
||||||
defaultTimeoutInterval: 30000,
|
|
||||||
print: function() {}
|
|
||||||
},
|
|
||||||
onPrepare() {
|
|
||||||
require('ts-node').register({
|
|
||||||
project: 'e2e/tsconfig.e2e.json'
|
|
||||||
});
|
|
||||||
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -6,8 +6,6 @@ import { HomepageComponent } from './homepage/homepage.component';
|
||||||
import { DynamicFormComponent } from './form/dynamic-form.component';
|
import { DynamicFormComponent } from './form/dynamic-form.component';
|
||||||
import { AuthGuard } from './guards/auth.guard';
|
import { AuthGuard } from './guards/auth.guard';
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
import { DmpDetailedComponent } from './viewers/dmp-detailed/dmp-detailed.component';
|
|
||||||
import { ProjectDetailedComponent } from './viewers/project-detailed/project-detailed.component';
|
|
||||||
import { ProjectListingModel } from './models/projects/ProjectListingModel';
|
import { ProjectListingModel } from './models/projects/ProjectListingModel';
|
||||||
import { ProjectListingComponent } from './projects/project-listing.component';
|
import { ProjectListingComponent } from './projects/project-listing.component';
|
||||||
import { DataManagementPlanListingComponent } from './dmps/dmp-listing.component';
|
import { DataManagementPlanListingComponent } from './dmps/dmp-listing.component';
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
.full-width {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-height {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
html,
|
|
||||||
body {
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
app-root {
|
|
||||||
display: block;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
/* overflow-y: hidden */
|
|
||||||
}
|
|
|
@ -1,2 +1,4 @@
|
||||||
<app-navigation></app-navigation>
|
<app-navigation></app-navigation>
|
||||||
|
<div class="container">
|
||||||
<router-outlet></router-outlet>
|
<router-outlet></router-outlet>
|
||||||
|
</div>
|
|
@ -0,0 +1,2 @@
|
||||||
|
body {
|
||||||
|
}
|
|
@ -1,10 +1,5 @@
|
||||||
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
|
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
|
||||||
import { ServerService } from './services/server.service';
|
|
||||||
import { JsonObjest } from '../app/entities/JsonObject.class';
|
|
||||||
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, ActivatedRoute, NavigationExtras } from '@angular/router';
|
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, ActivatedRoute, NavigationExtras } from '@angular/router';
|
||||||
import {BreadcrumbModule,MenuItem} from 'primeng/primeng';
|
|
||||||
|
|
||||||
import { BreadcrumbComponent } from './widgets/breadcrumb/breadcrumb.component';
|
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,22 +9,12 @@ declare var $ :any;
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
templateUrl: './app.component.html',
|
templateUrl: './app.component.html',
|
||||||
styleUrls: ['./app.component.css'],
|
styleUrls: ['./app.component.scss'],
|
||||||
providers: [],
|
providers: [],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class AppComponent implements OnInit {
|
export class AppComponent implements OnInit {
|
||||||
|
|
||||||
fields: any[];
|
|
||||||
|
|
||||||
sliderExpanded : boolean = false;
|
|
||||||
|
|
||||||
|
|
||||||
breadcrumbHome: MenuItem = {icon: 'fa fa-home', routerLink: "/welcome"};
|
|
||||||
breadcrumbData: MenuItem[] = new Array<MenuItem>();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constructor(private router: Router, private route: ActivatedRoute, private translate: TranslateService) {
|
constructor(private router: Router, private route: ActivatedRoute, private translate: TranslateService) {
|
||||||
// this language will be used as a fallback when a translation isn't found in the current language
|
// this language will be used as a fallback when a translation isn't found in the current language
|
||||||
translate.setDefaultLang('en');
|
translate.setDefaultLang('en');
|
||||||
|
@ -41,28 +26,14 @@ export class AppComponent implements OnInit {
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
slideNav(){
|
|
||||||
|
|
||||||
$("#appSidebar").toggleClass("expanded");
|
|
||||||
$("#appBody").toggleClass("expanded");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//loggedInAs : string = null;
|
|
||||||
|
|
||||||
showLogin : boolean = false;
|
|
||||||
|
|
||||||
|
|
||||||
login() {
|
login() {
|
||||||
//redirect to login page
|
//redirect to login page
|
||||||
this.router.navigate(['/login'], { queryParams: { /*refresh : Math.random() ,returnUrl: this.state.url*/ } });
|
this.router.navigate(['/login'], { queryParams: { /*refresh : Math.random() ,returnUrl: this.state.url*/ } });
|
||||||
}
|
}
|
||||||
|
|
||||||
logout() {
|
logout() {
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
goToDMPs() {
|
goToDMPs() {
|
||||||
this.router.navigate(['/dmps'], { queryParams: { /*refresh : Math.random() ,returnUrl: this.state.url*/ } });
|
this.router.navigate(['/dmps'], { queryParams: { /*refresh : Math.random() ,returnUrl: this.state.url*/ } });
|
||||||
|
@ -71,7 +42,5 @@ export class AppComponent implements OnInit {
|
||||||
goToProjects() {
|
goToProjects() {
|
||||||
this.router.navigate(['/projects'], { queryParams: { /*refresh : Math.random() ,returnUrl: this.state.url*/ } });
|
this.router.navigate(['/projects'], { queryParams: { /*refresh : Math.random() ,returnUrl: this.state.url*/ } });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,64 +32,17 @@ import { FormsModule, ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/fo
|
||||||
import { HttpClientModule, HttpClient } from '@angular/common/http';
|
import { HttpClientModule, HttpClient } from '@angular/common/http';
|
||||||
import { HttpModule } from '@angular/http';
|
import { HttpModule } from '@angular/http';
|
||||||
import { RouterModule, Routes, Router } from '@angular/router';
|
import { RouterModule, Routes, Router } from '@angular/router';
|
||||||
import { DataTableModule } from "angular2-datatable";
|
|
||||||
|
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
import { RestBase } from './services/rest-base';
|
|
||||||
import { DynamicFormComponent } from './form/dynamic-form.component';
|
import { DynamicFormComponent } from './form/dynamic-form.component';
|
||||||
import { DynamicFormFieldComponent } from './form/dynamic-fields/dynamic-form-field.component';
|
import { DynamicFormFieldComponent } from './form/dynamic-fields/dynamic-form-field.component';
|
||||||
import { ServerService } from './services/server.service';
|
|
||||||
import { GlobalVariables } from './services/global-variables.service';
|
|
||||||
import { LocalStorageService } from 'ngx-webstorage';
|
|
||||||
import { DynamicFormGroupComponent } from './form/dynamic-form-group/dynamic-form-group.component';
|
import { DynamicFormGroupComponent } from './form/dynamic-form-group/dynamic-form-group.component';
|
||||||
import { AppRoutingModule } from './app-routing.module';
|
import { AppRoutingModule } from './app-routing.module';
|
||||||
import { AuthGuard } from './guards/auth.guard';
|
import { AuthGuard } from './guards/auth.guard';
|
||||||
import { PageNotFoundComponent } from './not-found.component';
|
import { PageNotFoundComponent } from './not-found.component';
|
||||||
import { HomepageComponent } from './homepage/homepage.component';
|
import { HomepageComponent } from './homepage/homepage.component';
|
||||||
import { ConfirmationComponent } from './widgets/confirmation/confirmation.component';
|
|
||||||
|
|
||||||
|
|
||||||
import { EestoreService } from './services/eestore.service';
|
|
||||||
import { PDFService } from './services/transformers/pdf.service';
|
|
||||||
|
|
||||||
import { TabModule } from './tabs/tab.module';
|
|
||||||
import { AngularDraggableModule } from 'angular2-draggable';
|
|
||||||
|
|
||||||
import { NguiAutoCompleteModule } from '@ngui/auto-complete';
|
|
||||||
|
|
||||||
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
||||||
|
|
||||||
import { BreadcrumbModule, PanelModule } from 'primeng/primeng';
|
|
||||||
|
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
import { DatasetTableFilterPipe } from './pipes/dataset-table-filter.pipe';
|
|
||||||
import { DatasetStatusFilterPipe } from './pipes/dataset-status-filter.pipe';
|
|
||||||
|
|
||||||
import { DmpTableFilterPipe } from './pipes/dmp-table-filter.pipe';
|
|
||||||
import { DmpStatusFilterPipe } from './pipes/dmp-status-filter.pipe';
|
|
||||||
import { DmpVersionFilterPipe } from './pipes/dmp-version-filter.pipe';
|
|
||||||
|
|
||||||
|
|
||||||
import { ProjectTableFilterPipe } from './pipes/project-table-filter.pipe';
|
|
||||||
import { ModalComponent } from './modal/modal.component';
|
|
||||||
import { NgDatepickerModule } from 'ng2-datepicker';
|
|
||||||
|
|
||||||
import { StatusToString } from './pipes/various/status-to-string';
|
|
||||||
import { SidebarModule } from 'ng-sidebar';
|
|
||||||
|
|
||||||
import { BreadcrumbComponent } from './widgets/breadcrumb/breadcrumb.component';
|
|
||||||
import { DmpDetailedComponent } from './viewers/dmp-detailed/dmp-detailed.component';
|
|
||||||
import { ProjectDetailedComponent } from './viewers/project-detailed/project-detailed.component';
|
|
||||||
|
|
||||||
import { ProgressBarModule } from 'primeng/primeng';
|
|
||||||
import { StepsModule, MenuItem } from 'primeng/primeng';
|
|
||||||
import { CheckboxModule } from 'primeng/primeng';
|
|
||||||
import { RadioButtonModule } from 'primeng/primeng';
|
|
||||||
import { AutoCompleteModule } from 'primeng/primeng';
|
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
|
||||||
|
|
||||||
|
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { TranslateLoader } from '@ngx-translate/core';
|
import { TranslateLoader } from '@ngx-translate/core';
|
||||||
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
||||||
|
@ -105,10 +58,9 @@ import { BaseHttpService } from './utilities/cite-http-service-module/base-http.
|
||||||
import { DataManagementPlanListingComponent } from './dmps/dmp-listing.component';
|
import { DataManagementPlanListingComponent } from './dmps/dmp-listing.component';
|
||||||
import { ProjectEditorComponent } from './projects/editor/project-editor.component';
|
import { ProjectEditorComponent } from './projects/editor/project-editor.component';
|
||||||
import { DataManagementPlanEditorComponent } from './dmps/editor/dmp-editor.component';
|
import { DataManagementPlanEditorComponent } from './dmps/editor/dmp-editor.component';
|
||||||
|
|
||||||
import { FigurecardComponent } from './shared/components/figurecard/figurecard.component';
|
|
||||||
import { DataManagementPlanWizardComponent } from './dmp-wizard/dmp-wizard.component';
|
import { DataManagementPlanWizardComponent } from './dmp-wizard/dmp-wizard.component';
|
||||||
import { LoginComponent } from './login/login.component';
|
import { LoginComponent } from './login/login.component';
|
||||||
|
import { FigurecardComponent } from './shared/components/figurecard/figurecard.component';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -128,29 +80,19 @@ import { LoginComponent } from './login/login.component';
|
||||||
LoginComponent,
|
LoginComponent,
|
||||||
PageNotFoundComponent,
|
PageNotFoundComponent,
|
||||||
HomepageComponent,
|
HomepageComponent,
|
||||||
ModalComponent,
|
|
||||||
ProjectListingComponent,
|
ProjectListingComponent,
|
||||||
DatasetListingComponent,
|
DatasetListingComponent,
|
||||||
DataManagementPlanListingComponent,
|
DataManagementPlanListingComponent,
|
||||||
ConfirmationComponent,
|
|
||||||
AutocompleteRemoteComponent,
|
AutocompleteRemoteComponent,
|
||||||
DynamicFieldDropdownComponent,
|
DynamicFieldDropdownComponent,
|
||||||
DynamicFormSectionComponent,
|
DynamicFormSectionComponent,
|
||||||
ProjectTableFilterPipe,
|
|
||||||
DmpVersionFilterPipe,
|
|
||||||
DmpStatusFilterPipe,
|
|
||||||
DmpTableFilterPipe,
|
|
||||||
DatasetTableFilterPipe,
|
|
||||||
DatasetStatusFilterPipe,
|
|
||||||
StatusToString,
|
|
||||||
TableOfContentsFieldComponent,
|
TableOfContentsFieldComponent,
|
||||||
ProgressBarComponent,
|
ProgressBarComponent,
|
||||||
DynamicFieldCheckBoxComponent,
|
DynamicFieldCheckBoxComponent,
|
||||||
BreadcrumbComponent, DmpDetailedComponent, ProjectDetailedComponent,
|
|
||||||
ProjectEditorComponent,
|
ProjectEditorComponent,
|
||||||
DataManagementPlanEditorComponent,
|
DataManagementPlanEditorComponent,
|
||||||
FigurecardComponent,
|
DataManagementPlanWizardComponent,
|
||||||
DataManagementPlanWizardComponent
|
FigurecardComponent
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
BrowserModule,
|
BrowserModule,
|
||||||
|
@ -159,23 +101,9 @@ import { LoginComponent } from './login/login.component';
|
||||||
FormsModule,
|
FormsModule,
|
||||||
HttpModule,
|
HttpModule,
|
||||||
HttpClientModule,
|
HttpClientModule,
|
||||||
TabModule,
|
|
||||||
CommonModule,
|
CommonModule,
|
||||||
AppRoutingModule,
|
AppRoutingModule,
|
||||||
AngularDraggableModule,
|
|
||||||
DataTableModule,
|
|
||||||
NgDatepickerModule,
|
|
||||||
NguiAutoCompleteModule,
|
|
||||||
BreadcrumbModule,
|
|
||||||
ProgressBarModule,
|
|
||||||
PanelModule,
|
|
||||||
BrowserAnimationsModule,
|
BrowserAnimationsModule,
|
||||||
SidebarModule.forRoot(),
|
|
||||||
NgbModule.forRoot(),
|
|
||||||
StepsModule,
|
|
||||||
CheckboxModule,
|
|
||||||
RadioButtonModule,
|
|
||||||
AutoCompleteModule,
|
|
||||||
TranslateModule.forRoot({
|
TranslateModule.forRoot({
|
||||||
loader: {
|
loader: {
|
||||||
provide: TranslateLoader,
|
provide: TranslateLoader,
|
||||||
|
@ -187,9 +115,12 @@ import { LoginComponent } from './login/login.component';
|
||||||
MaterialModule
|
MaterialModule
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
ServerService, VisibilityRulesService, PaginationService, GlobalVariables, AuthGuard,
|
VisibilityRulesService,
|
||||||
LocalStorageService, RestBase, EestoreService, PDFService,
|
PaginationService,
|
||||||
AuthService,DashboardService,DatasetService,
|
AuthGuard,
|
||||||
|
AuthService,
|
||||||
|
DashboardService,
|
||||||
|
DatasetService,
|
||||||
BaseHttpService
|
BaseHttpService
|
||||||
],
|
],
|
||||||
bootstrap: [AppComponent]
|
bootstrap: [AppComponent]
|
||||||
|
|
|
@ -10,7 +10,6 @@ import { SnackBarNotificationComponent } from "../../shared/components/notificai
|
||||||
import { BaseErrorModel } from "../../models/error/BaseErrorModel";
|
import { BaseErrorModel } from "../../models/error/BaseErrorModel";
|
||||||
import { DatasetService } from "../../services/dataset/dataset.service";
|
import { DatasetService } from "../../services/dataset/dataset.service";
|
||||||
import { DatasetModel } from "../../models/datasets/DatasetModel";
|
import { DatasetModel } from "../../models/datasets/DatasetModel";
|
||||||
import { ServerService } from "../../services/server.service";
|
|
||||||
import { ExternalSourcesService } from "../../services/external-sources/external-sources.service";
|
import { ExternalSourcesService } from "../../services/external-sources/external-sources.service";
|
||||||
import { ExternalSourcesItemModel } from "../../models/external-sources/ExternalSourcesItemModel";
|
import { ExternalSourcesItemModel } from "../../models/external-sources/ExternalSourcesItemModel";
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@ import { SnackBarNotificationComponent } from "../../shared/components/notificai
|
||||||
import { BaseErrorModel } from "../../models/error/BaseErrorModel";
|
import { BaseErrorModel } from "../../models/error/BaseErrorModel";
|
||||||
import { DataManagementPlanService } from "../../services/data-management-plan/data-management-plan.service";
|
import { DataManagementPlanService } from "../../services/data-management-plan/data-management-plan.service";
|
||||||
import { DataManagementPlanModel } from "../../models/data-managemnt-plans/DataManagementPlanModel";
|
import { DataManagementPlanModel } from "../../models/data-managemnt-plans/DataManagementPlanModel";
|
||||||
import { ServerService } from "../../services/server.service";
|
|
||||||
import { ExternalSourcesService } from "../../services/external-sources/external-sources.service";
|
import { ExternalSourcesService } from "../../services/external-sources/external-sources.service";
|
||||||
import { ExternalSourcesItemModel } from "../../models/external-sources/ExternalSourcesItemModel";
|
import { ExternalSourcesItemModel } from "../../models/external-sources/ExternalSourcesItemModel";
|
||||||
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
import {Title} from "../../app/entities/view/viewTitle.view";
|
|
||||||
import {ViewStyle} from "../../app/entities/view/viewStyle.view";
|
|
||||||
|
|
||||||
export class JsonObjest {
|
|
||||||
groups: any[];
|
|
||||||
fields: any[];
|
|
||||||
title: Title;
|
|
||||||
viewStyle: ViewStyle;
|
|
||||||
renderStyle: string;
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { Func } from './functions/func';
|
|
||||||
import { Model } from './model/model';
|
|
||||||
import { View } from './view2/view';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class DatasetProfile{
|
|
||||||
|
|
||||||
view: View;
|
|
||||||
model: Model;
|
|
||||||
func: Func[];
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
export class Func {
|
|
||||||
|
|
||||||
id: string;
|
|
||||||
signature:string;
|
|
||||||
code: string;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
|
|
||||||
export class Dataset {
|
|
||||||
id:string;
|
|
||||||
name: string;
|
|
||||||
uriDataset: string;
|
|
||||||
dmp:string;
|
|
||||||
profile:string;
|
|
||||||
profileId:string;
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { DatatypeField } from './datatypefield';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class Datatype {
|
|
||||||
id: string;
|
|
||||||
fields: DatatypeField[];
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class DatatypeField{
|
|
||||||
id: string;
|
|
||||||
ordinal: number;
|
|
||||||
datatype: string;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
|
|
||||||
export class Dmp {
|
|
||||||
id:string;
|
|
||||||
dataset: string;
|
|
||||||
label: string;
|
|
||||||
organisations:string;
|
|
||||||
previous:string;
|
|
||||||
profile:string;
|
|
||||||
profileData:string;
|
|
||||||
projectLabel:string;
|
|
||||||
projectid:string;
|
|
||||||
version: number;
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { Attribute } from './attribute';
|
|
||||||
import { Datatype } from './datatype';
|
|
||||||
import { Rule } from '../common/rule';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class Model {
|
|
||||||
attributes : Attribute[];
|
|
||||||
rules: Rule[];
|
|
||||||
datatypes : Datatype[];
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { Dmp } from './dmp'
|
|
||||||
import { Dataset } from './dataset'
|
|
||||||
|
|
||||||
export class Project {
|
|
||||||
label: string;
|
|
||||||
id: string;
|
|
||||||
abbreviation: string;
|
|
||||||
definition: string;
|
|
||||||
uri: string;
|
|
||||||
dmp: Dmp;
|
|
||||||
dataset: Dataset;
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import {ViewStyleProfile} from "../../app/entities/view/viewProfile.view";
|
|
||||||
|
|
||||||
class PlanDefinition{
|
|
||||||
|
|
||||||
viewStyle: ViewStyleProfile;
|
|
||||||
dataModel:{};
|
|
||||||
rules:{};
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
import {Title} from "../../../app/entities/view/viewTitle.view";
|
|
||||||
import {ViewStyle} from "../../../app/entities/view/viewStyle.view";
|
|
||||||
|
|
||||||
export class Field {
|
|
||||||
description: {};
|
|
||||||
extendedDescription:{};
|
|
||||||
title:Title;
|
|
||||||
viewStyle:ViewStyle;
|
|
||||||
visible:{};
|
|
||||||
group:string;
|
|
||||||
id:string;
|
|
||||||
ordinal:string;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
import {Title} from "../../../app/entities/view/viewTitle.view";
|
|
||||||
import {GroupVisibility} from "../../../app/entities/view/viewGrVisibility.view";
|
|
||||||
|
|
||||||
export class FieldGroup{
|
|
||||||
description: {};
|
|
||||||
extendedDescription:{};
|
|
||||||
title: Title;
|
|
||||||
visible: GroupVisibility;
|
|
||||||
id: string;
|
|
||||||
ordinal: string;
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
export class GroupVisibility{
|
|
||||||
rules: any[];
|
|
||||||
style: string;
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
import {Field} from "../../../app/entities/view/field.view";
|
|
||||||
import {FieldGroup} from "../../../app/entities/view/viewFieldGroup.view";
|
|
||||||
|
|
||||||
export class ViewStyleProfile{
|
|
||||||
|
|
||||||
fieldGroup: FieldGroup
|
|
||||||
field: Field
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
export class ViewStyle{
|
|
||||||
_cssclass:string;
|
|
||||||
_renderstyle:string;
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
export class Title {
|
|
||||||
__cdata:string
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
|
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { Rule } from '../common/rule';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class Field {
|
|
||||||
id: string;
|
|
||||||
group: string;
|
|
||||||
ordinal: number;
|
|
||||||
title: string;
|
|
||||||
titleLang: string;
|
|
||||||
description: string;
|
|
||||||
descriptionLang: string;
|
|
||||||
ext_description: string;
|
|
||||||
ext_descriptionLang: string;
|
|
||||||
visibilityStyle: string = 'any';
|
|
||||||
visibilityRules: Rule[];
|
|
||||||
|
|
||||||
renderStyle: string;
|
|
||||||
cssClass: string;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { Rule } from '../common/rule';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class FieldGroup{
|
|
||||||
|
|
||||||
id: string;
|
|
||||||
ordinal: number;
|
|
||||||
title: string;
|
|
||||||
titleLang: string;
|
|
||||||
description: string;
|
|
||||||
descriptionLang: string;
|
|
||||||
ext_description: string;
|
|
||||||
ext_descriptionLang: string;
|
|
||||||
visibilityStyle: string = 'any';
|
|
||||||
visibilityRules: Rule[];
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { Field } from './field';
|
|
||||||
import { FieldGroup } from './fieldGroup';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class View {
|
|
||||||
fieldGroups: FieldGroup[];
|
|
||||||
fields : Field[];
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,3 +1,3 @@
|
||||||
<div [formGroup]="textFormGroup">
|
<div [formGroup]="textFormGroup">
|
||||||
<input auto-complete class="form-control autocomplete" formControlName="text" [source]="values">
|
<!-- <input auto-complete class="form-control autocomplete" formControlName="text" [source]="values"> -->
|
||||||
</div>
|
</div>
|
|
@ -2,10 +2,6 @@ import { Field } from '../../../models/Field';
|
||||||
import { Component, OnInit, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core';
|
import { Component, OnInit, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core';
|
||||||
import { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
|
import { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
|
||||||
|
|
||||||
import { ServerService } from '../../../services/server.service';
|
|
||||||
import { UUID } from 'angular2-uuid';
|
|
||||||
import { NguiAutoCompleteModule } from '@ngui/auto-complete';
|
|
||||||
|
|
||||||
declare var $: any;
|
declare var $: any;
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,7 +25,7 @@ export class AutocompleteRemoteComponent implements OnInit/* , ControlValueAcces
|
||||||
values: any[] = new Array();
|
values: any[] = new Array();
|
||||||
typeaheadMS: number = 1400;
|
typeaheadMS: number = 1400;
|
||||||
|
|
||||||
constructor(private serverService: ServerService) {
|
constructor() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,17 +56,17 @@ export class AutocompleteRemoteComponent implements OnInit/* , ControlValueAcces
|
||||||
|
|
||||||
|
|
||||||
updateByQuery(query: string) {
|
updateByQuery(query: string) {
|
||||||
this.serverService.getThroughProxy(this.field.data.url, query).subscribe(
|
// this.serverService.getThroughProxy(this.field.data.url, query).subscribe(
|
||||||
response => {
|
// response => {
|
||||||
this.values.length = 0;
|
// this.values.length = 0;
|
||||||
/* response.data.forEach(element => {
|
// /* response.data.forEach(element => {
|
||||||
this.values.push(element.attributes.name);
|
// this.values.push(element.attributes.name);
|
||||||
}); */
|
// }); */
|
||||||
},
|
// },
|
||||||
error => {
|
// error => {
|
||||||
console.log(error);
|
// console.log(error);
|
||||||
}
|
// }
|
||||||
);
|
// );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<div [formGroup]="form">
|
<div [formGroup]="form">
|
||||||
<p-radioButton name="{{field.id}}" value="true" label="Yes" formControlName="value"></p-radioButton>
|
<!-- <p-radioButton name="{{field.id}}" value="true" label="Yes" formControlName="value"></p-radioButton> -->
|
||||||
<br>
|
<br>
|
||||||
<p-radioButton name="{{field.id}}" value="false" label="No" formControlName="value"></p-radioButton>
|
<!-- <p-radioButton name="{{field.id}}" value="false" label="No" formControlName="value"></p-radioButton> -->
|
||||||
</div>
|
</div>
|
|
@ -1,3 +1,3 @@
|
||||||
<div [formGroup]="form" class="form-group">
|
<div [formGroup]="form" class="form-group">
|
||||||
<p-checkbox [formControl]="form.get('value')" label="{{field.data.label}}" binary="true"></p-checkbox>
|
<!-- <p-checkbox [formControl]="form.get('value')" label="{{field.data.label}}" binary="true"></p-checkbox> -->
|
||||||
</div>
|
</div>
|
|
@ -1,5 +1,5 @@
|
||||||
<div [formGroup]="form">
|
<div [formGroup]="form">
|
||||||
<div *ngFor="let option of this.field.data.options let index = index">
|
<div *ngFor="let option of this.field.data.options let index = index">
|
||||||
<p-radioButton name="{{field.id}}" [value]="option.value" label="{{option.label}}" formControlName="value"></p-radioButton>
|
<!-- <p-radioButton name="{{field.id}}" [value]="option.value" label="{{option.label}}" formControlName="value"></p-radioButton> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -1,5 +1,5 @@
|
||||||
<div class="ui-g dynamic-formc full-width full-height">
|
<div class="ui-g dynamic-formc full-width full-height">
|
||||||
<ng-sidebar-container contentClass="scrollableContent">
|
<!-- <ng-sidebar-container contentClass="scrollableContent">
|
||||||
<ng-sidebar mode="push" position="right" [(opened)]="visibleSidebar">
|
<ng-sidebar mode="push" position="right" [(opened)]="visibleSidebar">
|
||||||
<table-of-content class="toc-container full-height" [model]="dataModel"></table-of-content>
|
<table-of-content class="toc-container full-height" [model]="dataModel"></table-of-content>
|
||||||
</ng-sidebar>
|
</ng-sidebar>
|
||||||
|
@ -28,5 +28,5 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ng-sidebar-container>
|
</ng-sidebar-container> -->
|
||||||
</div>
|
</div>
|
|
@ -1,5 +1,4 @@
|
||||||
import { VisibilityRulesService } from '../visibility-rules/visibility-rules.service';
|
import { VisibilityRulesService } from '../visibility-rules/visibility-rules.service';
|
||||||
import { TestModel } from '../testModel/testmodel';
|
|
||||||
import { DatasetModel } from '../models/DatasetModel';
|
import { DatasetModel } from '../models/DatasetModel';
|
||||||
import { Rule } from '../models/Rule';
|
import { Rule } from '../models/Rule';
|
||||||
import { Section } from '../models/Section';
|
import { Section } from '../models/Section';
|
||||||
|
@ -10,36 +9,10 @@ import { FormGroup, Validators, ControlValueAccessor, NG_VALUE_ACCESSOR } from '
|
||||||
import { NgForm } from '@angular/forms';
|
import { NgForm } from '@angular/forms';
|
||||||
import { Router, ActivatedRoute, ParamMap, Params } from '@angular/router';
|
import { Router, ActivatedRoute, ParamMap, Params } from '@angular/router';
|
||||||
import 'rxjs/add/operator/switchMap';
|
import 'rxjs/add/operator/switchMap';
|
||||||
|
|
||||||
//import { FieldBase } from '../../app/form/fields/field-base';
|
|
||||||
import { FieldControlService } from '../../app/services/field-control.service';
|
|
||||||
import { ServerService } from '../../app/services/server.service';
|
|
||||||
import { ModalComponent } from '../modal/modal.component';
|
|
||||||
|
|
||||||
import { Location } from '@angular/common';
|
import { Location } from '@angular/common';
|
||||||
|
|
||||||
import { AngularDraggableModule } from 'angular2-draggable';
|
|
||||||
|
|
||||||
import { MenuItem } from 'primeng/primeng';
|
|
||||||
|
|
||||||
import { PDFService } from '../services/transformers/pdf.service';
|
|
||||||
|
|
||||||
import './../../assets/xml2json.min.js';
|
|
||||||
declare var X2JS: any;
|
|
||||||
|
|
||||||
var flatten = require('flat');
|
|
||||||
// declare var $: any;
|
|
||||||
|
|
||||||
|
|
||||||
// import * as scroll from '../../assets/jquery.scrollTo.min.js';
|
|
||||||
|
|
||||||
|
|
||||||
declare function simple_notifier(type: string, title: string, message: string): any;
|
declare function simple_notifier(type: string, title: string, message: string): any;
|
||||||
|
|
||||||
|
|
||||||
//import '../../assets/perfect-scrollbar/perfect-scrollbar.js';
|
|
||||||
declare var PerfectScrollbar: any;
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'dynamic-form',
|
selector: 'dynamic-form',
|
||||||
templateUrl: './dynamic-form.component.html',
|
templateUrl: './dynamic-form.component.html',
|
||||||
|
@ -47,7 +20,6 @@ declare var PerfectScrollbar: any;
|
||||||
'./dynamic-form.component.css'
|
'./dynamic-form.component.css'
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
FieldControlService, ServerService
|
|
||||||
],
|
],
|
||||||
encapsulation: ViewEncapsulation.None,
|
encapsulation: ViewEncapsulation.None,
|
||||||
})
|
})
|
||||||
|
@ -60,7 +32,6 @@ export class DynamicFormComponent implements OnInit {
|
||||||
datasetId: string;
|
datasetId: string;
|
||||||
pathName: string;
|
pathName: string;
|
||||||
pages: Array<number>;
|
pages: Array<number>;
|
||||||
stepperItems: MenuItem[] = new Array<MenuItem>();
|
|
||||||
activeStepperIndex: number = 1;
|
activeStepperIndex: number = 1;
|
||||||
visibleSidebar: boolean = false;
|
visibleSidebar: boolean = false;
|
||||||
|
|
||||||
|
@ -68,9 +39,10 @@ export class DynamicFormComponent implements OnInit {
|
||||||
private currentPageIndex: number = 0;
|
private currentPageIndex: number = 0;
|
||||||
|
|
||||||
private fragment: string;
|
private fragment: string;
|
||||||
constructor(private serverService: ServerService, private router: Router, private pdfService: PDFService,
|
constructor(private router: Router,
|
||||||
private _location: Location, private route: ActivatedRoute
|
private _location: Location,
|
||||||
, private visibilityRulesService: VisibilityRulesService
|
private route: ActivatedRoute,
|
||||||
|
private visibilityRulesService: VisibilityRulesService
|
||||||
) {
|
) {
|
||||||
this.datasetId = route.snapshot.params['id'];
|
this.datasetId = route.snapshot.params['id'];
|
||||||
}
|
}
|
||||||
|
@ -82,31 +54,31 @@ export class DynamicFormComponent implements OnInit {
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
|
||||||
this.serverService.getSingleDataset(this.datasetId).subscribe(
|
// this.serverService.getSingleDataset(this.datasetId).subscribe(
|
||||||
(response:any) => {
|
// (response: any) => {
|
||||||
this.dataModel = new JsonSerializer<DatasetModel>().fromJSONObject(response, DatasetModel);
|
// this.dataModel = new JsonSerializer<DatasetModel>().fromJSONObject(response, DatasetModel);
|
||||||
this.pages = this.getPages(this.dataModel);
|
// this.pages = this.getPages(this.dataModel);
|
||||||
this.createPagination();
|
// this.createPagination();
|
||||||
this.form = this.dataModel.buildForm();
|
// this.form = this.dataModel.buildForm();
|
||||||
this.visibilityRulesService.formGroup = this.form;
|
// this.visibilityRulesService.formGroup = this.form;
|
||||||
let rules: Rule[] = new JsonSerializer<Rule>().fromJSONArray(response.rules, Rule);
|
// let rules: Rule[] = new JsonSerializer<Rule>().fromJSONArray(response.rules, Rule);
|
||||||
this.visibilityRulesService.buildVisibilityRules(rules)
|
// this.visibilityRulesService.buildVisibilityRules(rules)
|
||||||
this.progressbar = true;
|
// this.progressbar = true;
|
||||||
|
|
||||||
this.route.fragment.subscribe((fragment: string) => {
|
// this.route.fragment.subscribe((fragment: string) => {
|
||||||
var self = this;
|
// var self = this;
|
||||||
setTimeout(function () { self.scrollTo(fragment) });
|
// setTimeout(function () { self.scrollTo(fragment) });
|
||||||
});
|
// });
|
||||||
|
|
||||||
this.route.queryParams.subscribe((params) => {
|
// this.route.queryParams.subscribe((params) => {
|
||||||
if (params && "page" in params)
|
// if (params && "page" in params)
|
||||||
this.changeCurrentPage(params["page"]);
|
// this.changeCurrentPage(params["page"]);
|
||||||
});
|
// });
|
||||||
},
|
// },
|
||||||
error => {
|
// error => {
|
||||||
console.log("Could not load dmp");
|
// console.log("Could not load dmp");
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
|
|
||||||
/* else{
|
/* else{
|
||||||
|
|
||||||
|
@ -120,7 +92,7 @@ export class DynamicFormComponent implements OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
submit() {
|
submit() {
|
||||||
this.serverService.updateDataset(this.datasetId, this.form.value).subscribe()
|
//this.serverService.updateDataset(this.datasetId, this.form.value).subscribe()
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleSidebar() {
|
toggleSidebar() {
|
||||||
|
@ -143,9 +115,9 @@ export class DynamicFormComponent implements OnInit {
|
||||||
|
|
||||||
createPagination() {
|
createPagination() {
|
||||||
this.pages.forEach(item => {
|
this.pages.forEach(item => {
|
||||||
this.stepperItems.push({
|
// this.stepperItems.push({
|
||||||
label: '',
|
// label: '',
|
||||||
})
|
// })
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,82 +143,4 @@ export class DynamicFormComponent implements OnInit {
|
||||||
if (pageIndex === -1) return;
|
if (pageIndex === -1) return;
|
||||||
this.currentPageIndex = page;
|
this.currentPageIndex = page;
|
||||||
}
|
}
|
||||||
/* scrollToElemID(elemID) {
|
|
||||||
scroll("#" + elemID);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private patchForm(flatList: any) {
|
|
||||||
|
|
||||||
|
|
||||||
for (var prop in flatList) {
|
|
||||||
if (flatList.hasOwnProperty(prop)) {
|
|
||||||
if (prop.endsWith('.id') || prop.endsWith('.answer') || prop.endsWith('.value')) continue;
|
|
||||||
//console.log("updating value of "+prop +" to "+flatList[prop].valueOf())
|
|
||||||
this.form.get(prop).setValue(flatList[prop].valueOf());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ngAfterViewChecked(): void { //navigate to certain section of the page
|
|
||||||
try {
|
|
||||||
document.querySelector('#' + this.fragment).scrollIntoView();
|
|
||||||
} catch (e) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SaveForm() {
|
|
||||||
let final = false;
|
|
||||||
this.submitForm(false);
|
|
||||||
|
|
||||||
this.payLoad = JSON.stringify(this.form.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
SaveFinalizeForm(){
|
|
||||||
$("#confirmModal").modal("hide");
|
|
||||||
let final = true;
|
|
||||||
this.submitForm(final);
|
|
||||||
}
|
|
||||||
|
|
||||||
shouldIShow(element) { //pagination , pages are declared in xml for every groupfield
|
|
||||||
|
|
||||||
if (this.pagination.currentPage == element.page){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
setPage(page: number) {
|
|
||||||
|
|
||||||
if (page < 1 || page > this.pagination.totalPages) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var pagesize = 4;
|
|
||||||
// get pagination object from service
|
|
||||||
this.pagination = this.pagerService.getPagination(this.dataModel.groups, this.dataModel.groups.length, page, pagesize);
|
|
||||||
|
|
||||||
//get current page of items
|
|
||||||
// this.dataModel.sections.forEach(section => {
|
|
||||||
// if (section.groupFields.length > 0) {
|
|
||||||
// section.groupFields = this.dataModel.groups.slice(this.pagination.startIndex, this.pagination.endIndex + 1);
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//this.dataModel.groups = this.dataModel.groups.slice(this.pagination.startIndex, this.pagination.endIndex + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
toggleTOC(){
|
|
||||||
this.expandedToc = !this.expandedToc;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
createPDF(elementID: string, pdffilename: string) {
|
|
||||||
this.pdfService.toPDF(elementID, pdffilename);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1 +1 @@
|
||||||
<p-progressBar [value]="value" [style]="{'height': '30px'}" [styleClass]="'alwaysVisible'"></p-progressBar>
|
<!-- <p-progressBar [value]="value" [style]="{'height': '30px'}" [styleClass]="'alwaysVisible'"></p-progressBar> -->
|
|
@ -1,4 +1,3 @@
|
||||||
import { Model } from '../../entities/model/model';
|
|
||||||
import { DatasetModel } from '../../models/DatasetModel';
|
import { DatasetModel } from '../../models/DatasetModel';
|
||||||
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
|
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
|
||||||
|
|
||||||
|
|
|
@ -42,3 +42,31 @@
|
||||||
margin-top: 40px;
|
margin-top: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.card{
|
||||||
|
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.14);
|
||||||
|
border-radius: 6px;
|
||||||
|
color: rgba(0,0,0, 0.87);
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-raised{
|
||||||
|
box-shadow: 0 10px 30px -12px rgba(0, 0, 0, 0.42), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 990px){
|
||||||
|
#sidebar, #nav-right, #nav-left-button{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#menu{
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
#main-panel{
|
||||||
|
padding-left: 0;
|
||||||
|
-webkit-transition: all 400ms;
|
||||||
|
-moz-transition: all 400ms;
|
||||||
|
-ms-transition: all 400ms;
|
||||||
|
-o-transition: all 400ms;
|
||||||
|
transition: all 400ms;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { Router, ActivatedRoute } from '@angular/router';
|
import { Router, ActivatedRoute } from '@angular/router';
|
||||||
import { ServerService } from '../../app/services/server.service';
|
|
||||||
import { DashboardService } from '../../app/services/dashboard/dashboard.service';
|
import { DashboardService } from '../../app/services/dashboard/dashboard.service';
|
||||||
import { DashboardStatisticsModel } from '../models/dashboard/DashboardStatisticsModel';
|
import { DashboardStatisticsModel } from '../models/dashboard/DashboardStatisticsModel';
|
||||||
import { JsonSerializer } from '../utilities/JsonSerializer';
|
import { JsonSerializer } from '../utilities/JsonSerializer';
|
||||||
|
@ -17,7 +16,11 @@ export class HomepageComponent implements OnInit{
|
||||||
private userInfo: any;
|
private userInfo: any;
|
||||||
private dashboardStatisticsData: DashboardStatisticsModel = new DashboardStatisticsModel();
|
private dashboardStatisticsData: DashboardStatisticsModel = new DashboardStatisticsModel();
|
||||||
|
|
||||||
constructor(private serverService: ServerService, private route: ActivatedRoute, private router: Router, private dashBoardService: DashboardService){
|
constructor(
|
||||||
|
private route: ActivatedRoute,
|
||||||
|
private router: Router,
|
||||||
|
private dashBoardService: DashboardService
|
||||||
|
) {
|
||||||
this.dashboardStatisticsData.totalDataManagementPlanCount = 0;
|
this.dashboardStatisticsData.totalDataManagementPlanCount = 0;
|
||||||
this.dashboardStatisticsData.totalDataSetCount = 0;
|
this.dashboardStatisticsData.totalDataSetCount = 0;
|
||||||
this.dashboardStatisticsData.totalProjectCount = 0;
|
this.dashboardStatisticsData.totalProjectCount = 0;
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
<div class="login">
|
<div class="container">
|
||||||
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4 col-sm-6 col-md-offset-4 col-sm-offset-3">
|
<div class="row col-md-6 col-sm-6 col-md-offset-3 col-sm-offset-3">
|
||||||
<div class="card col-md-offset-2 col-md-8">
|
<div class="card col-md-8 col-md-offset-2">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>Login</h4>
|
<h4>Login</h4>
|
||||||
<div class="social-btns">
|
<div class="social-btns">
|
||||||
|
@ -41,3 +42,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
|
@ -1,3 +1,40 @@
|
||||||
|
.container{
|
||||||
|
padding: 15px 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card{
|
||||||
|
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.14);
|
||||||
|
border-radius: 6px;
|
||||||
|
color: rgba(0,0,0, 0.87);
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-raised{
|
||||||
|
box-shadow: 0 10px 30px -12px rgba(0, 0, 0, 0.42), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-title{
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1200px) {
|
||||||
|
.container {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.container {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.container {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.container{
|
.container{
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
|
@ -1,113 +0,0 @@
|
||||||
import { Component, OnInit, Input,Output,EventEmitter, ViewChild, ElementRef, NgZone } from '@angular/core';
|
|
||||||
import { ServerService } from '../../app/services/server.service';
|
|
||||||
import { DropdownField } from '../../app/form/fields/dropdown/field-dropdown';
|
|
||||||
import { Param } from '../entities/model/param';
|
|
||||||
import { Dataset } from '../entities/model/dataset';
|
|
||||||
import { Project } from '../entities/model/project';
|
|
||||||
import { Router, ActivatedRoute } from '@angular/router';
|
|
||||||
|
|
||||||
declare var jquery:any;
|
|
||||||
declare var $ :any;
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'modal',
|
|
||||||
templateUrl: './modal.html'
|
|
||||||
})
|
|
||||||
|
|
||||||
export class ModalComponent implements OnInit {
|
|
||||||
|
|
||||||
@Input() datasetDropDown: DropdownField;
|
|
||||||
// public dataSetVisibe:boolean;
|
|
||||||
@Input() datasets: Dataset[];
|
|
||||||
public project: Project;
|
|
||||||
//datasetResource :DataTableResource<Dataset>;
|
|
||||||
@Input() datasetCount = 0;
|
|
||||||
@ViewChild('modalDmps') modalDmps;
|
|
||||||
|
|
||||||
@Input()
|
|
||||||
public item:any
|
|
||||||
showValue:boolean
|
|
||||||
@Input()
|
|
||||||
get show(){
|
|
||||||
return this.showValue;
|
|
||||||
}
|
|
||||||
@Output()
|
|
||||||
public showChange = new EventEmitter();
|
|
||||||
|
|
||||||
set show(value:any){
|
|
||||||
this.showValue = value
|
|
||||||
this.showChange.emit(this.showValue)
|
|
||||||
}
|
|
||||||
|
|
||||||
dataSetValue:boolean
|
|
||||||
@Input()
|
|
||||||
get dataSetVisibe(){
|
|
||||||
return this.dataSetValue;
|
|
||||||
}
|
|
||||||
@Output()
|
|
||||||
public dataSetValueChange = new EventEmitter();
|
|
||||||
|
|
||||||
set dataSetVisibe(value:any){
|
|
||||||
this.dataSetValue = value;
|
|
||||||
this.dataSetValueChange.emit(this.dataSetValue)
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(private serverService: ServerService, private router: Router, private ngZone: NgZone) {
|
|
||||||
this.datasetDropDown = new DropdownField();
|
|
||||||
this.datasetDropDown.options = [];
|
|
||||||
//this.dataSetVisibe= false;
|
|
||||||
this.datasets = [];
|
|
||||||
this.project = new Project();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
|
|
||||||
this.serverService.listDmpsLabelID().subscribe(
|
|
||||||
(response:any) => {
|
|
||||||
console.log("response");
|
|
||||||
console.log(response);
|
|
||||||
//let params = new Param();
|
|
||||||
response.forEach((dmp) => {
|
|
||||||
let params = new Param();
|
|
||||||
params.key = dmp.id;
|
|
||||||
params.value = dmp.label;
|
|
||||||
this.datasetDropDown.options.push(params);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
)
|
|
||||||
if(this.show) this.showModal()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
showModal(){
|
|
||||||
this.project.label = this.item.label;
|
|
||||||
this.project.abbreviation = this.item.abbreviation;
|
|
||||||
this.project.uri = this.item.uri;
|
|
||||||
this.project.id = this.item.id;
|
|
||||||
$("#exampleModalDmps").modal("show");
|
|
||||||
}
|
|
||||||
|
|
||||||
closeModal(){
|
|
||||||
$("#exampleModalDmps").modal("hide");
|
|
||||||
this.show = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
showDatasets(dmpId, event) {
|
|
||||||
debugger;
|
|
||||||
this.dataSetVisibe = true;
|
|
||||||
$("#exampleModalDmps").modal("hide");
|
|
||||||
this.show = false;
|
|
||||||
// this.ngZone.run(() => this.router.navigateByUrl('dataset')); //change router
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
afterLoad(){
|
|
||||||
//this.datasetResource = new DataTableResource(this.datasets);
|
|
||||||
//this.datasetResource.count().then(count => this.datasetCount = count);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
<div class="modal fade" id="exampleModalDmps" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true" #exampleModalDmps>
|
|
||||||
<div class="modal-dialog" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="exampleModalLabel">Project</h5>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form #ModalProjectForm="ngForm">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="recipient-name" class="col-form-label">DMP:</label>
|
|
||||||
<select class="form-control" [id]="datasetDropDownKey" [(ngModel)]="datasetDropDownKey" [name]="datasetDropDown" #datasetfield>
|
|
||||||
<option *ngFor="let opt of datasetDropDown.options" [value]="opt.key">{{opt.value}}</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="label-name" class="form-control-label">Label:{{project.label}}</label>
|
|
||||||
<input type="text" class="form-control" id="label" [(ngModel)]= "project.label" name = "label">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="abbreviation-text" class="form-control-label">Abbreviation:</label>
|
|
||||||
<input class="form-control" id="abbreviation" [(ngModel)]= "project.abbreviation" name = "abbreviation">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="reference-text" class="form-control-label">Reference:</label>
|
|
||||||
<input class="form-control" id="reference" [(ngModel)]= "project.reference" name = "reference">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="uri-text" class="form-control-label">Uri:</label>
|
|
||||||
<input class="form-control" id="uri" [(ngModel)]= "project.uri" name = "uri">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="start-date" class="form-control-label">Start Date:</label>
|
|
||||||
<input class="form-control" id="startDate" [(ngModel)]= "project.startDate" name = "startDate">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="end-date" class="form-control-label">End Date:</label>
|
|
||||||
<input class="form-control" id="endDate" [(ngModel)]= "project.endDate" name = "endDate">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="code-name" class="form-control-label">Code:</label>
|
|
||||||
<input type="text" class="form-control" id="code" [(ngModel)]= "project.id" name = "id" disabled>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal" (click)= "closeModal()">Close</button>
|
|
||||||
<button type="button" class="btn btn-primary">Save</button>
|
|
||||||
<button type="button" class="btn btn-primary" (click)= "showDatasets(datasetfield.value, exampleModalDmps)" >Show Datasets</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!--DATASET TABLE-->
|
|
||||||
<!-- <datasets-table *ngIf="dataSetVisibe == true"></datasets-table> -->
|
|
|
@ -1,23 +0,0 @@
|
||||||
import * as _ from "lodash";
|
|
||||||
import { Pipe, PipeTransform } from "@angular/core";
|
|
||||||
|
|
||||||
@Pipe({
|
|
||||||
name: "datasetstatusFilter"
|
|
||||||
})
|
|
||||||
export class DatasetStatusFilterPipe implements PipeTransform {
|
|
||||||
|
|
||||||
transform(array: any[], status: number): any {
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
|
|
||||||
return _.filter(array, row => {
|
|
||||||
|
|
||||||
return (
|
|
||||||
row.status == status
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
import * as _ from "lodash";
|
|
||||||
import {Pipe, PipeTransform} from "@angular/core";
|
|
||||||
|
|
||||||
@Pipe({
|
|
||||||
name: "datasetTableFilter"
|
|
||||||
})
|
|
||||||
export class DatasetTableFilterPipe implements PipeTransform {
|
|
||||||
|
|
||||||
transform(array: any[], query: string): any {
|
|
||||||
|
|
||||||
if (query) {
|
|
||||||
|
|
||||||
return _.filter(array, row => {
|
|
||||||
if (row.uri == null) row.uri = "";
|
|
||||||
if (row.label == null) row.label = "";
|
|
||||||
if (row.id == null) row.id = "";
|
|
||||||
return (
|
|
||||||
|
|
||||||
row.label.toLowerCase().indexOf(query.toLowerCase()) > -1
|
|
||||||
//|| row.version == query
|
|
||||||
//|| row.id.indexOf(query) > -1
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
import * as _ from "lodash";
|
|
||||||
import { Pipe, PipeTransform } from "@angular/core";
|
|
||||||
|
|
||||||
@Pipe({
|
|
||||||
name: "dmpstatusFilter"
|
|
||||||
})
|
|
||||||
export class DmpStatusFilterPipe implements PipeTransform {
|
|
||||||
|
|
||||||
transform(array: any[], status: number): any {
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
|
|
||||||
return _.filter(array, row => {
|
|
||||||
|
|
||||||
return (
|
|
||||||
row.status == status
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
import * as _ from "lodash";
|
|
||||||
import {Pipe, PipeTransform} from "@angular/core";
|
|
||||||
|
|
||||||
@Pipe({
|
|
||||||
name: "dmpTableFilter"
|
|
||||||
})
|
|
||||||
export class DmpTableFilterPipe implements PipeTransform {
|
|
||||||
|
|
||||||
transform(array: any[], query: string): any {
|
|
||||||
|
|
||||||
if (query) {
|
|
||||||
|
|
||||||
return _.filter(array, row => {
|
|
||||||
if (row.uri == null) row.uri = "";
|
|
||||||
if (row.label == null) row.label = "";
|
|
||||||
if (row.id == null) row.id = "";
|
|
||||||
return (
|
|
||||||
|
|
||||||
row.label.toLowerCase().indexOf(query.toLowerCase()) > -1 ||
|
|
||||||
|
|
||||||
//row.version == query ||
|
|
||||||
row.id.indexOf(query) > -1
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
import * as _ from "lodash";
|
|
||||||
import {Pipe, PipeTransform} from "@angular/core";
|
|
||||||
|
|
||||||
@Pipe({
|
|
||||||
name: "dmpVersionFilter"
|
|
||||||
})
|
|
||||||
export class DmpVersionFilterPipe implements PipeTransform {
|
|
||||||
|
|
||||||
transform(array: any[], version: number): any {
|
|
||||||
|
|
||||||
if (version) {
|
|
||||||
|
|
||||||
return _.filter(array, row => {
|
|
||||||
return (
|
|
||||||
row.version == version
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
import * as _ from "lodash";
|
|
||||||
import {Pipe, PipeTransform} from "@angular/core";
|
|
||||||
|
|
||||||
@Pipe({
|
|
||||||
name: "projectTableFilter"
|
|
||||||
})
|
|
||||||
export class ProjectTableFilterPipe implements PipeTransform {
|
|
||||||
|
|
||||||
transform(array: any[], query: string, userid : string, onlyMyProjects : boolean): any {
|
|
||||||
|
|
||||||
if (query || userid) {
|
|
||||||
|
|
||||||
return _.filter(array, row => {
|
|
||||||
|
|
||||||
if(onlyMyProjects){
|
|
||||||
return (row.label.toLowerCase().indexOf(query.toLowerCase()) > -1) && (row.creationUser.id==userid);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
return row.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
import { Pipe, PipeTransform } from '@angular/core';
|
|
||||||
|
|
||||||
@Pipe({
|
|
||||||
name: "statusToString"
|
|
||||||
})
|
|
||||||
|
|
||||||
export class StatusToString implements PipeTransform {
|
|
||||||
|
|
||||||
transform(input: any) : any {
|
|
||||||
|
|
||||||
if(input < 0) {
|
|
||||||
return "Deleted";
|
|
||||||
}
|
|
||||||
else if(input == 0) {
|
|
||||||
return "Active";
|
|
||||||
}
|
|
||||||
else if(input == 1) {
|
|
||||||
return "Inactive";
|
|
||||||
}
|
|
||||||
else if(input == 2) {
|
|
||||||
return "Submitted";
|
|
||||||
}
|
|
||||||
else if(input == 3) {
|
|
||||||
return "Cancel";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return input.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
import { Component, Input, OnInit, AfterViewChecked, ViewChild, Injectable } from '@angular/core';
|
|
||||||
|
|
||||||
import {RestBase} from './rest-base';
|
|
||||||
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class EestoreService implements OnInit {
|
|
||||||
|
|
||||||
base: string = "https://eestore.paas2.uninett.no/api/";
|
|
||||||
|
|
||||||
datarepo: string = this.base+"datarepo/";
|
|
||||||
projectrepo: string = this.base+"projectrepo/";
|
|
||||||
organizationrepo: string = this.base+"organizationrepo/";
|
|
||||||
metadataschemarepo: string = this.base+"metadataschemarepo/";
|
|
||||||
servicerepo: string = this.base+"servicerepo/";
|
|
||||||
personrepo: string = this.base+"personrepo/";
|
|
||||||
config: string = this.base+"config/";
|
|
||||||
configtags: string = this.base+"configtags/";
|
|
||||||
|
|
||||||
|
|
||||||
constructor(public restBase: RestBase) {
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnInit(){
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
getDataRepos(){
|
|
||||||
return this.restBase.proxy_get(this.datarepo);
|
|
||||||
}
|
|
||||||
|
|
||||||
getProjectRepos(){
|
|
||||||
return this.restBase.proxy_get(this.projectrepo);
|
|
||||||
}
|
|
||||||
|
|
||||||
getOrganizationRepos(){
|
|
||||||
return this.restBase.proxy_get(this.organizationrepo);
|
|
||||||
}
|
|
||||||
|
|
||||||
getMetadataSchemaRepos(){
|
|
||||||
return this.restBase.proxy_get(this.metadataschemarepo);
|
|
||||||
}
|
|
||||||
|
|
||||||
getServiceRepos(){
|
|
||||||
return this.restBase.proxy_get(this.servicerepo);
|
|
||||||
}
|
|
||||||
|
|
||||||
getPersonRepos(){
|
|
||||||
return this.restBase.proxy_get(this.personrepo);
|
|
||||||
}
|
|
||||||
|
|
||||||
getConfigs(){
|
|
||||||
return this.restBase.proxy_get(this.config);
|
|
||||||
}
|
|
||||||
|
|
||||||
getConfigTags(){
|
|
||||||
return this.restBase.proxy_get(this.configtags);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class FieldControlService {
|
|
||||||
constructor(){ }
|
|
||||||
|
|
||||||
|
|
||||||
toFormGroup(fields: any, groups:any){
|
|
||||||
|
|
||||||
let form: any = {};
|
|
||||||
|
|
||||||
groups.forEach(group => {
|
|
||||||
let subgroup: any = {};
|
|
||||||
let subgroupFieldset: any = {};
|
|
||||||
let fieldset: boolean = false;
|
|
||||||
group.groupFields.forEach(field => {
|
|
||||||
//if(field.attributes.validation != undefined)
|
|
||||||
// field.attributes.validation.forEach(val => {
|
|
||||||
// if (val.ruleStyle.toString()=="existence"){
|
|
||||||
// field.required = true;
|
|
||||||
// }
|
|
||||||
// if (val.ruleStyle.toString()=="regex"){
|
|
||||||
// field.regex = val.regex;
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
subgroup[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '')
|
|
||||||
|
|
||||||
if (group.compositeFields!=undefined){
|
|
||||||
fieldset = true;
|
|
||||||
group.compositeFields.groupFields.forEach(field => {
|
|
||||||
//subgroupFieldset[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '')
|
|
||||||
subgroup[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
//PLEASE CHANGE THE group.key TO BE SAME AS THE ONE ON THE DYNAMIC-FORM-GROUP-COMPONENT.html
|
|
||||||
if (fieldset){
|
|
||||||
//subgroup["FieldSet"+ group.key] = form[group.key] = new FormGroup(subgroupFieldset);
|
|
||||||
form[group.key] = new FormGroup(subgroup);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
form[group.key] = new FormGroup(subgroup);
|
|
||||||
//console.log("FORM_GROUP_GROUP: ");
|
|
||||||
//console.log(form);
|
|
||||||
});
|
|
||||||
//add also the spare fields into the form
|
|
||||||
fields.forEach(field => {
|
|
||||||
form[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '')
|
|
||||||
});
|
|
||||||
|
|
||||||
//console.log("FORM_GROUP: ");
|
|
||||||
//console.log(form);
|
|
||||||
return new FormGroup(form);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
import { Injectable, Inject} from '@angular/core';
|
|
||||||
import { Observable } from 'rxjs';
|
|
||||||
import {LocalStorageService} from 'ngx-webstorage';
|
|
||||||
import 'rxjs/add/operator/map';
|
|
||||||
import { DOCUMENT } from '@angular/platform-browser';
|
|
||||||
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class GlobalVariables {
|
|
||||||
|
|
||||||
constructor (private storage : LocalStorageService, @Inject(DOCUMENT) private document) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
getFormHasPaging() : boolean{
|
|
||||||
return this.storage.retrieve('form-paging-flag');
|
|
||||||
}
|
|
||||||
|
|
||||||
setFormHasPaging(formHasPaging : boolean){
|
|
||||||
this.storage.store('form-paging-flag',formHasPaging);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,89 +0,0 @@
|
||||||
import { HttpClient , HttpHeaders, HttpParams } from '@angular/common/http';
|
|
||||||
import 'rxjs/Rx';
|
|
||||||
|
|
||||||
|
|
||||||
declare var X2JS: any;
|
|
||||||
|
|
||||||
export class RestBase {
|
|
||||||
|
|
||||||
xml2jsonOBJ: any;
|
|
||||||
|
|
||||||
static get parameters() { return [HttpClient] }
|
|
||||||
|
|
||||||
constructor(public http : HttpClient) {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protocol: string = "http";
|
|
||||||
hostname: string ="192.168.32.171"
|
|
||||||
port: number = 8080;
|
|
||||||
|
|
||||||
/*
|
|
||||||
protocol: string = "http";
|
|
||||||
hostname: string ="dl010.madgik.di.uoa.gr"
|
|
||||||
port: number = 8080;
|
|
||||||
webappname: string = "dmp-backend";
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
proxyPath : string = this.protocol+"://"+this.hostname+":"+this.port+"/proxy/";
|
|
||||||
loginPath : string = this.protocol+"://"+this.hostname+":"+this.port+"/login/";
|
|
||||||
restPath: string = this.protocol+"://"+this.hostname+":"+this.port;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public proxy_get(path : string, params? : any){
|
|
||||||
var options = this.createOptions(params);
|
|
||||||
return this.http.get<any>(this.proxyPath +"proxy?url="+ path, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
public proxy_get_wQuery(path : string, query: string, params? : any){
|
|
||||||
var options = this.createOptions(params);
|
|
||||||
var queryPart = (query) ? "?search="+query : "";
|
|
||||||
return this.http.get<any>(this.proxyPath +"proxy?url=" + path + queryPart, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public login(path : string, data : any){
|
|
||||||
let options = { headers: new HttpHeaders().set('Content-Type', 'application/json') };
|
|
||||||
return this.http.post<any>(this.loginPath + path, JSON.stringify(data), options);
|
|
||||||
}
|
|
||||||
|
|
||||||
public get(path : string, params? : any){
|
|
||||||
var options = this.createOptions(params);
|
|
||||||
return this.http.get<any>(this.restPath + path, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public post(path : string, data : any, params? : any){
|
|
||||||
var options = this.createOptions(params);
|
|
||||||
return this.http.post<any>(this.restPath + path, JSON.stringify(data), options);
|
|
||||||
}
|
|
||||||
|
|
||||||
private createOptions(parameters : any){
|
|
||||||
/* var token = this.tokenService.getToken();
|
|
||||||
var provider: TokenProvider = this.tokenService.getProvider();
|
|
||||||
|
|
||||||
var params = new HttpParams();
|
|
||||||
|
|
||||||
if(parameters != null){
|
|
||||||
Object.entries(parameters).forEach( entry => {
|
|
||||||
params = params.set(entry[0], entry[1]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var headers;
|
|
||||||
if(provider == TokenProvider.google)
|
|
||||||
headers = new HttpHeaders().set('Content-Type', 'application/json').set("google-token", token);
|
|
||||||
if(provider == TokenProvider.native)
|
|
||||||
headers = new HttpHeaders().set('Content-Type', 'application/json').set("native-token", token);
|
|
||||||
let options = { params: params, headers: headers }; */
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,193 +0,0 @@
|
||||||
import { Injectable, ReflectiveInjector, Injector } from '@angular/core';
|
|
||||||
import { JsonObjest } from '../../app/entities/JsonObject.class';
|
|
||||||
import { DatasetProfile } from '../entities/datasetprofile';
|
|
||||||
import { Project } from '../entities/model/project';
|
|
||||||
import { RestBase } from './rest-base';
|
|
||||||
import 'rxjs/Rx';
|
|
||||||
|
|
||||||
import './../../assets/xml2json.min.js';
|
|
||||||
declare var X2JS: any;
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class ServerService {
|
|
||||||
|
|
||||||
|
|
||||||
constructor(private restBase: RestBase) {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public listDatasetIDs() {
|
|
||||||
return this.restBase.get("dataset");
|
|
||||||
}
|
|
||||||
|
|
||||||
public getAllDatasets() {
|
|
||||||
return this.restBase.get("getAllDatasets");
|
|
||||||
}
|
|
||||||
|
|
||||||
public getAllDatasetIDs(datasetId: string) {
|
|
||||||
return this.restBase.get("dataset/" + datasetId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public getDatasetByID(datasetId: string) {
|
|
||||||
return this.restBase.get("datasets/" + datasetId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public setDataset(dataset) {
|
|
||||||
return this.restBase.post("dataset/update", dataset);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public getAllDmps() {
|
|
||||||
return this.restBase.get("dmp/getAll");
|
|
||||||
}
|
|
||||||
|
|
||||||
public listDmpsLabelID() {
|
|
||||||
return this.restBase.get("dmp/listDMPLabelID");
|
|
||||||
}
|
|
||||||
|
|
||||||
public getDmp(dmpid: string, eager?: boolean) {
|
|
||||||
if (eager)
|
|
||||||
return this.restBase.get("dmps/" + dmpid, { "eager": true });
|
|
||||||
else
|
|
||||||
return this.restBase.get("dmps/" + dmpid, { "eager": true });
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public getDmpHistory(dmpid: string) {
|
|
||||||
return this.restBase.get("dmp/history/" + dmpid);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public listDmpIDs() {
|
|
||||||
return this.restBase.get("dmps");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public listProjectIDs() {
|
|
||||||
return this.restBase.get("projects");
|
|
||||||
}
|
|
||||||
|
|
||||||
public getAllProjects() {
|
|
||||||
return this.restBase.get("project/getAll");
|
|
||||||
}
|
|
||||||
|
|
||||||
public getProject(projectID: string, eager?: boolean) {
|
|
||||||
if (eager)
|
|
||||||
return this.restBase.get("projects/" + projectID, { "eager": true });
|
|
||||||
else
|
|
||||||
return this.restBase.get("projects/" + projectID, { "eager": false });
|
|
||||||
}
|
|
||||||
|
|
||||||
public listProjectsLabelID() {
|
|
||||||
return this.restBase.get("project/listAllLabelIDs");
|
|
||||||
}
|
|
||||||
|
|
||||||
public listDmpsUser() {
|
|
||||||
return this.restBase.get("dmp/listDMPLabelID");
|
|
||||||
}
|
|
||||||
|
|
||||||
public getProjectsOfUser() {
|
|
||||||
return this.restBase.get("project/getofuser");
|
|
||||||
}
|
|
||||||
|
|
||||||
public createProject(data: any) {
|
|
||||||
return this.restBase.post("project/createofuser", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public updateProject(data: any) {
|
|
||||||
return this.restBase.post("project/update", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public getDmpsOfProject(projectID: string) {
|
|
||||||
return this.restBase.get("project/dmps", { "id": projectID });
|
|
||||||
}
|
|
||||||
|
|
||||||
public getAllDataSet() {
|
|
||||||
return this.restBase.get("dataset/getAll");
|
|
||||||
}
|
|
||||||
|
|
||||||
public getDmpOfUser() {
|
|
||||||
return this.restBase.get("dmp/getofuser");
|
|
||||||
}
|
|
||||||
|
|
||||||
public createDmpForCurrentUser(data: any) {
|
|
||||||
return this.restBase.post("dmp/createofuser", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public updateDmp(data: any) {
|
|
||||||
return this.restBase.post("dmp/update", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public cloneDmp(data: any) {
|
|
||||||
return this.restBase.post("dmp/cloneforuser", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public deleteDmp(dmp: any) {
|
|
||||||
return this.restBase.post("dmp/softdelete", dmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
public getDatasetForDmp(data: any) {
|
|
||||||
return this.restBase.post("dmp/getdatasets", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public createDatasetForDmp(data: any) {
|
|
||||||
return this.restBase.post("dataset/create", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public getAllDatsetsProfile() {
|
|
||||||
return this.restBase.get("datasetprofile/getAll");
|
|
||||||
}
|
|
||||||
|
|
||||||
public getDatasetProfileByID(id) {
|
|
||||||
return this.restBase.get("datasetprofiles/" + id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public updateDatsetsProfile(data: any) {
|
|
||||||
return this.restBase.post("dataset/update", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public deleteDataset(dataset: any) {
|
|
||||||
return this.restBase.post("dataset/softdelete", dataset);
|
|
||||||
}
|
|
||||||
|
|
||||||
public getUserByID(id: string) {
|
|
||||||
return this.restBase.get("users/" + id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public whoami() {
|
|
||||||
return this.restBase.get("user/whoami");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public updateDataset(id: string, properties: any) {
|
|
||||||
return this.restBase.post("datasetprofile/save/" + id, properties);
|
|
||||||
}
|
|
||||||
|
|
||||||
public getSingleDataset(id) {
|
|
||||||
return this.restBase.get("datasetprofile/get/" + id);
|
|
||||||
}
|
|
||||||
|
|
||||||
getThroughProxy(url: string, query: string) {
|
|
||||||
return this.restBase.proxy_get_wQuery(url, query);
|
|
||||||
}
|
|
||||||
|
|
||||||
public searchDatasetRegistry(like: string) {
|
|
||||||
return this.restBase.get("external/registries" + "?query=" + like);
|
|
||||||
}
|
|
||||||
|
|
||||||
public searchDatasetRepository(like: string) {
|
|
||||||
return this.restBase.get("external/datarepos" + "?query=" + like);
|
|
||||||
}
|
|
||||||
|
|
||||||
public searchDatasetService(like: string) {
|
|
||||||
return this.restBase.get("external/services" + "?query=" + like);
|
|
||||||
}
|
|
||||||
|
|
||||||
public searchDMPResearchers(like: string) {
|
|
||||||
return this.restBase.get("external/researchers" + "?query=" + like);
|
|
||||||
}
|
|
||||||
|
|
||||||
public searchDMPOrganizations(like: string) {
|
|
||||||
return this.restBase.get("external/organisations" + "?query=" + like);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
import {Injectable} from '@angular/core';
|
|
||||||
|
|
||||||
// declare var $ :any;
|
|
||||||
|
|
||||||
// import * as jsPDF from '../../../../node_modules/jspdf/dist/jspdf.min';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class PDFService {
|
|
||||||
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
toPDF(elementID : string, filename : string){
|
|
||||||
|
|
||||||
// var pdf = new jsPDF();
|
|
||||||
|
|
||||||
// pdf.fromHTML($('#'+elementID).html(), 15, 15, {
|
|
||||||
// 'width': 270
|
|
||||||
// //,'elementHandlers': specialElementHandlers
|
|
||||||
// });
|
|
||||||
// pdf.save(filename);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
import { NgModule } from '@angular/core';
|
|
||||||
import { CommonModule } from '@angular/common';
|
|
||||||
import { FormsModule } from '@angular/forms';
|
|
||||||
//import {DataTableModule } from 'angular-4-data-table-bootstrap-4';
|
|
||||||
|
|
||||||
import { TabComponent } from './tabs.component';
|
|
||||||
|
|
||||||
import { TabRoutingModule } from './tabs-routing.module';
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
imports: [
|
|
||||||
CommonModule,
|
|
||||||
FormsModule,
|
|
||||||
TabRoutingModule,
|
|
||||||
//DataTableModule
|
|
||||||
],
|
|
||||||
declarations: [
|
|
||||||
TabComponent
|
|
||||||
],
|
|
||||||
providers: [ ]
|
|
||||||
})
|
|
||||||
export class TabModule {}
|
|
|
@ -1,35 +0,0 @@
|
||||||
import { NgModule } from '@angular/core';
|
|
||||||
import { RouterModule, Routes } from '@angular/router';
|
|
||||||
|
|
||||||
import { TabComponent } from './tabs.component';
|
|
||||||
import { AuthGuard } from '../guards/auth.guard';
|
|
||||||
import { ProjectListingComponent } from '../projects/project-listing.component';
|
|
||||||
import { DataManagementPlanListingComponent } from '../dmps/dmp-listing.component';
|
|
||||||
|
|
||||||
const tabsRoutes: Routes = [
|
|
||||||
{
|
|
||||||
path: 'tabs', component: TabComponent, canActivate: [AuthGuard],
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'projects',
|
|
||||||
component: ProjectListingComponent
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'dmps',
|
|
||||||
component: DataManagementPlanListingComponent
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
// { path: 'tabs/projects', component: ProjectListingComponent }, // canActivate: [AuthGuard]
|
|
||||||
// { path: 'tabs/dmps', component: DataManagementPlanListingComponent }
|
|
||||||
];
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
imports: [
|
|
||||||
RouterModule.forChild(tabsRoutes)
|
|
||||||
],
|
|
||||||
exports: [
|
|
||||||
RouterModule
|
|
||||||
]
|
|
||||||
})
|
|
||||||
export class TabRoutingModule { }
|
|
|
@ -1,26 +0,0 @@
|
||||||
import { Component } from '@angular/core';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'my-app',
|
|
||||||
template: `
|
|
||||||
<ul class="nav nav-tabs">
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" routerLink="dmps" routerLinkActive="active">DMPs</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link active" routerLink="projects" routerLinkActive="active">Projects</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
`
|
|
||||||
})
|
|
||||||
export class TabComponent {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// <nav>
|
|
||||||
// <a routerLink="projects" routerLinkActive="active">Projects</a>
|
|
||||||
// <a routerLink="dmps" routerLinkActive="active">My Dmps</a>
|
|
||||||
// </nav>
|
|
|
@ -1,562 +0,0 @@
|
||||||
export const TestModel = {
|
|
||||||
"rules": [
|
|
||||||
{
|
|
||||||
"sourceField": "dataSummary",
|
|
||||||
"targetField": "metadataStandarsA211",
|
|
||||||
"requiredValue": "true",
|
|
||||||
"type": "visibility",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sourceField": "radioChoices",
|
|
||||||
"targetField": "notlistedUrlA211",
|
|
||||||
"requiredValue": "between15and18",
|
|
||||||
"type": "visibility",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sourceField": "dataSummary",
|
|
||||||
"targetField": "freeOfChargeGroupCommentA213",
|
|
||||||
"requiredValue": "true",
|
|
||||||
"type": "visibility",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sourceField": "useMetadataQ211",
|
|
||||||
"targetField": "noMetadata",
|
|
||||||
"requiredValue": "true",
|
|
||||||
"type": "visibility",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sourceField": "FindDataMetadataGroup",
|
|
||||||
"targetField": "notlistedCommentA211",
|
|
||||||
"requiredValue": "true",
|
|
||||||
"type": "visibility",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sourceField": "dataSummary",
|
|
||||||
"targetField": "standardisedVocabulariesA212",
|
|
||||||
"requiredValue": "true",
|
|
||||||
"type": "visibility",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sourceField": "useVocabulariesQ212",
|
|
||||||
"targetField": "notlistedVocabularyA212",
|
|
||||||
"requiredValue": "true",
|
|
||||||
"type": "visibility",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sourceField": "useVocabulariesQ212",
|
|
||||||
"targetField": "noMetadataVocabularyA212",
|
|
||||||
"requiredValue": "false",
|
|
||||||
"type": "visibility",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sourceField": "notlistedVocabularyA212",
|
|
||||||
"targetField": "notlistedVocUrlA212",
|
|
||||||
"requiredValue": "true",
|
|
||||||
"type": "visibility",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sourceField": "notlistedVocabularyA212",
|
|
||||||
"targetField": "notlistedVocCommentA212",
|
|
||||||
"requiredValue": "true",
|
|
||||||
"type": "visibility",
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"sections": [
|
|
||||||
{
|
|
||||||
"id": "sumData",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"page": "1",
|
|
||||||
"title": "1 Data Summary",
|
|
||||||
"description": " Fill in the fields to describe your data model ",
|
|
||||||
"ordinal": "1",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"sections": [],
|
|
||||||
"fieldGroups":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"id": "dataSummaryGroup",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"page": "1",
|
|
||||||
"title": "Data Summary",
|
|
||||||
"description": "",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"compositeFields": [
|
|
||||||
{
|
|
||||||
"fields":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"id": "dataSummary",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"title": "",
|
|
||||||
"description": "",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "checkBox",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "radioChoices",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"title": "",
|
|
||||||
"description": "",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "radiobox",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"options": [
|
|
||||||
{ "label": "Over 18", "value": "over18" },
|
|
||||||
{ "label": "Under 15", "value": "under15" },
|
|
||||||
{ "label": "Between 15 - 18", "value": "between15and18" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "fairData",
|
|
||||||
"ordinal": "2",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"page": "1",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"title": "2 Fair Data",
|
|
||||||
"sections": [
|
|
||||||
{
|
|
||||||
"id": "dataMetadata",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"page": "1",
|
|
||||||
"ordinal": 1,
|
|
||||||
"title": "2.1 Making data findable, including provisions for metadata",
|
|
||||||
"sections": [],
|
|
||||||
"fieldGroups": [
|
|
||||||
{
|
|
||||||
"id": "FindDataMetadataGroup",
|
|
||||||
"section": "dataMetadata",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"page": "1",
|
|
||||||
"title": "Making data findable, including provisions for metadata",
|
|
||||||
"description": "Making data findable, including provisions for metadata",
|
|
||||||
"extendedDescription": "FieldGroup Description",
|
|
||||||
"compositeFields": [
|
|
||||||
{
|
|
||||||
"fields":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"id": "useMetadataQ211",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"title": "Q2.1.1 Will you use metadata to describe the data?",
|
|
||||||
"description": "User can select from a list of metadata standards. If they cannot find the standard in the list provided then they should choose \"not listed\". Selecting this will result in a field in which the user can insert the URL to the description of the metadata scheme used. A \"comments\" box should exist to allow users to add comments. They may select more than one metadata standard. They may specify more than one URL when selecting \"not listed\". They are also presented with a field in which to specify the location of the metadata service. Users can select the \"no metadata\" button to specify no metadata will be used to describe the data.",
|
|
||||||
"extendedDescription": "FieldGroup Description",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "booleanDecision",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"id": "metadataStandarsA211",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"title": "Metadata standards",
|
|
||||||
"description": "The data will be described by metadata that follows the metadata standards described in <url1>, <url2>, ? The data will be described by metadata that follows the metadata schema described in <not-listed-url1>, <not-listed-url2>. The metadata will be stored in the service located at <metadata-repo-url>",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "combobox",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"type": "autocomplete",
|
|
||||||
"url": "http://dionysus.di.uoa.gr:8080/dmp-backend/rest/external/datarepos?query=gree"
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"id": "notlistedA211",
|
|
||||||
"defaultVisibility": "false",
|
|
||||||
"title": "Not listed",
|
|
||||||
"description": "",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "checkBox",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"id": "notlistedUrlA211",
|
|
||||||
"defaultVisibility": "false",
|
|
||||||
"title": "Url",
|
|
||||||
"description": "URL to the description of the metadata scheme used",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "freetext",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"id": "notlistedCommentA211",
|
|
||||||
"defaultVisibility": "false",
|
|
||||||
"title": "Comments",
|
|
||||||
"description": "",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "freetext",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"id": "noMetadata",
|
|
||||||
"defaultVisibility": "false",
|
|
||||||
"title": "The data will not be described by any metadata.",
|
|
||||||
"description": "",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "checkBox",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "VocabulariesGroup",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"page": "1",
|
|
||||||
"ordinal": 1,
|
|
||||||
"title": "Vocabularies",
|
|
||||||
"description": "Vocabularies",
|
|
||||||
"extendedDescription": "FieldGroup Description",
|
|
||||||
"compositeFields": [
|
|
||||||
{
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"id": "useVocabulariesQ212",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"title": "Q2.1.2 Will your metadata use standardised vocabularies?",
|
|
||||||
"description": "User selects from a drop-down list of existing standardised vocabularies or \"not listed\" or \"none\". There should be a \"comments\" fields for additional information. If \"not listed\" is selected the user is presented with two additional fields in which the user can put the URL to the new vocabulary along with a short description. The user should be allowed to select more than one option.",
|
|
||||||
"extendedDescription": "FieldGroup Description",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "booleanDesicion",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"id": "standardisedVocabulariesA212",
|
|
||||||
"defaultVisibility": "false",
|
|
||||||
"title": "Existing standardised vocabularies",
|
|
||||||
"description": "The metadata will make use of the standardised vocabulary <url>",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "combobox",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"type": "wordlist",
|
|
||||||
"values": [
|
|
||||||
{ "label": "Mitsos", "value": "mitsakos" },
|
|
||||||
{ "label": "Kitsos", "value": "kitsakos" },
|
|
||||||
{ "label": "Panagiotis", "value": "mpotis" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"id": "notlistedVocabularyA212",
|
|
||||||
"defaultVisibility": "false",
|
|
||||||
"title": "Not listed vocabulary",
|
|
||||||
"description": "",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "checkBox",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"id": "notlistedVocUrlA212",
|
|
||||||
"defaultVisibility": "false",
|
|
||||||
"title": "Vocabulary Url",
|
|
||||||
"description": "The user can put the URL to the new vocabulary",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "freetext",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"id": "notlistedVocCommentA212",
|
|
||||||
"defaultVisibility": "false",
|
|
||||||
"title": "Comments",
|
|
||||||
"description": "Vocabulary short description",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "freetext",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"id": "noMetadataVocabularyA212",
|
|
||||||
"defaultVisibility": "false",
|
|
||||||
"title": "The metadata will not make use of any vocabulary",
|
|
||||||
"description": "",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "checkBox",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "FreeOfChargeGroup",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"page": "1",
|
|
||||||
"ordinal": 1,
|
|
||||||
"title": "Metadata Available",
|
|
||||||
"description": "Metadata Available",
|
|
||||||
"extendedDescription": "FieldGroup Description",
|
|
||||||
"compositeFields": [
|
|
||||||
{
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"id": "freeOfChargeGroupQ213",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"title": "Q2.1.3 Will you use standardised formats for some or all of your data.",
|
|
||||||
"description": "User is presented with a choice of ?yes?, ?no?. There should be a ?comments? field for additional information.",
|
|
||||||
"extendedDescription": "Field Description",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "booleanDesicion",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"id": "freeOfChargeGroupCommentA213",
|
|
||||||
"defaultVisibility": "true",
|
|
||||||
"title": "Comments",
|
|
||||||
"description": "",
|
|
||||||
"extendedDescription": "",
|
|
||||||
"viewStyle": {
|
|
||||||
"renderStyle": "freetext",
|
|
||||||
"cssClass": ""
|
|
||||||
},
|
|
||||||
"defaultValue":{
|
|
||||||
"type":"any",
|
|
||||||
"value":""
|
|
||||||
},
|
|
||||||
"multiplicity":{
|
|
||||||
"min":"1",
|
|
||||||
"max":"1"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,62 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
.row {
|
|
||||||
padding-top:30px;
|
|
||||||
padding-bottom:30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* START - FOR DETAILS MODALS */
|
|
||||||
|
|
||||||
.modal-content {
|
|
||||||
overflow-y: scroll;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal.modal-fullscreen .modal-dialog,
|
|
||||||
.modal.modal-fullscreen .modal-content {
|
|
||||||
position: absolute;
|
|
||||||
left: 15%;
|
|
||||||
right: 15%;
|
|
||||||
top: 5%;
|
|
||||||
bottom: 5%;
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen .modal-dialog {
|
|
||||||
margin: 0;
|
|
||||||
width: 70%;
|
|
||||||
animation-duration:0.5s;
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen .modal-content {
|
|
||||||
-moz-border-radius: 20px;
|
|
||||||
border-radius: 20px;
|
|
||||||
/*
|
|
||||||
border: none;
|
|
||||||
-moz-border-radius: 0;
|
|
||||||
border-radius: 0;
|
|
||||||
-webkit-box-shadow: inherit;
|
|
||||||
-moz-box-shadow: inherit;
|
|
||||||
-o-box-shadow: inherit;
|
|
||||||
box-shadow: inherit;
|
|
||||||
*/
|
|
||||||
/* change bg color below */
|
|
||||||
/* background:#1abc9c; */
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen.force-fullscreen {
|
|
||||||
/* Remove the padding inside the body */
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen.force-fullscreen .modal-body {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen.force-fullscreen .modal-header,
|
|
||||||
.modal.modal-fullscreen.force-fullscreen .modal-footer {
|
|
||||||
left: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen.force-fullscreen .modal-header {
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen.force-fullscreen .modal-footer {
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
/* END - FOR DETAILS MODALS */
|
|
||||||
|
|
|
@ -1,76 +0,0 @@
|
||||||
|
|
||||||
<div class="modal fade modal-fullscreen footer-to-bottom" id="dmp-details-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog animated zoomInLeft">
|
|
||||||
<div class="modal-content" id="dmp-modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i></button>
|
|
||||||
<h4 style="text-align:center;" class="modal-title"><b>{{dmp?.label}}</b></h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<!--
|
|
||||||
{{dmp | json}}
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
<div class="container-fluid">
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<!--<div class="col-md-6 row-cell"><b>Digital Management Plan: </b>{{dmp?.label}}</div>-->
|
|
||||||
<div class="col-md-12 row-cell"><b>Belongs to Project: </b>{{dmp?.project?.label}}</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6 row-cell"><b>Current version:</b><span class="badge">{{dmp?.version}}</span></div>
|
|
||||||
<div class="col-md-6 row-cell"><b>Previous DMPs:</b>
|
|
||||||
<ul>
|
|
||||||
<li *ngFor="let previous of previousDMPs">{{ previous?.label }}</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6 row-cell">
|
|
||||||
<b>Creator:</b> {{dmp?.creator?.name}}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6 row-cell"><b>Users associated:</b>
|
|
||||||
<ul>
|
|
||||||
<li *ngFor="let user of dmp?.users">{{ user?.name }}</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6 row-cell"><b>Researchers:</b>
|
|
||||||
<div *ngIf="dmp?.researchers?.length==0" style="opacity: 0.5;">None</div>
|
|
||||||
<ul *ngIf="dmp?.researchers?.length>1">
|
|
||||||
<li *ngFor="let researcher of dmp?.researchers">{{ researcher?.name }}</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6 row-cell"><b>Organisations:</b>
|
|
||||||
<div *ngIf="dmp?.organizations?.length==0" style="opacity: 0.5;">None</div>
|
|
||||||
<ul *ngIf="dmp?.organizations?.length>1">
|
|
||||||
<li *ngFor="let organisation of dmp?.organizations">{{ organisation?.name }}</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<!--
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
|
||||||
<button type="button" class="btn btn-primary">Save changes</button>
|
|
||||||
-->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -1,80 +0,0 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
|
||||||
import { Router, ActivatedRoute, ParamMap, Params } from '@angular/router';
|
|
||||||
import {Location} from '@angular/common';
|
|
||||||
import { ServerService } from '../../../app/services/server.service';
|
|
||||||
|
|
||||||
|
|
||||||
import '../../../assets/perfect-scrollbar/perfect-scrollbar.js';
|
|
||||||
declare var PerfectScrollbar : any;
|
|
||||||
|
|
||||||
declare var $ :any;
|
|
||||||
@Component({
|
|
||||||
selector: 'dmp-detailed',
|
|
||||||
templateUrl: './dmp-detailed.component.html',
|
|
||||||
styleUrls: [
|
|
||||||
'../../../assets/perfect-scrollbar/perfect-scrollbar.css',
|
|
||||||
'./dmp-detailed.component.css'
|
|
||||||
]
|
|
||||||
})
|
|
||||||
export class DmpDetailedComponent implements OnInit {
|
|
||||||
|
|
||||||
constructor(private serverService: ServerService, private router: Router, private _location: Location, private route: ActivatedRoute) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
dmp : any;
|
|
||||||
previousDMPs : any [] = new Array<any>();
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
|
|
||||||
let sub = this.route.queryParams.subscribe(params => {
|
|
||||||
|
|
||||||
let dmpid = params.dmpid;
|
|
||||||
this.serverService.getDmp(dmpid,true).subscribe(
|
|
||||||
response => {
|
|
||||||
|
|
||||||
this.dmp = response;
|
|
||||||
|
|
||||||
//get also the labels of all previous dmps (not eagerly, just fetch the dmp tuple)
|
|
||||||
if(this.dmp.previous != null && this.dmp.previous != ""){
|
|
||||||
this.serverService.getDmpHistory(this.dmp.id).subscribe(
|
|
||||||
response => {
|
|
||||||
//this.previousDMPs = response;
|
|
||||||
},
|
|
||||||
error => {
|
|
||||||
console.log("Could not get previous DMPs (history)");
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
//fill-in also the creator
|
|
||||||
this.serverService.getUserByID(this.dmp.creator.id).subscribe(
|
|
||||||
response => {
|
|
||||||
this.dmp.creator = response;
|
|
||||||
},
|
|
||||||
error => {
|
|
||||||
console.log("Could not fetch creator details...");
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
$('#dmp-details-modal').modal('show');
|
|
||||||
|
|
||||||
},
|
|
||||||
error => {
|
|
||||||
console.log("Could not load dmp");
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
var dmpDetailsModalScroller = new PerfectScrollbar("#dmp-modal-content");
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,249 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
.row {
|
|
||||||
padding-top:30px;
|
|
||||||
padding-bottom:30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grayed{
|
|
||||||
opacity: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* START - FOR DETAILS MODALS */
|
|
||||||
|
|
||||||
.modal-content {
|
|
||||||
overflow-y: scroll;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal.modal-fullscreen .modal-dialog,
|
|
||||||
.modal.modal-fullscreen .modal-content {
|
|
||||||
position: absolute;
|
|
||||||
left: 15%;
|
|
||||||
right: 15%;
|
|
||||||
top: 5%;
|
|
||||||
bottom: 5%;
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen .modal-dialog {
|
|
||||||
margin: 0;
|
|
||||||
width: 70%;
|
|
||||||
animation-duration:0.5s;
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen .modal-content {
|
|
||||||
-moz-border-radius: 20px;
|
|
||||||
border-radius: 20px;
|
|
||||||
/*
|
|
||||||
border: none;
|
|
||||||
-moz-border-radius: 0;
|
|
||||||
border-radius: 0;
|
|
||||||
-webkit-box-shadow: inherit;
|
|
||||||
-moz-box-shadow: inherit;
|
|
||||||
-o-box-shadow: inherit;
|
|
||||||
box-shadow: inherit;
|
|
||||||
*/
|
|
||||||
/* change bg color below */
|
|
||||||
/* background:#1abc9c; */
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen.force-fullscreen {
|
|
||||||
/* Remove the padding inside the body */
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen.force-fullscreen .modal-body {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen.force-fullscreen .modal-header,
|
|
||||||
.modal.modal-fullscreen.force-fullscreen .modal-footer {
|
|
||||||
left: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen.force-fullscreen .modal-header {
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
.modal.modal-fullscreen.force-fullscreen .modal-footer {
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
/* END - FOR DETAILS MODALS */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* START - DATE CALENDAR VISUALISATION */
|
|
||||||
|
|
||||||
@import url(https://fonts.googleapis.com/css?family=Source+Code+Pro|Oswald);
|
|
||||||
|
|
||||||
/****************************************/
|
|
||||||
/* Styling rules, such as font and colors */
|
|
||||||
.date-as-calendar {
|
|
||||||
font-variant: normal;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
font-family: "Helvetica", "Arial", sans-serif;
|
|
||||||
|
|
||||||
/* It seems vertical-align: baseline does not work correctly with display: inline-flex. */
|
|
||||||
vertical-align: top;
|
|
||||||
|
|
||||||
/* margin: 1ex; */
|
|
||||||
|
|
||||||
color: black;
|
|
||||||
background: white;
|
|
||||||
background : linear-gradient(to bottom right, #FFF 0%, #EEE 100%);
|
|
||||||
|
|
||||||
border: 1px solid #888;
|
|
||||||
border-radius: 3px;
|
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
box-shadow: 2px 2px 2px -2px black;
|
|
||||||
}
|
|
||||||
.date-as-calendar .weekday,
|
|
||||||
.date-as-calendar .day,
|
|
||||||
.date-as-calendar .month,
|
|
||||||
.date-as-calendar .year {
|
|
||||||
text-align: center;
|
|
||||||
line-height: 1.0;
|
|
||||||
}
|
|
||||||
.date-as-calendar .month {
|
|
||||||
font-family: "Oswald", sans-serif;
|
|
||||||
text-transform: uppercase;
|
|
||||||
background: #B11;
|
|
||||||
background : linear-gradient(to bottom right, #D66 0%, #A00 100%);
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************/
|
|
||||||
/* Layout rules using position: absolute and pixels. */
|
|
||||||
.position-pixels.date-as-calendar {
|
|
||||||
display: inline-block;
|
|
||||||
position: relative;
|
|
||||||
width: 64px;
|
|
||||||
height: 64px;
|
|
||||||
}
|
|
||||||
.position-pixels.date-as-calendar .weekday,
|
|
||||||
.position-pixels.date-as-calendar .day,
|
|
||||||
.position-pixels.date-as-calendar .month,
|
|
||||||
.position-pixels.date-as-calendar .year {
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 1em;
|
|
||||||
}
|
|
||||||
.position-pixels.date-as-calendar .month {
|
|
||||||
top: 0px;
|
|
||||||
font-size: 12px;
|
|
||||||
padding: 2px 0;
|
|
||||||
}
|
|
||||||
.position-pixels.date-as-calendar .weekday {
|
|
||||||
top: 16px;
|
|
||||||
font-size: 10px;
|
|
||||||
}
|
|
||||||
.position-pixels.date-as-calendar .day {
|
|
||||||
top: 26px;
|
|
||||||
font-size: 24px;
|
|
||||||
}
|
|
||||||
.position-pixels.date-as-calendar .year {
|
|
||||||
top: 50px;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************/
|
|
||||||
/* Layout rules using position: absolute and relative dimensions using em. */
|
|
||||||
.position-em.date-as-calendar {
|
|
||||||
display: inline-block;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
width: 4em;
|
|
||||||
height: 4em;
|
|
||||||
}
|
|
||||||
.position-em.date-as-calendar .weekday,
|
|
||||||
.position-em.date-as-calendar .day,
|
|
||||||
.position-em.date-as-calendar .month,
|
|
||||||
.position-em.date-as-calendar .year {
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 1em;
|
|
||||||
}
|
|
||||||
.position-em.date-as-calendar .month {
|
|
||||||
top: 0px;
|
|
||||||
font-size: 0.75em;
|
|
||||||
padding: 0.1em 0;
|
|
||||||
}
|
|
||||||
.position-em.date-as-calendar .weekday {
|
|
||||||
top: 1.6em;
|
|
||||||
font-size: 0.6125em;
|
|
||||||
}
|
|
||||||
.position-em.date-as-calendar .day {
|
|
||||||
top: 1.1em;
|
|
||||||
font-size: 1.5em
|
|
||||||
}
|
|
||||||
.position-em.date-as-calendar .year {
|
|
||||||
bottom: 0px;
|
|
||||||
font-size: 0.87750em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************/
|
|
||||||
/* Layout rules using display: inline-flex and relative dimensions using em. */
|
|
||||||
.inline-flex.date-as-calendar {
|
|
||||||
display: inline-flex;
|
|
||||||
flex-direction: column;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
justify-content: space-between;
|
|
||||||
|
|
||||||
width: 4em;
|
|
||||||
height: 4em;
|
|
||||||
}
|
|
||||||
.inline-flex.date-as-calendar .weekday,
|
|
||||||
.inline-flex.date-as-calendar .day,
|
|
||||||
.inline-flex.date-as-calendar .month,
|
|
||||||
.inline-flex.date-as-calendar .year {
|
|
||||||
display: block;
|
|
||||||
flex: 1 1 auto;
|
|
||||||
}
|
|
||||||
.inline-flex.date-as-calendar .month {
|
|
||||||
order: 1;
|
|
||||||
font-size: 0.75em;
|
|
||||||
padding: 0.1em 0;
|
|
||||||
}
|
|
||||||
.inline-flex.date-as-calendar .weekday {
|
|
||||||
order: 2;
|
|
||||||
font-size: 0.6125em;
|
|
||||||
}
|
|
||||||
.inline-flex.date-as-calendar .day {
|
|
||||||
order: 3;
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
.inline-flex.date-as-calendar .year {
|
|
||||||
order: 4;
|
|
||||||
font-size: 0.87750em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************/
|
|
||||||
/* Multiple sizes. */
|
|
||||||
.date-as-calendar.size0_5x {
|
|
||||||
font-size: 8px;
|
|
||||||
}
|
|
||||||
.date-as-calendar.size0_75x {
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
.date-as-calendar.size1x {
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
.date-as-calendar.size1_25x {
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
.date-as-calendar.size1_5x {
|
|
||||||
font-size: 24px;
|
|
||||||
}
|
|
||||||
.date-as-calendar.size1_75x {
|
|
||||||
font-size: 28px;
|
|
||||||
}
|
|
||||||
.date-as-calendar.size2x {
|
|
||||||
font-size: 32px;
|
|
||||||
}
|
|
||||||
.date-as-calendar.size3x {
|
|
||||||
font-size: 48px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* END - DATE CALENDAR VISUALISATION */
|
|
|
@ -1,97 +0,0 @@
|
||||||
|
|
||||||
<div class="modal fade modal-fullscreen footer-to-bottom" id="project-details-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog animated zoomInLeft">
|
|
||||||
<div class="modal-content" id="project-modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i></button>
|
|
||||||
<h4 class="modal-title" style="text-align:center;"><b>{{project?.label}}</b></h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<!--
|
|
||||||
{{project | json}}
|
|
||||||
-->
|
|
||||||
<div class="container-fluid">
|
|
||||||
<!--
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 row-cell"><b>Project name: </b>{{project?.label}}</div>
|
|
||||||
</div>
|
|
||||||
-->
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6 row-cell"><b>Abbreviation: </b>{{project?.abbreviation}}</div>
|
|
||||||
<div class="col-md-6 row-cell"><b>URI : </b><a href="{{project?.uri}}">{{project?.uri}}</a></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-3 row-cell"><b>Short description: </b></div>
|
|
||||||
<div class="col-md-9 row-cell">{{project?.description}}</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-1">
|
|
||||||
<b>Begins:</b>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-2">
|
|
||||||
<time class="date-as-calendar position-pixels">
|
|
||||||
<span class="weekday">{{project?.startdate | date:'EEEE' }}</span>
|
|
||||||
<span class="day">{{project?.startdate | date:'dd' }}</span>
|
|
||||||
<span class="month">{{project?.startdate | date:'MMMM' }}</span>
|
|
||||||
<span class="year">{{project?.startdate | date:'y' }}</span>
|
|
||||||
</time>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-1">
|
|
||||||
<b>Ends:</b>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-2">
|
|
||||||
<time class="date-as-calendar position-pixels">
|
|
||||||
<span class="weekday">{{project?.enddate | date:'EEEE' }}</span>
|
|
||||||
<span class="day">{{project?.enddate | date:'dd' }}</span>
|
|
||||||
<span class="month">{{project?.enddate | date:'MMMM' }}</span>
|
|
||||||
<span class="year">{{project?.enddate | date:'y' }}</span>
|
|
||||||
</time>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-4">
|
|
||||||
<b>Created by: </b> {{project?.creationUser?.name}}
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<b>at: </b> {{project?.created | date:'medium' }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6 row-cell"><b>Associated DMPs:</b>
|
|
||||||
<ul>
|
|
||||||
<li *ngFor="let dmp of project?.dmps">
|
|
||||||
{{ dmp?.label }}
|
|
||||||
<span style="opacity:0.6;">(owner: {{ users.get(dmp?.creator) }}) </span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
|
||||||
STUFF NOT USED:
|
|
||||||
status
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<p class="">…</p>
|
|
||||||
-->
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<!--
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
|
||||||
<button type="button" class="btn btn-primary">Save changes</button>
|
|
||||||
</div>
|
|
||||||
-->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -1,92 +0,0 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
|
||||||
import { Router, ActivatedRoute, ParamMap, Params } from '@angular/router';
|
|
||||||
import {Location} from '@angular/common';
|
|
||||||
import { ServerService } from '../../../app/services/server.service';
|
|
||||||
|
|
||||||
import '../../../assets/perfect-scrollbar/perfect-scrollbar.js';
|
|
||||||
declare var PerfectScrollbar : any;
|
|
||||||
|
|
||||||
declare var $ :any;
|
|
||||||
@Component({
|
|
||||||
selector: 'project-detailed',
|
|
||||||
templateUrl: './project-detailed.component.html',
|
|
||||||
styleUrls: [
|
|
||||||
'../../../assets/perfect-scrollbar/perfect-scrollbar.css',
|
|
||||||
'./project-detailed.component.css'
|
|
||||||
]
|
|
||||||
})
|
|
||||||
export class ProjectDetailedComponent implements OnInit {
|
|
||||||
|
|
||||||
constructor(private serverService: ServerService, private router: Router, private _location: Location, private route: ActivatedRoute) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
users : Map<string, string> = new Map<string, string>();
|
|
||||||
project : any;
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
|
|
||||||
let sub = this.route.queryParams.subscribe(params => {
|
|
||||||
|
|
||||||
let projectid = params.projectid;
|
|
||||||
this.serverService.getProject(projectid).subscribe(
|
|
||||||
(response:any) => {
|
|
||||||
this.project = response;
|
|
||||||
$('#project-details-modal').modal('show');
|
|
||||||
//get also projects of dmp (there's a problem with the List<> serialization on server - side)
|
|
||||||
this.serverService.getDmpsOfProject(projectid).subscribe(
|
|
||||||
response => {
|
|
||||||
this.project.dmps = response;
|
|
||||||
this.populateUsersMap(this.project);
|
|
||||||
//this.get
|
|
||||||
},
|
|
||||||
error => {
|
|
||||||
console.log("Could not fetch project's dmps");
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
error => {
|
|
||||||
console.log("Could not load project");
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
var projectDetailsModalScroller = new PerfectScrollbar("#project-modal-content");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
getUserByID(userid: string){
|
|
||||||
return this.serverService.getUserByID(userid); //Notice: returns Observable !
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async populateUsersMap1(project){
|
|
||||||
this.users.clear();
|
|
||||||
for(var i=0;i<project.dmps.length;i++){
|
|
||||||
debugger;
|
|
||||||
const user:any = await this.serverService.getUserByID(project.dmps[i].creator).toPromise();
|
|
||||||
this.users.set(project.dmps[i].creator, user.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private populateUsersMap(project){
|
|
||||||
this.users.clear();
|
|
||||||
project.dmps.forEach(dmp => {
|
|
||||||
if(!this.users.has(dmp.creator)){
|
|
||||||
this.serverService.getUserByID(dmp.creator).subscribe(
|
|
||||||
(user:any) => {
|
|
||||||
this.users.set(dmp.creator, user.name);
|
|
||||||
},
|
|
||||||
error => {
|
|
||||||
}
|
|
||||||
)
|
|
||||||
console.log("USERS: "+JSON.stringify(this.users))
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,2 +0,0 @@
|
||||||
<!-- breadcrumb bar -->
|
|
||||||
<p-breadcrumb *ngIf="breadcrumbData?.length != 0" [model]="breadcrumbData" [home]="breadcrumbHome"></p-breadcrumb>
|
|
|
@ -1,25 +0,0 @@
|
||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
|
||||||
|
|
||||||
import { BreadcrumbComponent } from './breadcrumb.component';
|
|
||||||
|
|
||||||
describe('BreadcrumbComponent', () => {
|
|
||||||
let component: BreadcrumbComponent;
|
|
||||||
let fixture: ComponentFixture<BreadcrumbComponent>;
|
|
||||||
|
|
||||||
beforeEach(async(() => {
|
|
||||||
TestBed.configureTestingModule({
|
|
||||||
declarations: [ BreadcrumbComponent ]
|
|
||||||
})
|
|
||||||
.compileComponents();
|
|
||||||
}));
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
fixture = TestBed.createComponent(BreadcrumbComponent);
|
|
||||||
component = fixture.componentInstance;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should be created', () => {
|
|
||||||
expect(component).toBeTruthy();
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,110 +0,0 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
|
||||||
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, ActivatedRoute, NavigationEnd } from '@angular/router';
|
|
||||||
import {BreadcrumbModule,MenuItem} from 'primeng/primeng';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'breadcrumb',
|
|
||||||
templateUrl: './breadcrumb.component.html',
|
|
||||||
styleUrls: ['./breadcrumb.component.css']
|
|
||||||
})
|
|
||||||
export class BreadcrumbComponent implements OnInit {
|
|
||||||
|
|
||||||
|
|
||||||
breadcrumbHome: MenuItem = {icon: 'fa fa-home', routerLink: "/welcome"};
|
|
||||||
breadcrumbData: MenuItem[] = new Array<MenuItem>();
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(private router: Router, private route: ActivatedRoute) {
|
|
||||||
router.events.subscribe(
|
|
||||||
event =>{
|
|
||||||
console.log("Router event captured")
|
|
||||||
console.log(event)
|
|
||||||
if(event instanceof NavigationEnd){
|
|
||||||
console.log(event.urlAfterRedirects);
|
|
||||||
console.log(this.route);
|
|
||||||
|
|
||||||
this.route.children.forEach( child => {
|
|
||||||
let menuItem = this.guessMenuItemFromActivatedRoute(child, event);
|
|
||||||
this.adaptBreadcrumbByMenuItem(menuItem);
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
guessMenuItemFromActivatedRoute(activatedRoute : any, event : NavigationEnd) { //it's important to leave it as "any"
|
|
||||||
|
|
||||||
let menuItem : MenuItem = null;
|
|
||||||
let isBaseComponent : boolean = false;
|
|
||||||
|
|
||||||
let componentName = activatedRoute.component.name;
|
|
||||||
|
|
||||||
let params = activatedRoute.queryParams.getValue();
|
|
||||||
let url = activatedRoute.url.getValue()[0].path;
|
|
||||||
//let url = event.urlAfterRedirects.split("?")[0].split("(")[0];
|
|
||||||
let label = null;
|
|
||||||
|
|
||||||
if(componentName == "ProjectsComponent") {
|
|
||||||
label = "Projects";
|
|
||||||
this.breadcrumbData.length = 0;
|
|
||||||
}
|
|
||||||
if(componentName == "DmpComponent"){
|
|
||||||
label = "My Data Management Plans";
|
|
||||||
this.breadcrumbData.length = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(componentName == "DatasetsComponent"){
|
|
||||||
label = "Datasets of DMP '"+params["label"]+"'";
|
|
||||||
}
|
|
||||||
|
|
||||||
if(componentName == "DynamicFormComponent"){
|
|
||||||
label = "Form of dataset '"+params["label"]+"'";
|
|
||||||
}
|
|
||||||
|
|
||||||
if(componentName == "DmpDetailedComponent"){
|
|
||||||
label = "Details of DMP '"+params["label"]+"'";
|
|
||||||
}
|
|
||||||
|
|
||||||
if(componentName == "ProjectDetailedComponent"){
|
|
||||||
label = "Details of Project '"+params["label"]+"'";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(label != null)
|
|
||||||
menuItem = {"label": label, "routerLink": url, "queryParams" : params };
|
|
||||||
|
|
||||||
console.log("COMPONENT NAME="+componentName);
|
|
||||||
|
|
||||||
return menuItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
adaptBreadcrumbByMenuItem(menuItem : MenuItem){
|
|
||||||
|
|
||||||
if(menuItem==null){
|
|
||||||
this.breadcrumbData.length = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let breadcrumbDataNew: MenuItem[] = new Array<MenuItem>();
|
|
||||||
for(var i=0; i<this.breadcrumbData.length;i++){
|
|
||||||
if(this.breadcrumbData[i].label == menuItem.label)
|
|
||||||
break;
|
|
||||||
else
|
|
||||||
breadcrumbDataNew.push(this.breadcrumbData[i]);
|
|
||||||
}
|
|
||||||
this.breadcrumbData = breadcrumbDataNew;
|
|
||||||
|
|
||||||
this.breadcrumbData.push(menuItem);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
.modal-header {
|
|
||||||
padding:9px 15px;
|
|
||||||
border-bottom:1px solid #eee;
|
|
||||||
background-color: #0480be;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
-webkit-border-top-right-radius: 5px;
|
|
||||||
-moz-border-radius-topleft: 5px;
|
|
||||||
-moz-border-radius-topright: 5px;
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
border-top-right-radius: 5px;
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
<!-- Modal -->
|
|
||||||
<div class="modal fade" id="{{confirmationID}}" role="dialog">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
|
|
||||||
<!-- Modal content-->
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
|
||||||
<h4 class="modal-title">{{confirmationTitle}}</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<p>{{confirmationDescr}}</p>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-default btn-success" data-dismiss="modal" (click)=saidYes()>Yes</button>
|
|
||||||
<button type="button" class="btn btn-default btn-danger" data-dismiss="modal" (click)=saidNo()>NO</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -1,25 +0,0 @@
|
||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
|
||||||
|
|
||||||
import { ConfirmationComponent } from './confirmation.component';
|
|
||||||
|
|
||||||
describe('ConfirmationComponent', () => {
|
|
||||||
let component: ConfirmationComponent;
|
|
||||||
let fixture: ComponentFixture<ConfirmationComponent>;
|
|
||||||
|
|
||||||
beforeEach(async(() => {
|
|
||||||
TestBed.configureTestingModule({
|
|
||||||
declarations: [ ConfirmationComponent ]
|
|
||||||
})
|
|
||||||
.compileComponents();
|
|
||||||
}));
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
fixture = TestBed.createComponent(ConfirmationComponent);
|
|
||||||
component = fixture.componentInstance;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should be created', () => {
|
|
||||||
expect(component).toBeTruthy();
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,35 +0,0 @@
|
||||||
import { Component, OnInit, Input,Output,EventEmitter } from '@angular/core';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'confirmation',
|
|
||||||
templateUrl: './confirmation.component.html',
|
|
||||||
styleUrls: ['./confirmation.component.css']
|
|
||||||
})
|
|
||||||
export class ConfirmationComponent implements OnInit {
|
|
||||||
|
|
||||||
@Input() confirmationID : string;
|
|
||||||
@Input() confirmationTitle : string;
|
|
||||||
@Input() confirmationDescr : string;
|
|
||||||
@Input() subjectObj : any;
|
|
||||||
|
|
||||||
@Output() responseSender: EventEmitter<any> = new EventEmitter<any>();
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
saidNo(){
|
|
||||||
this.responseSender.emit(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
saidYes(){
|
|
||||||
this.responseSender.emit(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
<svg width="2443" height="2500" viewBox="0 0 256 262" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid"><path d="M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622 38.755 30.023 2.685.268c24.659-22.774 38.875-56.282 38.875-96.027" fill="#4285F4"/><path d="M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055-34.523 0-63.824-22.773-74.269-54.25l-1.531.13-40.298 31.187-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1" fill="#34A853"/><path d="M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82 0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602l42.356-32.782" fill="#FBBC05"/><path d="M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0 79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251" fill="#EB4335"/></svg>
|
|
Before Width: | Height: | Size: 1018 B |
|
@ -1 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="2500" height="857" viewBox="0.512 0.511 748.99 256.61"><g transform="translate(4636.413 -2865.209)"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="-11445.563" y1="603.918" x2="-11445.563" y2="465.768" gradientTransform="matrix(1.3509 0 0 -1.3509 10917.478 3681.026)"><stop offset="0" stop-color="#196eef"/><stop offset=".5" stop-color="#186dee"/><stop offset="1" stop-color="#1065e7"/></linearGradient><path d="M-4520.08 2990.41h32.21v45.24c-10.05 3.229-22.74 5-35.931 5-53.46 0-84.88-45.78-84.88-90.49 0-43.851 28.42-74.61 68.07-74.61 25.09 0 39.689 8.5 52.75 20.34v14.76l24.49-24.49c-15.49-10.48-37.92-20.44-69.98-20.44-70.38 0-102.55 50.351-102.55 91.73 0 58.899 42.9 94.38 96.811 94.38 26.14 0 49.35-3.99 76.16-11.45v-46.74c0-2.39 1.05-4.03 2.62-5.47l8.46-8.46h-57.45l-10.78 10.7z" fill="url(#a)"/><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="-11323.519" y1="556.948" x2="-11323.519" y2="467.618" gradientTransform="matrix(1.3509 0 0 -1.3509 10917.478 3681.026)"><stop offset="0" stop-color="#de5744"/><stop offset=".5" stop-color="#db4632"/><stop offset="1" stop-color="#d13d29"/></linearGradient><path d="M-4375.79 2928.93c-40.51 0-65.61 29.601-65.61 61.021 0 27.12 20.221 59.319 61.19 59.319 39.41 0 63.59-29.659 63.59-61.629 0-29.78-23.63-58.7-59.17-58.7v-.011zm-6.721 8.63c28.561 0 41.28 37.21 41.28 63.75 0 39.47-29.61 40.25-33.15 40.25-13.55 0-23.02-8.189-30.109-18.93-6.24-9.899-12.34-28.29-12.34-46.26 0-17.9 5.859-26.64 15.08-33.07 7.54-4.82 14.6-5.74 19.229-5.74h.01z" fill="url(#b)"/><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="-11130.575" y1="556.948" x2="-11130.575" y2="413.518" gradientTransform="matrix(1.3509 0 0 -1.3509 10917.478 3681.026)"><stop offset="0" stop-color="#1a6fef"/><stop offset=".25" stop-color="#1e72ef"/><stop offset=".5" stop-color="#166bec"/><stop offset=".75" stop-color="#1267e9"/><stop offset="1" stop-color="#1063e5" stop-opacity=".87"/></linearGradient><path d="M-4110.979 2928.92c-35.381 0-54.521 22.4-54.521 47.41 0 19.04 13.64 40.52 41.78 40.52h7.119s-1.939 4.71-1.949 9.26c0 6.711 2.41 10.48 7.529 16.28-48.42 2.95-67.88 22.48-67.88 43.47 0 18.381 17.601 36.471 54.59 36.471 43.79 0 66.47-24.311 66.47-48.17 0-16.82-8.38-26.04-29.6-41.94-6.24-4.85-7.45-7.939-7.45-11.569 0-5.2 3.11-8.641 4.25-9.94 2.01-2.12 5.49-4.54 6.79-5.7 7.13-6.04 17.2-14.979 17.2-32.82 0-12.24-5.091-22.77-16.69-32.63h14.16l10.64-10.64h-52.438zm-9.76 7.96c6.42 0 11.779 2.27 17.439 6.98 6.279 5.66 16.311 20.87 16.311 39.69 0 20.31-15.78 25.87-24.32 25.87-4.18 0-9.189-1.17-13.43-4.07-9.42-6.109-18.771-22.37-18.771-41.72 0-17.46 10.4-26.75 22.771-26.75zm14.01 113.22c2.699 0 4.64.221 4.64.221s6.37 4.55 10.82 7.949c10.36 8.19 16.819 14.45 16.819 25.601 0 15.33-14.22 27.35-37.25 27.35-25.279 0-44.6-11.77-44.6-30.989 0-15.921 13.24-29.623 49.571-30.132z" fill="url(#c)"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="-11061.771" y1="601.408" x2="-11061.771" y2="470.128" gradientTransform="matrix(1.3509 0 0 -1.3509 10917.478 3681.026)"><stop offset="0" stop-color="#0aa561"/><stop offset=".5" stop-color="#009b58"/><stop offset="1" stop-color="#00914b"/></linearGradient><path d="M-4050.88 3045.76h48.57l7.399-7.399-13.93-1.74c-3.75-.46-5.979-3.7-5.979-6.84v-146.71c0-2.89 1.34-4.37 2.319-5.311l8.761-8.76h-41.42l-10.78 10.78h16.1v151.97c0 2.16-.68 3.63-2.14 5.14l-8.9 8.87z" fill="url(#d)"/><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="-10998.289" y1="556.948" x2="-10998.289" y2="467.864" gradientTransform="matrix(1.3509 0 0 -1.3509 10917.478 3681.026)"><stop offset="0" stop-color="#de5644"/><stop offset=".5" stop-color="#da4531"/><stop offset="1" stop-color="#ce3a28"/></linearGradient><path d="M-3936.5 2928.93c-27.12 0-55.93 20.67-55.93 57.78 0 30.649 20.67 62.56 59.29 62.56 9.63 0 17.56-1.239 24.99-4.649 7.97-3.67 15.64-9.63 21.239-17.12-10.569 5.33-19.189 8.83-30.64 8.83-21.76 0-42.74-15.7-50.08-44.56l76.87-31.07c-4.44-15.83-16.96-31.771-45.729-31.771h-.01zm-5.021 8.49c14.551 0 25.07 11.97 25.07 21.34 0 3.03-1.899 4.63-5.66 6.11l-47.25 19.11s-1.279-5.95-1.279-12.38c0-26.97 19.5-34.18 29.119-34.18z" fill="url(#e)"/><linearGradient id="f" gradientUnits="userSpaceOnUse" x1="-11221.762" y1="556.754" x2="-11221.762" y2="467.795" gradientTransform="matrix(1.3509 0 0 -1.3509 10917.478 3681.026)"><stop offset="0" stop-color="#ffc01a"/><stop offset=".5" stop-color="#ffba03"/><stop offset="1" stop-color="#ffb300"/></linearGradient><path d="M-4238.33 2928.93c-40.51 0-65.61 29.601-65.61 61.021 0 27.12 20.221 59.319 61.19 59.319 39.41 0 63.59-29.659 63.59-61.629 0-29.78-23.63-58.7-59.17-58.7v-.011zm-6.721 8.63c28.561 0 41.28 37.21 41.28 63.75 0 39.47-29.61 40.25-33.15 40.25-13.55 0-23.02-8.189-30.109-18.93-6.24-9.899-12.34-28.29-12.34-46.26 0-17.9 5.859-26.64 15.08-33.07 7.54-4.82 14.6-5.74 19.229-5.74h.01z" fill="url(#f)"/></g></svg>
|
|
Before Width: | Height: | Size: 4.8 KiB |
Binary file not shown.
Before Width: | Height: | Size: 12 KiB |
|
@ -1,3 +0,0 @@
|
||||||
<svg class="lds-gears" width="80px" height="80px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"><g transform="translate(50 50)"> <g transform="translate(-19 -19) scale(0.6)"> <g transform="rotate(90)">
|
|
||||||
<animateTransform attributeName="transform" type="rotate" values="0;360" keyTimes="0;1" dur="2s" begin="0s" repeatCount="indefinite"></animateTransform><path d="M37.3496987939662 -7 L47.3496987939662 -7 L47.3496987939662 7 L37.3496987939662 7 A38 38 0 0 1 31.359972760794346 21.46047782418268 L31.359972760794346 21.46047782418268 L38.431040572659825 28.531545636048154 L28.531545636048154 38.431040572659825 L21.46047782418268 31.359972760794346 A38 38 0 0 1 7.0000000000000036 37.3496987939662 L7.0000000000000036 37.3496987939662 L7.000000000000004 47.3496987939662 L-6.999999999999999 47.3496987939662 L-7 37.3496987939662 A38 38 0 0 1 -21.46047782418268 31.35997276079435 L-21.46047782418268 31.35997276079435 L-28.531545636048154 38.431040572659825 L-38.43104057265982 28.531545636048158 L-31.359972760794346 21.460477824182682 A38 38 0 0 1 -37.3496987939662 7.000000000000007 L-37.3496987939662 7.000000000000007 L-47.3496987939662 7.000000000000008 L-47.3496987939662 -6.9999999999999964 L-37.3496987939662 -6.999999999999997 A38 38 0 0 1 -31.35997276079435 -21.460477824182675 L-31.35997276079435 -21.460477824182675 L-38.431040572659825 -28.531545636048147 L-28.53154563604818 -38.4310405726598 L-21.4604778241827 -31.35997276079433 A38 38 0 0 1 -6.999999999999992 -37.3496987939662 L-6.999999999999992 -37.3496987939662 L-6.999999999999994 -47.3496987939662 L6.999999999999977 -47.3496987939662 L6.999999999999979 -37.3496987939662 A38 38 0 0 1 21.460477824182686 -31.359972760794342 L21.460477824182686 -31.359972760794342 L28.531545636048158 -38.43104057265982 L38.4310405726598 -28.53154563604818 L31.35997276079433 -21.4604778241827 A38 38 0 0 1 37.3496987939662 -6.999999999999995 M0 -23A23 23 0 1 0 0 23 A23 23 0 1 0 0 -23" fill="#9b8b69"></path></g></g> <g transform="translate(19 19) scale(0.6)"> <g transform="rotate(247.5)">
|
|
||||||
<animateTransform attributeName="transform" type="rotate" values="360;0" keyTimes="0;1" dur="2s" begin="-0.125s" repeatCount="indefinite"></animateTransform><path d="M37.3496987939662 -7 L47.3496987939662 -7 L47.3496987939662 7 L37.3496987939662 7 A38 38 0 0 1 31.359972760794346 21.46047782418268 L31.359972760794346 21.46047782418268 L38.431040572659825 28.531545636048154 L28.531545636048154 38.431040572659825 L21.46047782418268 31.359972760794346 A38 38 0 0 1 7.0000000000000036 37.3496987939662 L7.0000000000000036 37.3496987939662 L7.000000000000004 47.3496987939662 L-6.999999999999999 47.3496987939662 L-7 37.3496987939662 A38 38 0 0 1 -21.46047782418268 31.35997276079435 L-21.46047782418268 31.35997276079435 L-28.531545636048154 38.431040572659825 L-38.43104057265982 28.531545636048158 L-31.359972760794346 21.460477824182682 A38 38 0 0 1 -37.3496987939662 7.000000000000007 L-37.3496987939662 7.000000000000007 L-47.3496987939662 7.000000000000008 L-47.3496987939662 -6.9999999999999964 L-37.3496987939662 -6.999999999999997 A38 38 0 0 1 -31.35997276079435 -21.460477824182675 L-31.35997276079435 -21.460477824182675 L-38.431040572659825 -28.531545636048147 L-28.53154563604818 -38.4310405726598 L-21.4604778241827 -31.35997276079433 A38 38 0 0 1 -6.999999999999992 -37.3496987939662 L-6.999999999999992 -37.3496987939662 L-6.999999999999994 -47.3496987939662 L6.999999999999977 -47.3496987939662 L6.999999999999979 -37.3496987939662 A38 38 0 0 1 21.460477824182686 -31.359972760794342 L21.460477824182686 -31.359972760794342 L28.531545636048158 -38.43104057265982 L38.4310405726598 -28.53154563604818 L31.35997276079433 -21.4604778241827 A38 38 0 0 1 37.3496987939662 -6.999999999999995 M0 -23A23 23 0 1 0 0 23 A23 23 0 1 0 0 -23" fill="#a1a6a8"></path></g></g></g></svg>
|
|
Before Width: | Height: | Size: 3.8 KiB |
Binary file not shown.
Before Width: | Height: | Size: 8.9 KiB |
|
@ -1,47 +0,0 @@
|
||||||
/* Syntax highlighting for JSON objects */
|
|
||||||
ul.json-dict, ol.json-array {
|
|
||||||
list-style-type: none;
|
|
||||||
margin: 0 0 0 1px;
|
|
||||||
border-left: 1px dotted #ccc;
|
|
||||||
padding-left: 2em;
|
|
||||||
}
|
|
||||||
.json-string {
|
|
||||||
color: #0B7500;
|
|
||||||
}
|
|
||||||
.json-literal {
|
|
||||||
color: #1A01CC;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Toggle button */
|
|
||||||
a.json-toggle {
|
|
||||||
position: relative;
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a.json-toggle:focus {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
a.json-toggle:before {
|
|
||||||
color: #aaa;
|
|
||||||
content: "\25BC"; /* down arrow */
|
|
||||||
position: absolute;
|
|
||||||
display: inline-block;
|
|
||||||
width: 1em;
|
|
||||||
left: -1em;
|
|
||||||
}
|
|
||||||
a.json-toggle.collapsed:before {
|
|
||||||
transform: rotate(-90deg); /* Use rotated down arrow, prevents right arrow appearing smaller than down arrow in some browsers */
|
|
||||||
-ms-transform: rotate(-90deg);
|
|
||||||
-webkit-transform: rotate(-90deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Collapsable placeholder links */
|
|
||||||
a.json-placeholder {
|
|
||||||
color: #aaa;
|
|
||||||
padding: 0 1em;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a.json-placeholder:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
|
@ -1,148 +0,0 @@
|
||||||
/**
|
|
||||||
* jQuery json-viewer
|
|
||||||
* @author: Alexandre Bodelot <alexandre.bodelot@gmail.com>
|
|
||||||
*/
|
|
||||||
(function($){
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if arg is either an array with at least 1 element, or a dict with at least 1 key
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function isCollapsable(arg) {
|
|
||||||
return arg instanceof Object && Object.keys(arg).length > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if a string represents a valid url
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function isUrl(string) {
|
|
||||||
var regexp = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
|
|
||||||
return regexp.test(string);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Transform a json object into html representation
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function json2html(json, options) {
|
|
||||||
var html = '';
|
|
||||||
if (typeof json === 'string') {
|
|
||||||
/* Escape tags */
|
|
||||||
json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
||||||
if (isUrl(json))
|
|
||||||
html += '<a href="' + json + '" class="json-string">' + json + '</a>';
|
|
||||||
else
|
|
||||||
html += '<span class="json-string">"' + json + '"</span>';
|
|
||||||
}
|
|
||||||
else if (typeof json === 'number') {
|
|
||||||
html += '<span class="json-literal">' + json + '</span>';
|
|
||||||
}
|
|
||||||
else if (typeof json === 'boolean') {
|
|
||||||
html += '<span class="json-literal">' + json + '</span>';
|
|
||||||
}
|
|
||||||
else if (json === null) {
|
|
||||||
html += '<span class="json-literal">null</span>';
|
|
||||||
}
|
|
||||||
else if (json instanceof Array) {
|
|
||||||
if (json.length > 0) {
|
|
||||||
html += '[<ol class="json-array">';
|
|
||||||
for (var i = 0; i < json.length; ++i) {
|
|
||||||
html += '<li>';
|
|
||||||
/* Add toggle button if item is collapsable */
|
|
||||||
if (isCollapsable(json[i])) {
|
|
||||||
html += '<a href class="json-toggle"></a>';
|
|
||||||
}
|
|
||||||
html += json2html(json[i], options);
|
|
||||||
/* Add comma if item is not last */
|
|
||||||
if (i < json.length - 1) {
|
|
||||||
html += ',';
|
|
||||||
}
|
|
||||||
html += '</li>';
|
|
||||||
}
|
|
||||||
html += '</ol>]';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
html += '[]';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (typeof json === 'object') {
|
|
||||||
var key_count = Object.keys(json).length;
|
|
||||||
if (key_count > 0) {
|
|
||||||
html += '{<ul class="json-dict">';
|
|
||||||
for (var key in json) {
|
|
||||||
if (json.hasOwnProperty(key)) {
|
|
||||||
html += '<li>';
|
|
||||||
var keyRepr = options.withQuotes ?
|
|
||||||
'<span class="json-string">"' + key + '"</span>' : key;
|
|
||||||
/* Add toggle button if item is collapsable */
|
|
||||||
if (isCollapsable(json[key])) {
|
|
||||||
html += '<a href class="json-toggle">' + keyRepr + '</a>';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
html += keyRepr;
|
|
||||||
}
|
|
||||||
html += ': ' + json2html(json[key], options);
|
|
||||||
/* Add comma if item is not last */
|
|
||||||
if (--key_count > 0)
|
|
||||||
html += ',';
|
|
||||||
html += '</li>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
html += '</ul>}';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
html += '{}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return html;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery plugin method
|
|
||||||
* @param json: a javascript object
|
|
||||||
* @param options: an optional options hash
|
|
||||||
*/
|
|
||||||
$.fn.jsonViewer = function(json, options) {
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
/* jQuery chaining */
|
|
||||||
return this.each(function() {
|
|
||||||
|
|
||||||
/* Transform to HTML */
|
|
||||||
var html = json2html(json, options);
|
|
||||||
if (isCollapsable(json))
|
|
||||||
html = '<a href class="json-toggle"></a>' + html;
|
|
||||||
|
|
||||||
/* Insert HTML in target DOM element */
|
|
||||||
$(this).html(html);
|
|
||||||
|
|
||||||
/* Bind click on toggle buttons */
|
|
||||||
$(this).off('click');
|
|
||||||
$(this).on('click', 'a.json-toggle', function() {
|
|
||||||
var target = $(this).toggleClass('collapsed').siblings('ul.json-dict, ol.json-array');
|
|
||||||
target.toggle();
|
|
||||||
if (target.is(':visible')) {
|
|
||||||
target.siblings('.json-placeholder').remove();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var count = target.children('li').length;
|
|
||||||
var placeholder = count + (count > 1 ? ' items' : ' item');
|
|
||||||
target.after('<a href class="json-placeholder">' + placeholder + '</a>');
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
/* Simulate click on toggle button when placeholder is clicked */
|
|
||||||
$(this).on('click', 'a.json-placeholder', function() {
|
|
||||||
$(this).siblings('a.json-toggle').click();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (options.collapsed == true) {
|
|
||||||
/* Trigger click to collapse all nodes */
|
|
||||||
$(this).find('a.json-toggle').click();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
})(jQuery);
|
|
|
@ -1,7 +0,0 @@
|
||||||
/**
|
|
||||||
* Copyright (c) 2007-2015 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com
|
|
||||||
* Licensed under MIT
|
|
||||||
* @author Ariel Flesler
|
|
||||||
* @version 2.1.2
|
|
||||||
*/
|
|
||||||
;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&& "%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,112 +0,0 @@
|
||||||
/*
|
|
||||||
* Container style
|
|
||||||
*/
|
|
||||||
.ps {
|
|
||||||
overflow: hidden !important;
|
|
||||||
overflow-anchor: none;
|
|
||||||
-ms-overflow-style: none;
|
|
||||||
touch-action: auto;
|
|
||||||
-ms-touch-action: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Scrollbar rail styles
|
|
||||||
*/
|
|
||||||
.ps__rail-x {
|
|
||||||
display: none;
|
|
||||||
opacity: 0;
|
|
||||||
transition: background-color .2s linear, opacity .2s linear;
|
|
||||||
-webkit-transition: background-color .2s linear, opacity .2s linear;
|
|
||||||
height: 15px;
|
|
||||||
/* there must be 'bottom' or 'top' for ps__rail-x */
|
|
||||||
bottom: 0px;
|
|
||||||
/* please don't change 'position' */
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ps__rail-y {
|
|
||||||
display: none;
|
|
||||||
opacity: 0;
|
|
||||||
transition: background-color .2s linear, opacity .2s linear;
|
|
||||||
-webkit-transition: background-color .2s linear, opacity .2s linear;
|
|
||||||
width: 15px;
|
|
||||||
/* there must be 'right' or 'left' for ps__rail-y */
|
|
||||||
right: 0;
|
|
||||||
/* please don't change 'position' */
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ps--active-x > .ps__rail-x,
|
|
||||||
.ps--active-y > .ps__rail-y {
|
|
||||||
display: block;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ps:hover > .ps__rail-x,
|
|
||||||
.ps:hover > .ps__rail-y,
|
|
||||||
.ps--focus > .ps__rail-x,
|
|
||||||
.ps--focus > .ps__rail-y,
|
|
||||||
.ps--scrolling-x > .ps__rail-x,
|
|
||||||
.ps--scrolling-y > .ps__rail-y {
|
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ps__rail-x:hover,
|
|
||||||
.ps__rail-y:hover,
|
|
||||||
.ps__rail-x:focus,
|
|
||||||
.ps__rail-y:focus {
|
|
||||||
background-color: #eee;
|
|
||||||
opacity: 0.9;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Scrollbar thumb styles
|
|
||||||
*/
|
|
||||||
.ps__thumb-x {
|
|
||||||
background-color: #aaa;
|
|
||||||
border-radius: 6px;
|
|
||||||
transition: background-color .2s linear, height .2s ease-in-out;
|
|
||||||
-webkit-transition: background-color .2s linear, height .2s ease-in-out;
|
|
||||||
height: 6px;
|
|
||||||
/* there must be 'bottom' for ps__thumb-x */
|
|
||||||
bottom: 2px;
|
|
||||||
/* please don't change 'position' */
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ps__thumb-y {
|
|
||||||
background-color: #aaa;
|
|
||||||
border-radius: 6px;
|
|
||||||
transition: background-color .2s linear, width .2s ease-in-out;
|
|
||||||
-webkit-transition: background-color .2s linear, width .2s ease-in-out;
|
|
||||||
width: 6px;
|
|
||||||
/* there must be 'right' for ps__thumb-y */
|
|
||||||
right: 2px;
|
|
||||||
/* please don't change 'position' */
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ps__rail-x:hover > .ps__thumb-x,
|
|
||||||
.ps__rail-x:focus > .ps__thumb-x {
|
|
||||||
background-color: #999;
|
|
||||||
height: 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ps__rail-y:hover > .ps__thumb-y,
|
|
||||||
.ps__rail-y:focus > .ps__thumb-y {
|
|
||||||
background-color: #999;
|
|
||||||
width: 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* MS supports */
|
|
||||||
@supports (-ms-overflow-style: none) {
|
|
||||||
.ps {
|
|
||||||
overflow: auto !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
|
|
||||||
.ps {
|
|
||||||
overflow: auto !important;
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,122 +0,0 @@
|
||||||
/*!
|
|
||||||
* Start Bootstrap - Simple Sidebar (https://startbootstrap.com/template-overviews/simple-sidebar)
|
|
||||||
* Copyright 2013-2017 Start Bootstrap
|
|
||||||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-simple-sidebar/blob/master/LICENSE)
|
|
||||||
*/
|
|
||||||
|
|
||||||
body {
|
|
||||||
overflow-x: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wrapper {
|
|
||||||
padding-left: 0;
|
|
||||||
-webkit-transition: all 0.5s ease;
|
|
||||||
-moz-transition: all 0.5s ease;
|
|
||||||
-o-transition: all 0.5s ease;
|
|
||||||
transition: all 0.5s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wrapper.toggled {
|
|
||||||
padding-left: 250px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#sidebar-wrapper {
|
|
||||||
z-index: 1000;
|
|
||||||
position: fixed;
|
|
||||||
left: 250px;
|
|
||||||
width: 0;
|
|
||||||
height: 100%;
|
|
||||||
margin-left: -250px;
|
|
||||||
overflow-y: auto;
|
|
||||||
background: #000;
|
|
||||||
-webkit-transition: all 0.5s ease;
|
|
||||||
-moz-transition: all 0.5s ease;
|
|
||||||
-o-transition: all 0.5s ease;
|
|
||||||
transition: all 0.5s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wrapper.toggled #sidebar-wrapper {
|
|
||||||
width: 250px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#page-content-wrapper {
|
|
||||||
width: 100%;
|
|
||||||
position: absolute;
|
|
||||||
padding: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wrapper.toggled #page-content-wrapper {
|
|
||||||
position: absolute;
|
|
||||||
margin-right: -250px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Sidebar Styles */
|
|
||||||
|
|
||||||
.sidebar-nav {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
width: 250px;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav li {
|
|
||||||
text-indent: 20px;
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav li a {
|
|
||||||
display: block;
|
|
||||||
text-decoration: none;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav li a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #fff;
|
|
||||||
background: rgba(255, 255, 255, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav li a:active, .sidebar-nav li a:focus {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav>.sidebar-brand {
|
|
||||||
height: 65px;
|
|
||||||
font-size: 18px;
|
|
||||||
line-height: 60px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav>.sidebar-brand a {
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-nav>.sidebar-brand a:hover {
|
|
||||||
color: #fff;
|
|
||||||
background: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media(min-width:768px) {
|
|
||||||
#wrapper {
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
#wrapper.toggled {
|
|
||||||
padding-left: 250px;
|
|
||||||
}
|
|
||||||
#sidebar-wrapper {
|
|
||||||
width: 0;
|
|
||||||
}
|
|
||||||
#wrapper.toggled #sidebar-wrapper {
|
|
||||||
width: 250px;
|
|
||||||
}
|
|
||||||
#page-content-wrapper {
|
|
||||||
padding: 20px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
#wrapper.toggled #page-content-wrapper {
|
|
||||||
position: relative;
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,358 +0,0 @@
|
||||||
/**
|
|
||||||
* vkBeautify - javascript plugin to pretty-print or minify text in XML, JSON, CSS and SQL formats.
|
|
||||||
*
|
|
||||||
* Version - 0.99.00.beta
|
|
||||||
* Copyright (c) 2012 Vadim Kiryukhin
|
|
||||||
* vkiryukhin @ gmail.com
|
|
||||||
* http://www.eslinstructor.net/vkbeautify/
|
|
||||||
*
|
|
||||||
* Dual licensed under the MIT and GPL licenses:
|
|
||||||
* http://www.opensource.org/licenses/mit-license.php
|
|
||||||
* http://www.gnu.org/licenses/gpl.html
|
|
||||||
*
|
|
||||||
* Pretty print
|
|
||||||
*
|
|
||||||
* vkbeautify.xml(text [,indent_pattern]);
|
|
||||||
* vkbeautify.json(text [,indent_pattern]);
|
|
||||||
* vkbeautify.css(text [,indent_pattern]);
|
|
||||||
* vkbeautify.sql(text [,indent_pattern]);
|
|
||||||
*
|
|
||||||
* @text - String; text to beatufy;
|
|
||||||
* @indent_pattern - Integer | String;
|
|
||||||
* Integer: number of white spaces;
|
|
||||||
* String: character string to visualize indentation ( can also be a set of white spaces )
|
|
||||||
* Minify
|
|
||||||
*
|
|
||||||
* vkbeautify.xmlmin(text [,preserve_comments]);
|
|
||||||
* vkbeautify.jsonmin(text);
|
|
||||||
* vkbeautify.cssmin(text [,preserve_comments]);
|
|
||||||
* vkbeautify.sqlmin(text);
|
|
||||||
*
|
|
||||||
* @text - String; text to minify;
|
|
||||||
* @preserve_comments - Bool; [optional];
|
|
||||||
* Set this flag to true to prevent removing comments from @text ( minxml and mincss functions only. )
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
* vkbeautify.xml(text); // pretty print XML
|
|
||||||
* vkbeautify.json(text, 4 ); // pretty print JSON
|
|
||||||
* vkbeautify.css(text, '. . . .'); // pretty print CSS
|
|
||||||
* vkbeautify.sql(text, '----'); // pretty print SQL
|
|
||||||
*
|
|
||||||
* vkbeautify.xmlmin(text, true);// minify XML, preserve comments
|
|
||||||
* vkbeautify.jsonmin(text);// minify JSON
|
|
||||||
* vkbeautify.cssmin(text);// minify CSS, remove comments ( default )
|
|
||||||
* vkbeautify.sqlmin(text);// minify SQL
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
|
|
||||||
function createShiftArr(step) {
|
|
||||||
|
|
||||||
var space = ' ';
|
|
||||||
|
|
||||||
if ( isNaN(parseInt(step)) ) { // argument is string
|
|
||||||
space = step;
|
|
||||||
} else { // argument is integer
|
|
||||||
switch(step) {
|
|
||||||
case 1: space = ' '; break;
|
|
||||||
case 2: space = ' '; break;
|
|
||||||
case 3: space = ' '; break;
|
|
||||||
case 4: space = ' '; break;
|
|
||||||
case 5: space = ' '; break;
|
|
||||||
case 6: space = ' '; break;
|
|
||||||
case 7: space = ' '; break;
|
|
||||||
case 8: space = ' '; break;
|
|
||||||
case 9: space = ' '; break;
|
|
||||||
case 10: space = ' '; break;
|
|
||||||
case 11: space = ' '; break;
|
|
||||||
case 12: space = ' '; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var shift = ['\n']; // array of shifts
|
|
||||||
for(ix=0;ix<100;ix++){
|
|
||||||
shift.push(shift[ix]+space);
|
|
||||||
}
|
|
||||||
return shift;
|
|
||||||
}
|
|
||||||
|
|
||||||
function vkbeautify(){
|
|
||||||
this.step = ' '; // 4 spaces
|
|
||||||
this.shift = createShiftArr(this.step);
|
|
||||||
};
|
|
||||||
|
|
||||||
vkbeautify.prototype.xml = function(text,step) {
|
|
||||||
|
|
||||||
var ar = text.replace(/>\s{0,}</g,"><")
|
|
||||||
.replace(/</g,"~::~<")
|
|
||||||
.replace(/\s*xmlns\:/g,"~::~xmlns:")
|
|
||||||
.replace(/\s*xmlns\=/g,"~::~xmlns=")
|
|
||||||
.split('~::~'),
|
|
||||||
len = ar.length,
|
|
||||||
inComment = false,
|
|
||||||
deep = 0,
|
|
||||||
str = '',
|
|
||||||
ix = 0,
|
|
||||||
shift = step ? createShiftArr(step) : this.shift;
|
|
||||||
|
|
||||||
for(ix=0;ix<len;ix++) {
|
|
||||||
// start comment or <![CDATA[...]]> or <!DOCTYPE //
|
|
||||||
if(ar[ix].search(/<!/) > -1) {
|
|
||||||
str += shift[deep]+ar[ix];
|
|
||||||
inComment = true;
|
|
||||||
// end comment or <![CDATA[...]]> //
|
|
||||||
if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) {
|
|
||||||
inComment = false;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
// end comment or <![CDATA[...]]> //
|
|
||||||
if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) {
|
|
||||||
str += ar[ix];
|
|
||||||
inComment = false;
|
|
||||||
} else
|
|
||||||
// <elm></elm> //
|
|
||||||
if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
|
|
||||||
/^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) {
|
|
||||||
str += ar[ix];
|
|
||||||
if(!inComment) deep--;
|
|
||||||
} else
|
|
||||||
// <elm> //
|
|
||||||
if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
|
|
||||||
str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
|
|
||||||
} else
|
|
||||||
// <elm>...</elm> //
|
|
||||||
if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
|
|
||||||
str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
|
|
||||||
} else
|
|
||||||
// </elm> //
|
|
||||||
if(ar[ix].search(/<\//) > -1) {
|
|
||||||
str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
|
|
||||||
} else
|
|
||||||
// <elm/> //
|
|
||||||
if(ar[ix].search(/\/>/) > -1 ) {
|
|
||||||
str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
|
|
||||||
} else
|
|
||||||
// <? xml ... ?> //
|
|
||||||
if(ar[ix].search(/<\?/) > -1) {
|
|
||||||
str += shift[deep]+ar[ix];
|
|
||||||
} else
|
|
||||||
// xmlns //
|
|
||||||
if( ar[ix].search(/xmlns\:/) > -1 || ar[ix].search(/xmlns\=/) > -1) {
|
|
||||||
str += shift[deep]+ar[ix];
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
str += ar[ix];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (str[0] == '\n') ? str.slice(1) : str;
|
|
||||||
}
|
|
||||||
|
|
||||||
vkbeautify.prototype.json = function(text,step) {
|
|
||||||
|
|
||||||
var step = step ? step : this.step;
|
|
||||||
|
|
||||||
if (typeof JSON === 'undefined' ) return text;
|
|
||||||
|
|
||||||
if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
|
|
||||||
if ( typeof text === "object" ) return JSON.stringify(text, null, step);
|
|
||||||
|
|
||||||
return text; // text is not string nor object
|
|
||||||
}
|
|
||||||
|
|
||||||
vkbeautify.prototype.css = function(text, step) {
|
|
||||||
|
|
||||||
var ar = text.replace(/\s{1,}/g,' ')
|
|
||||||
.replace(/\{/g,"{~::~")
|
|
||||||
.replace(/\}/g,"~::~}~::~")
|
|
||||||
.replace(/\;/g,";~::~")
|
|
||||||
.replace(/\/\*/g,"~::~/*")
|
|
||||||
.replace(/\*\//g,"*/~::~")
|
|
||||||
.replace(/~::~\s{0,}~::~/g,"~::~")
|
|
||||||
.split('~::~'),
|
|
||||||
len = ar.length,
|
|
||||||
deep = 0,
|
|
||||||
str = '',
|
|
||||||
ix = 0,
|
|
||||||
shift = step ? createShiftArr(step) : this.shift;
|
|
||||||
|
|
||||||
for(ix=0;ix<len;ix++) {
|
|
||||||
|
|
||||||
if( /\{/.exec(ar[ix])) {
|
|
||||||
str += shift[deep++]+ar[ix];
|
|
||||||
} else
|
|
||||||
if( /\}/.exec(ar[ix])) {
|
|
||||||
str += shift[--deep]+ar[ix];
|
|
||||||
} else
|
|
||||||
if( /\*\\/.exec(ar[ix])) {
|
|
||||||
str += shift[deep]+ar[ix];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
str += shift[deep]+ar[ix];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return str.replace(/^\n{1,}/,'');
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function isSubquery(str, parenthesisLevel) {
|
|
||||||
return parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
|
|
||||||
}
|
|
||||||
|
|
||||||
function split_sql(str, tab) {
|
|
||||||
|
|
||||||
return str.replace(/\s{1,}/g," ")
|
|
||||||
|
|
||||||
.replace(/ AND /ig,"~::~"+tab+tab+"AND ")
|
|
||||||
.replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
|
|
||||||
.replace(/ CASE /ig,"~::~"+tab+"CASE ")
|
|
||||||
.replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
|
|
||||||
.replace(/ END /ig,"~::~"+tab+"END ")
|
|
||||||
.replace(/ FROM /ig,"~::~FROM ")
|
|
||||||
.replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
|
|
||||||
.replace(/ HAVING /ig,"~::~HAVING ")
|
|
||||||
//.replace(/ SET /ig," SET~::~")
|
|
||||||
.replace(/ IN /ig," IN ")
|
|
||||||
|
|
||||||
.replace(/ JOIN /ig,"~::~JOIN ")
|
|
||||||
.replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
|
|
||||||
.replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
|
|
||||||
.replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
|
|
||||||
.replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
|
|
||||||
|
|
||||||
.replace(/ ON /ig,"~::~"+tab+"ON ")
|
|
||||||
.replace(/ OR /ig,"~::~"+tab+tab+"OR ")
|
|
||||||
.replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
|
|
||||||
.replace(/ OVER /ig,"~::~"+tab+"OVER ")
|
|
||||||
|
|
||||||
.replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
|
|
||||||
.replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
|
|
||||||
|
|
||||||
.replace(/ THEN /ig," THEN~::~"+tab+"")
|
|
||||||
.replace(/ UNION /ig,"~::~UNION~::~")
|
|
||||||
.replace(/ USING /ig,"~::~USING ")
|
|
||||||
.replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
|
|
||||||
.replace(/ WHERE /ig,"~::~WHERE ")
|
|
||||||
.replace(/ WITH /ig,"~::~WITH ")
|
|
||||||
|
|
||||||
//.replace(/\,\s{0,}\(/ig,",~::~( ")
|
|
||||||
//.replace(/\,/ig,",~::~"+tab+tab+"")
|
|
||||||
|
|
||||||
.replace(/ ALL /ig," ALL ")
|
|
||||||
.replace(/ AS /ig," AS ")
|
|
||||||
.replace(/ ASC /ig," ASC ")
|
|
||||||
.replace(/ DESC /ig," DESC ")
|
|
||||||
.replace(/ DISTINCT /ig," DISTINCT ")
|
|
||||||
.replace(/ EXISTS /ig," EXISTS ")
|
|
||||||
.replace(/ NOT /ig," NOT ")
|
|
||||||
.replace(/ NULL /ig," NULL ")
|
|
||||||
.replace(/ LIKE /ig," LIKE ")
|
|
||||||
.replace(/\s{0,}SELECT /ig,"SELECT ")
|
|
||||||
.replace(/\s{0,}UPDATE /ig,"UPDATE ")
|
|
||||||
.replace(/ SET /ig," SET ")
|
|
||||||
|
|
||||||
.replace(/~::~{1,}/g,"~::~")
|
|
||||||
.split('~::~');
|
|
||||||
}
|
|
||||||
|
|
||||||
vkbeautify.prototype.sql = function(text,step) {
|
|
||||||
|
|
||||||
var ar_by_quote = text.replace(/\s{1,}/g," ")
|
|
||||||
.replace(/\'/ig,"~::~\'")
|
|
||||||
.split('~::~'),
|
|
||||||
len = ar_by_quote.length,
|
|
||||||
ar = [],
|
|
||||||
deep = 0,
|
|
||||||
tab = this.step,//+this.step,
|
|
||||||
inComment = true,
|
|
||||||
inQuote = false,
|
|
||||||
parenthesisLevel = 0,
|
|
||||||
str = '',
|
|
||||||
ix = 0,
|
|
||||||
shift = step ? createShiftArr(step) : this.shift;;
|
|
||||||
|
|
||||||
for(ix=0;ix<len;ix++) {
|
|
||||||
if(ix%2) {
|
|
||||||
ar = ar.concat(ar_by_quote[ix]);
|
|
||||||
} else {
|
|
||||||
ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
len = ar.length;
|
|
||||||
for(ix=0;ix<len;ix++) {
|
|
||||||
|
|
||||||
parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
|
|
||||||
|
|
||||||
if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix])) {
|
|
||||||
ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
|
|
||||||
}
|
|
||||||
|
|
||||||
if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix])) {
|
|
||||||
ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
|
|
||||||
}
|
|
||||||
|
|
||||||
if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix])) {
|
|
||||||
deep++;
|
|
||||||
str += shift[deep]+ar[ix];
|
|
||||||
} else
|
|
||||||
if( /\'/.exec(ar[ix]) ) {
|
|
||||||
if(parenthesisLevel<1 && deep) {
|
|
||||||
deep--;
|
|
||||||
}
|
|
||||||
str += ar[ix];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
str += shift[deep]+ar[ix];
|
|
||||||
if(parenthesisLevel<1 && deep) {
|
|
||||||
deep--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var junk = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
vkbeautify.prototype.xmlmin = function(text, preserveComments) {
|
|
||||||
|
|
||||||
var str = preserveComments ? text
|
|
||||||
: text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
|
|
||||||
.replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
|
|
||||||
return str.replace(/>\s{0,}</g,"><");
|
|
||||||
}
|
|
||||||
|
|
||||||
vkbeautify.prototype.jsonmin = function(text) {
|
|
||||||
|
|
||||||
if (typeof JSON === 'undefined' ) return text;
|
|
||||||
|
|
||||||
return JSON.stringify(JSON.parse(text), null, 0);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
vkbeautify.prototype.cssmin = function(text, preserveComments) {
|
|
||||||
|
|
||||||
var str = preserveComments ? text
|
|
||||||
: text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
|
|
||||||
|
|
||||||
return str.replace(/\s{1,}/g,' ')
|
|
||||||
.replace(/\{\s{1,}/g,"{")
|
|
||||||
.replace(/\}\s{1,}/g,"}")
|
|
||||||
.replace(/\;\s{1,}/g,";")
|
|
||||||
.replace(/\/\*\s{1,}/g,"/*")
|
|
||||||
.replace(/\*\/\s{1,}/g,"*/");
|
|
||||||
}
|
|
||||||
|
|
||||||
vkbeautify.prototype.sqlmin = function(text) {
|
|
||||||
return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
|
|
||||||
}
|
|
||||||
|
|
||||||
window.vkbeautify = new vkbeautify();
|
|
||||||
|
|
||||||
})();
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,65 +1,24 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html itemscope itemtype="http://schema.org/Article">
|
<html>
|
||||||
<head>
|
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||||
<title>Data Management Plans Creator</title>
|
<title>Data Management Plans Creator</title>
|
||||||
<base href="/">
|
<base href="/">
|
||||||
<meta name="csrf-token" content="2c64def7de30197c40276fe1a7ea874ca8871f70be7d7dc3305465a4d5c565e4">
|
<meta name="csrf-token" content="2c64def7de30197c40276fe1a7ea874ca8871f70be7d7dc3305465a4d5c565e4">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<!-- <meta name="viewport" content="width=device-width, initial-scale=1"> -->
|
||||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||||
|
|
||||||
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
|
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
|
||||||
<!--
|
|
||||||
<script src="https://apis.google.com/js/platform.js" ></script>
|
|
||||||
-->
|
|
||||||
<link rel="stylesheet" href="https://cdn.rawgit.com/afeld/bootstrap-toc/v0.4.1/dist/bootstrap-toc.min.css">
|
|
||||||
<!--bootstrap plugin for ToC-->
|
|
||||||
<script src="https://cdn.rawgit.com/afeld/bootstrap-toc/v0.4.1/dist/bootstrap-toc.min.js"></script>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- XML to json and vice versa lib -->
|
|
||||||
<script src="assets/xml2json.min.js"></script>
|
|
||||||
|
|
||||||
<!-- Json formatter lib -->
|
|
||||||
<link rel="stylesheet" type="text/css" href="assets/jquery.json-viewer.css">
|
|
||||||
<script src="assets/jquery.json-viewer.js"></script>
|
|
||||||
|
|
||||||
<!-- lib 4 pretty-printing xml and json -->
|
|
||||||
<script src="assets/vkbeautify.0.99.00.js"></script>
|
|
||||||
|
|
||||||
<!-- Nice BS notifications -->
|
|
||||||
<script src="assets/bootstrap-notify.min.js"></script>
|
|
||||||
|
|
||||||
<script src="https://apis.google.com/js/platform.js" async defer></script>
|
<script src="https://apis.google.com/js/platform.js" async defer></script>
|
||||||
|
|
||||||
<!-- font-awesome css -->
|
|
||||||
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
|
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||||
|
|
||||||
|
|
||||||
<!-- Customized scrollbars source: https://github.com/utatti/perfect-scrollbar -->
|
|
||||||
<link rel="stylesheet" type="text/css" href="assets/perfect-scrollbar/perfect-scrollbar.css">
|
|
||||||
<script src="assets/perfect-scrollbar/perfect-scrollbar.js"></script>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- my custom global code and css -->
|
|
||||||
<link rel="stylesheet" type="text/css" href="assets/custom.css">
|
|
||||||
|
|
||||||
|
|
||||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<script>
|
|
||||||
var auth2;
|
|
||||||
function start() {
|
|
||||||
gapi.load('auth2', function() {
|
|
||||||
auth2 = gapi.auth2.init({
|
|
||||||
client_id: "524432312250-sc9qsmtmbvlv05r44onl6l93ia3k9deo.apps.googleusercontent.com",
|
|
||||||
scope: "email"
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<body>
|
<body>
|
||||||
<app-root></app-root>
|
<app-root></app-root>
|
||||||
</body>
|
</body>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue