├── .docker.test.env ├── .flake8 ├── .github └── FUNDING.yml ├── .gitignore ├── .gitmodules ├── .nvmrc ├── CHANGELOG.md ├── LICENSE ├── README.md ├── babel.config.js ├── checks ├── config-js.sh └── ht-access.sh ├── config.example.js ├── doc ├── img │ ├── architecture_diagram.png │ └── headstart_architecture.png └── literature │ ├── README.txt │ └── vis-time-series-data.pdf ├── docker-compose-end2endtest.yml ├── docker-compose-phptest.yml ├── docker-compose.yml ├── eslintrc.config.ts ├── examples ├── cs_integrations │ └── cs_testpage.html ├── public │ ├── covis │ │ ├── css │ │ │ ├── main.css │ │ │ ├── map.css │ │ │ └── menu.css │ │ ├── data │ │ │ └── covis.json │ │ ├── img │ │ │ └── EU-flag_small-270x183.png │ │ ├── js │ │ │ ├── data-config.js │ │ │ └── menu.js │ │ └── services │ │ │ └── GSheetUpdateAvailable.php │ ├── main_integration │ │ ├── base_sg.html │ │ ├── css │ │ │ └── main.css │ │ ├── data-config-base.js │ │ ├── data-config-pubmed.js │ │ ├── data-config_base_sg.js │ │ ├── data-config_openaire.js │ │ ├── data │ │ │ ├── calcium.json │ │ │ ├── climate-change.json │ │ │ ├── cognitive-dissonance.json │ │ │ ├── covid.json │ │ │ ├── custom_clustering.json │ │ │ ├── custom_title.json │ │ │ ├── digital-education-lang.json │ │ │ ├── digital-education-lang[].json │ │ │ ├── digital-education-sg-2.json │ │ │ ├── digital-education-sg.json │ │ │ ├── digital-education.json │ │ │ ├── dotcom-sg.json │ │ │ ├── exclude_date_filters.json │ │ │ ├── fake-news-sg.json │ │ │ ├── openaire.json │ │ │ ├── openaire_organizations.json │ │ │ ├── philosophy_no_dates.json │ │ │ └── production.json │ │ ├── img │ │ │ ├── favicon-16x16.png │ │ │ └── favicon-32x32.png │ │ └── openaire.html │ ├── triple │ │ ├── data-config-km.js │ │ ├── data-config-sg.js │ │ └── data │ │ │ ├── psychology-km.json │ │ │ ├── psychology-sg.json │ │ │ └── soft_skills-km.json │ └── viper │ │ ├── css │ │ └── openaire.css │ │ ├── data-config_openaire.js │ │ ├── data │ │ └── blacarat.json │ │ └── img │ │ ├── okmaps-logo.png │ │ ├── openaire-logo.png │ │ └── viper-logo-color.png ├── search_repos │ ├── data-config_base.js │ ├── data-config_doaj.js │ ├── data-config_plos.js │ ├── data-config_pubmed.js │ ├── data-config_server.js │ ├── headstart.php │ ├── options.css │ ├── search.js │ ├── search_base.html │ ├── search_doaj.html │ ├── search_options.js │ ├── search_plos.html │ └── search_pubmed.html ├── templates │ ├── base.html │ ├── covis.html │ ├── pubmed.html │ ├── triple.html │ └── viper.html └── viper │ ├── about.php │ ├── building_map.php │ ├── config.php │ ├── css │ ├── openaire.css │ ├── options.css │ └── spinner.css │ ├── fonts │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── fontawesome-webfont.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff │ └── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff2 │ ├── footer.php │ ├── footer_vis.php │ ├── head_viper.php │ ├── img │ ├── created-by-okmaps.png │ ├── detail-openaire.png │ ├── detail-openaire2020.png │ ├── okmaps-logo.png │ ├── openaire-logo.png │ ├── overview-openaire.png │ ├── overview-openaire2020.png │ ├── viper-logo-color.png │ ├── viper-logo.png │ └── viper-project-screenshot.png │ ├── index.php │ ├── js │ ├── data-config_openaire.js │ ├── search.js │ ├── search_openaire_projects.js │ └── search_options.js │ ├── lib │ ├── bootstrap-multiselect.css │ ├── bootstrap-multiselect.js │ ├── bootstrap-multiselect.min.js │ ├── bootstrap.min.css │ ├── bootstrap.min.js │ ├── cookieconsent.min.css │ ├── cookieconsent.min.js │ ├── d3.min.js │ ├── font-awesome.min.css │ ├── jquery-2.2.4.min.js │ ├── jquery-ui.css │ ├── jquery-ui.min.css │ ├── jquery-ui.min.js │ ├── pagination.css │ └── pagination.min.js │ ├── project.php │ └── settings.htaccess ├── headstart.png ├── local-hotreload.sh ├── local_dev ├── config_local_headstart.ini ├── config_local_projectwebsite.php ├── config_local_searchflow.ini ├── dev.env ├── entrypoint.php ├── pg_hba.conf ├── postgresql.conf ├── proxy │ ├── docker-compose.yml │ └── templates │ │ └── default.conf.template ├── redis.conf └── searchflow-container │ ├── Dockerfile │ ├── README.md │ ├── local_dev.ini │ └── test.sqlite ├── package-lock.json ├── package.json ├── pyproject.toml ├── requirements-dev.txt ├── server ├── classes │ └── headstart │ │ ├── .phpunit.result.cache │ │ ├── README.md │ │ ├── autoload.inc.php │ │ ├── composer.json │ │ ├── composer.lock │ │ ├── evaluation │ │ └── logger │ │ │ ├── FileLogger.php │ │ │ └── Logger.php │ │ ├── library │ │ ├── APIClient.php │ │ ├── CommUtils.php │ │ ├── KLogger │ │ │ ├── README.markdown │ │ │ ├── example │ │ │ │ └── example.php │ │ │ └── src │ │ │ │ └── KLogger.php │ │ ├── Toolkit.php │ │ └── getContextResultBuilder.php │ │ ├── persistence │ │ ├── DispatchingPersistence.php │ │ ├── Persistence.php │ │ ├── PostgresPersistence.php │ │ ├── SQLitePersistence.php │ │ ├── ViperUpdater.php │ │ └── VisualizationContext.php │ │ ├── phpunit.xml │ │ ├── phpunit.xml.bak │ │ ├── preprocessing │ │ ├── Snapshot.php │ │ └── calculation │ │ │ ├── Calculation.php │ │ │ └── RCalculation.php │ │ └── tests │ │ ├── DispatchingPersistenceTest.php │ │ ├── PostgresPersistenceTest.php │ │ ├── dbConnectionTest.php │ │ └── test_data │ │ ├── digital-education.json │ │ ├── successfulGetContextResponse.json │ │ ├── unsuccessfulGetContextDBHostCannotBeResolved.json │ │ └── unsuccessfulgetContextResponseVisIdNotInDB.json ├── paper_preview │ ├── 10.1371__journal.pone.0013324.PDF │ └── 8c5a5c946a9b12159c684a1386ef3d2806ff39431611286d06b442481382df50.PDF ├── preprocessing │ ├── conf │ │ └── config.ini │ ├── other-scripts │ │ ├── base.R │ │ ├── cluster.R │ │ ├── features.R │ │ ├── metrics.R │ │ ├── openaire.R │ │ ├── postprocess.R │ │ ├── preprocess.R │ │ ├── pubmed.R │ │ ├── run_base.R │ │ ├── run_base_contentproviders.R │ │ ├── run_metrics.R │ │ ├── run_openaire.R │ │ ├── run_openaire_projectdata.R │ │ ├── run_pubmed.R │ │ ├── run_vis_layout.R │ │ ├── summarize.R │ │ ├── test │ │ │ ├── params.json │ │ │ ├── params_base.json │ │ │ ├── params_openaire.json │ │ │ ├── params_pubmed.json │ │ │ ├── queries.csv │ │ │ ├── test_base.R │ │ │ ├── test_openaire.R │ │ │ └── test_pubmed.R │ │ ├── text_similarity.R │ │ ├── utils.R │ │ └── vis_layout.R │ ├── output │ │ └── metadata.csv │ └── resources │ │ ├── additional_stopwords.txt │ │ └── stopwords_iso_cleaned.json ├── services │ ├── .phpunit.result.cache │ ├── displayPDF.php │ ├── exportMetadata.php │ ├── getChartSVG.js │ ├── getContext.php │ ├── getLastVersion.php │ ├── getLatestRevision.php │ ├── getOpenAireProjects.php │ ├── getOpenAireTotals.php │ ├── getPDF.php │ ├── helper.php │ ├── search.php │ ├── searchBASE.php │ ├── searchORCID.php │ ├── searchOpenAire.php │ ├── searchPubmed.php │ ├── snapshot │ │ ├── data-config_base.js │ │ ├── data-config_doaj.js │ │ ├── data-config_gsheets.js │ │ ├── data-config_linkedcat.js │ │ ├── data-config_openaire.js │ │ ├── data-config_orcid.js │ │ ├── data-config_plos.js │ │ ├── data-config_pubmed.js │ │ └── headstart_snapshot.php │ └── tests │ │ ├── GetPDFTest.php │ │ ├── README.md │ │ ├── configuration │ │ ├── .phpunit.result.cache │ │ └── phpunit.xml │ │ └── docker │ │ └── Dockerfile ├── static │ └── data │ │ ├── edu2.csv │ │ ├── edu3.csv │ │ ├── edu4.csv │ │ ├── edu5.csv │ │ └── educational-technology.csv ├── stats │ └── db_stats.php ├── storage │ ├── 1c9cbe403f7592d091b472735dfb2802.png │ ├── headstart.sqlite │ ├── headstart_test.sqlite │ └── test.sqlite └── workers │ ├── README.md │ ├── __init__.py │ ├── api │ ├── .dockerignore │ ├── Dockerfile │ ├── pyproject.toml │ ├── requirements-e.txt │ ├── requirements.txt │ ├── src │ │ ├── __init__.py │ │ ├── apis │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── create_vis.py │ │ │ ├── export.py │ │ │ ├── openaire.py │ │ │ ├── orcid.py │ │ │ ├── pubmed.py │ │ │ └── request_validators.py │ │ ├── app.py │ │ └── templates │ │ │ └── tables.html │ ├── test.sh │ └── tests │ │ ├── __init__.py │ │ ├── e2e │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── test_base.py │ │ ├── test_openaire.py │ │ ├── test_orcid.py │ │ └── test_pubmed.py │ │ ├── mock_app.py │ │ └── test_data │ │ └── digital-education.json │ ├── base │ ├── Dockerfile │ ├── __init__.py │ ├── activate.R │ ├── config.py │ ├── dependencies.R │ ├── example_base.env │ ├── pyproject.toml │ ├── renv.lock │ ├── requirements-e.txt │ ├── requirements.txt │ ├── run_base.py │ └── src │ │ ├── __init__.py │ │ ├── base.py │ │ └── parsers.py │ ├── build_docker_images.sh │ ├── common │ ├── common │ │ ├── __init__.py │ │ ├── contentproviders.json │ │ ├── decorators.py │ │ ├── deduplication.py │ │ ├── proxy.py │ │ ├── r_wrapper.py │ │ ├── rate_limiter.py │ │ └── utils.py │ ├── pyproject.toml │ └── setup.py │ ├── dataprocessing │ ├── .dockerignore │ ├── Dockerfile │ ├── __init__.py │ ├── activate.R │ ├── dependencies.R │ ├── example_dataprocessing.env │ ├── renv.lock │ ├── requirements-e.txt │ ├── requirements.txt │ ├── run_dataprocessing.py │ ├── src │ │ ├── __init__.py │ │ ├── headstart.py │ │ └── streamgraph.py │ └── test.json │ ├── example_pg_hba.conf │ ├── example_postgresql.conf │ ├── example_redis.conf │ ├── metrics │ ├── .dockerignore │ ├── Dockerfile │ ├── __init__.py │ ├── activate.R │ ├── dependencies.R │ ├── example_metrics.env │ ├── renv.lock │ ├── requirements-e.txt │ ├── requirements.txt │ ├── run_metrics.py │ └── src │ │ ├── __init__.py │ │ └── metrics.py │ ├── openaire │ ├── .dockerignore │ ├── Dockerfile │ ├── __init__.py │ ├── activate.R │ ├── dependencies.R │ ├── example_openaire.env │ ├── renv.lock │ ├── requirements-e.txt │ ├── requirements.txt │ ├── run_openaire.py │ └── src │ │ ├── __init__.py │ │ └── openaire.py │ ├── orcid │ ├── .dockerignore │ ├── Dockerfile │ ├── pyproject.toml │ ├── requirements-e.txt │ ├── requirements.txt │ ├── src │ │ ├── __init__.py │ │ ├── config.py │ │ ├── constants.py │ │ ├── main.py │ │ ├── model.py │ │ ├── orcid_service.py │ │ ├── repositories │ │ │ ├── __init__.py │ │ │ ├── author_info.py │ │ │ └── works.py │ │ └── worker.py │ └── tests │ │ ├── __init__.py │ │ └── unit │ │ ├── __init__.py │ │ ├── orcid_addresses.json │ │ ├── orcid_researcher_urls.json │ │ ├── orcid_work.json │ │ ├── personal_details.json │ │ └── test_transform.py │ ├── persistence │ ├── .dockerignore │ ├── Dockerfile │ ├── __init__.py │ ├── requirements-e.txt │ ├── requirements.txt │ └── src │ │ ├── app.py │ │ ├── database.py │ │ ├── manage.py │ │ ├── models.py │ │ └── persistence.py │ ├── pubmed │ ├── .dockerignore │ ├── Dockerfile │ ├── __init__.py │ ├── activate.R │ ├── dependencies.R │ ├── example_pubmed.env │ ├── renv.lock │ ├── requirements-e.txt │ ├── requirements.txt │ ├── run_pubmed.py │ └── src │ │ ├── __init__.py │ │ └── pubmed.py │ └── tests │ ├── Backend regression test cases.csv │ ├── Dockerfile.backend │ ├── Dockerfile.tests │ ├── README.md │ ├── __init__.py │ ├── conftest.py │ ├── generate_testcases.py │ ├── generate_testdata.py │ ├── knowncases │ ├── __init__.py │ ├── testcase0.json │ ├── testcase1.json │ ├── testcase10.json │ ├── testcase11.json │ ├── testcase12.json │ ├── testcase13.json │ ├── testcase14.json │ ├── testcase15.json │ ├── testcase16.json │ ├── testcase17.json │ ├── testcase18.json │ ├── testcase19.json │ ├── testcase2.json │ ├── testcase20.json │ ├── testcase21.json │ ├── testcase22.json │ ├── testcase23.json │ ├── testcase3.json │ ├── testcase4.json │ ├── testcase4b.json │ ├── testcase5.json │ ├── testcase6.json │ ├── testcase7.json │ ├── testcase8.json │ └── testcase9.json │ ├── mock_app.py │ ├── randomcases │ ├── testcase036011eb34c6c8ea10c3a8dbaf1d99cf.json │ ├── testcase05b3c090e731f0ddb388cc76257101f6.json │ ├── testcase0655f13dedaa2db168f55488bd2321a0.json │ ├── testcase08c4712985b0596b93642c53c583e4cc.json │ ├── testcase09a621fb9a5d2d8bdc07ddea50ed4b16.json │ ├── testcase0a19c733f64e042aaf4ce516e1da248d.json │ ├── testcase0a2e4da50492f7e4a22118c790733284.json │ ├── testcase0b76cab2176d3580ba72ad10ea5b7c68.json │ ├── testcase0c4324c98bdb260f38deb243daff7833.json │ ├── testcase0c787fbcf7ff02abe3c155c496c98ff5.json │ ├── testcase0d125a502c3973faf130582e13fdc72c.json │ ├── testcase0d38e57984714300746653ec47a22d3d.json │ ├── testcase0d98a7d2b0d2d839fd44adb9e86d391f.json │ ├── testcase0f4ebb3674b4522b35ed295ef84271e2.json │ ├── testcase10659c0cf2a58db210aa37b09b4a3e64.json │ ├── testcase11a84cb7e86e950f5bed69b31116fca9.json │ ├── testcase11c14034fb2099bc40e26200861af9e2.json │ ├── testcase1592c3635ec7a357b009b57f86e46097.json │ ├── testcase1662d5891a64d77b69506a854f034c2a.json │ ├── testcase1af2311f15388c90a733646bd2fa34d9.json │ ├── testcase1af4f0b4839eafd5fa91160e134de0be.json │ ├── testcase1ef5052d04bc974563a34c86b7f8f839.json │ ├── testcase1f9445d05c528576d349a8177c02d970.json │ ├── testcase233f86d68856fc173f99e2f18261ad6b.json │ ├── testcase240a06cb5525f204edb4255bda61db7b.json │ ├── testcase2f4c11452ce47fd12b170151d9d7e23b.json │ ├── testcase3003ae811493b650ab3731b19593d06f.json │ ├── testcase306a910c2757e2c6de66cef032f1a23f.json │ ├── testcase33c29660f71fe5229776dd9fd9d3360b.json │ ├── testcase37b6b0af91671854c7b98a6478820024.json │ ├── testcase3982424976c35232967f08a5b470d5c1.json │ ├── testcase40e783cf8b31f6f7e31653aacb539d88.json │ ├── testcase432b143207f4e3fdf0b7889069cc0923.json │ ├── testcase4371ee0f13b0fa5eb0743bc7a77a0ca8.json │ ├── testcase45521e705e53453cd094fddb2b7b8752.json │ ├── testcase458e44177caa70ecb461315d88f660ea.json │ ├── testcase471f6b7c1d84547834d08244277e9554.json │ ├── testcase49cf5b621add7fadd745401ff347f7d4.json │ ├── testcase4a38a6ee6d3e98d571c4d15b44fca1e5.json │ ├── testcase4b3a9d8119af63c7449dba243716ad4a.json │ ├── testcase55cebfd5c3e52d56d34f85853b07d83b.json │ ├── testcase561f7285cf38224445f4a588f674e0c7.json │ ├── testcase59d79e14f18e730e2525df6dbe0cfc0e.json │ ├── testcase5bcc8c281edb7252bf8ca25abbcf4fa8.json │ ├── testcase606283c3699120ccd0444a386b2c0c84.json │ ├── testcase636e1bec5f9b0280b2bd15611f45d9d4.json │ ├── testcase66512c15f0a2287ecb9daa6c2497e16f.json │ ├── testcase6a3c4ac4b377f9857e03cd62c818a8ca.json │ ├── testcase711415f1fafc975b4db4886e894b7026.json │ ├── testcase7327af5f9da174e0efd59ac0705cf4bf.json │ ├── testcase7500a44a746a987ee93e762ac8ec51f6.json │ ├── testcase773185538344e60a876a97e3a2509f17.json │ ├── testcase7a468ac173933792ad8e48b175ef2c21.json │ ├── testcase7ad02d4a62b5ef8dade7368d42384862.json │ ├── testcase7ddd3c59e97a017baf75fb24edfefeac.json │ ├── testcase7fc7c7e7ff2233f002387754d5030f5b.json │ ├── testcase81d45d7441a6c6cb137c41ced56b6762.json │ ├── testcase8bd44763044548a88ff75d21f99e91f4.json │ ├── testcase8bf4677ad5d0c8685f746dbd9f1bc1b2.json │ ├── testcase8e490ad40819de56b5c2f78acdeb7d74.json │ ├── testcase91fed9814d1377809d4a068ccbaeb16b.json │ ├── testcase96087dd409ece1b9f6441d1b07d7b3d7.json │ ├── testcase97c3bddaab3a467c3e27e7848ce783e2.json │ ├── testcase9dadb2e01b6de661eed709c21bbedc3b.json │ ├── testcase9e684695928430919a3ee3acfec1221e.json │ ├── testcase9ee85341acc38388125c932806852155.json │ ├── testcasea016fb874f1f699e8af05c58cbf8234e.json │ ├── testcasea1788e9675df76e6a5f8cbe78db6bfe4.json │ ├── testcaseaa35035f6c2e5ef19bbb7ce72b81bf7d.json │ ├── testcaseadd252de3584b839350ce34f686a235f.json │ ├── testcaseaef902bfead5487074562c600a5e62e4.json │ ├── testcaseb18ae3d55ff7e5451fb43e5f0599e306.json │ ├── testcasebc59841100d862ad4bb4ad94183e9d69.json │ ├── testcasec0add34dbc0a917831b5f43c82d7ea89.json │ ├── testcasec34b6d91349fb21ac91732509f95b294.json │ ├── testcasec47085e50ab0c6f50142543b35eea51f.json │ ├── testcasecdb16520c923af0621c38bb5b3fe485d.json │ ├── testcasece4b21bde7193137af67462911bc4361.json │ ├── testcased18572907abb46414f65e467064ba891.json │ ├── testcased207ffb0c562e6d0bdae2d2ebb924c44.json │ ├── testcased23d40dc128517e7616aa50d78dd44fc.json │ ├── testcased701eef36f875727c31e319438f9cac5.json │ ├── testcased73f683f456a042c45dd964ac7330b5b.json │ ├── testcased8939fbd7b86d5a27bdc22fe525b01ab.json │ ├── testcasedd115e59720fb0913cc1ea8c44a92c3b.json │ ├── testcasedf9626c90c3002ae0afe45c37e2eb652.json │ ├── testcasedfc980e963783f850f61ee02f9a82595.json │ ├── testcasee35aa948f46302620024b9e0c5299b88.json │ ├── testcasee567b064fafc40df2a1957df98da6660.json │ ├── testcaseea56a78d1219328a7d407481e4908d74.json │ ├── testcaseeb8bb50adfa02a4af8560e6ad7d294b7.json │ ├── testcasef20f9a48a7f4104f8a316e091792ed17.json │ ├── testcasef213e501cb022e9640a6f506f1af7113.json │ ├── testcasef42d38540581512b4df9c43b735e30fd.json │ ├── testcasef4763cd7c28add68be2434d9f017b4b3.json │ ├── testcasef6f270f3550727cb12ace803832002c9.json │ ├── testcasef6fc9fd1555f61942e7ea7057aec10cc.json │ ├── testcasefbff46952c02091b0e1a5b2c4de4346a.json │ ├── testcasefee4be67f38d1bb17d06eca9b34e103f.json │ └── testcaseff4d24f03bcda0dba610ecbe415733f7.json │ ├── test_clean_subject.py │ ├── test_clustering.py │ ├── test_data │ ├── digital-education.json │ ├── pg_hba_test.conf │ ├── postgresql_test.conf │ └── test.sqlite │ ├── test_end2end.py │ ├── test_helpers.py │ ├── test_metadata_schema.py │ ├── test_orcid.py │ ├── test_persistence.py │ ├── test_search.py │ └── test_summarization.py ├── test.py ├── tsconfig.json ├── vis ├── app.ts ├── csl │ ├── acm.csl │ ├── apa.csl │ ├── chicago.csl │ └── mla.csl ├── fonts │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff2 │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.eot │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.svg │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.ttf │ ├── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff │ └── open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff2 ├── global.d.ts ├── images │ ├── author_default.png │ ├── download.png │ ├── download2.png │ ├── logos │ │ ├── base_logo.png │ │ ├── pubmed_logo.png │ │ └── triple_logo.png │ ├── okmaps-logo-round.png │ ├── okmaps-logo-round.svg │ ├── okmaps-logo-web-whitebg.png │ ├── open-access-logo.png │ ├── open-access-logo2.png │ ├── preview_pdf.png │ ├── preview_pdf_alt.png │ ├── thumbnail-concept-graph.png │ └── viper-project-screenshot.png ├── index.ts ├── js │ ├── @types │ │ ├── author.ts │ │ ├── config.ts │ │ ├── context.ts │ │ ├── paper.ts │ │ ├── service.ts │ │ └── visualization-types.ts │ ├── HeadstartRunner.tsx │ ├── actions │ │ ├── README.md │ │ └── index.ts │ ├── components │ │ ├── Backlink.tsx │ │ ├── ContextLine.tsx │ │ ├── Employment.tsx │ │ ├── EntriesWrapper.tsx │ │ ├── FilterSort.tsx │ │ ├── Footer.tsx │ │ ├── Heading.tsx │ │ ├── Headstart.tsx │ │ ├── Highlight.tsx │ │ ├── Hyphenate.tsx │ │ ├── KnowledgeMap.tsx │ │ ├── List.tsx │ │ ├── ListEntries.tsx │ │ ├── LocalizationProvider.tsx │ │ ├── ModalButtons.tsx │ │ ├── Modals.tsx │ │ ├── README.md │ │ ├── Streamgraph.tsx │ │ ├── TitleContext.tsx │ │ ├── Toolbar.tsx │ │ └── filtersort │ │ │ ├── FilterDropdown.ts │ │ │ ├── SearchBox.ts │ │ │ └── SortDropdown.ts │ ├── dataprocessing │ │ ├── fetchers │ │ │ ├── Fetcher.js │ │ │ ├── FetcherFactory.js │ │ │ ├── LocalFetcher.js │ │ │ └── ServerFetcher.js │ │ ├── managers │ │ │ └── DataManager.ts │ │ └── schemes │ │ │ └── defaultScheme.ts │ ├── default-config.ts │ ├── i18n │ │ └── localization.ts │ ├── lang │ │ └── lang_options.js │ ├── middleware │ │ ├── actionQueue.ts │ │ ├── chartType.ts │ │ ├── index.ts │ │ ├── pageTitle.ts │ │ ├── queryParameter.ts │ │ ├── recordAction.ts │ │ ├── repeatedInitialize.ts │ │ ├── rescale.ts │ │ └── scroll.ts │ ├── reducers │ │ ├── README.md │ │ ├── animation.ts │ │ ├── areas.ts │ │ ├── author.ts │ │ ├── bubbleOrder.ts │ │ ├── chart.ts │ │ ├── chartType.ts │ │ ├── contextLine.ts │ │ ├── data.ts │ │ ├── heading.ts │ │ ├── highlightedBubble.ts │ │ ├── hyphenationLang.ts │ │ ├── index.ts │ │ ├── isCovis.ts │ │ ├── list.ts │ │ ├── localization.ts │ │ ├── misc.ts │ │ ├── modalInfoType.ts │ │ ├── modals.ts │ │ ├── paper.ts │ │ ├── paperOrder.ts │ │ ├── q_advanced.ts │ │ ├── query.ts │ │ ├── selectedBubble.ts │ │ ├── selectedPaper.ts │ │ ├── service.ts │ │ ├── streamgraph.ts │ │ ├── timespan.ts │ │ ├── toolbar.ts │ │ ├── tracking.ts │ │ └── zoom.ts │ ├── templates │ │ ├── AuthorImage.tsx │ │ ├── Backlink.tsx │ │ ├── Bubble.tsx │ │ ├── BubbleTitle.tsx │ │ ├── Chart.tsx │ │ ├── ContextLine.tsx │ │ ├── CopyButton.tsx │ │ ├── HoverPopover.tsx │ │ ├── ListToggle.tsx │ │ ├── Loading.tsx │ │ ├── Paper.tsx │ │ ├── README.md │ │ ├── ScaleToolbar.tsx │ │ ├── StreamgraphChart.tsx │ │ ├── SubdisciplineTitle.tsx │ │ ├── buttons │ │ │ ├── CitationButton.tsx │ │ │ ├── EditButton.tsx │ │ │ ├── EmailButton.tsx │ │ │ ├── EmbedButton.tsx │ │ │ ├── FAQsButton.tsx │ │ │ ├── ReloadButton.tsx │ │ │ ├── ShareButton.tsx │ │ │ └── TwitterButton.tsx │ │ ├── contextfeatures │ │ │ ├── Author.tsx │ │ │ ├── ContextTimeFrame.tsx │ │ │ ├── DataSource.tsx │ │ │ ├── DatasetCount.tsx │ │ │ ├── DocumentLang.tsx │ │ │ ├── DocumentTypes.tsx │ │ │ ├── Funder.tsx │ │ │ ├── LegacySearchLang.tsx │ │ │ ├── MetadataQuality.tsx │ │ │ ├── Modifier.tsx │ │ │ ├── MoreInfoLink.tsx │ │ │ ├── NumArticles.tsx │ │ │ ├── PaperCount.tsx │ │ │ ├── ProjectRuntime.tsx │ │ │ ├── ResearcherInfo.tsx │ │ │ ├── ResearcherMetricsInfo.tsx │ │ │ ├── SearchLang.tsx │ │ │ ├── Timespan.tsx │ │ │ └── Timestamp.tsx │ │ ├── filtersort │ │ │ ├── BasicFilterSort.tsx │ │ │ ├── FilterDropdown.tsx │ │ │ ├── SearchBox.tsx │ │ │ ├── SortDropdown.tsx │ │ │ └── StandardFilterSort.tsx │ │ ├── footers │ │ │ └── CreatedBy.tsx │ │ ├── headingtitles │ │ │ ├── BasicTitle.tsx │ │ │ ├── CustomTitle.tsx │ │ │ ├── ProjectTitle.tsx │ │ │ ├── StandardTitle.tsx │ │ │ └── index.ts │ │ ├── listentry │ │ │ ├── Abstract.tsx │ │ │ ├── AccessIcons.tsx │ │ │ ├── Area.tsx │ │ │ ├── Citations.tsx │ │ │ ├── Comments.tsx │ │ │ ├── Details.tsx │ │ │ ├── DocTypesRow.tsx │ │ │ ├── DocumentType.tsx │ │ │ ├── EntryBacklink.tsx │ │ │ ├── Keywords.tsx │ │ │ ├── Link.tsx │ │ │ ├── Metrics.tsx │ │ │ ├── OrcidMetrics.tsx │ │ │ ├── PaperButtons.tsx │ │ │ ├── StandardListEntry.tsx │ │ │ ├── Tags.tsx │ │ │ └── Title.tsx │ │ ├── modals │ │ │ ├── CitationModal.tsx │ │ │ ├── CitePaperModal.tsx │ │ │ ├── EmbedModal.tsx │ │ │ ├── ExportPaperModal.tsx │ │ │ ├── InfoModal.tsx │ │ │ ├── PdfModal.tsx │ │ │ ├── ResearcherInfoModal.tsx │ │ │ ├── ResearcherMetricsInfoModal.tsx │ │ │ ├── ViperEditModal.tsx │ │ │ ├── exportmodal │ │ │ │ ├── Content.tsx │ │ │ │ ├── Error.tsx │ │ │ │ └── Loading.tsx │ │ │ ├── infomodal │ │ │ │ ├── BaseInfo.tsx │ │ │ │ ├── CovisInfo.tsx │ │ │ │ ├── DefaultKMInfo.tsx │ │ │ │ ├── DefaultSGInfo.tsx │ │ │ │ ├── GsheetsInfo.tsx │ │ │ │ ├── OpenAireInfo.tsx │ │ │ │ ├── OrcidInfo.tsx │ │ │ │ ├── PubMedInfo.tsx │ │ │ │ ├── TripleKMInfo.tsx │ │ │ │ ├── TripleSGInfo.tsx │ │ │ │ ├── ViperInfo.tsx │ │ │ │ └── subcomponents │ │ │ │ │ ├── AboutSoftware.tsx │ │ │ │ │ ├── DataSource.tsx │ │ │ │ │ ├── StandardKMInfo.tsx │ │ │ │ │ └── StandardSGInfo.tsx │ │ │ └── researcher-modal │ │ │ │ ├── OrcidResearcherInfo.tsx │ │ │ │ └── OrcidResearcherMetricsInfo.tsx │ │ └── paper │ │ │ └── Icons.tsx │ └── utils │ │ ├── PaperSanitizer.ts │ │ ├── actionLogger.ts │ │ ├── backButton.ts │ │ ├── data.ts │ │ ├── dates.ts │ │ ├── debounce.ts │ │ ├── dimensions.ts │ │ ├── eventhandlers.ts │ │ ├── force.ts │ │ ├── scale.ts │ │ ├── selectText.ts │ │ ├── streamgraph.ts │ │ ├── string.ts │ │ ├── title.ts │ │ ├── transition.ts │ │ ├── unescapeHTMLentities.ts │ │ ├── url.ts │ │ ├── useCitationStyle.ts │ │ ├── useGsheetsUpdate.ts │ │ ├── useMatomo.ts │ │ ├── useOutsideClick.ts │ │ ├── usePaperExport.ts │ │ └── usePdfLookup.ts ├── lib │ ├── de.js │ ├── en.js │ └── jquery-ui.min.js ├── stylesheets │ ├── base │ │ ├── _colors.scss │ │ ├── _default_settings.scss │ │ ├── _reset.scss │ │ └── _typography.scss │ ├── components │ │ ├── _animations.scss │ │ ├── _buttons.scss │ │ ├── _filters.scss │ │ └── _input.scss │ ├── layout │ │ ├── _forms.scss │ │ └── _grid.scss │ ├── main.scss │ ├── modules │ │ ├── _footer.scss │ │ ├── _list.scss │ │ ├── _map.scss │ │ ├── _modal.scss │ │ ├── _multiples.scss │ │ ├── _streamgraph.scss │ │ ├── list │ │ │ ├── _entry.scss │ │ │ ├── _header.scss │ │ │ └── _list-show-button.scss │ │ └── map │ │ │ ├── _bubbles.scss │ │ │ ├── _header.scss │ │ │ └── _papers.scss │ ├── utils │ │ └── _mixins.scss │ └── vendors │ │ ├── _bootstrap.scss │ │ └── fontawesome │ │ ├── css │ │ └── all.min.css │ │ └── webfonts │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.svg │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.svg │ │ ├── fa-regular-400.ttf │ │ ├── fa-regular-400.woff │ │ ├── fa-regular-400.woff2 │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.svg │ │ ├── fa-solid-900.ttf │ │ ├── fa-solid-900.woff │ │ └── fa-solid-900.woff2 └── test │ ├── README.md │ ├── component │ ├── README.md │ ├── authorimage.test.jsx │ ├── backlink.test.jsx │ ├── contextline.test.jsx │ ├── footer.test.jsx │ ├── heading.test.jsx │ ├── highlight.test.jsx │ ├── knowledgemap-base.test.jsx │ ├── knowledgemap.test.jsx │ ├── list-base.test.jsx │ ├── list.test.jsx │ ├── listfilter.test.jsx │ ├── listtoggle.test.jsx │ └── modals.test.jsx │ ├── cslMock.js │ ├── data │ ├── README.md │ ├── base-raw.js │ ├── base.js │ ├── covis.js │ ├── local-files.js │ ├── pubmed.js │ ├── simple.js │ └── viper.js │ ├── datamanagers │ └── datamanager.test.js │ ├── fileMock.js │ ├── setupTests.js │ ├── snapshot │ ├── README.md │ ├── __snapshots__ │ │ ├── backlink.test.jsx.snap │ │ ├── contextline.test.jsx.snap │ │ ├── list-base.test.jsx.snap │ │ ├── listfilter.test.jsx.snap │ │ └── listtoggle.test.jsx.snap │ ├── authorimage.test.jsx │ ├── backlink.test.jsx │ ├── contextline.test.jsx │ ├── list-base.test.jsx │ ├── listfilter.test.jsx │ └── listtoggle.test.jsx │ ├── store │ ├── README.md │ ├── animation.test.js │ ├── areas.test.js │ ├── bubbleOrder.test.js │ ├── chart.test.js │ ├── chartType.test.js │ ├── data.test.js │ ├── highlightedBubble.test.js │ ├── hyphenationLang.test.js │ ├── initialize.test.js │ ├── list.test.js │ ├── modals.test.js │ ├── paperOrder.test.js │ ├── selectedPaper.test.js │ └── zoom.test.js │ └── utils │ ├── data.test.js │ ├── dates.test.js │ ├── paper.test.js │ ├── papersanitizer.test.js │ ├── streamgraph.test.js │ └── url.test.ts ├── vite.config.ts └── webpack.config.js /.docker.test.env: -------------------------------------------------------------------------------- 1 | # APP 2 | FLASK_ENV=development 3 | BEHIND_PROXY=False 4 | SERVICE_VERSION=7d60186f594d420f82901f0514eb3c7e6b6e62d5 5 | LOGLEVEL=DEBUG 6 | LOGFILE="/var/log/headstart/headstart.log" 7 | 8 | # DB 9 | POSTGRES_USER=testuser 10 | POSTGRES_PASSWORD=postgres 11 | POSTGRES_HOST=db_server 12 | POSTGRES_PORT=5434 13 | POSTGRES_DATABASE=testdb 14 | 15 | # REDIS 16 | REDIS_HOST=redis-1 17 | REDIS_PORT=6355 18 | REDIS_PASSWORD=testredispassword 19 | REDIS_DB=0 20 | 21 | # R 22 | R_BASE_APIKEY=5812aa4367eb1dc3d366d99fdaaef0e3 23 | 24 | # ORCID 25 | ORCID_CLIENT_ID="APP-DL8ZAR72EZWW15NX" 26 | ORCID_CLIENT_SECRET="a3389b1a-19c0-4f78-857a-4aba19f5fa46" -------------------------------------------------------------------------------- /.flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | max-line-length = 100 3 | # required for compatibility with Black: 4 | extend-ignore = E203 5 | exclude = .venv -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: ['https://openknowledgemaps.org/donate-now'] 13 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "server/services/pdf.js-hypothes.is"] 2 | path = server/services/pdf.js-hypothes.is 3 | url = https://github.com/hypothesis/pdf.js-hypothes.is.git 4 | [submodule "examples/covis"] 5 | path = examples/covis 6 | url = https://github.com/OpenKnowledgeMaps/CoVis 7 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v14.21.3 -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | "@babel/preset-react", 4 | [ 5 | "@babel/preset-env", 6 | { 7 | targets: { node: "current" }, 8 | modules: "commonjs", 9 | }, 10 | ], 11 | ], 12 | plugins: [ 13 | [ 14 | "@babel/plugin-transform-runtime", 15 | { 16 | regenerator: true, 17 | }, 18 | ], 19 | ], 20 | }; 21 | -------------------------------------------------------------------------------- /checks/config-js.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Checks that config.js file exists in the root of the project 4 | CONFIG_FILE="$(dirname "$0")/config.js" 5 | if [ ! -f "$CONFIG_FILE" ]; then 6 | echo "\033[1;33m Warning: config.js not found in the project root! See the config.example.js file.\033[0m" 7 | fi -------------------------------------------------------------------------------- /checks/ht-access.sh: -------------------------------------------------------------------------------- 1 | # !/bin/bash 2 | # Checks that .htaccess file exists in the project-website folder and creates one if if it is not 3 | 4 | cd .. || exit 5 | cd project-website || exit 6 | 7 | if [ ! -f .htaccess ]; then 8 | echo "\033[1;33m Warning: .htaccess not found in the project-website folder. It will be created automatically." 9 | cp settings.htaccess .htaccess 10 | echo ".htaccess file created." 11 | fi 12 | 13 | cd .. || exit 14 | cd Headstart || exit -------------------------------------------------------------------------------- /config.example.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | publicPath : "http://localhost:8080/dist/" 4 | , skin : "" 5 | }; 6 | -------------------------------------------------------------------------------- /doc/img/architecture_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/doc/img/architecture_diagram.png -------------------------------------------------------------------------------- /doc/img/headstart_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/doc/img/headstart_architecture.png -------------------------------------------------------------------------------- /doc/literature/README.txt: -------------------------------------------------------------------------------- 1 | "Entwicklung einer Visualisierung für Time Series Data" by Philipp Weißensteiner, 2 | is licensed under a Creative Commons Attribution 4.0 International 3 | License. 4 | -------------------------------------------------------------------------------- /doc/literature/vis-time-series-data.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/doc/literature/vis-time-series-data.pdf -------------------------------------------------------------------------------- /examples/public/covis/img/EU-flag_small-270x183.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/public/covis/img/EU-flag_small-270x183.png -------------------------------------------------------------------------------- /examples/public/covis/services/GSheetUpdateAvailable.php: -------------------------------------------------------------------------------- 1 | {"update_available":false} -------------------------------------------------------------------------------- /examples/public/main_integration/img/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/public/main_integration/img/favicon-16x16.png -------------------------------------------------------------------------------- /examples/public/main_integration/img/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/public/main_integration/img/favicon-32x32.png -------------------------------------------------------------------------------- /examples/public/viper/img/okmaps-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/public/viper/img/okmaps-logo.png -------------------------------------------------------------------------------- /examples/public/viper/img/openaire-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/public/viper/img/openaire-logo.png -------------------------------------------------------------------------------- /examples/public/viper/img/viper-logo-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/public/viper/img/viper-logo-color.png -------------------------------------------------------------------------------- /examples/search_repos/data-config_doaj.js: -------------------------------------------------------------------------------- 1 | var data_config = { 2 | tag: "visualization", 3 | mode: "search_repos", 4 | 5 | service: "doaj", 6 | 7 | title: "", 8 | base_unit: "citations", 9 | use_area_uri: true, 10 | preview_type: "pdf", 11 | sort_options: ["readers", "title", "authors", "year"], 12 | is_force_areas: true, 13 | language: "eng_pubmed", 14 | area_force_alpha: 0.015, 15 | show_list: true, 16 | content_based: true, 17 | url_prefix: "https://doaj.org/article/", 18 | 19 | show_context: true, 20 | create_title_from_context: true 21 | }; 22 | -------------------------------------------------------------------------------- /examples/search_repos/data-config_plos.js: -------------------------------------------------------------------------------- 1 | var data_config = { 2 | tag: "visualization", 3 | mode: "search_repos", 4 | 5 | service: "plos", 6 | 7 | title: "", 8 | base_unit: "views", 9 | use_area_uri: true, 10 | preview_type: "pdf", 11 | sort_options: ["readers", "title", "authors", "year"], 12 | is_force_areas: true, 13 | language: "eng_plos", 14 | area_force_alpha: 0.015, 15 | show_list: true, 16 | content_based: false, 17 | 18 | show_context: true, 19 | create_title_from_context: true 20 | }; 21 | -------------------------------------------------------------------------------- /examples/search_repos/data-config_server.js: -------------------------------------------------------------------------------- 1 | data_config.server_url = window.location.href.replace(/[^/]*$/, '') + "../../server/"; -------------------------------------------------------------------------------- /examples/viper/config.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/viper/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /examples/viper/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /examples/viper/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /examples/viper/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff2 -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.eot -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.ttf -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff -------------------------------------------------------------------------------- /examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff2 -------------------------------------------------------------------------------- /examples/viper/img/created-by-okmaps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/img/created-by-okmaps.png -------------------------------------------------------------------------------- /examples/viper/img/detail-openaire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/img/detail-openaire.png -------------------------------------------------------------------------------- /examples/viper/img/detail-openaire2020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/img/detail-openaire2020.png -------------------------------------------------------------------------------- /examples/viper/img/okmaps-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/img/okmaps-logo.png -------------------------------------------------------------------------------- /examples/viper/img/openaire-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/img/openaire-logo.png -------------------------------------------------------------------------------- /examples/viper/img/overview-openaire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/img/overview-openaire.png -------------------------------------------------------------------------------- /examples/viper/img/overview-openaire2020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/img/overview-openaire2020.png -------------------------------------------------------------------------------- /examples/viper/img/viper-logo-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/img/viper-logo-color.png -------------------------------------------------------------------------------- /examples/viper/img/viper-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/img/viper-logo.png -------------------------------------------------------------------------------- /examples/viper/img/viper-project-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/examples/viper/img/viper-project-screenshot.png -------------------------------------------------------------------------------- /examples/viper/settings.htaccess: -------------------------------------------------------------------------------- 1 | Options +FollowSymLinks 2 | RewriteEngine On 3 | 4 | RewriteCond %{SCRIPT_FILENAME} !-d 5 | RewriteRule ^([^.]+)$ $1.php [NC,L] -------------------------------------------------------------------------------- /headstart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/headstart.png -------------------------------------------------------------------------------- /local-hotreload.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | chmod a+x checks/config-js.sh 4 | source ./checks/config-js.sh 5 | 6 | chmod a+x checks/ht-access.sh 7 | source ./checks/ht-access.sh 8 | 9 | npm run prod -- --mode=development 10 | docker compose --env-file ./local_dev/dev.env stop 11 | docker compose --env-file ./local_dev/dev.env up -d --build 12 | cd ./local_dev/proxy 13 | docker compose down 14 | docker compose up -d 15 | docker exec -it dev-persistence-1 python manage.py -------------------------------------------------------------------------------- /local_dev/config_local_projectwebsite.php: -------------------------------------------------------------------------------- 1 | 23 | -------------------------------------------------------------------------------- /local_dev/config_local_searchflow.ini: -------------------------------------------------------------------------------- 1 | [general] 2 | ; Full path to the search-flow 3 | searchflow_path = "//localhost:8085/search-flow/" 4 | ; Full path to the headstart distribution 5 | ; in a server environment: headstart_path = "//subdomain.domain.tld/pathto/headstart/" 6 | headstart_path = "//localhost:8085/headstart/" 7 | ; Enable or disable debug output 8 | debug = false 9 | ; Enable/disable GET requests 10 | enable_get_requests = true 11 | ; Enable correct docker-internal curl requests 12 | ; clean up if solvable by docker host aliases 13 | docker_internal = true 14 | headstart_path_docker_internal = "//dev-searchflow-1/headstart/" -------------------------------------------------------------------------------- /local_dev/dev.env: -------------------------------------------------------------------------------- 1 | COMPOSE_PROJECT_NAME=dev 2 | SERVICE_VERSION=7d60186f594d420f82901f0514eb3c7e6b6e62d5 3 | POSTGRES_DB=postgres 4 | POSTGRES_USER=headstart 5 | POSTGRES_PASSWORD=testpgpassword 6 | POSTGRES_HOSTS=dev-db-1 7 | POSTGRES_PORTS=5432 8 | POSTGRES_HOSTNAME=dev-db-1 9 | API_PORT=5001 10 | REDIS_HOST=dev-redis-1 11 | REDIS_PORT=6379 12 | REDIS_DB=0 13 | REDIS_PASSWORD=testredispassword 14 | LOGLEVEL=DEBUG 15 | LOGFILE="/var/log/headstart/headstart.log" 16 | 17 | BEHIND_PROXY=True 18 | DEFAULT_DATABASE=dev 19 | FLASK_ENV=development 20 | COMPOSE_HTTP_TIMEOUT=300 21 | 22 | R_BASE_APIKEY=5812aa4367eb1dc3d366d99fdaaef0e3 23 | ORCID_CLIENT_ID="APP-DL8ZAR72EZWW15NX" 24 | ORCID_CLIENT_SECRET="a3389b1a-19c0-4f78-857a-4aba19f5fa46" -------------------------------------------------------------------------------- /local_dev/proxy/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | 3 | proxy: 4 | image: 'nginx' 5 | volumes: 6 | - ./templates:/etc/nginx/templates 7 | environment: 8 | - NGINX_PORT=80 9 | ports: 10 | - '127.0.0.1:8081:80' 11 | networks: 12 | - dev_headstart 13 | 14 | networks: 15 | dev_headstart: 16 | external: true 17 | name: dev_headstart -------------------------------------------------------------------------------- /local_dev/proxy/templates/default.conf.template: -------------------------------------------------------------------------------- 1 | server { 2 | listen ${NGINX_PORT}; 3 | 4 | proxy_read_timeout 600; 5 | proxy_connect_timeout 600; 6 | proxy_send_timeout 600; 7 | send_timeout 600; 8 | 9 | client_max_body_size 100M; 10 | 11 | location /dev/ { 12 | 13 | proxy_pass http://dev-api-1:5001/api/; 14 | 15 | location /dev/persistence/ { 16 | proxy_pass http://dev-persistence-1:5001/api/persistence/; 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /local_dev/searchflow-container/local_dev.ini: -------------------------------------------------------------------------------- 1 | log_errors = On 2 | -------------------------------------------------------------------------------- /local_dev/searchflow-container/test.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/local_dev/searchflow-container/test.sqlite -------------------------------------------------------------------------------- /requirements-dev.txt: -------------------------------------------------------------------------------- 1 | black==22.3.0 2 | flake8==4.0.1 3 | isort==5.10.1 4 | pyright==1.1.239 5 | pytest==7.0.1 6 | pytest-cov==3.0.0 # Coverage extension -------------------------------------------------------------------------------- /server/classes/headstart/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require-dev": { 3 | "phpunit/phpunit": "10.3.0" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /server/classes/headstart/evaluation/logger/Logger.php: -------------------------------------------------------------------------------- 1 | array('b' => 'c'), 'd'); 8 | $args2 = NULL; 9 | 10 | $log->logInfo('Info Test'); 11 | $log->logNotice('Notice Test'); 12 | $log->logWarn('Warn Test'); 13 | $log->logError('Error Test'); 14 | $log->logFatal('Fatal Test'); 15 | $log->logAlert('Alert Test'); 16 | $log->logCrit('Crit test'); 17 | $log->logEmerg('Emerg Test'); 18 | 19 | $log->logInfo('Testing passing an array or object', $args1); 20 | $log->logWarn('Testing passing a NULL value', $args2); 21 | -------------------------------------------------------------------------------- /server/classes/headstart/persistence/VisualizationContext.php: -------------------------------------------------------------------------------- 1 | data = $data; 16 | $this->httpcode = $httpcode; 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /server/classes/headstart/preprocessing/calculation/Calculation.php: -------------------------------------------------------------------------------- 1 | ini_array = $ini_array; 17 | 18 | } 19 | 20 | public function performCalculation() { 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /server/classes/headstart/tests/test_data/successfulGetContextResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "rev_timestamp": "Thu, 12 Sep 2024 10:23:47 GMT", 3 | "rev_vis": "d161dba364a1e8c0468b9c74407e3575", 4 | "vis_params": "{\"id\": \"d161dba364a1e8c0468b9c74407e3575\", \"query\": \"\\\\\\\"climate change\\\\\\\" and impact\", \"service\": \"base\", \"timestamp\": \"Wed, 24 Aug 2022 14:24:13 GMT\", \"params\": \"{\\\"from\\\":\\\"1665-01-01\\\",\\\"to\\\":\\\"2022-08-24\\\",\\\"document_types\\\":[\\\"121\\\"],\\\"sorting\\\":\\\"most-relevant\\\",\\\"min_descsize\\\":\\\"300\\\"}\"}", 5 | "vis_query": "\\\"climate change\\\" and impact", 6 | "vis_title": "base" 7 | } -------------------------------------------------------------------------------- /server/classes/headstart/tests/test_data/unsuccessfulGetContextDBHostCannotBeResolved.json: -------------------------------------------------------------------------------- 1 | { 2 | "reason": [ 3 | "database connection error" 4 | ], 5 | "success": false 6 | } -------------------------------------------------------------------------------- /server/classes/headstart/tests/test_data/unsuccessfulgetContextResponseVisIdNotInDB.json: -------------------------------------------------------------------------------- 1 | [ 2 | false 3 | ] -------------------------------------------------------------------------------- /server/paper_preview/10.1371__journal.pone.0013324.PDF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/paper_preview/10.1371__journal.pone.0013324.PDF -------------------------------------------------------------------------------- /server/paper_preview/8c5a5c946a9b12159c684a1386ef3d2806ff39431611286d06b442481382df50.PDF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/paper_preview/8c5a5c946a9b12159c684a1386ef3d2806ff39431611286d06b442481382df50.PDF -------------------------------------------------------------------------------- /server/preprocessing/other-scripts/test/params_base.json: -------------------------------------------------------------------------------- 1 | { 2 | "document_types":["121"], 3 | "from":"1665-01-01", 4 | "to":"2023-12-07", 5 | "sorting":"most-relevant", 6 | "vis_id": "TEST_ID", 7 | "min_descsize": 0, 8 | "limit": 120, 9 | "list_size": 100 10 | } 11 | -------------------------------------------------------------------------------- /server/preprocessing/other-scripts/test/params_openaire.json: -------------------------------------------------------------------------------- 1 | {"funder":"ARC", 2 | "project_id":"DP0878177", 3 | "list_size": -1, 4 | "vis_id": "TEST_ID"} 5 | -------------------------------------------------------------------------------- /server/services/displayPDF.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | " /> 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /server/services/getChartSVG.js: -------------------------------------------------------------------------------- 1 | module.paths.push(process.argv[4]); 2 | const puppeteer = require('puppeteer'); 3 | 4 | function timeout(ms) { 5 | return new Promise(resolve => setTimeout(resolve, ms)); 6 | }; 7 | 8 | (async() => { 9 | const browser = await puppeteer.launch(); 10 | const page = await browser.newPage(); 11 | await page.setViewport({width: 1920, height: 1080}) 12 | await page.goto(process.argv[2], {waitUntil: 'networkidle2'}); 13 | await timeout(1000) 14 | await page.screenshot({path: process.argv[3], clip: { x: 0, y: 0, width: 1150, height: 1080 }}); 15 | browser.close(); 16 | 17 | })(); 18 | -------------------------------------------------------------------------------- /server/services/helper.php: -------------------------------------------------------------------------------- 1 | window.location=\'' . $url . '\';'); 14 | } else { 15 | header('Location: ' . $url); 16 | die(); 17 | } 18 | } 19 | 20 | ?> 21 | -------------------------------------------------------------------------------- /server/services/snapshot/data-config_doaj.js: -------------------------------------------------------------------------------- 1 | var data_config = { 2 | tag: "visualization", 3 | mode: "search_repos", 4 | 5 | service: "doaj", 6 | 7 | title: "", 8 | base_unit: "citations", 9 | use_area_uri: true, 10 | show_multiples: false, 11 | show_dropdown: false, 12 | preview_type: "pdf", 13 | sort_options: ["readers", "title", "authors", "year"], 14 | is_force_areas: true, 15 | language: "eng_pubmed", 16 | area_force_alpha: 0.015, 17 | show_list: true, 18 | content_based: true, 19 | url_prefix: "https://doaj.org/article/" 20 | }; 21 | -------------------------------------------------------------------------------- /server/services/snapshot/data-config_plos.js: -------------------------------------------------------------------------------- 1 | var data_config = { 2 | tag: "visualization", 3 | mode: "search_repos", 4 | 5 | service: "plos", 6 | 7 | title: "", 8 | base_unit: "views", 9 | use_area_uri: true, 10 | show_multiples: false, 11 | show_dropdown: false, 12 | preview_type: "pdf", 13 | sort_options: ["readers", "title", "authors", "year"], 14 | is_force_areas: true, 15 | language: "eng_plos", 16 | area_force_alpha: 0.015, 17 | show_list: true, 18 | content_based: false, 19 | }; 20 | -------------------------------------------------------------------------------- /server/services/tests/README.md: -------------------------------------------------------------------------------- 1 | # How to run PHP tests 2 | 3 | Tests for PHP code run in a container and use PHPUnit as the core technology. To run the tests, you need to follow the steps below: 4 | 5 | 1. Build docker container: 6 | 7 | 8 | ``` 9 | docker build -t php-test server/services/tests/docker 10 | ``` 11 | 12 | 2. Run container with tests: 13 | 14 | 15 | ``` 16 | docker run --rm -v $(pwd)/server:/app php-test phpunit --configuration services/tests/configuration/phpunit.xml 17 | ``` 18 | -------------------------------------------------------------------------------- /server/services/tests/configuration/phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | ../../ 12 | 13 | 14 | -------------------------------------------------------------------------------- /server/storage/1c9cbe403f7592d091b472735dfb2802.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/storage/1c9cbe403f7592d091b472735dfb2802.png -------------------------------------------------------------------------------- /server/storage/headstart.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/storage/headstart.sqlite -------------------------------------------------------------------------------- /server/storage/headstart_test.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/storage/headstart_test.sqlite -------------------------------------------------------------------------------- /server/storage/test.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/storage/test.sqlite -------------------------------------------------------------------------------- /server/workers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/__init__.py -------------------------------------------------------------------------------- /server/workers/api/.dockerignore: -------------------------------------------------------------------------------- 1 | .cache 2 | 3 | # python 4 | .venv 5 | __pycache__ 6 | .pytest_cache 7 | *.ipynb 8 | .pynb_checkpoints 9 | 10 | # macOS 11 | .DS_Store -------------------------------------------------------------------------------- /server/workers/api/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.9 2 | 3 | LABEL maintainer="Chris Kittel " 4 | 5 | RUN apt-get update 6 | RUN apt-get install -y gcc git libpq-dev 7 | 8 | WORKDIR /api 9 | 10 | COPY ./workers/api/requirements.txt ./api/requirements.txt 11 | 12 | RUN pip install --no-cache-dir -r ./api/requirements.txt 13 | 14 | COPY ./workers/common ./common 15 | 16 | COPY ./workers/api/requirements-e.txt ./api/requirements-e.txt 17 | 18 | RUN cd api && pip install --no-cache-dir -r requirements-e.txt && cd .. 19 | 20 | COPY ./workers/api/src ./ 21 | COPY ./workers/api/tests ./api/tests 22 | -------------------------------------------------------------------------------- /server/workers/api/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "api" 3 | version = "0.1.0" 4 | description = "API microservice." 5 | -------------------------------------------------------------------------------- /server/workers/api/requirements-e.txt: -------------------------------------------------------------------------------- 1 | # Include the common package from the local file system 2 | -e ../common -------------------------------------------------------------------------------- /server/workers/api/src/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/api/src/__init__.py -------------------------------------------------------------------------------- /server/workers/api/src/apis/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/api/src/apis/__init__.py -------------------------------------------------------------------------------- /server/workers/api/src/templates/tables.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Demo 6 | 7 | 8 | 9 | {{ df_clean|safe }} 10 |
11 | {{ errors|safe }} 12 |
13 | {{ df_errors|safe }} 14 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /server/workers/api/test.sh: -------------------------------------------------------------------------------- 1 | export REDIS_HOST=localhost 2 | export REDIS_PORT=6355 3 | export REDIS_PASSWORD=testredispassword 4 | export REDIS_DB=0 5 | 6 | export POSTGRES_USER=testuser 7 | export POSTGRES_PASSWORD=postgres 8 | export POSTGRES_HOST=localhost 9 | export POSTGRES_PORT=5434 10 | export POSTGRES_DATABASE=testdb 11 | 12 | pytest -v -------------------------------------------------------------------------------- /server/workers/api/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/api/tests/__init__.py -------------------------------------------------------------------------------- /server/workers/api/tests/e2e/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/api/tests/e2e/__init__.py -------------------------------------------------------------------------------- /server/workers/api/tests/e2e/conftest.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from pytest import MonkeyPatch 3 | 4 | from src.app import app 5 | 6 | @pytest.fixture 7 | def client(monkeypatch: MonkeyPatch): 8 | monkeypatch.setenv('SERVICE_VERSION', '1.0.0') 9 | app.config['TESTING'] = True 10 | with app.test_client() as client: 11 | yield client 12 | -------------------------------------------------------------------------------- /server/workers/api/tests/e2e/test_base.py: -------------------------------------------------------------------------------- 1 | from flask.testing import FlaskClient 2 | 3 | def test_base(client: FlaskClient): 4 | response = client.get('/api/base/service_version') 5 | data = response.data 6 | print(data) 7 | assert response.status_code == 200 8 | assert response.headers['Content-Type'] == 'application/json' 9 | assert response.json == {"service_version": "1.0.0"} 10 | 11 | -------------------------------------------------------------------------------- /server/workers/api/tests/e2e/test_openaire.py: -------------------------------------------------------------------------------- 1 | from flask.testing import FlaskClient 2 | 3 | def test_orcid(client: FlaskClient): 4 | response = client.get('/api/openaire/service_version') 5 | data = response.data 6 | print(data) 7 | assert response.status_code == 200 8 | assert response.headers['Content-Type'] == 'application/json' 9 | assert response.json == {"service_version": "1.0.0"} 10 | 11 | -------------------------------------------------------------------------------- /server/workers/api/tests/e2e/test_orcid.py: -------------------------------------------------------------------------------- 1 | from flask.testing import FlaskClient 2 | 3 | def test_orcid(client: FlaskClient): 4 | response = client.get('/api/orcid/service_version') 5 | data = response.data 6 | print(data) 7 | assert response.status_code == 200 8 | assert response.headers['Content-Type'] == 'application/json' 9 | assert response.json == {"service_version": "1.0.0"} 10 | 11 | -------------------------------------------------------------------------------- /server/workers/api/tests/e2e/test_pubmed.py: -------------------------------------------------------------------------------- 1 | from flask.testing import FlaskClient 2 | 3 | def test_orcid(client: FlaskClient): 4 | response = client.get('/api/pubmed/service_version') 5 | data = response.data 6 | print(data) 7 | assert response.status_code == 200 8 | assert response.headers['Content-Type'] == 'application/json' 9 | assert response.json == {"service_version": "1.0.0"} 10 | 11 | -------------------------------------------------------------------------------- /server/workers/base/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/base/__init__.py -------------------------------------------------------------------------------- /server/workers/base/dependencies.R: -------------------------------------------------------------------------------- 1 | library(logging) 2 | library(jsonlite) 3 | library(rbace) 4 | library(stringr) 5 | library(stringdist) 6 | library(doParallel) 7 | library(dplyr) -------------------------------------------------------------------------------- /server/workers/base/example_base.env: -------------------------------------------------------------------------------- 1 | LOGFILE=/var/log/headstart/headstart.log 2 | RENV_VERSION=0.14.0-5 3 | CRAN_REPOS=https://cran.wu.ac.at 4 | LOGLEVEL=DEBUG 5 | LC_ALL="en_US.UTF-8", 6 | LANG="en_US.UTF-8" 7 | RENV_PATHS_CACHE=/renv/cache 8 | PYTHONIOENCODING="utf-8" -------------------------------------------------------------------------------- /server/workers/base/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "api" 3 | version = "0.1.0" 4 | description = "API microservice." 5 | -------------------------------------------------------------------------------- /server/workers/base/requirements-e.txt: -------------------------------------------------------------------------------- 1 | # Include the common package from the local file system 2 | -e ../common 3 | -------------------------------------------------------------------------------- /server/workers/base/requirements.txt: -------------------------------------------------------------------------------- 1 | asn1crypto==0.24.0 2 | async-timeout==4.0.2 3 | cryptography==2.1.4 4 | dateparser==1.1.3 5 | idna==2.6 6 | importlib-metadata==4.8.3 7 | keyring==10.6.0 8 | keyrings.alt==3.0 9 | Levenshtein==0.21.1 10 | numpy==1.19.5 11 | packaging==21.3 12 | pandas==1.1.5 13 | pycrypto==2.6.1 14 | pygobject==3.26.1 15 | pyparsing==3.1.1 16 | python-dateutil==2.8.2 17 | pytz==2023.3.post1 18 | pyxdg==0.25 19 | redis==4.3.6 20 | scikit-learn==0.24.2 21 | SecretStorage==2.3.1 22 | six==1.11.0 23 | typing-extensions==4.1.1 24 | zipp==3.6.0 25 | tzdata -------------------------------------------------------------------------------- /server/workers/base/src/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/base/src/__init__.py -------------------------------------------------------------------------------- /server/workers/build_docker_images.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 3 | services=("api" "persistence" "dataprocessing" "base" "pubmed" "openaire" "orcid" "metrics") 4 | service_version="`git rev-parse HEAD`" 5 | echo "" 6 | echo "Building services with version $service_version" 7 | echo "" 8 | for service in ${services[@]}; do 9 | echo "" 10 | echo "Building $service" 11 | echo "" 12 | docker build -f "$SCRIPT_DIR/../workers/$service/Dockerfile" -t "$service:$service_version" "$SCRIPT_DIR/../" 13 | done 14 | 15 | echo "" 16 | echo "Finished building services with version $service_version" 17 | echo "" -------------------------------------------------------------------------------- /server/workers/common/common/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/common/common/__init__.py -------------------------------------------------------------------------------- /server/workers/common/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools", "wheel"] 3 | build-backend = "setuptools.build_meta" 4 | 5 | [project] 6 | name = "common" 7 | version = "0.1.0" 8 | description = "A common utility package shared across microservices." 9 | 10 | [tool.setuptools.packages.find] 11 | where = ["."] 12 | 13 | [tool.setuptools] 14 | package-dir = {"" = "."} -------------------------------------------------------------------------------- /server/workers/common/setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | 3 | setup( 4 | name="your_project_name", 5 | version="0.1", 6 | packages=find_packages(), 7 | ) -------------------------------------------------------------------------------- /server/workers/dataprocessing/.dockerignore: -------------------------------------------------------------------------------- 1 | renv 2 | __pycache__ 3 | .cache 4 | .pytest_cache 5 | .Rproj.user 6 | .RData 7 | .Rhistory 8 | *.Rproj 9 | .pynb_checkpoints 10 | *.ipynb -------------------------------------------------------------------------------- /server/workers/dataprocessing/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/dataprocessing/__init__.py -------------------------------------------------------------------------------- /server/workers/dataprocessing/dependencies.R: -------------------------------------------------------------------------------- 1 | library(logging) 2 | library(vegan) 3 | library(tm) 4 | library(proxy) 5 | library(GMD) 6 | library(SnowballC) 7 | library(jsonlite) 8 | library(parfossil) 9 | library(doParallel) 10 | library(stringi) 11 | library(stringr) 12 | library(stringdist) 13 | library(dplyr) 14 | library(plyr) 15 | library(data.table) 16 | library(tidyr) -------------------------------------------------------------------------------- /server/workers/dataprocessing/example_dataprocessing.env: -------------------------------------------------------------------------------- 1 | LOGFILE=/var/log/headstart/headstart.log 2 | RENV_VERSION=0.14.0 3 | CRAN_REPOS=https://cran.wu.ac.at 4 | LOGLEVEL=DEBUG 5 | RENV_PATHS_CACHE=/renv/cache 6 | -------------------------------------------------------------------------------- /server/workers/dataprocessing/requirements-e.txt: -------------------------------------------------------------------------------- 1 | # Include the common package from the local file system 2 | -e ../common -------------------------------------------------------------------------------- /server/workers/dataprocessing/requirements.txt: -------------------------------------------------------------------------------- 1 | asn1crypto==0.24.0 2 | async-timeout==4.0.2 3 | cryptography==2.1.4 4 | idna==2.6 5 | importlib-metadata==4.8.3 6 | joblib==1.1.1 7 | keyring==10.6.0 8 | keyrings.alt==3.0 9 | numpy==1.19.5 10 | packaging==21.3 11 | pandas==1.1.5 12 | pycrypto==2.6.1 13 | pygobject==3.26.1 14 | pyparsing==3.1.1 15 | python-dateutil==2.8.2 16 | pytz==2023.3.post1 17 | pyxdg==0.25 18 | redis==4.3.6 19 | scikit-learn==0.24.2 20 | scipy==1.5.4 21 | SecretStorage==2.3.1 22 | six==1.11.0 23 | threadpoolctl==3.1.0 24 | typing-extensions==4.1.1 25 | zipp==3.6.0 -------------------------------------------------------------------------------- /server/workers/dataprocessing/run_dataprocessing.py: -------------------------------------------------------------------------------- 1 | import os 2 | import redis 3 | from dataprocessing.src.headstart import Dataprocessing 4 | 5 | 6 | if __name__ == '__main__': 7 | redis_config = { 8 | "host": os.getenv("REDIS_HOST"), 9 | "port": os.getenv("REDIS_PORT"), 10 | "db": os.getenv("REDIS_DB"), 11 | "password": os.getenv("REDIS_PASSWORD"), 12 | "client_name": "dataprocessing" 13 | } 14 | 15 | redis_store = redis.StrictRedis(**redis_config) 16 | dp = Dataprocessing("./other-scripts", "run_vis_layout.R", 17 | redis_store=redis_store, 18 | loglevel=os.environ.get("LOGLEVEL", "INFO")) 19 | dp.run() 20 | -------------------------------------------------------------------------------- /server/workers/dataprocessing/src/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/dataprocessing/src/__init__.py -------------------------------------------------------------------------------- /server/workers/metrics/.dockerignore: -------------------------------------------------------------------------------- 1 | renv 2 | __pycache__ 3 | .cache 4 | .pytest_cache 5 | .Rproj.user 6 | .RData 7 | .Rhistory 8 | *.Rproj 9 | .pynb_checkpoints 10 | *.ipynb -------------------------------------------------------------------------------- /server/workers/metrics/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/metrics/__init__.py -------------------------------------------------------------------------------- /server/workers/metrics/dependencies.R: -------------------------------------------------------------------------------- 1 | library(rAltmetric) 2 | library(rcrossref) 3 | library(logging) 4 | library(jsonlite) 5 | library(doParallel) 6 | library(dplyr) 7 | library(stringdist) -------------------------------------------------------------------------------- /server/workers/metrics/example_metrics.env: -------------------------------------------------------------------------------- 1 | LOGFILE=/var/log/headstart/headstart.log 2 | RENV_VERSION=0.14.0-5 3 | CRAN_REPOS=https://cran.wu.ac.at 4 | LOGLEVEL=DEBUG 5 | LC_ALL="en_US.UTF-8", 6 | LANG="en_US.UTF-8" 7 | RENV_PATHS_CACHE=/renv/cache 8 | PYTHONIOENCODING="utf-8" -------------------------------------------------------------------------------- /server/workers/metrics/requirements-e.txt: -------------------------------------------------------------------------------- 1 | # Include the common package from the local file system 2 | -e ../common -------------------------------------------------------------------------------- /server/workers/metrics/requirements.txt: -------------------------------------------------------------------------------- 1 | asn1crypto==0.24.0 2 | async-timeout==4.0.2 3 | cryptography==2.1.4 4 | idna==2.6 5 | importlib-metadata==4.8.3 6 | keyring==10.6.0 7 | keyrings.alt==3.0 8 | Levenshtein==0.21.1 9 | numpy==1.19.5 10 | packaging==21.3 11 | pandas==1.1.5 12 | pycrypto==2.6.1 13 | pyparsing==3.1.1 14 | python-dateutil==2.8.2 15 | pytz==2023.3.post1 16 | pyxdg==0.25 17 | redis==4.3.6 18 | SecretStorage==2.3.1 19 | six==1.11.0 20 | typing-extensions==4.1.1 21 | zipp==3.6.0 22 | -------------------------------------------------------------------------------- /server/workers/metrics/run_metrics.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | # import json 4 | import redis 5 | from metrics.src.metrics import MetricsClient 6 | 7 | 8 | if __name__ == "__main__": 9 | redis_config = { 10 | "host": os.getenv("REDIS_HOST"), 11 | "port": os.getenv("REDIS_PORT"), 12 | "db": os.getenv("REDIS_DB"), 13 | "password": os.getenv("REDIS_PASSWORD"), 14 | "client_name": "metrics_retrieval", 15 | } 16 | 17 | redis_store = redis.StrictRedis(**redis_config) 18 | wrapper = MetricsClient( 19 | "./other-scripts", 20 | "run_metrics.R", 21 | redis_store, 22 | "english", 23 | os.environ.get("LOGLEVEL", "INFO"), 24 | ) 25 | wrapper.run() 26 | -------------------------------------------------------------------------------- /server/workers/metrics/src/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/metrics/src/__init__.py -------------------------------------------------------------------------------- /server/workers/openaire/.dockerignore: -------------------------------------------------------------------------------- 1 | renv 2 | __pycache__ 3 | .cache 4 | .pytest_cache 5 | .Rproj.user 6 | .RData 7 | .Rhistory 8 | *.Rproj 9 | .pynb_checkpoints 10 | *.ipynb -------------------------------------------------------------------------------- /server/workers/openaire/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/openaire/__init__.py -------------------------------------------------------------------------------- /server/workers/openaire/dependencies.R: -------------------------------------------------------------------------------- 1 | library(xml2) 2 | library(plyr) 3 | library(ropenaire) 4 | library(rcrossref) 5 | library(stringr) 6 | library(stringdist) 7 | library(logging) 8 | library(stringi) 9 | library(data.table) 10 | library(jsonlite) 11 | library(logging) -------------------------------------------------------------------------------- /server/workers/openaire/example_openaire.env: -------------------------------------------------------------------------------- 1 | LOGFILE=/var/log/headstart/headstart.log 2 | RENV_VERSION=0.14.0-5 3 | CRAN_REPOS=https://cran.wu.ac.at 4 | LOGLEVEL=DEBUG 5 | LC_ALL="en_US.UTF-8", 6 | LANG="en_US.UTF-8" 7 | RENV_PATHS_CACHE=/renv/cache 8 | PYTHONIOENCODING="utf-8" -------------------------------------------------------------------------------- /server/workers/openaire/requirements-e.txt: -------------------------------------------------------------------------------- 1 | # Include the common package from the local file system 2 | -e ../common -------------------------------------------------------------------------------- /server/workers/openaire/requirements.txt: -------------------------------------------------------------------------------- 1 | async-timeout==4.0.3 2 | numpy==1.24.4 3 | pandas==2.0.3 4 | python-dateutil==2.8.2 5 | pytz==2023.3.post1 6 | redis==5.0.1 7 | six==1.16.0 8 | tzdata==2023.3 9 | -------------------------------------------------------------------------------- /server/workers/openaire/run_openaire.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import redis 4 | from openaire.src.openaire import OpenAIREClient 5 | 6 | 7 | if __name__ == '__main__': 8 | redis_config = { 9 | "host": os.getenv("REDIS_HOST"), 10 | "port": os.getenv("REDIS_PORT"), 11 | "db": os.getenv("REDIS_DB"), 12 | "password": os.getenv("REDIS_PASSWORD"), 13 | "client_name": "openaire_retrieval" 14 | } 15 | redis_store = redis.StrictRedis(**redis_config) 16 | wrapper = OpenAIREClient("./other-scripts", "run_openaire.R", redis_store, 17 | "english", 18 | os.environ.get("LOGLEVEL", "INFO")) 19 | wrapper.run() 20 | -------------------------------------------------------------------------------- /server/workers/openaire/src/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/openaire/src/__init__.py -------------------------------------------------------------------------------- /server/workers/orcid/.dockerignore: -------------------------------------------------------------------------------- 1 | renv 2 | __pycache__ 3 | .venv 4 | .cache 5 | .pytest_cache 6 | .Rproj.user 7 | .RData 8 | .Rhistory 9 | *.Rproj 10 | .pynb_checkpoints 11 | *.ipynb -------------------------------------------------------------------------------- /server/workers/orcid/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.pytest.ini_options] 2 | pythonpath = [ 3 | '.', 4 | 'src' 5 | ] 6 | testpaths = [ 7 | 'tests' 8 | ] -------------------------------------------------------------------------------- /server/workers/orcid/requirements-e.txt: -------------------------------------------------------------------------------- 1 | # Include the common package from the local file system 2 | -e ../common -------------------------------------------------------------------------------- /server/workers/orcid/requirements.txt: -------------------------------------------------------------------------------- 1 | aioredis==2.0.1 2 | aniso8601==9.0.1 3 | async-timeout==4.0.2 4 | attrs==22.2.0 5 | click==8.1.3 6 | dataclasses>=0.6 7 | hiredis==2.0.0 8 | importlib-metadata==4.8.3 9 | importlib-resources==5.4.0 10 | itsdangerous==2.1.2 11 | jsonschema==3.2.0 12 | MarkupSafe==2.1.3 13 | Levenshtein==0.21.1 14 | mistune==2.0.5 15 | numpy==1.24.4 16 | packaging==21.3 17 | pandas==1.3.5 18 | pyparsing==3.1.1 19 | pyrsistent==0.18.0 20 | python-dateutil==2.8.2 21 | pytz==2023.3.post1 22 | PyYAML==6.0.1 23 | redis==4.3.6 24 | six==1.16.0 25 | typing-extensions==4.2.0 26 | zipp==3.6.0 27 | pyorcid @ git+https://github.com/OpenKnowledgeMaps/PyOrcid.git@979c7733664df0936b2aef3b899f2d8de10b4315 28 | -------------------------------------------------------------------------------- /server/workers/orcid/src/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/orcid/src/__init__.py -------------------------------------------------------------------------------- /server/workers/orcid/src/repositories/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/orcid/src/repositories/__init__.py -------------------------------------------------------------------------------- /server/workers/orcid/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/orcid/tests/__init__.py -------------------------------------------------------------------------------- /server/workers/orcid/tests/unit/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/orcid/tests/unit/__init__.py -------------------------------------------------------------------------------- /server/workers/persistence/.dockerignore: -------------------------------------------------------------------------------- 1 | renv 2 | __pycache__ 3 | .cache 4 | .pytest_cache 5 | .Rproj.user 6 | .RData 7 | .Rhistory 8 | *.Rproj 9 | .pynb_checkpoints 10 | *.ipynb 11 | .venv -------------------------------------------------------------------------------- /server/workers/persistence/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.9 2 | 3 | LABEL maintainer="Chris Kittel " 4 | 5 | RUN apt-get update 6 | RUN apt-get install -y gcc git libpq-dev 7 | 8 | WORKDIR /persistence 9 | COPY workers/persistence/requirements.txt . 10 | RUN pip install --upgrade pip 11 | RUN pip install --no-cache-dir -r requirements.txt 12 | RUN pip install git+https://github.com/python-restx/flask-restx 13 | 14 | COPY workers/common ../common 15 | COPY workers/persistence/requirements-e.txt ./ 16 | RUN pip install --no-cache-dir -r requirements-e.txt 17 | COPY workers/persistence/src/ ./ -------------------------------------------------------------------------------- /server/workers/persistence/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/persistence/__init__.py -------------------------------------------------------------------------------- /server/workers/persistence/requirements-e.txt: -------------------------------------------------------------------------------- 1 | # Include the common package from the local file system 2 | -e ../common -------------------------------------------------------------------------------- /server/workers/persistence/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask-SQLAlchemy==3.0.5 2 | Flask-Cors==4.0.0 3 | wheel 4 | greenlet==3.0.1 5 | gunicorn==21.2.0 6 | importlib-metadata==6.7.0 7 | importlib-resources==5.12.0 8 | itsdangerous==2.1.2 9 | Jinja2==3.1.2 10 | jsonschema==4.17.3 11 | MarkupSafe==2.1.3 12 | packaging==23.2 13 | pkgutil_resolve_name==1.3.10 14 | psycopg2-binary==2.9.9 15 | pyrsistent==0.19.3 16 | pytz==2023.3.post1 17 | SQLAlchemy==2.0.23 18 | SQLAlchemy-Utils==0.41.1 19 | typing_extensions==4.7.1 20 | Werkzeug==3.0.1 21 | zipp==3.15.0 22 | flask-restx==1.3.0 -------------------------------------------------------------------------------- /server/workers/persistence/src/manage.py: -------------------------------------------------------------------------------- 1 | from app import app 2 | from models import Visualizations, Revisions 3 | from sqlalchemy_utils import database_exists, create_database 4 | from database import Base, Session 5 | 6 | 7 | if __name__ == '__main__': 8 | with app.app_context(): 9 | try: 10 | session = Session() 11 | engine = session.get_bind() 12 | if not database_exists(engine.url): 13 | create_database(engine.url) 14 | for name, table in Base.metadata.tables.items(): 15 | if not engine.dialect.has_table(engine.connect(), name): 16 | table.create(engine) 17 | except Exception as e: 18 | print(e) 19 | -------------------------------------------------------------------------------- /server/workers/pubmed/.dockerignore: -------------------------------------------------------------------------------- 1 | renv 2 | __pycache__ 3 | .cache 4 | .pytest_cache 5 | .Rproj.user 6 | .RData 7 | .Rhistory 8 | *.Rproj 9 | .pynb_checkpoints 10 | *.ipynb 11 | .venv -------------------------------------------------------------------------------- /server/workers/pubmed/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/pubmed/__init__.py -------------------------------------------------------------------------------- /server/workers/pubmed/dependencies.R: -------------------------------------------------------------------------------- 1 | library(logging) 2 | library(jsonlite) 3 | library(rentrez) 4 | library(stringr) 5 | library(stringdist) 6 | library(doParallel) 7 | library("data.table") 8 | library(xml2) 9 | library(dplyr) -------------------------------------------------------------------------------- /server/workers/pubmed/example_pubmed.env: -------------------------------------------------------------------------------- 1 | LOGFILE=/var/log/headstart/headstart.log 2 | RENV_VERSION=0.14.0 3 | CRAN_REPOS=https://cran.wu.ac.at 4 | LOGLEVEL=DEBUG 5 | RENV_PATHS_CACHE=/renv/cache 6 | PYTHONIOENCODING="utf-8" -------------------------------------------------------------------------------- /server/workers/pubmed/requirements-e.txt: -------------------------------------------------------------------------------- 1 | # Include the common package from the local file system 2 | -e ../common -------------------------------------------------------------------------------- /server/workers/pubmed/requirements.txt: -------------------------------------------------------------------------------- 1 | asn1crypto==0.24.0 2 | async-timeout==4.0.2 3 | cryptography==2.1.4 4 | idna==2.6 5 | importlib-metadata==4.8.3 6 | keyring==10.6.0 7 | keyrings.alt==3.0 8 | numpy==1.19.5 9 | packaging==21.3 10 | pandas==1.1.5 11 | pycrypto==2.6.1 12 | pygobject==3.26.1 13 | pyparsing==3.1.1 14 | python-dateutil==2.8.2 15 | pytz==2023.3.post1 16 | pyxdg==0.25 17 | redis==4.3.6 18 | SecretStorage==2.3.1 19 | six==1.11.0 20 | typing-extensions==4.1.1 21 | zipp==3.6.0 -------------------------------------------------------------------------------- /server/workers/pubmed/run_pubmed.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import redis 4 | from pubmed.src.pubmed import PubMedClient 5 | 6 | 7 | if __name__ == '__main__': 8 | redis_config = { 9 | "host": os.getenv("REDIS_HOST"), 10 | "port": os.getenv("REDIS_PORT"), 11 | "db": os.getenv("REDIS_DB"), 12 | "password": os.getenv("REDIS_PASSWORD"), 13 | "client_name": "pubmed_retrieval" 14 | } 15 | redis_store = redis.StrictRedis(**redis_config) 16 | wrapper = PubMedClient("./other-scripts", "run_pubmed.R", redis_store, 17 | "english", 18 | os.environ.get("LOGLEVEL", "INFO")) 19 | wrapper.run() 20 | -------------------------------------------------------------------------------- /server/workers/pubmed/src/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/pubmed/src/__init__.py -------------------------------------------------------------------------------- /server/workers/tests/Dockerfile.tests: -------------------------------------------------------------------------------- 1 | FROM python:3.9 2 | 3 | LABEL maintainer="Chris Kittel " 4 | 5 | RUN apt-get update 6 | RUN apt-get install -y --no-install-recommends gcc git python3-dev 7 | RUN apt-get install -y libpq-dev 8 | 9 | WORKDIR /app 10 | 11 | RUN pip install git+https://github.com/python-restx/flask-restx 12 | RUN pip install pytest requests sqlalchemy sqlalchemy-utils psycopg2-binary -------------------------------------------------------------------------------- /server/workers/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/tests/__init__.py -------------------------------------------------------------------------------- /server/workers/tests/conftest.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | RANDOM = None 4 | 5 | 6 | def pytest_addoption(parser): 7 | parser.addoption( 8 | "--random", action="store_true", default=False, help="run randomized tests" 9 | ) 10 | 11 | 12 | def pytest_configure(config): 13 | global RANDOM 14 | RANDOM = config.option.random 15 | -------------------------------------------------------------------------------- /server/workers/tests/knowncases/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/tests/knowncases/__init__.py -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase036011eb34c6c8ea10c3a8dbaf1d99cf.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-12-22", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "jurnal", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase05b3c090e731f0ddb388cc76257101f6.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-07-20", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "ijarah", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase0655f13dedaa2db168f55488bd2321a0.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-09-06", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "virus corona", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase08c4712985b0596b93642c53c583e4cc.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-03-12", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "coronavirus", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase09a621fb9a5d2d8bdc07ddea50ed4b16.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-11-17", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "computer science", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase0a19c733f64e042aaf4ce516e1da248d.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-04-29", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "fintech", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase0a2e4da50492f7e4a22118c790733284.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-01-18", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "pariwisata", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase0b76cab2176d3580ba72ad10ea5b7c68.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-05-13", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "science", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase0c4324c98bdb260f38deb243daff7833.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-10-24", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "marketing", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase0c787fbcf7ff02abe3c155c496c98ff5.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-10-26", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "blockchain", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase0d125a502c3973faf130582e13fdc72c.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-05-11", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "fintech", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase0d38e57984714300746653ec47a22d3d.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-02-04", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "social attention", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase0d98a7d2b0d2d839fd44adb9e86d391f.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-11-10", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "tourism", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase0f4ebb3674b4522b35ed295ef84271e2.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-12-28", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "smart city", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase10659c0cf2a58db210aa37b09b4a3e64.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-04-05", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "construction management", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase11a84cb7e86e950f5bed69b31116fca9.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-12-25", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "studi kelayakan proyek", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase11c14034fb2099bc40e26200861af9e2.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-09-14", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "jurnal pemasaran", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase1592c3635ec7a357b009b57f86e46097.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-08-19", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "heart disease", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase1662d5891a64d77b69506a854f034c2a.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-03-07", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "kompensasi", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase1af2311f15388c90a733646bd2fa34d9.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-04-05", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "covid-19", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase1af4f0b4839eafd5fa91160e134de0be.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-01-29", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "virus corona", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase1ef5052d04bc974563a34c86b7f8f839.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-01-28", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "covid19", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase1f9445d05c528576d349a8177c02d970.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-03-15", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "stunting", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase233f86d68856fc173f99e2f18261ad6b.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-02-01", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "nursing", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase240a06cb5525f204edb4255bda61db7b.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-10-31", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "natural language processing", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase2f4c11452ce47fd12b170151d9d7e23b.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-08-27", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "pariwisata", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase3003ae811493b650ab3731b19593d06f.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-01-31", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "happiness", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase306a910c2757e2c6de66cef032f1a23f.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-08-11", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "supply chain management", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase33c29660f71fe5229776dd9fd9d3360b.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-07-16", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "computer science", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase37b6b0af91671854c7b98a6478820024.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-10-21", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "management", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase3982424976c35232967f08a5b470d5c1.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-02-26", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "pembelajaran di masa pandemi", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase40e783cf8b31f6f7e31653aacb539d88.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-04-05", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "education", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase432b143207f4e3fdf0b7889069cc0923.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-05-28", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "climate change", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase4371ee0f13b0fa5eb0743bc7a77a0ca8.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-08-25", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "ijarah", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase45521e705e53453cd094fddb2b7b8752.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-10-24", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "loyalitas karyawan", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase458e44177caa70ecb461315d88f660ea.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-09-26", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "social media", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase471f6b7c1d84547834d08244277e9554.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-11-12", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "physics", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase49cf5b621add7fadd745401ff347f7d4.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-07-04", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "accounting", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase4a38a6ee6d3e98d571c4d15b44fca1e5.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-09-20", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "covid19", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase4b3a9d8119af63c7449dba243716ad4a.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-04-04", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "umkm", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase55cebfd5c3e52d56d34f85853b07d83b.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-03-29", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "communication", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase561f7285cf38224445f4a588f674e0c7.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-07-05", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "data science", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase59d79e14f18e730e2525df6dbe0cfc0e.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-06-02", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "stunting", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase5bcc8c281edb7252bf8ca25abbcf4fa8.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-03-04", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "accounting", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase606283c3699120ccd0444a386b2c0c84.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-12-23", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "happiness", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase636e1bec5f9b0280b2bd15611f45d9d4.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-10-29", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "covid", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase66512c15f0a2287ecb9daa6c2497e16f.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-11-27", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "stress", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase6a3c4ac4b377f9857e03cd62c818a8ca.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-05-22", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "knowledge management", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase711415f1fafc975b4db4886e894b7026.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-06-28", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "stuff", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase7327af5f9da174e0efd59ac0705cf4bf.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-09-06", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "science", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase7500a44a746a987ee93e762ac8ec51f6.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-07-09", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "data mining", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase773185538344e60a876a97e3a2509f17.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-06-22", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "jurnal", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase7a468ac173933792ad8e48b175ef2c21.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-10-02", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "sugar", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase7ad02d4a62b5ef8dade7368d42384862.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-03-31", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "corona", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase7ddd3c59e97a017baf75fb24edfefeac.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-12-24", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "osint", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase7fc7c7e7ff2233f002387754d5030f5b.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-12-04", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "jurnal pemasaran", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase81d45d7441a6c6cb137c41ced56b6762.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-04-21", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "kepemimpinan", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase8bd44763044548a88ff75d21f99e91f4.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-12-22", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "big data", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase8bf4677ad5d0c8685f746dbd9f1bc1b2.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-12-03", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "music", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase8e490ad40819de56b5c2f78acdeb7d74.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-07-15", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "stunting", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase91fed9814d1377809d4a068ccbaeb16b.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-07-18", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "digital marketing", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase96087dd409ece1b9f6441d1b07d7b3d7.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-04-27", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "ai", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase97c3bddaab3a467c3e27e7848ce783e2.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-03-26", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "knowledge management", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase9dadb2e01b6de661eed709c21bbedc3b.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-10-23", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "happiness", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase9e684695928430919a3ee3acfec1221e.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-01-18", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "leadership", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcase9ee85341acc38388125c932806852155.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-02-06", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "mathematics", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasea016fb874f1f699e8af05c58cbf8234e.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-09-23", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "fintech", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasea1788e9675df76e6a5f8cbe78db6bfe4.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-05-23", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "accounting", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcaseaa35035f6c2e5ef19bbb7ce72b81bf7d.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-10-16", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "loyalitas", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcaseadd252de3584b839350ce34f686a235f.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-09-03", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "corona", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcaseaef902bfead5487074562c600a5e62e4.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-10-15", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "artificial intelligence", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcaseb18ae3d55ff7e5451fb43e5f0599e306.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-07-10", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "work from home", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasebc59841100d862ad4bb4ad94183e9d69.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-10-22", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "architecture", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasec0add34dbc0a917831b5f43c82d7ea89.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-10-27", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "mathematics", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasec34b6d91349fb21ac91732509f95b294.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-05-10", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "covid19", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasec47085e50ab0c6f50142543b35eea51f.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-02-02", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "social attention", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasecdb16520c923af0621c38bb5b3fe485d.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-01-21", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "studi kelayakan proyek", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasece4b21bde7193137af67462911bc4361.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-12-02", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "jurnal", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcased18572907abb46414f65e467064ba891.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-03-28", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "journalism", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcased207ffb0c562e6d0bdae2d2ebb924c44.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-01-21", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "kompensasi", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcased23d40dc128517e7616aa50d78dd44fc.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-11-17", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "pembelajaran dimasa pandemi", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcased701eef36f875727c31e319438f9cac5.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-06-06", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "data mining", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcased73f683f456a042c45dd964ac7330b5b.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-04-09", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "covid-19", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcased8939fbd7b86d5a27bdc22fe525b01ab.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-10-28", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "artificial intelligence", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasedd115e59720fb0913cc1ea8c44a92c3b.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-07-02", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "education", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasedf9626c90c3002ae0afe45c37e2eb652.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-02-21", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "jurnal pemasaran", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasedfc980e963783f850f61ee02f9a82595.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-01-06", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "heart disease", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasee35aa948f46302620024b9e0c5299b88.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-08-17", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "social attention", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasee567b064fafc40df2a1957df98da6660.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-12-08", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "blockchain", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcaseea56a78d1219328a7d407481e4908d74.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-04-17", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "journalism", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcaseeb8bb50adfa02a4af8560e6ad7d294b7.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-05-08", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "psychology", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasef20f9a48a7f4104f8a316e091792ed17.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-02-20", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "sociology", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasef213e501cb022e9640a6f506f1af7113.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-04-24", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "sociology", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasef42d38540581512b4df9c43b735e30fd.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-02-12", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "finance", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasef4763cd7c28add68be2434d9f017b4b3.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2017-10-12", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "sugar", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasef6f270f3550727cb12ace803832002c9.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-09-22", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "covid19", 11 | "service": "base", 12 | "sorting": "most-recent", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasef6fc9fd1555f61942e7ea7057aec10cc.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-05-24", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "zakat", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasefbff46952c02091b0e1a5b2c4de4346a.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2019-11-03", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "education", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcasefee4be67f38d1bb17d06eca9b34e103f.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2018-10-28", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "stuff", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/randomcases/testcaseff4d24f03bcda0dba610ecbe415733f7.json: -------------------------------------------------------------------------------- 1 | { 2 | "params": { 3 | "document_types": [ 4 | "121" 5 | ], 6 | "from": "2020-07-15", 7 | "language": "english", 8 | "limit": 120, 9 | "list_size": 100, 10 | "q": "stunting", 11 | "service": "base", 12 | "sorting": "most-relevant", 13 | "to": "2020-08-06" 14 | } 15 | } -------------------------------------------------------------------------------- /server/workers/tests/test_clean_subject.py: -------------------------------------------------------------------------------- 1 | import workers 2 | -------------------------------------------------------------------------------- /server/workers/tests/test_data/test.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/server/workers/tests/test_data/test.sqlite -------------------------------------------------------------------------------- /server/workers/tests/test_search.py: -------------------------------------------------------------------------------- 1 | import workers 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "allowJs": true, 5 | "lib": ["ES2021", "DOM"], 6 | "jsx": "react", 7 | "moduleResolution": "node", 8 | "outDir": "./dist", 9 | "strict": true, 10 | "esModuleInterop": true, 11 | }, 12 | "include": [ 13 | "vis/**/*" 14 | ] 15 | } -------------------------------------------------------------------------------- /vis/app.ts: -------------------------------------------------------------------------------- 1 | import "styles/main.scss"; 2 | 3 | import config from "./js/default-config"; 4 | import "bootstrap"; 5 | import "bootstrap/dist/css/bootstrap.min.css"; 6 | 7 | // needed for draggable modals (it can be refactored with react-bootstrap though) 8 | import "./lib/jquery-ui.min.js"; 9 | 10 | import HeadstartRunner from "./js/HeadstartRunner"; 11 | 12 | export const start = (additionalConfig: any) => { 13 | if (data_config) { 14 | Object.assign(config, data_config); 15 | } 16 | if (additionalConfig) { 17 | Object.assign(config, additionalConfig); 18 | } 19 | 20 | const headstartRunner = new HeadstartRunner(config); 21 | headstartRunner.run(); 22 | }; -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-600italic.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-700italic.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-800italic.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff2 -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.eot -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.ttf -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff -------------------------------------------------------------------------------- /vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/fonts/open-sans-v34-vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff2 -------------------------------------------------------------------------------- /vis/global.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | 3 | declare global { 4 | var data_config: any; 5 | } 6 | -------------------------------------------------------------------------------- /vis/images/author_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/author_default.png -------------------------------------------------------------------------------- /vis/images/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/download.png -------------------------------------------------------------------------------- /vis/images/download2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/download2.png -------------------------------------------------------------------------------- /vis/images/logos/base_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/logos/base_logo.png -------------------------------------------------------------------------------- /vis/images/logos/pubmed_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/logos/pubmed_logo.png -------------------------------------------------------------------------------- /vis/images/logos/triple_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/logos/triple_logo.png -------------------------------------------------------------------------------- /vis/images/okmaps-logo-round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/okmaps-logo-round.png -------------------------------------------------------------------------------- /vis/images/okmaps-logo-web-whitebg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/okmaps-logo-web-whitebg.png -------------------------------------------------------------------------------- /vis/images/open-access-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/open-access-logo.png -------------------------------------------------------------------------------- /vis/images/open-access-logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/open-access-logo2.png -------------------------------------------------------------------------------- /vis/images/preview_pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/preview_pdf.png -------------------------------------------------------------------------------- /vis/images/preview_pdf_alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/preview_pdf_alt.png -------------------------------------------------------------------------------- /vis/images/thumbnail-concept-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/thumbnail-concept-graph.png -------------------------------------------------------------------------------- /vis/images/viper-project-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/images/viper-project-screenshot.png -------------------------------------------------------------------------------- /vis/index.ts: -------------------------------------------------------------------------------- 1 | export { start } from "./app"; 2 | -------------------------------------------------------------------------------- /vis/js/@types/author.ts: -------------------------------------------------------------------------------- 1 | export interface Author { 2 | employment?: { 3 | role?: string 4 | organization?: string 5 | } 6 | } -------------------------------------------------------------------------------- /vis/js/@types/context.ts: -------------------------------------------------------------------------------- 1 | export interface Context { 2 | id: string; 3 | query: string; 4 | service: string; 5 | last_update?: string; 6 | timestamp?: string; 7 | params: { 8 | lang_id?: string; 9 | min_descsize?: string; 10 | orcid?: string; 11 | today?: string; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /vis/js/@types/service.ts: -------------------------------------------------------------------------------- 1 | export enum ServiceType { 2 | BASE = 'base', 3 | DOAJ = 'doaj', 4 | ORCID = 'orcid', 5 | OPENAIRE = 'openaire', 6 | PUBMED = 'pubmed', 7 | PLOS = 'plos' 8 | } -------------------------------------------------------------------------------- /vis/js/@types/visualization-types.ts: -------------------------------------------------------------------------------- 1 | /* 2 | There are two visualization types in the project: 3 | 1. timeline - this is a Streamgraph map; 4 | 2. overview - this is a map with "bubbles". 5 | */ 6 | 7 | export type VisualizationTypes = "timeline" | "overview"; 8 | -------------------------------------------------------------------------------- /vis/js/actions/README.md: -------------------------------------------------------------------------------- 1 | # Actions 2 | All redux actions should be stored here. See: https://redux.js.org/basics/actions for more information. 3 | 4 | Tests can be found in: ../../test/store -------------------------------------------------------------------------------- /vis/js/components/EntriesWrapper.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { connect } from "react-redux"; 3 | 4 | export interface EntriesWrapperProps { 5 | height?: number; 6 | children: React.ReactNode; 7 | } 8 | 9 | const EntriesWrapper = ({ height, children }: EntriesWrapperProps) => { 10 | return ( 11 |
16 | {children} 17 |
18 | ); 19 | }; 20 | 21 | const mapStateToProps = (state: any) => ({ 22 | height: state.list.height, 23 | }); 24 | 25 | export default connect(mapStateToProps)(EntriesWrapper); 26 | -------------------------------------------------------------------------------- /vis/js/components/Hyphenate.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import React from "react"; 3 | import Hyphenated from "react-hyphen"; 4 | 5 | const Hyphenate = ({ children }: { 6 | children: React.ReactNode; 7 | }) => { 8 | return {children}; 9 | }; 10 | 11 | export default Hyphenate; 12 | -------------------------------------------------------------------------------- /vis/js/components/LocalizationProvider.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Localization } from "../i18n/localization"; 3 | 4 | const LocalizationContext = React.createContext({} as any); 5 | 6 | export const useLocalizationContext = () => 7 | React.useContext(LocalizationContext); 8 | 9 | export default function LocalizationProvider({ localization, children }: { 10 | localization: Localization, 11 | children: React.ReactNode 12 | }) { 13 | return ( 14 | 15 | {children} 16 | 17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /vis/js/components/README.md: -------------------------------------------------------------------------------- 1 | # Components 2 | 3 | React components. See https://reactjs.org/docs/components-and-props.html 4 | 5 | Each component should be stored in a separate file. 6 | 7 | Each component should have the same name as the file it is contained in. 8 | 9 | All components in this directory should be **container components**: that means 10 | that each file should have the redux connected component exported as the 11 | default. See: https://redux.js.org/basics/usage-with-react#presentational-and-container-components 12 | 13 | Presentational components are stored in the `templates/` directory. 14 | -------------------------------------------------------------------------------- /vis/js/components/filtersort/SearchBox.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import { connect } from "react-redux"; 4 | 5 | import SearchBoxTemplate from "../../templates/filtersort/SearchBox"; 6 | import { search } from "../../actions"; 7 | 8 | const mapStateToProps = (state) => ({ 9 | value: state.list.searchValue, 10 | placeholder: state.localization.search_placeholder, 11 | }); 12 | 13 | const mapDispatchToProps = (dispatch) => ({ 14 | handleChange: (text) => dispatch(search(text)), 15 | }); 16 | 17 | export default connect(mapStateToProps, mapDispatchToProps)(SearchBoxTemplate); 18 | -------------------------------------------------------------------------------- /vis/js/dataprocessing/fetchers/Fetcher.js: -------------------------------------------------------------------------------- 1 | class Fetcher { 2 | config = { 3 | serverUrl: "", 4 | files: [], 5 | isStreamgraph: false, 6 | }; 7 | 8 | constructor(config) { 9 | this.config = config; 10 | } 11 | 12 | async getData() { 13 | throw new Error("Function not implemented."); 14 | } 15 | } 16 | 17 | export default Fetcher; 18 | -------------------------------------------------------------------------------- /vis/js/dataprocessing/fetchers/FetcherFactory.js: -------------------------------------------------------------------------------- 1 | import Fetcher from "./Fetcher"; 2 | import LocalFetcher from "./LocalFetcher"; 3 | import ServerFetcher from "./ServerFetcher"; 4 | 5 | class FetcherFactory { 6 | static getInstance(type, config) { 7 | switch (type) { 8 | case "local_files": 9 | return new LocalFetcher(config); 10 | case "search_repos": 11 | return new ServerFetcher(config); 12 | default: 13 | return new Fetcher(config); 14 | } 15 | } 16 | } 17 | 18 | export default FetcherFactory; 19 | -------------------------------------------------------------------------------- /vis/js/dataprocessing/fetchers/LocalFetcher.js: -------------------------------------------------------------------------------- 1 | import Fetcher from "./Fetcher"; 2 | 3 | class LocalFetcher extends Fetcher { 4 | async getData() { 5 | return await this.getDataFromFile(0); 6 | } 7 | 8 | async getDataFromFile(fileIndex) { 9 | const url = this.config.files[fileIndex].file; 10 | 11 | const response = await fetch(url); 12 | // TODO csv (based on config.input_format) 13 | const data = await response.json(); 14 | 15 | return data; 16 | } 17 | } 18 | 19 | export default LocalFetcher; 20 | -------------------------------------------------------------------------------- /vis/js/dataprocessing/fetchers/ServerFetcher.js: -------------------------------------------------------------------------------- 1 | import Fetcher from "./Fetcher"; 2 | 3 | class ServerFetcher extends Fetcher { 4 | async getData() { 5 | const url = 6 | this.config.serverUrl + 7 | "services/getLatestRevision.php?vis_id=" + 8 | this.config.files[0].file + 9 | "&context=true&streamgraph=" + 10 | this.config.isStreamgraph; 11 | 12 | const response = await fetch(url); 13 | const data = await response.json(); 14 | 15 | return data; 16 | } 17 | } 18 | 19 | export default ServerFetcher; 20 | -------------------------------------------------------------------------------- /vis/js/middleware/chartType.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import { STREAMGRAPH_MODE } from "../reducers/chartType"; 4 | 5 | /** 6 | * Creates a middleware that adds a boolean 'isStreamgraph' to each action. 7 | */ 8 | const chartTypeMiddleware = ({ getState }) => { 9 | return (next) => (action: any) => { 10 | action.isStreamgraph = getState().chartType === STREAMGRAPH_MODE; 11 | return next(action); 12 | }; 13 | }; 14 | 15 | export default chartTypeMiddleware; 16 | -------------------------------------------------------------------------------- /vis/js/middleware/pageTitle.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import { handleTitleAction } from "../utils/title"; 4 | 5 | const createPageTitleMiddleware = (originalTitle) => { 6 | return function ({ getState }) { 7 | return (next) => (action: any) => { 8 | if (!action.canceled && !action.isFromBackButton) { 9 | const state = getState(); 10 | handleTitleAction(action, originalTitle, state); 11 | } 12 | 13 | return next(action); 14 | }; 15 | }; 16 | }; 17 | 18 | export default createPageTitleMiddleware; 19 | -------------------------------------------------------------------------------- /vis/js/middleware/queryParameter.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import { handleUrlAction } from "../utils/url"; 4 | 5 | const queryParameterMiddleware = () => { 6 | return (next) => (action: any) => { 7 | if (!action.canceled && !action.isFromBackButton) { 8 | handleUrlAction(action); 9 | } 10 | 11 | return next(action); 12 | }; 13 | }; 14 | 15 | export default queryParameterMiddleware; 16 | -------------------------------------------------------------------------------- /vis/js/middleware/recordAction.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import logAction from "../utils/actionLogger"; 3 | 4 | const recordActionMiddleware = ({ getState }) => { 5 | return (next) => (action: any) => { 6 | if (!action.canceled) { 7 | const state = getState(); 8 | logAction(action, state); 9 | } 10 | return next(action); 11 | }; 12 | }; 13 | 14 | export default recordActionMiddleware; 15 | -------------------------------------------------------------------------------- /vis/js/middleware/repeatedInitialize.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | /** 4 | * Creates a middleware that reapplies the force layout after 5 | * each additional initialization. 6 | * 7 | * Used in Viper rescaling 8 | * 9 | * @param {Object} intermediate the intermediate instance (this) 10 | */ 11 | const createRepeatedInitializeMiddleware = (forceLayoutCallback) => { 12 | return ({ getState }) => { 13 | return (next) => (action: any) => { 14 | const data = getState().data.list; 15 | const returnValue = next(action); 16 | if (action.type === "INITIALIZE" && data.length > 0) { 17 | forceLayoutCallback(); 18 | } 19 | 20 | return returnValue; 21 | }; 22 | }; 23 | }; 24 | 25 | export default createRepeatedInitializeMiddleware; 26 | -------------------------------------------------------------------------------- /vis/js/middleware/rescale.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | /** 4 | * Creates a middleware that calls the rescaling function on the 'SCALE' action. 5 | * 6 | * @param {Function} rescaleCallback function that rescales the map 7 | */ 8 | const createRescaleMiddleware = (rescaleCallback) => { 9 | return () => { 10 | return (next) => (action: any) => { 11 | if (action.type === "SCALE") { 12 | rescaleCallback( 13 | action.value, 14 | action.baseUnit, 15 | action.contentBased, 16 | action.sort 17 | ); 18 | } 19 | return next(action); 20 | }; 21 | }; 22 | }; 23 | 24 | export default createRescaleMiddleware; 25 | -------------------------------------------------------------------------------- /vis/js/reducers/README.md: -------------------------------------------------------------------------------- 1 | # Reducers 2 | Redux reducers. See: https://redux.js.org/basics/reducers 3 | 4 | Reducers are stored in seperate files and split by which bits of the store they act upon. 5 | 6 | They are then combined using in index.js. see: https://redux.js.org/api/combinereducers -------------------------------------------------------------------------------- /vis/js/reducers/chartType.ts: -------------------------------------------------------------------------------- 1 | export const STREAMGRAPH_MODE = "streamgraph"; 2 | export const KNOWLEDGEMAP_MODE = "knowledgeMap"; 3 | 4 | type ChartType = typeof STREAMGRAPH_MODE | typeof KNOWLEDGEMAP_MODE; 5 | 6 | const chartType = (state: ChartType = KNOWLEDGEMAP_MODE, action: any) => { 7 | if (action.canceled) { 8 | return state; 9 | } 10 | 11 | switch (action.type) { 12 | case "INITIALIZE": 13 | return action.configObject.is_streamgraph 14 | ? STREAMGRAPH_MODE 15 | : KNOWLEDGEMAP_MODE; 16 | default: 17 | return state; 18 | } 19 | }; 20 | 21 | export default chartType; 22 | -------------------------------------------------------------------------------- /vis/js/reducers/highlightedBubble.ts: -------------------------------------------------------------------------------- 1 | const highlightedBubble = (state = null, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | switch (action.type) { 6 | case "HIGHLIGHT_AREA": 7 | return action.uri; 8 | default: 9 | return state; 10 | } 11 | }; 12 | 13 | export default highlightedBubble; 14 | -------------------------------------------------------------------------------- /vis/js/reducers/hyphenationLang.ts: -------------------------------------------------------------------------------- 1 | const hyphenationLang = (state = null, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | 6 | switch (action.type) { 7 | case "INITIALIZE": 8 | return action.configObject.hyphenation_language; 9 | default: 10 | return state; 11 | } 12 | }; 13 | 14 | export default hyphenationLang; 15 | -------------------------------------------------------------------------------- /vis/js/reducers/isCovis.ts: -------------------------------------------------------------------------------- 1 | // workaround solution to recognize covis (cannot use config.service, because it's gsheets) 2 | 3 | const isCovis = (state = false, action: any) => { 4 | if (action.canceled) { 5 | return state; 6 | } 7 | 8 | switch (action.type) { 9 | case "INITIALIZE": 10 | return action.configObject.language === "eng_covis"; 11 | default: 12 | return state; 13 | } 14 | }; 15 | 16 | export default isCovis; 17 | -------------------------------------------------------------------------------- /vis/js/reducers/localization.ts: -------------------------------------------------------------------------------- 1 | const localization = (state = {}, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | 6 | switch (action.type) { 7 | // localization does not change after the first setup 8 | default: 9 | return state; 10 | } 11 | }; 12 | 13 | export default localization; 14 | -------------------------------------------------------------------------------- /vis/js/reducers/misc.ts: -------------------------------------------------------------------------------- 1 | const misc = ( 2 | state = { 3 | isEmbedded: false, 4 | isLoading: true, 5 | showCreatedByViper: false, 6 | showLoading: false, 7 | renderList: false, 8 | renderMap: false, 9 | timestamp: null, 10 | visTag: null, 11 | }, 12 | action: any 13 | ) => { 14 | if (action.canceled) { 15 | return state; 16 | } 17 | 18 | switch (action.type) { 19 | case "INITIALIZE": 20 | return { 21 | ...state, 22 | isLoading: false, 23 | }; 24 | default: 25 | return state; 26 | } 27 | }; 28 | 29 | export default misc; 30 | -------------------------------------------------------------------------------- /vis/js/reducers/modalInfoType.ts: -------------------------------------------------------------------------------- 1 | const modalInfoType = (state = {}, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | 6 | switch (action.type) { 7 | // does not change after the first setup 8 | default: 9 | return state; 10 | } 11 | }; 12 | 13 | export default modalInfoType; 14 | -------------------------------------------------------------------------------- /vis/js/reducers/paper.ts: -------------------------------------------------------------------------------- 1 | const paper = (state = {}, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | 6 | const { configObject } = action; 7 | 8 | switch (action.type) { 9 | case "INITIALIZE": 10 | return { 11 | showSocialMedia: !!configObject?.paper?.showSocialMedia, 12 | showReferences: !!configObject?.paper?.showReferences, 13 | showCitations: !!configObject?.paper?.showCitations, 14 | showPubmedCitations: !!configObject?.paper?.showPubmedCitations, 15 | showReaders: !!configObject?.paper?.showReaders, 16 | showTweets: !!configObject?.paper?.showTweets, 17 | }; 18 | default: 19 | return state; 20 | } 21 | }; 22 | 23 | export default paper; 24 | -------------------------------------------------------------------------------- /vis/js/reducers/selectedBubble.ts: -------------------------------------------------------------------------------- 1 | const selectedBubble = (state = null, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | 6 | switch (action.type) { 7 | case "ZOOM_OUT": 8 | return null; 9 | case "INITIALIZE": 10 | return null; 11 | case "ZOOM_IN": 12 | return { 13 | title: action.selectedAreaData.title, 14 | uri: action.selectedAreaData.uri, 15 | color: action.selectedAreaData.color, 16 | docIds: action.selectedAreaData.docIds, 17 | }; 18 | case "SCALE": 19 | return null; 20 | default: 21 | return state; 22 | } 23 | }; 24 | 25 | export default selectedBubble; 26 | -------------------------------------------------------------------------------- /vis/js/reducers/selectedPaper.ts: -------------------------------------------------------------------------------- 1 | const selectedPaper = (state = null, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | 6 | switch (action.type) { 7 | case "INITIALIZE": 8 | case "ZOOM_OUT": 9 | case "SCALE": 10 | case "DESELECT_PAPER": 11 | return null; 12 | case "ZOOM_IN": { 13 | if (!action.selectedPaperData) { 14 | return null; 15 | } 16 | 17 | return { 18 | safeId: action.selectedPaperData.safe_id, 19 | }; 20 | } 21 | case "SELECT_PAPER": 22 | return { 23 | safeId: action.safeId, 24 | }; 25 | default: 26 | return state; 27 | } 28 | }; 29 | 30 | export default selectedPaper; 31 | -------------------------------------------------------------------------------- /vis/js/reducers/service.ts: -------------------------------------------------------------------------------- 1 | const service = (state = null, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | 6 | switch (action.type) { 7 | case "INITIALIZE": 8 | return typeof action.contextObject.service !== "undefined" 9 | ? action.contextObject.service 10 | : null; 11 | default: 12 | return state; 13 | } 14 | }; 15 | 16 | export default service; 17 | -------------------------------------------------------------------------------- /vis/js/reducers/streamgraph.ts: -------------------------------------------------------------------------------- 1 | const streamgraph = (state = { data: "", colors: [], visTag: "" }, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | 6 | switch (action.type) { 7 | case "INITIALIZE": 8 | return { 9 | ...state, 10 | streams: action.streams, 11 | colors: action.configObject.streamgraph_colors, 12 | visTag: action.configObject.tag, 13 | }; 14 | default: 15 | return state; 16 | } 17 | }; 18 | 19 | export default streamgraph; 20 | -------------------------------------------------------------------------------- /vis/js/reducers/tracking.ts: -------------------------------------------------------------------------------- 1 | const tracking = (state = {}, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | 6 | switch (action.type) { 7 | case "INITIALIZE": 8 | return { 9 | ...state, 10 | trackMouseOver: action.configObject.enable_mouseover_evaluation, 11 | }; 12 | default: 13 | return state; 14 | } 15 | }; 16 | 17 | export default tracking; 18 | -------------------------------------------------------------------------------- /vis/js/reducers/zoom.ts: -------------------------------------------------------------------------------- 1 | const zoom = (state = false, action: any) => { 2 | if (action.canceled) { 3 | return state; 4 | } 5 | 6 | switch (action.type) { 7 | case "ZOOM_IN": 8 | return true; 9 | case "ZOOM_OUT": 10 | return false; 11 | case "INITIALIZE": 12 | return false; 13 | case "SCALE": 14 | return false; 15 | default: 16 | return state; 17 | } 18 | }; 19 | 20 | export default zoom; 21 | -------------------------------------------------------------------------------- /vis/js/templates/Backlink.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export interface BackLinkProps { 4 | label: string; 5 | onClick: () => void; 6 | className?: string; 7 | } 8 | 9 | const BackLink = ({ label, onClick, className = "backlink" }: BackLinkProps) => { 10 | return ( 11 | 16 | ); 17 | }; 18 | 19 | export default BackLink; 20 | -------------------------------------------------------------------------------- /vis/js/templates/ContextLine.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | // inside the 'children' variable are various React components 4 | // from directory ./contextfeatures 5 | const ContextLine = ({ children }: { 6 | children: React.ReactNode; 7 | }) => { 8 | return ( 9 | // html template starts here 10 |

{children}

11 | // html template ends here 12 | ); 13 | }; 14 | 15 | export default ContextLine; 16 | -------------------------------------------------------------------------------- /vis/js/templates/HoverPopover.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import React from "react"; 4 | 5 | import { OverlayTrigger, Popover } from "react-bootstrap"; 6 | 7 | const HoverPopover = ({ 8 | id, 9 | size, 10 | content, 11 | children, 12 | container, // = null 13 | placement = "bottom", 14 | }) => { 15 | const popover = ( 16 | 17 | {content} 18 | 19 | ); 20 | 21 | return ( 22 | 28 | {children} 29 | 30 | ); 31 | }; 32 | 33 | export default HoverPopover; 34 | -------------------------------------------------------------------------------- /vis/js/templates/Loading.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { useLocalizationContext } from "../components/LocalizationProvider"; 4 | 5 | const Loading = () => { 6 | const localization = useLocalizationContext(); 7 | 8 | return ( 9 |
10 |
11 | {localization.loading} 12 |
13 |
14 | 18 |
19 |
20 | ); 21 | }; 22 | 23 | export default Loading; 24 | -------------------------------------------------------------------------------- /vis/js/templates/SubdisciplineTitle.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import Heading from "../components/Heading"; 4 | import BackLink from "../components/Backlink"; 5 | import ContextLine from "../components/ContextLine"; 6 | 7 | class SubdisciplineTitle extends React.Component { 8 | render() { 9 | return ( 10 | <> 11 |
12 | 13 | 14 | 15 |
16 | 17 | ); 18 | } 19 | } 20 | 21 | export default SubdisciplineTitle; 22 | -------------------------------------------------------------------------------- /vis/js/templates/buttons/FAQsButton.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { Button } from "react-bootstrap"; 4 | 5 | const FAQsButton = ({ url }: { 6 | url: string; 7 | }) => { 8 | const handleClick = () => { 9 | window.open(url, "_blank"); 10 | }; 11 | 12 | // title and label not localized in the old code 13 | return ( 14 |
15 | 25 |
26 | ); 27 | }; 28 | 29 | export default FAQsButton; 30 | -------------------------------------------------------------------------------- /vis/js/templates/contextfeatures/DatasetCount.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const DatasetCount = ({ value, label }: { 4 | value: string; 5 | label: string; 6 | }) => { 7 | return ( 8 | // html template starts here 9 | 10 | {value} {label} 11 | 12 | // html template ends here 13 | ); 14 | }; 15 | 16 | export default DatasetCount; 17 | -------------------------------------------------------------------------------- /vis/js/templates/contextfeatures/Funder.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Funder = ({ children }: { 4 | children: React.ReactNode; 5 | }) => { 6 | return ( 7 | // html template starts here 8 | 9 | Funder: {children} 10 | 11 | // html template ends here 12 | ); 13 | }; 14 | 15 | export default Funder; 16 | -------------------------------------------------------------------------------- /vis/js/templates/contextfeatures/LegacySearchLang.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const LegacySearchLang = ({ children }: { 4 | children: React.ReactNode; 5 | }) => { 6 | return ( 7 | // html template starts here 8 | 9 | {children} 10 | 11 | // html template ends here 12 | ); 13 | }; 14 | 15 | export default LegacySearchLang; 16 | -------------------------------------------------------------------------------- /vis/js/templates/contextfeatures/PaperCount.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const PaperCount = ({ value, label }: { 4 | value: number; 5 | label: string; 6 | }) => { 7 | return ( 8 | // html template starts here 9 | 10 | {value} {label} 11 | 12 | // html template ends here 13 | ); 14 | }; 15 | 16 | export default PaperCount; 17 | -------------------------------------------------------------------------------- /vis/js/templates/contextfeatures/ProjectRuntime.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ProjectRuntime = ({ children }: { 4 | children: React.ReactNode; 5 | }) => { 6 | return ( 7 | // html template starts here 8 | 9 | {children} 10 | 11 | // html template ends here 12 | ); 13 | }; 14 | 15 | export default ProjectRuntime; 16 | -------------------------------------------------------------------------------- /vis/js/templates/contextfeatures/SearchLang.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import React from "react"; 3 | import ISO6391 from "iso-639-1"; 4 | 5 | import { useLocalizationContext } from "../../components/LocalizationProvider"; 6 | 7 | const SearchLang = ({ children: langCode }) => { 8 | const localization = useLocalizationContext(); 9 | 10 | const lang = 11 | langCode === "all" ? localization.lang_all : ISO6391.getName(langCode); 12 | 13 | return ( 14 | // html template starts here 15 | 16 | {lang} 17 | 18 | // html template ends here 19 | ); 20 | }; 21 | 22 | export default SearchLang; 23 | -------------------------------------------------------------------------------- /vis/js/templates/contextfeatures/Timespan.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Timespan = ({ children }: { 4 | children: React.ReactNode; 5 | }) => { 6 | return ( 7 | // html template starts here 8 | 9 | {children} 10 | 11 | // html template ends here 12 | ); 13 | }; 14 | 15 | export default Timespan; 16 | -------------------------------------------------------------------------------- /vis/js/templates/contextfeatures/Timestamp.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Timestamp = ({ value, label }: { 4 | value: string; 5 | label: string; 6 | }) => { 7 | return ( 8 | // html template starts here 9 | 10 | {label}: {value} 11 | 12 | // html template ends here 13 | ); 14 | }; 15 | 16 | export default Timestamp; 17 | -------------------------------------------------------------------------------- /vis/js/templates/filtersort/BasicFilterSort.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import SearchBox from "../../components/filtersort/SearchBox"; 3 | import SortDropdown from "../../components/filtersort/SortDropdown"; 4 | 5 | 6 | export interface BasicFilterSortProps { 7 | displaySort: boolean; 8 | color: string; 9 | } 10 | 11 | const BasicFilterSort = ({ displaySort, color }: BasicFilterSortProps) => { 12 | return ( 13 |
18 | 19 | {!!displaySort && } 20 |
21 | ); 22 | }; 23 | 24 | export default BasicFilterSort; 25 | -------------------------------------------------------------------------------- /vis/js/templates/headingtitles/BasicTitle.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import React from "react"; 3 | 4 | const BasicTitle = ({ title }: { 5 | title: string; 6 | }) => { 7 | // dangerously Setting the Inner HTML because of e.g. Covis, where the basic title is HTML 8 | // the span must be here so the dangerouslySetInnerHTML works 9 | return ; 10 | }; 11 | 12 | export default BasicTitle; 13 | -------------------------------------------------------------------------------- /vis/js/templates/headingtitles/CustomTitle.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import React from "react"; 4 | 5 | const CustomTitle = ({ label, title, query, explanation }) => { 6 | return ( 7 | // html template starts here 8 | <> 9 | {label}{" "} 10 | 11 | {title} 12 | 13 | 14 | // html template ends here 15 | ); 16 | }; 17 | 18 | export default CustomTitle; 19 | -------------------------------------------------------------------------------- /vis/js/templates/headingtitles/ProjectTitle.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import React from "react"; 4 | 5 | const ProjectTitle = ({ fullTitle, shortTitle, projectId }) => { 6 | return ( 7 | // html template starts here 8 | <> 9 | Overview of{" "} 10 | 11 | {shortTitle} 12 | {" "} 13 | ({projectId}) 14 | 15 | // html template ends here 16 | ); 17 | }; 18 | 19 | export default ProjectTitle; 20 | -------------------------------------------------------------------------------- /vis/js/templates/headingtitles/StandardTitle.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | interface StandardTitleProps { 4 | label: string; 5 | title: string; 6 | shortTitle?: string; 7 | } 8 | 9 | const StandardTitle = ({ label, title, shortTitle = title }: StandardTitleProps) => { 10 | return ( 11 | // html template starts here 12 | <> 13 | {label}{" "} 14 | 15 | {shortTitle} 16 | 17 | 18 | // html template ends here 19 | ); 20 | }; 21 | 22 | export default StandardTitle; 23 | -------------------------------------------------------------------------------- /vis/js/templates/headingtitles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as BasicTitle } from "./BasicTitle"; 2 | export { default as CustomTitle } from "./CustomTitle"; 3 | export { default as StandardTitle } from "./StandardTitle"; 4 | export { default as ProjectTitle } from "./ProjectTitle"; 5 | -------------------------------------------------------------------------------- /vis/js/templates/listentry/Citations.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | interface CitationsProps { 4 | number: number; 5 | label: string; 6 | } 7 | 8 | const Citations = ({ number, label }: CitationsProps) => { 9 | return ( 10 | // html template starts here 11 |
12 | {label}{" "} 13 | {number}  14 |
15 | // html template ends here 16 | ); 17 | }; 18 | 19 | export default Citations; 20 | -------------------------------------------------------------------------------- /vis/js/templates/listentry/DocTypesRow.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import React from "react"; 4 | 5 | import { useLocalizationContext } from "../../components/LocalizationProvider"; 6 | import Highlight from "../../components/Highlight"; 7 | 8 | const DocTypesRow = ({ types }) => { 9 | const loc = useLocalizationContext(); 10 | 11 | const typesString = types.length > 0 ? types.join(", ") : loc.unknown; 12 | 13 | return ( 14 |
15 | {loc.doctypes}: 16 | 17 | {typesString} 18 | 19 |
20 | ); 21 | }; 22 | 23 | export default DocTypesRow; 24 | -------------------------------------------------------------------------------- /vis/js/templates/listentry/Keywords.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import React from "react"; 4 | 5 | import { useLocalizationContext } from "../../components/LocalizationProvider"; 6 | import Highlight from "../../components/Highlight"; 7 | 8 | const Keywords = ({ children: text }) => { 9 | const localization = useLocalizationContext(); 10 | 11 | return ( 12 |
13 | {localization.keywords}: 14 | 15 | {text} 16 | 17 |
18 | ); 19 | }; 20 | 21 | export default Keywords; 22 | -------------------------------------------------------------------------------- /vis/js/templates/modals/exportmodal/Loading.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import React from "react"; 4 | 5 | import { useLocalizationContext } from "../../../components/LocalizationProvider"; 6 | 7 | const Loading = () => { 8 | const loc = useLocalizationContext(); 9 | 10 | return ( 11 |
12 |

{loc.pdf_load_text}

13 |

14 | {" "} 18 |

19 |
20 | ); 21 | }; 22 | 23 | export default Loading; 24 | -------------------------------------------------------------------------------- /vis/js/templates/modals/infomodal/DefaultKMInfo.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import React from "react"; 3 | import StandardKMInfo from "./subcomponents/StandardKMInfo"; 4 | 5 | const DefaultKMInfo = ({ params }) => { 6 | return ( 7 | // html template starts here 8 | 9 | // html template ends here 10 | ); 11 | }; 12 | 13 | export default DefaultKMInfo; 14 | -------------------------------------------------------------------------------- /vis/js/templates/modals/infomodal/DefaultSGInfo.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import React from "react"; 3 | import StandardSGInfo from "./subcomponents/StandardSGInfo"; 4 | 5 | const DefaultSGInfo = ({ params }) => { 6 | return ( 7 | 8 | ); 9 | }; 10 | 11 | export default DefaultSGInfo; 12 | -------------------------------------------------------------------------------- /vis/js/templates/modals/infomodal/TripleKMInfo.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import React from "react"; 4 | 5 | import StandardKMInfo from "./subcomponents/StandardKMInfo"; 6 | 7 | const TripleKMInfo = ({ params }) => { 8 | return ( 9 | 10 | ); 11 | }; 12 | 13 | export default TripleKMInfo; 14 | -------------------------------------------------------------------------------- /vis/js/templates/modals/infomodal/TripleSGInfo.tsx: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import React from "react"; 3 | 4 | import StandardSGInfo from "./subcomponents/StandardSGInfo"; 5 | 6 | const TripleSGInfo = ({ params }) => { 7 | return ( 8 | 9 | ); 10 | }; 11 | 12 | export default TripleSGInfo; 13 | -------------------------------------------------------------------------------- /vis/js/utils/debounce.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | /** 4 | * Debounce any function 5 | * 6 | * Copied from helpers.js 7 | */ 8 | export default function debounce(func, wait, immediate) { 9 | var timeout; 10 | return function () { 11 | let context = this, 12 | args = arguments; 13 | let later = function () { 14 | timeout = null; 15 | if (!immediate) func.apply(context, args); 16 | }; 17 | let callNow = immediate && !timeout; 18 | clearTimeout(timeout); 19 | timeout = setTimeout(later, wait); 20 | if (callNow) func.apply(context, args); 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /vis/js/utils/transition.ts: -------------------------------------------------------------------------------- 1 | import { transition } from "d3-transition"; 2 | import { easePolyInOut } from "d3-ease"; 3 | 4 | /** 5 | * Returns d3 transition object that is passed as a parameter 6 | * to each component transition. 7 | * 8 | * @param {Function} callback callback triggered at the end 9 | */ 10 | export const createTransition = (duration: number, callback: () => void) => { 11 | const newTransition = transition() 12 | .duration(duration) 13 | .ease(easePolyInOut.exponent(3)); 14 | newTransition.on("end", callback); 15 | return newTransition; 16 | }; 17 | -------------------------------------------------------------------------------- /vis/js/utils/unescapeHTMLentities.ts: -------------------------------------------------------------------------------- 1 | export const unescapeHTML = (htmlString: string) => { 2 | let entityMap: any = { 3 | "&": "&", 4 | "<": "<", 5 | ">": ">", 6 | """: '"', 7 | """: '"', 8 | "'": "'", 9 | "/": "/", 10 | "`": "`", 11 | "=": "=", 12 | } as const; 13 | 14 | return String(htmlString).replace( 15 | /(&|<|>|"|"|'|/|`|=)/g, 16 | function (s) { 17 | return entityMap[s]; 18 | } 19 | ); 20 | }; 21 | -------------------------------------------------------------------------------- /vis/js/utils/useMatomo.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-undef */ 2 | const useMatomo = () => { 3 | const trackEvent = trackMatomoEvent; 4 | 5 | return { trackEvent }; 6 | }; 7 | 8 | export default useMatomo; 9 | 10 | export const trackMatomoEvent = (category: string, action: string, name?: string, value?: string, dimensions?: string) => { 11 | const trackingArray = [ 12 | "trackEvent", 13 | category, 14 | action, 15 | name, 16 | value, 17 | dimensions, 18 | ]; 19 | 20 | if (process.env.NODE_ENV === "development") { 21 | console.log("DEBUG: tracking matomo event", trackingArray); 22 | } 23 | 24 | // @ts-ignore 25 | if (typeof _paq !== "undefined") { 26 | // @ts-ignore 27 | _paq.push(trackingArray); 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /vis/stylesheets/components/_animations.scss: -------------------------------------------------------------------------------- 1 | #spinner { 2 | display: table-cell; 3 | vertical-align: middle; 4 | text-align: center; 5 | } 6 | 7 | .glyphicon-refresh { 8 | font-size: 3em; 9 | } 10 | 11 | .glyphicon-refresh-animate { 12 | -animation: spin .7s infinite linear; 13 | -webkit-animation: spin2 .7s infinite linear; 14 | } 15 | 16 | @-webkit-keyframes spin2 { 17 | from { 18 | -webkit-transform: rotate(0deg); 19 | } 20 | 21 | to { 22 | -webkit-transform: rotate(360deg); 23 | } 24 | } 25 | 26 | @keyframes spin { 27 | from { 28 | transform: scale(1) rotate(0deg); 29 | } 30 | 31 | to { 32 | transform: scale(1) rotate(360deg); 33 | } 34 | } -------------------------------------------------------------------------------- /vis/stylesheets/components/_input.scss: -------------------------------------------------------------------------------- 1 | /* Create a very small input group*/ 2 | 3 | .input-group-xs { 4 | .form-control, .input-group-addon, .input-group-btn > .btn { 5 | height: 22px; 6 | padding: 1px 5px; 7 | font-size: 12px; 8 | line-height: 1.5; 9 | } 10 | } 11 | 12 | .form-control::-moz-placeholder { 13 | color: #999; 14 | opacity: 1; 15 | font-weight: $fontweight400; 16 | font-family: $link-font-family; 17 | font-size: 11px; 18 | } -------------------------------------------------------------------------------- /vis/stylesheets/layout/_forms.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/layout/_forms.scss -------------------------------------------------------------------------------- /vis/stylesheets/modules/_list.scss: -------------------------------------------------------------------------------- 1 | @import "list/header"; 2 | @import "list/entry"; 3 | 4 | /* ################ List Explorer ############### */ 5 | #papers_list { 6 | float: right; 7 | overflow-y: scroll; 8 | padding-top: 0px; 9 | padding-left: 5px; 10 | padding-right: 5px; 11 | background-color: white; 12 | font-size: 10px; 13 | font-family: $special-font-family; 14 | } 15 | 16 | @if $skin == 'cris_vis' { 17 | #papers_list { 18 | padding-top: 10px; 19 | } 20 | } -------------------------------------------------------------------------------- /vis/stylesheets/modules/_multiples.scss: -------------------------------------------------------------------------------- 1 | /* ########### Multiples ########### */ 2 | line { 3 | &.connection { 4 | stroke: rgb(255, 0, 0); 5 | stroke-width: 2; 6 | } 7 | 8 | stroke: rgb(0, 0, 0); 9 | stroke-width: .15px; 10 | } 11 | 12 | .tl-title { 13 | float: left; 14 | text-align: center; 15 | } -------------------------------------------------------------------------------- /vis/stylesheets/modules/list/_list-show-button.scss: -------------------------------------------------------------------------------- 1 | #show_hide_button { 2 | cursor: pointer; 3 | padding: 5px 0px; 4 | border: 2px solid $list_show_hide_button_border; 5 | background-color: white; 6 | color: $black; 7 | 8 | &:hover { 9 | background-color: $list_show_hide_button; 10 | color: white; 11 | } 12 | } 13 | 14 | #show_hide_button_label { 15 | font-family: $link-font-family; 16 | font-size: 12px; 17 | float: left; 18 | text-align: center; 19 | } 20 | 21 | #curr-filter-type, #curr-sort-type { 22 | font-weight: normal; 23 | } 24 | 25 | .row { 26 | margin-left: 0; 27 | margin-right: 0; 28 | } -------------------------------------------------------------------------------- /vis/stylesheets/utils/_mixins.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/utils/_mixins.scss -------------------------------------------------------------------------------- /vis/stylesheets/vendors/_bootstrap.scss: -------------------------------------------------------------------------------- 1 | $icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/"; 2 | @import "~bootstrap-sass/assets/stylesheets/bootstrap"; -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /vis/stylesheets/vendors/fontawesome/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenKnowledgeMaps/Headstart/7ad7706fdd641fd91a5b7d325d3dcac96d9e1527/vis/stylesheets/vendors/fontawesome/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /vis/test/component/README.md: -------------------------------------------------------------------------------- 1 | # Component tests 2 | Isolated stand alone tests for components using react-dom/test-utils. See: https://reactjs.org/docs/test-utils.html 3 | 4 | The redux store should be mocked using: https://github.com/reduxjs/redux-mock-store -------------------------------------------------------------------------------- /vis/test/data/README.md: -------------------------------------------------------------------------------- 1 | # Test data 2 | 3 | Real data from real Headstart instances (base, pubmed, covis, viper etc.). 4 | -------------------------------------------------------------------------------- /vis/test/fileMock.js: -------------------------------------------------------------------------------- 1 | export default "test-file-stub"; 2 | -------------------------------------------------------------------------------- /vis/test/snapshot/README.md: -------------------------------------------------------------------------------- 1 | # Snapshot Tests 2 | Snapshot testing using jest. See https://jestjs.io/docs/en/snapshot-testing for more details. 3 | 4 | Components should be rendered using: https://reactjs.org/docs/test-renderer.html -------------------------------------------------------------------------------- /vis/test/snapshot/__snapshots__/backlink.test.jsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`Backlink component snapshot > matches as knowledgeMap snapshot 1`] = ` 4 | 15 | `; 16 | 17 | exports[`Backlink component snapshot > matches as streamgraph snapshot 1`] = ` 18 | 29 | `; 30 | -------------------------------------------------------------------------------- /vis/test/store/README.md: -------------------------------------------------------------------------------- 1 | # Store Tests 2 | Tests for the redux store (e.g. actions and reducers) should live here. 3 | 4 | These can generally follow very standard jest type tests and shouldn't require anything like a special mocking library. -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vitest/config"; 2 | import react from "@vitejs/plugin-react"; 3 | import inject from '@rollup/plugin-inject' 4 | 5 | export default defineConfig({ 6 | plugins: [ 7 | react(), 8 | inject({ 9 | $: [ 'jquery', '*' ], 10 | jQuery: 'jquery', 11 | }), 12 | ], 13 | assetsInclude: ["**/*.csl"], 14 | 15 | resolve: { 16 | alias: { 17 | lib: "/vis/lib", 18 | markjs: "mark.js/dist/jquery.mark.js", 19 | // hypher: "hypher/dist/jquery.hypher.js", 20 | }, 21 | }, 22 | test: { 23 | globals: true, 24 | environment: "jsdom", 25 | setupFiles: "./vis/test/setupTests.js", 26 | }, 27 | }); 28 | --------------------------------------------------------------------------------