https://github.com/acdh-oeaw/apis-oebl-research-tool-front-end
See also https://redmine.acdh.oeaw.ac.at/issues/18296
https://github.com/acdh-oeaw/apis-oebl-research-tool-front-end
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (11.7%) to scientific vocabulary
Repository
See also https://redmine.acdh.oeaw.ac.at/issues/18296
Basic Info
- Host: GitHub
- Owner: acdh-oeaw
- License: mit
- Language: Vue
- Default Branch: development
- Homepage: https://oebl-research.acdh-dev.oeaw.ac.at
- Size: 6.17 MB
Statistics
- Stars: 0
- Watchers: 11
- Forks: 0
- Open Issues: 32
- Releases: 0
Metadata Files
readme.md
IRS
Integriertes Redaktionssystem
The IRS is meant as a system for computer-aided research and data enrichment, publication project tracking and collaborative scientific writing. The application consists of three main parts:
1. The Research Tool
Lemmas (specifically: persons of historical interest) can be entered manually or batch-imported (from XLS or CSV Files) into the Research Tool. The Research Tool will then try to find the Lemma's GND (its norm-data Identifier, the Integrated Authority File). Once found, it triggers an asynchronous scrape job on the server that tries to find additional information on the subject in various catalogues and databases. The scrape job will trigger an Event on the client side once it's done. The additional information is then displayed under "Externe Ressourcen". If a GND could not be found automatically, it can be selected manually.
All Lemmas can be organized into lists/folders (displayed in the left hand side bar) via drag-and-drop. They can be searched and filtered by all their attributes.

2. The Issue Manager
Once a Lemma is selected for publication, it can be added to an Issue ("Abgabe"). Inside the Issue, an Article’s status can change by moving it from column to column. The natural progression of an Article over time would be left-to-right. Tags can be used to categorize the Articles further and to add important organizational details (such as the payment status, whether the Article is delayed, etc.). In the Issue Manager, the Articles are assigned to Editors and Authors, and the progress is tracked.

3. The Article Editor
The Article editor is specifically designed for writing, editing and annotating scientific texts. There are three main types of annotations:
- Comments (or rather, Comment Threads). Similar to Microsoft Word or Apple Pages.
- Citations. Ranges that are linked to a Zotero Item (a publication).
- Named Entities. People, places, artifacts, etc. As a basic type, they can have a Relation Type, a Duration and the actual Entity.
The data for Citations and for Named Entities is stored directly in the document tree, whereas the Comments are only referenced with a UUID with their content stored separately on the server.
An Article (document) can currently contain several types of nodes / blocks:
- a text paragraph.
- a first or second order heading.
- an image, inserted via drag and drop or a menu action.
- an audio file, inserted via drag and drop or a menu action.

Development
Basics
The application uses Vue 2.x with
Vuetify 2.x as a UI component library, and
uses custom UI Elements only if strictly necessary (see src/views/lib). All
components are written in Typescript with Class Component Decorators. Tests are run with Playwright.
The color scheme of the application is defined in
src/plugins/vuetify.ts.
For practical development purposes, the following two pieces of software are wholeheartedly recommended:
Hosting
The SPA is served from a Node.js based Express server, handling the static files (see
server/index.ts). The built-in server also performs other (minor) duties (i. e.
proxying/caching Zotero responses and providing the "Event Bus" — see below).
REST API calls / RPC
The Back End provides an OpenAPI (née Swagger) spec. By calling npm run generate:api-client, the
spec is downloaded and transformed into a statically typed TS API client. All calls to the Back End
are then made through this API client. When the client is generated by the
openapi-typescript-codegen module, we
also "inject" a custom request handler, located in
src/service/request.ts which handles things like errors, the login
process and request states. During the build phase, it is copied to
src/api/core/request.ts, and then run from there — thus, if you want to
modify the request handler, modify it in src/service, and then run
npm run generate:api-client to try it out.
The auto-generated types are also used extensively throughout the code base.
State Management
The application state is not stored inside a traditional Vuex State Container, but instead in bare
Typescript classes located in src/store. Their instance methods are used to mutate
their state. They also subscribe to remote changes and emit events, as described below. In all
stores, state variables that can only be mutated by a class member but can be read by the public,
are marked private, prefixed with an underscore and use a getter (but no setter) for public read
access. This means the app will not compile if (for instance) a component controller tries to modify
a store's state directly.
Currently, all Lemmas are stored, searched and filtered on the client in an IndexedDB table (called
LemmaDb). On start-up, we fetch the updates, inserts and deletions from the server, and update the
local database accordingly (all of this happens in the lemma class / store).
Real-Time Synchronization
Clients keep each other up to date by connecting to a remote "Event Bus" (a WebSocket server),
provided by the built-in Node.js server (see server/index.ts). Clients receive
Events when the data is changed by another. The Back End can also send specific types of Events by
POSTing to paths starting with /message — for instance when a Lemma's scrape data is updated by
the server. This only works if a secret key is provided in the request header. All NotifyEvents
are statically typed and thus conveniently enumerated in
src/service/notify.ts`.
Zotero data caching
Upon initialization the built in server starts caching responses from the Zotero API that rarely
change (specifically the ItemTypeFields for every type of publication).
Editor
The Editor component makes heavy use of ProseMirror's API, data structures and nomenclature both via TipTap 2 and directly. Familiarity with the respective APIs is probably necessary for productive development.
Road Map
- [ ] Use Tokens for authentication instead of HTTP Basic Auth in the header. (Must be coordinated with the Back End)
- [ ] Integrate the editor with the Back End
- [ ] Save Article (XML)
- [ ] Load Article (XML)
- [ ] Comments store
- [ ] Don't get entities from Lobid, but from APIS.
- [ ] Run automatic Named Entity Recognition via a spaCy Instance.
- [ ] Browse previous versions of the Article. (Possibly display diff?)
- [ ] "Auto Save" with a dedicated flag, so the Back End can differentiate between automatic and intentional saves.
- [ ] Actually upload "Dateien" in the Research Tool Component.
- [ ] Ability to add (Zotero) literature to a Lemma in the Research Tool Component.
- [ ] Create a specialized UI just for Authors, where they can only see and edit their own assigned Articles.
- [ ] Display legacy publication data from Gideon.
Project setup
bash
npm install
Provide environment variables in .env.local:
bash
cp .env.local.example .env.local
Compiles and hot-reloads for development
bash
npm run dev
Compiles and minifies for production
bash
npm run build
Run e2e tests
bash
npm run test
Lints and fixes files
bash
npm run lint:fix
Start the server for production
bash
npm run start
Owner
- Name: Austrian Centre for Digital Humanities & Cultural Heritage
- Login: acdh-oeaw
- Kind: organization
- Email: acdh@oeaw.ac.at
- Location: Vienna, Austria
- Website: https://www.oeaw.ac.at/acdh
- Repositories: 476
- Profile: https://github.com/acdh-oeaw
GitHub Events
Total
Last Year
Issues and Pull Requests
Last synced: over 1 year ago
All Time
- Total issues: 186
- Total pull requests: 0
- Average time to close issues: 10 months
- Average time to close pull requests: N/A
- Total issue authors: 1
- Total pull request authors: 0
- Average comments per issue: 2.77
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 0
- Pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- sennierer (100)
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- 2097 dependencies
- @types/chai ^4.2.11 development
- @types/compression ^1.7.0 development
- @types/mocha ^5.2.4 development
- @types/node-fetch ^2.5.10 development
- @types/prosemirror-dev-tools ^3.0.1 development
- @types/uuid ^8.3.0 development
- @typescript-eslint/eslint-plugin ^2.33.0 development
- @typescript-eslint/parser ^2.33.0 development
- @vue/cli-plugin-babel ~4.5.0 development
- @vue/cli-plugin-e2e-cypress ~4.5.0 development
- @vue/cli-plugin-eslint ~4.5.0 development
- @vue/cli-plugin-pwa ~4.5.0 development
- @vue/cli-plugin-router ~4.5.0 development
- @vue/cli-plugin-typescript ~4.5.0 development
- @vue/cli-plugin-unit-mocha ~4.5.0 development
- @vue/cli-plugin-vuex ~4.5.0 development
- @vue/cli-service ~4.5.0 development
- @vue/eslint-config-standard ^5.1.2 development
- @vue/eslint-config-typescript ^5.0.2 development
- @vue/test-utils ^1.0.3 development
- chai ^4.1.2 development
- concurrently ^6.2.1 development
- env-cmd ^10.1.0 development
- eslint ^6.7.2 development
- eslint-plugin-import ^2.20.2 development
- eslint-plugin-node ^11.1.0 development
- eslint-plugin-promise ^4.2.1 development
- eslint-plugin-standard ^4.0.0 development
- eslint-plugin-vue ^6.2.2 development
- leader-line-types ^1.0.5-2 development
- nodemon ^2.0.7 development
- openapi-typescript-codegen ^0.9.3 development
- prosemirror-dev-tools ^3.0.2 development
- sass ^1.32.4 development
- sass-loader ^10.1.1 development
- schema-dts ^0.8.2 development
- stylus ^0.54.7 development
- stylus-loader ^3.0.2 development
- ts-jest ^27.0.5 development
- ts-node ^9.1.1 development
- ts-node-dev ^1.1.6 development
- typescript ~3.9.3 development
- vue-cli-plugin-vuetify ~2.0.7 development
- vue-jest ^3.0.7 development
- vue-template-compiler ^2.6.11 development
- @babel/polyfill ^7.4.4
- @mdi/font ^3.6.95
- @tiptap/extension-highlight ^2.0.0-beta.12
- @tiptap/starter-kit ^2.0.0-beta.59
- @tiptap/vue-2 ^2.0.0-beta.29
- @types/lodash ^4.14.168
- body-parser ^1.19.0
- compression ^1.7.4
- core-js ^3.6.5
- cors ^2.8.5
- cypress ^8.3.0
- date-fns ^2.16.1
- dexie ^3.0.3
- env-cmd ^10.1.0
- express ^4.17.1
- file-dialog ^0.0.8
- file-select-dialog ^1.5.4
- flush-promises ^1.0.2
- fp-ts ^2.9.5
- human-readable-numbers ^0.9.5
- io-ts ^2.2.14
- jaro-winkler ^0.2.8
- leader-line ^1.0.5
- lodash ^4.17.20
- neat-csv ^5.2.0
- node-fetch ^2.6.1
- node-random-name ^1.0.1
- pretty-file-icons ^2.2.1
- prosemirror-model ^1.14.2
- prosemirror-state ^1.3.4
- prosemirror-tables ^0.9.5
- prosemirror-utils ^0.9.6
- prosemirror-view ^1.18.7
- register-service-worker ^1.7.1
- roboto-fontface *
- skeleton-loader ^2.0.0
- socket.io ^3.1.1
- socket.io-client ^3.1.1
- tippy.js ^6.3.1
- tslib ^2.1.0
- typescript-json-schema ^0.43.0
- uuid ^8.3.2
- vue ^2.6.11
- vue-class-component ^7.2.3
- vue-property-decorator ^8.5.1
- vue-router ^3.2.0
- vue-type-check ^1.1.0
- vue-virtual-table ^0.2.17
- vuedraggable ^2.24.3
- vuetify ^2.3.19
- vuex ^3.4.0
- xlsx ^0.16.9
- actions/checkout v3 composite
- docker/build-push-action v3 composite
- docker/login-action v2 composite
- docker/metadata-action v4 composite
- docker/setup-buildx-action v2 composite
- actions/checkout v3 composite
- actions/setup-node v3 composite
- actions/upload-artifact v3 composite
- node 16-slim build