├── lib ├── md-to-json │ ├── gradle.properties │ ├── src │ │ ├── main │ │ │ ├── resources │ │ │ │ └── tinylog.properties │ │ │ └── java │ │ │ │ └── json │ │ │ │ └── converter │ │ │ │ ├── JsonConverterExtension.java │ │ │ │ └── internal │ │ │ │ └── MarkdownWriter.java │ │ └── test │ │ │ ├── resources │ │ │ ├── test.md │ │ │ └── test.json │ │ │ └── java │ │ │ ├── wrapper │ │ │ └── ConverterTest.java │ │ │ └── json │ │ │ └── converter │ │ │ └── JsonConverterTest.java │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── .gitignore │ ├── build.gradle │ └── gradlew.bat ├── gulp │ ├── model │ │ ├── .editorconfig │ │ ├── default.d.ts │ │ ├── data │ │ │ ├── tooltip.d.ts │ │ │ ├── data.d.ts │ │ │ ├── data.js │ │ │ ├── dataElement.d.ts │ │ │ ├── criteriaData.d.ts │ │ │ ├── label.d.ts │ │ │ ├── tooltip.js │ │ │ ├── label.js │ │ │ ├── dataElement.js │ │ │ └── criteriaData.js │ │ ├── citation │ │ │ ├── citation.d.ts │ │ │ ├── citationFiles.d.ts │ │ │ ├── citationFiles.js │ │ │ └── citation.js │ │ ├── details │ │ │ ├── body.d.ts │ │ │ ├── header.d.ts │ │ │ ├── details.d.ts │ │ │ ├── body.js │ │ │ ├── details.js │ │ │ └── header.js │ │ ├── model.module.js │ │ ├── model.module.d.ts │ │ ├── criteria │ │ │ ├── criteriaValue.d.ts │ │ │ ├── criteria.d.ts │ │ │ └── criteriaValue.js │ │ ├── configuration │ │ │ └── configuration.d.ts │ │ └── util.js │ ├── gulpfile.js │ ├── tasks │ │ ├── util.babel.js │ │ ├── citation.babel.js │ │ ├── determineColors.babel.js │ │ ├── developmentColumn.babel.js │ │ └── criteria.babel.js │ └── publish.js ├── travis │ ├── github_deploy_key.enc │ └── deploy.sh ├── uc │ ├── .editorconfig │ ├── webpack.config.babel.js │ ├── .travis.yml │ ├── gitignore.template │ ├── package.json │ ├── uc │ └── README.md └── webpack │ ├── webpack.prod.js │ └── config.js ├── src ├── styles.css ├── app │ ├── components │ │ ├── polymer │ │ │ ├── paper-item │ │ │ │ ├── paper-item.component.html │ │ │ │ ├── paper-item.component.ts │ │ │ │ └── paper-item.component.css │ │ │ ├── paper-button │ │ │ │ ├── paper-button.component.html │ │ │ │ ├── paper-button.component.ts │ │ │ │ └── paper-button.component.css │ │ │ ├── paper-checkbox │ │ │ │ ├── paper-checkbox.component.html │ │ │ │ ├── paper-checkbox.component.css │ │ │ │ └── paper-checkbox.component.ts │ │ │ ├── paper-icon-button │ │ │ │ ├── paper-icon-button.component.html │ │ │ │ ├── paper-icon-button.component.css │ │ │ │ └── paper-icon-button.component.ts │ │ │ ├── tooltip │ │ │ │ ├── tooltip.component.html │ │ │ │ ├── tooltip.component.ts │ │ │ │ └── tooltip.component.css │ │ │ ├── paper-dialog │ │ │ │ ├── paper-dialog.component.html │ │ │ │ ├── paper-dialog.component.ts │ │ │ │ └── paper-dialog.component.css │ │ │ ├── iron-icon │ │ │ │ ├── iron-icon.component.ts │ │ │ │ ├── iron-icon.component.css │ │ │ │ └── iron-icon.component.html │ │ │ ├── paper-card │ │ │ │ ├── paper-card.component.html │ │ │ │ ├── paper-card.component.ts │ │ │ │ └── paper-card.component.css │ │ │ └── polymer.module.ts │ │ ├── input │ │ │ ├── input-interface.ts │ │ │ ├── number-input │ │ │ │ ├── number-input.template.html │ │ │ │ ├── number-input.component.css │ │ │ │ └── number-input.component.ts │ │ │ ├── select2 │ │ │ │ ├── select2.template.html │ │ │ │ ├── select2.component.ts │ │ │ │ └── select2.component.css │ │ │ └── input.module.ts │ │ ├── output │ │ │ ├── footnote │ │ │ │ ├── footnote.component.html │ │ │ │ └── footnote.component.ts │ │ │ ├── latex-table │ │ │ │ ├── latex-table.component.css │ │ │ │ ├── latex-table.component.ts │ │ │ │ └── latex-table.component.html │ │ │ ├── references-table │ │ │ │ ├── references-table.component.css │ │ │ │ ├── references-table.component.html │ │ │ │ └── references-table.component.ts │ │ │ ├── output.module.ts │ │ │ └── generic-table │ │ │ │ ├── generic-table.component.css │ │ │ │ ├── generic-table.component.ts │ │ │ │ └── generic-table.component.html │ │ ├── pipes │ │ │ ├── pipes.module.ts │ │ │ └── sanitizer-pipe │ │ │ │ └── sanitizer.pipe.ts │ │ └── comparison │ │ │ ├── settings │ │ │ ├── comparison.settings.component.css │ │ │ ├── comparison.settings.component.ts │ │ │ └── comparison.settings.template.html │ │ │ ├── comparison.module.ts │ │ │ ├── details │ │ │ ├── comparison.details.component.css │ │ │ ├── comparison.details.template.html │ │ │ └── comparison.details.component.ts │ │ │ ├── comparison.component.css │ │ │ └── comparison.component.ts │ ├── app.component.ts │ ├── app.module.ts │ └── redux │ │ ├── custom-router-state-serializer.ts │ │ ├── uc.action.ts │ │ └── uc.app-state.ts ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── typings.d.ts ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 ├── assets │ └── VersionInformation.ts ├── tsconfig.app.json ├── vendor.ts ├── main.ts ├── tsconfig.spec.json ├── index.html └── polyfills.ts ├── .gitattributes ├── docs ├── images │ ├── title.png │ ├── subtitle.png │ ├── tabletitle.png │ ├── descritpion.png │ ├── detailsbody.png │ ├── detailsheader.png │ └── variouselements.png └── adr │ ├── index.md │ ├── 0001-Selection-Framework.md │ ├── 0000-use-markdown-architectural-decision-records.md │ └── template.md ├── data ├── Default5.md ├── Default4(0.0.1alpha).md ├── Default3.md ├── Default2.md ├── Default1.md ├── Template.md ├── literature.bib └── acm-siggraph.csl ├── configuration ├── style.css ├── description.md └── comparison-auto-config.yml ├── .editorconfig ├── .travis.yml ├── tsconfig.json ├── .github └── workflows │ └── tests.yml ├── LICENSE ├── CHANGELOG.md ├── package.json └── tslint.json /lib/md-to-json/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.daemon=true -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- 1 | html { 2 | overflow: auto; 3 | overflow: initial; 4 | } 5 | -------------------------------------------------------------------------------- /src/app/components/polymer/paper-item/paper-item.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sh eol=lf 2 | gradlew eol=lf 3 | gradle/wrapper/gradle-wrapper.propeties eol=lf 4 | -------------------------------------------------------------------------------- /lib/gulp/model/.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | indent_style = space 4 | indent_size = 2 5 | -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /lib/md-to-json/src/main/resources/tinylog.properties: -------------------------------------------------------------------------------- 1 | exception = unpack: java.lang.RuntimeException 2 | -------------------------------------------------------------------------------- /src/app/components/polymer/paper-button/paper-button.component.html: -------------------------------------------------------------------------------- 1 | {{text}} 2 | -------------------------------------------------------------------------------- /lib/gulp/gulpfile.js: -------------------------------------------------------------------------------- 1 | require("@babel/register"); 2 | 3 | module.export = require("./gulpfile.babel.js"); 4 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/src/favicon.ico -------------------------------------------------------------------------------- /docs/images/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/docs/images/title.png -------------------------------------------------------------------------------- /src/app/components/input/input-interface.ts: -------------------------------------------------------------------------------- 1 | export interface InputInterface { 2 | addToGui(item: string): void; 3 | } 4 | -------------------------------------------------------------------------------- /src/app/components/output/footnote/footnote.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/images/subtitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/docs/images/subtitle.png -------------------------------------------------------------------------------- /docs/images/tabletitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/docs/images/tabletitle.png -------------------------------------------------------------------------------- /docs/images/descritpion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/docs/images/descritpion.png -------------------------------------------------------------------------------- /docs/images/detailsbody.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/docs/images/detailsbody.png -------------------------------------------------------------------------------- /docs/images/detailsheader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/docs/images/detailsheader.png -------------------------------------------------------------------------------- /docs/images/variouselements.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/docs/images/variouselements.png -------------------------------------------------------------------------------- /lib/gulp/model/default.d.ts: -------------------------------------------------------------------------------- 1 | declare function defaultConfiguration(name?: string, forceUpdate?: boolean); 2 | 3 | export = defaultConfiguration; 4 | -------------------------------------------------------------------------------- /src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare var module: NodeModule; 3 | 4 | interface NodeModule { 5 | id: string; 6 | } 7 | -------------------------------------------------------------------------------- /lib/travis/github_deploy_key.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/lib/travis/github_deploy_key.enc -------------------------------------------------------------------------------- /lib/uc/.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | indent_style = space 4 | indent_size = 2 5 | insert_final_newline = true 6 | trim_trailing_whitespace = true 7 | -------------------------------------------------------------------------------- /lib/uc/webpack.config.babel.js: -------------------------------------------------------------------------------- 1 | require("@babel/register"); 2 | 3 | module.exports = require('./node_modules/ultimate-comparison/lib/webpack/webpack.common.js'); 4 | -------------------------------------------------------------------------------- /src/app/components/output/latex-table/latex-table.component.css: -------------------------------------------------------------------------------- 1 | .hidden { 2 | display: none; 3 | } 4 | 5 | .ltInline ::ng-deep p { 6 | display: inline; 7 | } -------------------------------------------------------------------------------- /data/Default5.md: -------------------------------------------------------------------------------- 1 | # Default 5 - http://default-5-entry.example.com 2 | almost everything unknown 3 | 4 | ## Description 5 | This element has almost no values to test unknown -------------------------------------------------------------------------------- /src/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/src/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/src/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/src/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/src/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /lib/md-to-json/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/HEAD/lib/md-to-json/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /configuration/style.css: -------------------------------------------------------------------------------- 1 | .label-black { 2 | color: white; 3 | background-color: black; 4 | } 5 | 6 | .label-blue { 7 | color: white; 8 | background-color: #1082ef; 9 | } 10 | -------------------------------------------------------------------------------- /src/app/components/polymer/paper-checkbox/paper-checkbox.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
{{label}}
-------------------------------------------------------------------------------- /configuration/description.md: -------------------------------------------------------------------------------- 1 | This is a comparison of available THINGs. 2 | - Bibkey example 1 [@Adi:2004:ASM:988145.988150] 3 | - Bibkey example 2 [@Dayal:1988:ROT:60295.60304] 4 | - [Link example](http://example.com). 5 | -------------------------------------------------------------------------------- /src/app/components/input/number-input/number-input.template.html: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /src/app/components/output/references-table/references-table.component.css: -------------------------------------------------------------------------------- 1 | .reference-container { 2 | display: grid; 3 | grid-template-columns: min-content auto; 4 | grid-column-gap: 10px; 5 | grid-auto-flow: row; 6 | } -------------------------------------------------------------------------------- /src/app/components/polymer/paper-icon-button/paper-icon-button.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/VersionInformation.ts: -------------------------------------------------------------------------------- 1 | export class VersionInformation { 2 | public tag = 'v2.0.0-alpha.32'; 3 | public tagDate = '2020-02-20'; 4 | public tagLink = 'https://github.com/ultimate-comparisons/ultimate-comparison-BASE/tree/v2.0.0-alpha.32'; 5 | } 6 | -------------------------------------------------------------------------------- /lib/md-to-json/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | indent_style = space 4 | indent_size = 4 5 | insert_final_newline = true 6 | trim_trailing_whitespace = true 7 | 8 | [*.yml] 9 | indent_size = 2 10 | 11 | [*.md] 12 | indent_size = 2 13 | 14 | [*.sh] 15 | indent_size = 2 16 | -------------------------------------------------------------------------------- /src/app/components/input/number-input/number-input.component.css: -------------------------------------------------------------------------------- 1 | input { 2 | width: 100%; 3 | border: 0 !important; 4 | border-bottom: 1px solid #aaa !important; 5 | border-radius: 0 !important; 6 | margin-top: 8px; 7 | } 8 | 9 | input:focus { 10 | outline-width: 0; 11 | } -------------------------------------------------------------------------------- /src/app/components/input/select2/select2.template.html: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /lib/gulp/model/data/tooltip.d.ts: -------------------------------------------------------------------------------- 1 | export class Tooltip { 2 | public text: string; 3 | public plain: string; 4 | public html: string; 5 | public latex: string; 6 | 7 | constructor(text?: string, plain?: string, html?: string, latex?: string); 8 | 9 | public static fromHtmlString(string): Tooltip; 10 | } 11 | -------------------------------------------------------------------------------- /src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "baseUrl": "./", 6 | "module": "es2015", 7 | "types": [] 8 | }, 9 | "exclude": [ 10 | "test.ts", 11 | "**/*.spec.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/app/components/output/references-table/references-table.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
{{'[' + entry.index + ']'}}:
4 |
5 |
6 |
7 | -------------------------------------------------------------------------------- /src/app/components/polymer/tooltip/tooltip.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |
6 | -------------------------------------------------------------------------------- /src/vendor.ts: -------------------------------------------------------------------------------- 1 | import '@angular/platform-browser'; 2 | import '@angular/platform-browser-dynamic'; 3 | import '@angular/core'; 4 | import '@angular/common'; 5 | import '@angular/http'; 6 | import '@angular/router'; 7 | import 'rxjs'; 8 | // Other vendors for example jQuery, Lodash or Bootstrap 9 | // You can import js, ts, css, sass, ... 10 | -------------------------------------------------------------------------------- /lib/gulp/model/data/data.d.ts: -------------------------------------------------------------------------------- 1 | import { DataElement } from './dataElement'; 2 | 3 | export class Data { 4 | public dataElements: Array; 5 | 6 | constructor(dataElement: Array); 7 | 8 | public static loadJson(json, configuration): Data; 9 | 10 | public json(); 11 | 12 | public markdown(): Array; 13 | } 14 | -------------------------------------------------------------------------------- /lib/md-to-json/src/test/resources/test.md: -------------------------------------------------------------------------------- 1 | # Blueflood - http://blueflood.io 2 | Test Description 3 | 4 | ## Properties 5 | - 1 6 | - Alpha 7 | Part of alpha 8 | 9 | Still Part of alpha 10 | - Alpha 2 11 | - Berta 12 | - beta 13 | - gamma 14 | 15 | ## Description 16 | this is complete nonsense! 17 | - a 18 | - b 19 | 20 | ## Test 21 | ## Features -------------------------------------------------------------------------------- /lib/gulp/model/citation/citation.d.ts: -------------------------------------------------------------------------------- 1 | export class Citation { 2 | public index: number; 3 | public key: string; 4 | public text: string; 5 | 6 | constructor(index: number, key: string, text: string); 7 | 8 | public static load(json): Array; 9 | 10 | public static loadArray(csl, bibtex): Array; 11 | 12 | public json(); 13 | } 14 | -------------------------------------------------------------------------------- /src/app/components/polymer/paper-dialog/paper-dialog.component.html: -------------------------------------------------------------------------------- 1 |
2 |
{{heading}}
3 |
4 | 5 |
6 |
7 | Close 8 |
9 |
10 | -------------------------------------------------------------------------------- /src/app/components/polymer/paper-item/paper-item.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'pitem', 5 | templateUrl: './paper-item.component.html', 6 | styleUrls: ['./paper-item.component.css'], 7 | changeDetection: ChangeDetectionStrategy.OnPush 8 | }) 9 | export class PaperItemComponent { 10 | } 11 | -------------------------------------------------------------------------------- /lib/gulp/model/details/body.d.ts: -------------------------------------------------------------------------------- 1 | export class Body { 2 | public title: string; 3 | public bodyRef: string; 4 | 5 | constructor(title?: string, 6 | bodyRef?: string, 7 | useDefaults?: boolean); 8 | 9 | public static load(json, defaultConfig?, useDefaults?): Body; 10 | 11 | public static empty(useDefaults?): Body; 12 | 13 | public json(): Object; 14 | } 15 | -------------------------------------------------------------------------------- /lib/uc/.travis.yml: -------------------------------------------------------------------------------- 1 | # https://docs.travis-ci.com/user/deployment/pages/ 2 | language: node_js 3 | node_js: 4 | - '8' 5 | script: npm run build 6 | deploy: 7 | provider: pages 8 | skip-cleanup: true 9 | github-token: $GITHUB_TOKEN 10 | keep-history: true 11 | local-dir: dist 12 | before_script: 13 | - npm update ultimate-comparison 14 | cache: 15 | directories: 16 | - node_modules 17 | dist: trusty 18 | -------------------------------------------------------------------------------- /lib/gulp/model/citation/citationFiles.d.ts: -------------------------------------------------------------------------------- 1 | export class CitationFiles { 2 | public csl: string; 3 | public bib: string; 4 | 5 | constructor(csl?: string, 6 | bib?: string, 7 | useDefaults?: boolean); 8 | 9 | public static load(json, defaultConfig?, useDefaults?): CitationFiles; 10 | 11 | public static empty(useDefaults?): CitationFiles; 12 | 13 | public json(): string; 14 | } 15 | -------------------------------------------------------------------------------- /src/app/components/polymer/iron-icon/iron-icon.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'iicon', 5 | templateUrl: './iron-icon.component.html', 6 | styleUrls: ['./iron-icon.component.css'], 7 | changeDetection: ChangeDetectionStrategy.OnPush 8 | }) 9 | export class IronIconComponent { 10 | @Input() icon: string; 11 | } 12 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.log(err)); 13 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false 8 | }; 9 | -------------------------------------------------------------------------------- /src/app/components/polymer/paper-button/paper-button.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'pbutton', 5 | templateUrl: './paper-button.component.html', 6 | styleUrls: ['./paper-button.component.css'], 7 | changeDetection: ChangeDetectionStrategy.OnPush 8 | }) 9 | export class PaperButtonComponent { 10 | @Input() text: string; 11 | } 12 | -------------------------------------------------------------------------------- /lib/gulp/model/details/header.d.ts: -------------------------------------------------------------------------------- 1 | export class Header { 2 | public nameRef: string; 3 | public labelRef: string; 4 | public urlRef: string; 5 | 6 | constructor(nameRef?: string, 7 | labelRef?: string, 8 | urlRef?: string, 9 | useDefaults?: boolean); 10 | 11 | public static load(json, defaultConfig?, useDefaults?): Header; 12 | 13 | public static empty(useDefaults?): Header; 14 | 15 | public json(): Object; 16 | } 17 | -------------------------------------------------------------------------------- /src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/spec", 5 | "baseUrl": "./", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": [ 9 | "jasmine", 10 | "node" 11 | ] 12 | }, 13 | "files": [ 14 | "test.ts" 15 | ], 16 | "include": [ 17 | "**/*.spec.ts", 18 | "**/*.d.ts" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /src/app/components/polymer/paper-card/paper-card.component.html: -------------------------------------------------------------------------------- 1 |
{{heading}}
2 |
3 | 4 | 5 |
6 | 7 |
8 | 9 |
10 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | Ultimate Comparison 11 | 12 | 13 | 14 | 15 | 16 | Loading... 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/app/components/pipes/pipes.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from "@angular/core"; 2 | import { BrowserModule } from "@angular/platform-browser"; 3 | import { SanitizerPipe } from "./sanitizer-pipe/sanitizer.pipe"; 4 | 5 | @NgModule({ 6 | imports: [ 7 | BrowserModule 8 | ], 9 | exports: [ 10 | SanitizerPipe 11 | ], 12 | declarations: [ 13 | SanitizerPipe 14 | ], 15 | providers: [ 16 | SanitizerPipe 17 | ] 18 | }) 19 | export class PipesModule { 20 | } -------------------------------------------------------------------------------- /src/app/components/polymer/paper-icon-button/paper-icon-button.component.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: inline-block; 3 | position: relative; 4 | padding: 1px; 5 | outline: none; 6 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 7 | -webkit-user-select: none; 8 | -moz-user-select: none; 9 | -ms-user-select: none; 10 | cursor: pointer; 11 | z-index: 0; 12 | line-height: 1; 13 | 14 | width: 26px; 15 | height: 26px; 16 | 17 | box-sizing: border-box !important; 18 | } 19 | -------------------------------------------------------------------------------- /data/Default4(0.0.1alpha).md: -------------------------------------------------------------------------------- 1 | # Default 4 (0.0.1 alpha) - http://default-4-entry.example.com 2 | slow, MIT, green, green, grey 3 | 4 | ## Performance 5 | - slow 6 | 7 | ## License 8 | - MIT 9 | 10 | ## Showcase 2.0 11 | - green 12 | - grey 13 | 14 | ## Description 15 | Default long description in __markdown__. 16 | 17 | ## Uncolored 18 | - Color 1 19 | 20 | ## Repository 21 | https://github.com/SitOPT/SitOPT-Installation-Script 22 | https://github.com/SitOPT/SitOPT-Installation-Script 23 | 24 | ## NumberColumn 25 | - 100 -------------------------------------------------------------------------------- /lib/gulp/model/details/details.d.ts: -------------------------------------------------------------------------------- 1 | import { Header } from './header'; 2 | import { Body } from './body'; 3 | 4 | export class Details { 5 | public header: Header; 6 | public body: Body; 7 | public tooltipAsText: boolean; 8 | 9 | constructor(header?: Header, 10 | body?: Body, 11 | useDefaults?: boolean) 12 | 13 | public static load(json, defaultConfig?, useDefaults?): Details; 14 | 15 | public static empty(useDefaults?): Details; 16 | 17 | public json(): Object; 18 | } 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/app/components/polymer/paper-icon-button/paper-icon-button.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'picon-button', 5 | templateUrl: './paper-icon-button.component.html', 6 | styleUrls: ['./paper-icon-button.component.css'], 7 | changeDetection: ChangeDetectionStrategy.OnPush 8 | }) 9 | export class PaperIconButtonComponent { 10 | @Input() icon: string; 11 | @Input() title: string; 12 | @Input() showTooltip: boolean = true; 13 | } 14 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, HostListener, ViewEncapsulation } from '@angular/core'; 2 | import { ComparisonComponent } from './components/comparison/comparison.component'; 3 | 4 | @Component({ 5 | selector: 'myapp', 6 | template: '', 7 | encapsulation: ViewEncapsulation.None 8 | }) 9 | export class AppComponent { 10 | @HostListener('window:popstate', ['$event']) 11 | popState(ev: PopStateEvent) { 12 | ComparisonComponent.instance.dispatchNewState(ev.state); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/webpack/webpack.prod.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | const merge = require('webpack-merge'); 3 | const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); 4 | 5 | const config = require('./config.js'); 6 | const common = require('./webpack.common.js'); 7 | 8 | module.exports = merge(common, { 9 | plugins: [ 10 | new UglifyJSPlugin({ 11 | sourceMap: true 12 | }), 13 | new webpack.DefinePlugin({ 14 | 'process.env.NODE_ENV': JSON.stringify('production') 15 | }) 16 | ] 17 | }); 18 | -------------------------------------------------------------------------------- /data/Default3.md: -------------------------------------------------------------------------------- 1 | # Default 3 - http://default-3-entry.example.com 2 | fast, MPL 2.0, red 1, red 2, light blue 3 | 4 | ## Performance 5 | - fast 6 | 7 | ## License 8 | - MPL-2.0 9 | 10 | ## Showcase 2.0 11 | - red 1 12 | - red 2 13 | - light blue 14 | 15 | ## Description 16 | Default long description in __markdown__. 17 | 18 | ## Uncolored 19 | - Color 2 20 | 21 | ## Repository 22 | https://github.com/ultimate-comparisons/ultimate-IoT-platform-comparison 23 | https://github.com/ultimate-comparisons/ultimate-IoT-platform-comparison 24 | 25 | ## NumberColumn 26 | - 250 -------------------------------------------------------------------------------- /data/Default2.md: -------------------------------------------------------------------------------- 1 | # Default 2 - http://default-2-entry.example.com 2 | fast, Apache 2.0, red 2, green 3 | 4 | ## Performance 5 | - fast 6 | 7 | ## License 8 | - Apache-2.0 9 | 10 | ## Showcase 2.0 11 | - red 2 12 | - green 13 | - black 14 | 15 | ## Description 16 | Default long description in __markdown__. 17 | 18 | ## Uncolored 19 | - Color 1 20 | - Color 3 21 | 22 | ## Repository 23 | https://github.com/ultimate-comparisons/ultimate-deployment-tool-comparison 24 | https://github.com/ultimate-comparisons/ultimate-deployment-tool-comparison 25 | 26 | ## NumberColumn 27 | - 300 -------------------------------------------------------------------------------- /data/Default1.md: -------------------------------------------------------------------------------- 1 | # Default 1 - http://default-1-entry.example.com 2 | slow, MIT, red 1, grey 3 | 4 | ## Performance 5 | - slow 6 | - [@Bry07towardsformal] 7 | 8 | ## License 9 | - MIT 10 | 11 | ## Showcase 2.0 12 | - red 1 13 | - grey 14 | 15 | ## Description 16 | Default long description in __markdown__. 17 | 18 | ## Uncolored 19 | - Color 1 20 | - Color 2 21 | 22 | ## Repository 23 | https://github.com/ultimate-comparisons/ultimate-comparison-BASE 24 | https://github.com/ultimate-comparisons/ultimate-comparison-BASE 25 | 26 | ## NumberColumn 27 | - 200 28 | - 199 29 | - 233 -------------------------------------------------------------------------------- /src/app/components/polymer/paper-card/paper-card.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'pcard', 5 | templateUrl: './paper-card.component.html', 6 | styleUrls: ['./paper-card.component.css'], 7 | changeDetection: ChangeDetectionStrategy.OnPush 8 | }) 9 | export class PaperCardComponent { 10 | @Input() heading: string; 11 | @Input() symbol = false; 12 | @Input() expand = false; 13 | @Output() expandChange: EventEmitter = new EventEmitter(); 14 | } 15 | -------------------------------------------------------------------------------- /docs/adr/index.md: -------------------------------------------------------------------------------- 1 | # Architectural Decision Log 2 | 3 | This log lists the architectural decisions for *ultimate-comparison-BASE*. 4 | 5 | - [0000-use-markdown-architectural-decision-records.md](0000-use-markdown-architectural-decision-records) - Use Markdown Architectural Decision Records ([MADR](https://github.com/adr/madr/)) 6 | - [0001-Selection-Framework.md](0001-Selection-Framework) - Use ng2-select for filters ([ng2-select](https://www.npmjs.com/package/ng2-select)) 7 | - [template.md](template) - The template 8 | 9 | More information on architectural decision records is available at . -------------------------------------------------------------------------------- /lib/uc/gitignore.template: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/angular 2 | 3 | ### Angular ### 4 | ## Angular ## 5 | # compiled output 6 | /dist 7 | /tmp 8 | /app/**/*.js 9 | /app/**/*.js.map 10 | 11 | # dependencies 12 | /node_modules 13 | /bower_components 14 | 15 | # IDEs and editors 16 | /.idea 17 | 18 | # misc 19 | /.sass-cache 20 | /connect.lock 21 | /coverage/* 22 | /libpeerconnection.log 23 | npm-debug.log 24 | testem.log 25 | /typings 26 | 27 | # e2e 28 | /e2e/*.js 29 | /e2e/*.map 30 | 31 | #System Files 32 | .DS_Store 33 | 34 | 35 | # End of https://www.gitignore.io/api/angular 36 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '8' 4 | env: 5 | - GIT_DEPLOY_DIR: dist 6 | script: npm run build 7 | after_success: 8 | - git remote set-url origin git@github.com:ultimate-comparisons/ultimate-comparison-BASE.git 9 | - openssl aes-256-cbc -K $encrypted_e7cc94ff2647_key -iv $encrypted_e7cc94ff2647_iv -in ./lib/travis/github_deploy_key.enc -out id_rsa -d 10 | - ssh-add github_deploy_key 11 | - eval "$(ssh-agent -s)" 12 | - chmod 600 id_rsa 13 | - ssh-add id_rsa 14 | - git reset --hard 15 | - echo $TRAVIS_BRANCH 16 | - echo $TRAVIS_PULL_REQUEST 17 | - ./lib/travis/deploy.sh 18 | sudo: required 19 | dist: trusty 20 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "sourceMap": true, 7 | "emitDecoratorMetadata": true, 8 | "experimentalDecorators": true, 9 | "removeComments": false, 10 | "noImplicitAny": false, 11 | "suppressImplicitAnyIndexErrors": true, 12 | "lib": [ 13 | "es2017", 14 | "dom" 15 | ], 16 | "types": ["node", "showdown", "jquery"], 17 | "typeRoots": ["node_modules/@types"] 18 | }, 19 | "exclude": [ 20 | "node_modules", 21 | "www", 22 | "lib" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /lib/gulp/tasks/util.babel.js: -------------------------------------------------------------------------------- 1 | import { existsSync, lstatSync, readdirSync, rmdirSync, unlinkSync } from "fs"; 2 | import * as path from "path"; 3 | 4 | export function deleteFolderRecursive(folder) { 5 | if (existsSync(folder)) { 6 | readdirSync(folder).forEach(function (file) { 7 | const curPath = path.join(folder, file); 8 | if (lstatSync(curPath).isDirectory()) { // recurse 9 | deleteFolderRecursive(curPath); 10 | } else { // delete file 11 | unlinkSync(curPath); 12 | } 13 | }); 14 | rmdirSync(folder); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/gulp/model/data/data.js: -------------------------------------------------------------------------------- 1 | import { DataElement } from "./dataElement"; 2 | 3 | class Data { 4 | constructor(dataElements) { 5 | this.dataElements = dataElements; 6 | } 7 | 8 | static loadJson(json, configuration) { 9 | const dataElements = (json || []) 10 | .filter(obj => obj.type === "header") 11 | .map(obj => DataElement.loadJson(obj, configuration)); 12 | 13 | return new Data(dataElements); 14 | } 15 | 16 | json() { 17 | return this.dataElements.map(element => element.json()); 18 | } 19 | 20 | markdown() { 21 | return this.dataElements.map(element => element.markdown()); 22 | } 23 | } 24 | 25 | export { Data }; 26 | -------------------------------------------------------------------------------- /src/app/components/polymer/iron-icon/iron-icon.component.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: -ms-inline-flexbox; 3 | display: -webkit-inline-flex; 4 | display: inline-flex; 5 | 6 | -ms-flex-align: center; 7 | -webkit-align-items: center; 8 | align-items: center; 9 | -ms-flex-pack: center; 10 | -webkit-justify-content: center; 11 | justify-content: center; 12 | 13 | position: relative; 14 | 15 | vertical-align: middle; 16 | 17 | fill: currentcolor; 18 | stroke: none; 19 | } 20 | 21 | svg { 22 | pointer-events: none; 23 | display: block; 24 | width: 24px; 25 | height: 24px; 26 | } 27 | 28 | svg-parent { 29 | width: 24px; 30 | height: 24px; 31 | } 32 | -------------------------------------------------------------------------------- /src/app/components/comparison/settings/comparison.settings.component.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: grid; 3 | padding: 0; 4 | } 5 | 6 | .grid-content { 7 | display: grid; 8 | grid-template-columns: auto; 9 | grid-column-gap: 10px; 10 | grid-row-gap: 10px; 11 | grid-auto-flow: row; 12 | margin-bottom: 10px; 13 | } 14 | 15 | .pcard { 16 | display: grid; 17 | grid-template-columns: auto; 18 | grid-auto-flow: row; 19 | } 20 | 21 | @media only screen and (min-width: 400px) { 22 | .pcard { 23 | grid-template-columns: auto auto; 24 | } 25 | } 26 | 27 | @media only screen and (min-width: 800px) { 28 | .pcard { 29 | grid-template-columns: auto auto auto; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/app/components/polymer/tooltip/tooltip.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core'; 2 | import { DomSanitizer } from '@angular/platform-browser'; 3 | 4 | @Component({ 5 | selector: 'ptooltip', 6 | templateUrl: './tooltip.component.html', 7 | styleUrls: ['./tooltip.component.css'], 8 | changeDetection: ChangeDetectionStrategy.OnPush 9 | }) 10 | export class TooltipComponent { 11 | @Input() tooltip = ''; 12 | @Input() tooltipHtml = ''; 13 | @HostBinding('class') positionClass = 'n'; 14 | 15 | constructor(private _sanitizer: DomSanitizer) { 16 | } 17 | 18 | @Input() set position(p: string) { 19 | this.positionClass = p; 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /src/app/components/polymer/paper-card/paper-card.component.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: grid; 3 | grid-template-columns: auto 25px; 4 | grid-template-rows: auto 1fr; 5 | grid-template-areas: "header symbol" "content content"; 6 | padding: 16px; 7 | box-sizing: border-box; 8 | border-radius: 2px; 9 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 10 | 0 1px 5px 0 rgba(0, 0, 0, 0.12), 11 | 0 3px 1px -2px rgba(0, 0, 0, 0.2); 12 | } 13 | 14 | .paper-header { 15 | grid-area: header; 16 | font-size: 24px; 17 | font-weight: 400; 18 | padding: 0 0 10px 0; 19 | } 20 | 21 | .paper-symbol { 22 | grid-area: symbol; 23 | } 24 | 25 | .paper-content { 26 | grid-area: content; 27 | display: grid; 28 | } 29 | -------------------------------------------------------------------------------- /src/app/components/input/input.module.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core"; 2 | import { BrowserModule } from "@angular/platform-browser"; 3 | import { SelectModule } from "ng2-select"; 4 | import { Select2Component } from "./select2/select2.component"; 5 | import { NumberInputComponent } from "./number-input/number-input.component"; 6 | 7 | @NgModule({ 8 | imports: [ 9 | BrowserModule, 10 | SelectModule 11 | ], 12 | exports: [ 13 | Select2Component, 14 | NumberInputComponent 15 | ], 16 | declarations: [ 17 | Select2Component, 18 | NumberInputComponent 19 | ], 20 | providers: [], 21 | schemas: [CUSTOM_ELEMENTS_SCHEMA] 22 | }) 23 | export class InputModule { 24 | } 25 | -------------------------------------------------------------------------------- /lib/gulp/model/data/dataElement.d.ts: -------------------------------------------------------------------------------- 1 | import { CriteriaData } from './criteriaData'; 2 | 3 | export class DataElement { 4 | public name: string; 5 | public url: string; 6 | public description: string; 7 | public criteriaData: Map; 8 | public html: string; 9 | public latex: string; 10 | 11 | constructor(name: string, url: string, description: string, criteriaData: Map, averageRating?: number, html?: string, latex?: string); 12 | 13 | public static loadJson(json, configuration): DataElement; 14 | 15 | public json(); 16 | 17 | public markdown(): string; 18 | 19 | public getCriteriaData(id: string): CriteriaData; 20 | 21 | // Return criteriaData + criteriaData for (name,url) and (description) 22 | public getCriteriaDataExtended(): Array; 23 | } 24 | -------------------------------------------------------------------------------- /lib/gulp/model/data/criteriaData.d.ts: -------------------------------------------------------------------------------- 1 | import { Label } from './label'; 2 | import { Criteria, CriteriaTypes } from '../criteria/criteria'; 3 | 4 | export class CriteriaData { 5 | public name: string; 6 | public text: string; 7 | public labels: Map; 8 | public labelArray: Array