├── .editorconfig ├── .gitattributes ├── .github └── workflows │ └── tests.yml ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── configuration ├── comparison-auto-config.yml ├── comparison-default.yml ├── comparison.yml ├── description.md └── style.css ├── data ├── Default1.md ├── Default2.md ├── Default3.md ├── Default4(0.0.1alpha).md ├── Default5.md ├── Template.md ├── acm-siggraph.csl └── literature.bib ├── docs ├── adr │ ├── 0000-use-markdown-architectural-decision-records.md │ ├── 0001-Selection-Framework.md │ ├── index.md │ └── template.md └── images │ ├── descritpion.png │ ├── detailsbody.png │ ├── detailsheader.png │ ├── subtitle.png │ ├── tabletitle.png │ ├── title.png │ └── variouselements.png ├── lib ├── gulp │ ├── gulpfile.babel.js │ ├── gulpfile.js │ ├── model │ │ ├── .editorconfig │ │ ├── citation │ │ │ ├── citation.d.ts │ │ │ ├── citation.js │ │ │ ├── citationFiles.d.ts │ │ │ └── citationFiles.js │ │ ├── comparison-default.yml │ │ ├── configuration │ │ │ ├── configuration.d.ts │ │ │ └── configuration.js │ │ ├── criteria │ │ │ ├── criteria.d.ts │ │ │ ├── criteria.js │ │ │ ├── criteriaValue.d.ts │ │ │ └── criteriaValue.js │ │ ├── data │ │ │ ├── criteriaData.d.ts │ │ │ ├── criteriaData.js │ │ │ ├── data.d.ts │ │ │ ├── data.js │ │ │ ├── dataElement.d.ts │ │ │ ├── dataElement.js │ │ │ ├── label.d.ts │ │ │ ├── label.js │ │ │ ├── tooltip.d.ts │ │ │ └── tooltip.js │ │ ├── default.d.ts │ │ ├── default.js │ │ ├── details │ │ │ ├── body.d.ts │ │ │ ├── body.js │ │ │ ├── details.d.ts │ │ │ ├── details.js │ │ │ ├── header.d.ts │ │ │ └── header.js │ │ ├── model.module.d.ts │ │ ├── model.module.js │ │ └── util.js │ ├── publish.js │ └── tasks │ │ ├── citation.babel.js │ │ ├── criteria.babel.js │ │ ├── determineColors.babel.js │ │ ├── developmentColumn.babel.js │ │ └── util.babel.js ├── md-to-json │ ├── .gitignore │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── src │ │ ├── main │ │ ├── java │ │ │ ├── json │ │ │ │ └── converter │ │ │ │ │ ├── JsonConverterExtension.java │ │ │ │ │ └── internal │ │ │ │ │ ├── JsonConverterNodeRenderer.java │ │ │ │ │ └── MarkdownWriter.java │ │ │ └── wrapper │ │ │ │ └── Converter.java │ │ └── resources │ │ │ └── tinylog.properties │ │ └── test │ │ ├── java │ │ ├── json │ │ │ └── converter │ │ │ │ └── JsonConverterTest.java │ │ └── wrapper │ │ │ └── ConverterTest.java │ │ └── resources │ │ ├── test.json │ │ └── test.md ├── travis │ ├── deploy.sh │ └── github_deploy_key.enc ├── uc │ ├── .editorconfig │ ├── .travis.yml │ ├── LICENSE │ ├── README.md │ ├── gitignore.template │ ├── package.json │ ├── uc │ └── webpack.config.babel.js └── webpack │ ├── config.js │ ├── webpack.common.js │ └── webpack.prod.js ├── package-lock.json ├── package.json ├── src ├── app │ ├── app.component.ts │ ├── app.module.ts │ ├── components │ │ ├── comparison │ │ │ ├── comparison.component.css │ │ │ ├── comparison.component.ts │ │ │ ├── comparison.module.ts │ │ │ ├── comparison.template.html │ │ │ ├── configuration │ │ │ │ └── configuration.service.ts │ │ │ ├── details │ │ │ │ ├── comparison.details.component.css │ │ │ │ ├── comparison.details.component.ts │ │ │ │ └── comparison.details.template.html │ │ │ └── settings │ │ │ │ ├── comparison.settings.component.css │ │ │ │ ├── comparison.settings.component.ts │ │ │ │ └── comparison.settings.template.html │ │ ├── input │ │ │ ├── input-interface.ts │ │ │ ├── input.module.ts │ │ │ ├── number-input │ │ │ │ ├── number-input.component.css │ │ │ │ ├── number-input.component.ts │ │ │ │ └── number-input.template.html │ │ │ └── select2 │ │ │ │ ├── select2.component.css │ │ │ │ ├── select2.component.ts │ │ │ │ └── select2.template.html │ │ ├── output │ │ │ ├── footnote │ │ │ │ ├── footnote.component.html │ │ │ │ └── footnote.component.ts │ │ │ ├── generic-table │ │ │ │ ├── generic-table.component.css │ │ │ │ ├── generic-table.component.html │ │ │ │ └── generic-table.component.ts │ │ │ ├── latex-table │ │ │ │ ├── latex-table.component.css │ │ │ │ ├── latex-table.component.html │ │ │ │ └── latex-table.component.ts │ │ │ ├── output.module.ts │ │ │ └── references-table │ │ │ │ ├── references-table.component.css │ │ │ │ ├── references-table.component.html │ │ │ │ └── references-table.component.ts │ │ ├── pipes │ │ │ ├── pipes.module.ts │ │ │ └── sanitizer-pipe │ │ │ │ └── sanitizer.pipe.ts │ │ └── polymer │ │ │ ├── iron-icon │ │ │ ├── iron-icon.component.css │ │ │ ├── iron-icon.component.html │ │ │ └── iron-icon.component.ts │ │ │ ├── paper-button │ │ │ ├── paper-button.component.css │ │ │ ├── paper-button.component.html │ │ │ └── paper-button.component.ts │ │ │ ├── paper-card │ │ │ ├── paper-card.component.css │ │ │ ├── paper-card.component.html │ │ │ └── paper-card.component.ts │ │ │ ├── paper-checkbox │ │ │ ├── paper-checkbox.component.css │ │ │ ├── paper-checkbox.component.html │ │ │ └── paper-checkbox.component.ts │ │ │ ├── paper-dialog │ │ │ ├── paper-dialog.component.css │ │ │ ├── paper-dialog.component.html │ │ │ └── paper-dialog.component.ts │ │ │ ├── paper-icon-button │ │ │ ├── paper-icon-button.component.css │ │ │ ├── paper-icon-button.component.html │ │ │ └── paper-icon-button.component.ts │ │ │ ├── paper-item │ │ │ ├── paper-item.component.css │ │ │ ├── paper-item.component.html │ │ │ └── paper-item.component.ts │ │ │ ├── polymer.module.ts │ │ │ └── tooltip │ │ │ ├── tooltip.component.css │ │ │ ├── tooltip.component.html │ │ │ └── tooltip.component.ts │ └── redux │ │ ├── custom-router-state-serializer.ts │ │ ├── uc.action.ts │ │ ├── uc.app-state.ts │ │ └── uc.reducers.ts ├── assets │ ├── VersionInformation.ts │ └── bootstrap.css ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 ├── index.html ├── main.ts ├── polyfills.ts ├── styles.css ├── tsconfig.app.json ├── tsconfig.spec.json ├── typings.d.ts └── vendor.ts ├── tsconfig.json └── tslint.json /.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 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sh eol=lf 2 | gradlew eol=lf 3 | gradle/wrapper/gradle-wrapper.propeties eol=lf 4 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: Checks 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | javatests: 7 | name: md-to-json unit tests 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout source 11 | uses: actions/checkout@v2 12 | with: 13 | depth: 1 14 | - name: Set up JDK 15 | uses: actions/setup-java@v1 16 | with: 17 | java-version: 12 18 | - name: Run java tests 19 | run: | 20 | cd lib/md-to-json 21 | ./gradlew check 22 | jstests: 23 | name: js unit tests 24 | runs-on: ubuntu-latest 25 | steps: 26 | - name: Checkout source 27 | uses: actions/checkout@v2 28 | with: 29 | depth: 1 30 | - uses: actions/setup-node@v1 31 | with: 32 | node-version: '10.x' 33 | - run: npm install 34 | - run: npm test 35 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 6 | and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). 7 | 8 | ## [v2.0.0-alpha.32] – 2020-02-21 9 | 10 | ### Fixed 11 | 12 | - Fix insertion of version and description in generated `package.json` 13 | - md-to-json part at Java 11 (by updating [Gradle](https://gradle.org/) to 6.2) 14 | 15 | ## [v2.0.0-alpha.31] – 2018-08-09 16 | 17 | ### Added 18 | 19 | - Publish `ultimate-comparison` on npmjs.org [#67](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/67) 20 | - Add extraction of missing information from comparison data [#89](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/89) 21 | - Add global style file to configuration folder 22 | - Add permanent display of all references [#18](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/18) 23 | - Add references to details page [#16](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/16) 24 | - Add tooltips for details page 25 | - Add word-break property for tooltips 26 | - Enabling and disabling elements 27 | - Clicking labels for filtering 28 | 29 | ### Changed 30 | 31 | - Introduction of Angular 5 [#30](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/30) 32 | - Introduction of Redux [#117](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/117) 33 | - Change some styles 34 | - Change output directory location 35 | - Replaced angular2-select with ng2-select 36 | 37 | ### Breaking Changes 38 | 39 | - Restructure comparison configuration [#128](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/128) 40 | 41 | ### Fixed 42 | 43 | - Improved foreground colors when auto assigning 44 | - Fixed problem with sorting `repo` columns [#114](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/114) 45 | - Fixed problem on first load after restart 46 | - Fix moving content when modal opened [#26](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/26) 47 | - Fix quote markdown to json converting 48 | - Fix Md2Json imports 49 | - Add expand and shrink option for table [#90](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/90) 50 | 51 | ### Removed 52 | 53 | - Remove [pandoc](https://pandoc.org/) dependency [#113](https://github.com/ultimate-comparisons/ultimate-comparison-BASE/issues/113) 54 | 55 | ## 1.0.0 – 2017-08-24 56 | 57 | ### Added 58 | 59 | - This file 60 | - Static VersionInformation class 61 | - Section about difference of `update` and `master` branch in README.md 62 | - Added force push for deployment 63 | - Moved deployment to .travis.yml 64 | - Added tslint 65 | - Added unknown label for empty values 66 | - Enabling and disabling elements 67 | 68 | ### Fixed 69 | 70 | - Rate Limit exceeded for GitHub for up to 60 elements. 71 | 72 | [Unreleased]: https://github.com/ultimate-comparisons/ultimate-comparison-BASE/compare/v2.0.0-alpha.32...HEAD 73 | [v2.0.0-alpha.32]: https://github.com/ultimate-comparisons/ultimate-comparison-BASE/compare/v2.0.0-alpha.31...v2.0.0-alpha.32 74 | [v2.0.0-alpha.31]: https://github.com/ultimate-comparisons/ultimate-comparison-BASE/compare/1.0.0...v2.0.0-alpha.31 75 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016-2018 Christoph Kleine 4 | Copyright (c) 2016-2018 Oliver Kopp 5 | Copyright (c) 2016-2018 Michael Falkenthal 6 | Copyright (c) 2016-2018 Armin Hüneburg 7 | Copyright (c) 2016-2017 Andreas Bader 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software 10 | and associated documentation files (the "Software"), to deal in the Software without restriction, 11 | including without limitation the rights to use, copy, modify, merge, publish, distribute, 12 | sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in all copies or substantial 16 | portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 19 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 20 | PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 21 | FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /configuration/comparison-auto-config.yml: -------------------------------------------------------------------------------- 1 | citations: 2 | - index: 0 3 | key: 'Adi:2004:ASM:988145.988150' 4 | text: >- 5 | Adi, A. and Etzion, O. 2004. Amit – the Situation Manager. The VLDB 6 | Journal 13, 2, 177–203. 7 | - index: 1 8 | key: Bry07towardsformal 9 | text: >- 10 | Bry, F. 2007. Towards formal foundations of event queries and rules. In 11 | Proc. Int. Workshop on Event-Driven Architecture, Processing and Systems. 12 | - index: 2 13 | key: 'Dayal:1988:ROT:60295.60304' 14 | text: >- 15 | Dayal, U., Buchmann, A.P., and McCarthy, D.R. 1988. Rules Are Objects Too: 16 | A Knowledge Model for an Active, Object-oriented Databasesystem. Lecture 17 | Notes in Computer Science on Advances in Object-oriented Database Systems, 18 | Springer-Verlag New York, Inc., 129–143. 19 | - index: 3 20 | key: eckertThesisCEP 21 | text: >- 22 | Eckert, M. 2008. Complex Event Processing with XChange EQ : Language 23 | Design, Formal Semantics, and Incremental Evaluation for Querying Events. 24 | - index: 5 25 | key: esper-reference 26 | text: >- 27 | Team, E. Esper Reference documentation. 28 | http://www.espertech.com/esper/release-5.1.0/esper-reference/pdf/esper_reference.pdf. 29 | criteria: 30 | - NumberColumn: 31 | type: LABEL 32 | values: 33 | '100': 34 | color: '#0d0d0d' 35 | backgroundColor: 'hsl(75, 100%, 70%)' 36 | '233': 37 | color: '#0d0d0d' 38 | backgroundColor: 'hsl(105, 100%, 70%)' 39 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /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/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/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 -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /data/Template.md: -------------------------------------------------------------------------------- 1 | # Template - http://www.example.com 2 | Default short description (with bibkey: [@esper-reference]) 3 | 4 | - a 5 | - b 6 | 7 | ## Performance 8 | - slow 9 | - fast 10 | 11 | ## License 12 | - MIT 13 | - Apache-2.0 14 | - MPL-2.0 15 | 16 | ## Showcase 2.0 17 | - red 1 18 | - red 2 19 | - green 20 | - [@eckertThesisCEP] 21 | - yellow 22 | - yellow property 23 | - n64 24 | - n76 25 | - dark blue 26 | - [@eckertThesisCEP] 27 | - more properties: 28 | - 3lvl Property 29 | - t4 30 | - grey 31 | - light blue 32 | - Super_long_tooltip_without_separators_which_should_not_extend_the_tooltip_area 33 | - black 34 | 35 | ## Description 36 | Default long description in __markdown__. 37 | 38 | - Bibkey example [@Adi:2004:ASM:988145.988150] 39 | - [Link example](http://example.com). 40 | 41 | ## Rating 42 | - [5] Template is perfect 43 | - [1] I don't understand nothing 44 | - [3] It works 45 | 46 | ## Uncolored 47 | - Color 1 48 | 49 | ## NumberColumn 50 | - 200 51 | 52 | ## Repository 53 | https://github.com/SitOPT/SitOPT-Installation-Script 54 | https://github.com/SitOPT/SitOPT-Installation-Script -------------------------------------------------------------------------------- /data/acm-siggraph.csl: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /data/literature.bib: -------------------------------------------------------------------------------- 1 | % Encoding: UTF-8 2 | 3 | @Article{Adi:2004:ASM:988145.988150, 4 | author = {Adi, Asaf and Etzion, Opher}, 5 | title = {Amit -- the Situation Manager}, 6 | journal = {The VLDB Journal}, 7 | year = {2004}, 8 | volume = {13}, 9 | number = {2}, 10 | pages = {177--203}, 11 | month = may, 12 | issn = {1066-8888}, 13 | address = {Secaucus, NJ, USA}, 14 | doi = {10.1007/s00778-003-0108-y}, 15 | keywords = {Active databases, Active technology, Composite events, High-level languages}, 16 | numpages = {27}, 17 | publisher = {Springer-Verlag New York, Inc.} 18 | } 19 | 20 | @InProceedings{Bry07towardsformal, 21 | Title = {Towards formal foundations of event queries and rules}, 22 | Author = {François Bry}, 23 | Booktitle = {In Proc. Int. Workshop on Event-Driven Architecture, Processing and Systems}, 24 | Year = {2007} 25 | } 26 | 27 | @InProceedings{Dayal:1988:ROT:60295.60304, 28 | Title = {Rules Are Objects Too: A Knowledge Model for an Active, Object-oriented Databasesystem}, 29 | Author = {Dayal, U. and Buchmann, A. P. and McCarthy, D. R.}, 30 | Booktitle = {Lecture Notes in Computer Science on Advances in Object-oriented Database Systems}, 31 | Year = {1988}, 32 | 33 | Address = {New York, NY, USA}, 34 | Pages = {129--143}, 35 | Publisher = {Springer-Verlag New York, Inc.}, 36 | 37 | ISBN = {0-387-50345-5}, 38 | Location = {Bad Mu:9Ainster am Stein-Edernburg, Germany}, 39 | Numpages = {15}, 40 | Url = {http://dl.acm.org/citation.cfm?id=60295.60304} 41 | } 42 | 43 | @PhdThesis{eckertThesisCEP, 44 | author = {Michael Eckert}, 45 | title = {Complex Event Processing with XChange EQ : Language Design, Formal Semantics, and Incremental Evaluation for Querying Events}, 46 | year = {2008} 47 | } 48 | 49 | @InBook{Eckert2011, 50 | pages = {47--70}, 51 | title = {Reasoning in Event-Based Distributed Systems}, 52 | publisher = {Springer Berlin Heidelberg}, 53 | year = {2011}, 54 | author = {Michael Eckert and François Bry and Simon Brodt and Olga Poppe and Steffen Hausmann}, 55 | editor = {Helmer, Sven and Poulovassilis, Alexandra and Xhafa, Fatos}, 56 | address = {Berlin, Heidelberg}, 57 | isbn = {978-3-642-19724-6}, 58 | doi = {10.1007/978-3-642-19724-6_3} 59 | } 60 | 61 | @Manual{esper-reference, 62 | title = {Esper Reference documentation}, 63 | author = {Esper Team}, 64 | location = {http://www.espertech.com/esper/release-5.1.0/esper-reference/pdf/esper_reference.pdf} 65 | } 66 | -------------------------------------------------------------------------------- /docs/adr/0000-use-markdown-architectural-decision-records.md: -------------------------------------------------------------------------------- 1 | # Use Markdown Architectural Decision Records (MADR) 2 | 3 | Should we record the architectural decisions made in this project? 4 | And if we do, wow to structure these recordings? 5 | 6 | ## Considered Alternatives 7 | 8 | * [MADR](https://github.com/adr/madr) - Markdown Architectural Decision Records 9 | * [Michael Nygard's template](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions) - The first incarnation of the term "ADR". Maintainable by [adr-tools](https://github.com/npryce/adr-tools). 10 | * [Sustainable Architectural Decisions](https://www.infoq.com/articles/sustainable-architectural-design-decisions) - The Y-Statements 11 | * [DecisionRecord](https://github.com/schubmat/DecisionCapture) - Agile records by [@schubmat](https://github.com/schubmat/) 12 | * Other templates listed at 13 | * No records 14 | 15 | ## Decision Outcome 16 | 17 | * Chosen Alternative: MADR 18 | * The MADR template is lean and fits our development style. 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/adr/0001-Selection-Framework.md: -------------------------------------------------------------------------------- 1 | # Choose selection framework 2 | 3 | **User Story:** #27 4 | 5 | During the implementation of `Clicking on a tag should search for it` (issue #27) we noticed that we could not get the value of the 6 | tag into the elements in the GUI. 7 | We needed a framework that allowed to add values to the elements via code. 8 | Thus `angular2-select` is deprecated. 9 | 10 | ## Considered Alternatives 11 | 12 | - angular2-select 13 | - ng2-select 14 | - ng2-select-custom 15 | 16 | ## Decision Outcome 17 | 18 | `ng2-select` 19 | 20 | Because it allows adding selected items programmatically. 21 | 22 | ## Pros and Cons of Alternatives 23 | 24 | ### `angular2-select` 25 | 26 | * Does not allow adding elements programmatically 27 | 28 | ### `ng2-select` 29 | 30 | * Does allow adding elements programmatically 31 | 32 | ### `ng2-select-custom` 33 | 34 | * Does allow adding elements programmatically 35 | * Is a fork of ng2-select -------------------------------------------------------------------------------- /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 . -------------------------------------------------------------------------------- /docs/adr/template.md: -------------------------------------------------------------------------------- 1 | # *[short title of solved problem and solution]* 2 | 3 | **User Story:** *[ticket/issue-number]* 4 | 5 | *[context and problem statement]* 6 | *[decision drivers | forces]* 7 | 8 | ## Considered Alternatives 9 | 10 | * *[alternative 1]* 11 | * *[alternative 2]* 12 | * *[alternative 3]* 13 | * *[...]* 14 | 15 | ## Decision Outcome 16 | 17 | * Chosen Alternative: *[alternative 1]* 18 | * *[justification. e.g., only alternative, which meets k.o. criterion decision driver | which resolves force force | ... | comes out best (see below)]* 19 | * *[consequences. e.g., negative impact on quality attribute, follow-up decisions required, ...]* 20 | 21 | ## Pros and Cons of the Alternatives 22 | 23 | ### *[alternative 1]* 24 | 25 | * `+` *[argument 1 pro]* 26 | * `+` *[argument 2 pro]* 27 | * `-` *[argument 1 con]* 28 | * *[...]* 29 | 30 | ### *[alternative 2]* 31 | 32 | * `+` *[argument 1 pro]* 33 | * `+` *[argument 2 pro]* 34 | * `-` *[argument 1 con]* 35 | * *[...]* 36 | 37 | ### *[alternative 3]* 38 | 39 | * `+` *[argument 1 pro]* 40 | * `+` *[argument 2 pro]* 41 | * `-` *[argument 1 con]* 42 | * *[...]* 43 | -------------------------------------------------------------------------------- /docs/images/descritpion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/c848380282fe4da5e984968ac7079989c3e6fa89/docs/images/descritpion.png -------------------------------------------------------------------------------- /docs/images/detailsbody.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/c848380282fe4da5e984968ac7079989c3e6fa89/docs/images/detailsbody.png -------------------------------------------------------------------------------- /docs/images/detailsheader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/c848380282fe4da5e984968ac7079989c3e6fa89/docs/images/detailsheader.png -------------------------------------------------------------------------------- /docs/images/subtitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/c848380282fe4da5e984968ac7079989c3e6fa89/docs/images/subtitle.png -------------------------------------------------------------------------------- /docs/images/tabletitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/c848380282fe4da5e984968ac7079989c3e6fa89/docs/images/tabletitle.png -------------------------------------------------------------------------------- /docs/images/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/c848380282fe4da5e984968ac7079989c3e6fa89/docs/images/title.png -------------------------------------------------------------------------------- /docs/images/variouselements.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ultimate-comparisons/ultimate-comparison-framework/c848380282fe4da5e984968ac7079989c3e6fa89/docs/images/variouselements.png -------------------------------------------------------------------------------- /lib/gulp/gulpfile.js: -------------------------------------------------------------------------------- 1 | require("@babel/register"); 2 | 3 | module.export = require("./gulpfile.babel.js"); 4 | -------------------------------------------------------------------------------- /lib/gulp/model/.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | indent_style = space 4 | indent_size = 2 5 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/gulp/model/citation/citation.js: -------------------------------------------------------------------------------- 1 | import { isNullOrUndefined } from "../util"; 2 | 3 | const Cite = require('citation-js'); 4 | 5 | class Citation { 6 | constructor(index, key, text) { 7 | this.index = index; 8 | this.key = key; 9 | this.text = text; 10 | } 11 | 12 | static load(json) { 13 | const result = []; 14 | if (!isNullOrUndefined(json)) { 15 | json.forEach(obj => { 16 | result.push(new Citation(obj.index, obj.key, obj.text)); 17 | }) 18 | } 19 | return result; 20 | } 21 | 22 | static loadArray(csl, bibtex) { 23 | // Set Citation style (csl) 24 | if (!isNullOrUndefined(csl)) { 25 | Cite.CSL.register.addTemplate("defaultParameter", csl.toString()); 26 | } 27 | 28 | // Use citation-js to convert 29 | const bibtexNormalized = (bibtex || "").toString().replace(/^%.*\n?/gm, '').trim(); 30 | if (bibtexNormalized.length === 0) { 31 | return []; 32 | } 33 | const cite = new Cite(bibtexNormalized, {forceType: 'string/bibtex'}); 34 | return (cite.data || []).map((item, index) => { 35 | let itemData = new Cite(item); 36 | const key = item.id; 37 | const text = (csl ? 38 | itemData.get({ 39 | type: 'string', 40 | style: 'citation-defaultParameter' 41 | }) : 42 | item.get({type: 'string'}) 43 | ).trim().replace(/\. \./gm, "."); 44 | return new Citation(index, key, text); 45 | }); 46 | } 47 | 48 | json() { 49 | return { 50 | index: this.index, 51 | key: this.key, 52 | text: this.text 53 | }; 54 | } 55 | } 56 | 57 | export { 58 | Citation 59 | }; 60 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/gulp/model/citation/citationFiles.js: -------------------------------------------------------------------------------- 1 | import { isNullOrUndefined, resolveDefault } from "../util"; 2 | 3 | const defaultConfiguration = require("../default"); 4 | 5 | class CitationFiles { 6 | constructor(csl, bib, useDefaults = true) { 7 | const ref = { 8 | csl: csl, 9 | bib: bib 10 | }; 11 | 12 | const defaultConfig = this.constructor.defaultConfig || defaultConfiguration; 13 | const configuration = defaultConfig.citation; 14 | 15 | if (useDefaults) { 16 | if (isNullOrUndefined(csl)) { 17 | ref.csl = resolveDefault(configuration.csl, ref); 18 | } 19 | 20 | if (isNullOrUndefined(bib)) { 21 | ref.bib = resolveDefault(configuration.bib, ref); 22 | } 23 | } 24 | 25 | this.csl = ref.csl; 26 | this.bib = ref.bib; 27 | } 28 | 29 | static load(json, defaultConfig, useDefaults) { 30 | CitationFiles.defaultConfig = defaultConfig; 31 | if (isNullOrUndefined(json)) { 32 | return CitationFiles.empty(useDefaults); 33 | } else { 34 | return new CitationFiles( 35 | json.csl, 36 | json.bib, 37 | useDefaults 38 | ); 39 | } 40 | } 41 | 42 | static empty(useDefaults) { 43 | return new CitationFiles(null, null, useDefaults); 44 | } 45 | 46 | json() { 47 | return {csl: this.csl, bib: this.bib}; 48 | } 49 | } 50 | 51 | export { CitationFiles }; 52 | -------------------------------------------------------------------------------- /lib/gulp/model/configuration/configuration.d.ts: -------------------------------------------------------------------------------- 1 | import { CitationFiles } from '../citation/citationFiles'; 2 | import { Criteria } from '../criteria/criteria'; 3 | import { Details } from '../details/details'; 4 | import { Citation } from '../citation/citation'; 5 | 6 | export class Configuration { 7 | public title: string; 8 | public subtitle: string; 9 | public selectTitle: string; 10 | public tableTitle: string; 11 | public repository: string; 12 | public details: Details; 13 | public criteria: Array; 14 | public citation: Array; 15 | public citationFiles: CitationFiles; 16 | 17 | constructor(title?: string, 18 | subtitle?: string, 19 | selectTitle?: string, 20 | tableTitle?: string, 21 | repository?: string, 22 | details?: Details, 23 | criteria?: Array, 24 | citation?: CitationFiles, 25 | useDefaults?: boolean); 26 | 27 | public static load(json, defaultConfig?, useDefaults?): Configuration; 28 | 29 | public static empty(useDefaults?): Configuration; 30 | 31 | public json(): Object; 32 | 33 | public setCitation(csl: string, bibtex: string): Configuration; 34 | 35 | public hasCitation(key: string): boolean; 36 | 37 | public containsCriteria(name: string): boolean; 38 | 39 | public setCriteria(index: number, criteria: Criteria): Configuration; 40 | 41 | public getCriteria(name: string): Criteria; 42 | 43 | public combine(other: Configuration): Configuration; 44 | 45 | } 46 | -------------------------------------------------------------------------------- /lib/gulp/model/criteria/criteria.d.ts: -------------------------------------------------------------------------------- 1 | import { CriteriaValue } from './criteriaValue'; 2 | 3 | export class Criteria { 4 | public id: string; 5 | public type: CriteriaTypes; 6 | public name: string; 7 | public search: boolean; 8 | public table: boolean; 9 | public detail: boolean; 10 | public description: string; 11 | public placeholder: string; 12 | public order: string; 13 | public andSearch: boolean; 14 | public rangeSearch: boolean; 15 | public values: Map; 16 | public lock: Map; 17 | 18 | constructor(id: string, 19 | type: CriteriaTypes, 20 | name?: string, 21 | search?: boolean, 22 | table?: boolean, 23 | details?: boolean, 24 | description?: string, 25 | placeholder?: string, 26 | order?: string, 27 | andSearch?: boolean, 28 | rangeSearch?: boolean, 29 | values?: Map, 30 | lock?: Map, 31 | useDefaults?: boolean); 32 | 33 | public static copy(id: string, name: string, criteria: Criteria); 34 | 35 | public static empty(key, type, useDefaults?, defaultConfiguration?): Criteria; 36 | 37 | public static load(key, type, json, defaultConfig?, useDefaults?): Criteria; 38 | 39 | public static loadArray(json, defaultConfig?, useDefaults?): Array; 40 | 41 | public getValue(name: string): CriteriaValue; 42 | 43 | public combine(other: Criteria): Criteria; 44 | } 45 | 46 | export enum CriteriaTypes { 47 | NAME_URL = 'NAME_URL', 48 | LABEL = 'LABEL', 49 | TEXT = 'TEXT', 50 | MARKDOWN = 'MARKDOWN', 51 | RATING = 'RATING', 52 | REPOSITORY = 'REPOSITORY' 53 | } 54 | 55 | export const CriteriaTypeKeys: string[]; 56 | -------------------------------------------------------------------------------- /lib/gulp/model/criteria/criteriaValue.d.ts: -------------------------------------------------------------------------------- 1 | export class CriteriaValue { 2 | public criteriaName: string; 3 | public name: string; 4 | public description: string; 5 | public clazz: string; 6 | public color: string; 7 | public backgroundColor: string; 8 | public weight: number; 9 | public minAge: number; 10 | public maxAge: number; 11 | public minAgeUnit: string; 12 | public maxAgeUnit: string; 13 | 14 | constructor(criteriaName: string, 15 | name: string, 16 | description?: string, 17 | clazz?: string, 18 | color?: string, 19 | backgroundColor?: string, 20 | weight?: number, 21 | minAge?: number, 22 | maxAge?: number, 23 | minAgeUnit?: string, 24 | maxAgeUnit?: string); 25 | 26 | public static loadJson(criteriaName, name, json); 27 | 28 | public json(): string; 29 | 30 | public hasColor(): boolean; 31 | 32 | public combine(other: CriteriaValue): CriteriaValue; 33 | } 34 | -------------------------------------------------------------------------------- /lib/gulp/model/criteria/criteriaValue.js: -------------------------------------------------------------------------------- 1 | import { deleteUndefinedKeys, isNullOrUndefined } from "../util"; 2 | 3 | class CriteriaValue { 4 | constructor(criteriaName, name, description, clazz, color, backgroundColor, weight, minAge, maxAge, minAgeUnit, maxAgeUnit) { 5 | this.criteriaName = criteriaName; 6 | this.name = name; 7 | this.description = description; 8 | this.clazz = clazz; 9 | this.color = color; 10 | this.backgroundColor = backgroundColor; 11 | this.weight = weight; 12 | this.minAge = minAge; 13 | this.maxAge = maxAge; 14 | this.minAgeUnit = minAgeUnit; 15 | this.maxAgeUnit = maxAgeUnit; 16 | } 17 | 18 | static loadJson(criteriaName, name, json) { 19 | if (isNullOrUndefined(json)) { 20 | return new CriteriaValue(criteriaName, name); 21 | } 22 | return new CriteriaValue( 23 | criteriaName, 24 | name, 25 | json.description, 26 | json.class, 27 | json.color, 28 | json.backgroundColor, 29 | json.weight, 30 | json.minAge, 31 | json.maxAge, 32 | json.minAgeUnit, 33 | json.maxAgeUnit 34 | ); 35 | } 36 | 37 | json() { 38 | return deleteUndefinedKeys({ 39 | description: this.description, 40 | class: this.clazz, 41 | color: this.color, 42 | backgroundColor: this.backgroundColor, 43 | weight: this.weight, 44 | minAge: this.minAge, 45 | maxAge: this.maxAge, 46 | minAgeUnit: this.minAgeUnit, 47 | maxAgeUnit: this.maxAgeUnit 48 | }); 49 | } 50 | 51 | hasColor() { 52 | return !(isNullOrUndefined(this.color) && isNullOrUndefined(this.backgroundColor) && isNullOrUndefined(this.clazz)); 53 | } 54 | 55 | combine(other) { 56 | this.description = isNullOrUndefined(this.description) ? other.description : this.description; 57 | this.clazz = isNullOrUndefined(this.clazz) ? other.clazz : this.clazz; 58 | this.color = isNullOrUndefined(this.color) ? other.color : this.color; 59 | this.backgroundColor = isNullOrUndefined(this.backgroundColor) ? other.backgroundColor : this.backgroundColor; 60 | this.weight = isNullOrUndefined(this.weight) ? other.weight : this.weight; 61 | this.minAge = isNullOrUndefined(this.minAge) ? other.minAge : this.minAge; 62 | this.maxAge = isNullOrUndefined(this.maxAge) ? other.maxAge : this.maxAge; 63 | this.minAgeUnit = isNullOrUndefined(this.minAgeUnit) ? other.minAgeUnit : this.minAgeUnit; 64 | this.maxAgeUnit = isNullOrUndefined(this.maxAgeUnit) ? other.maxAgeUnit : this.maxAgeUnit; 65 | 66 | return this; 67 | } 68 | 69 | } 70 | 71 | export { CriteriaValue }; 72 | -------------------------------------------------------------------------------- /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