Entry Editor

Entry Editor should show the last entry

req~entry-editor.keep-showing~1

The Entry Editor should “always” show a valid entry.

When users search or select a group not containing the entry shown in the Entry Editor, the Entry Editor should keep showing until user select a new entry explicitly.

This holds within one library only: switching to a library tab without a selected entry closes the Entry Editor instead of showing an entry of another library.

Needs: impl

Validation decoration is initialized before opening the entry editor

req~entry-editor.validation-decoration.startup~1

ControlsFX validation decoration is initialized during GUI startup, so opening the first entry editor does not replace the JavaFX scene root and trigger a full CSS reapplication on the entry-editor interaction path.

Needs: impl

Citations tab should show citation preview on click

req~entry-editor.citations.click-preview~1

When the user clicks the preview icon on a citation entry inside the Entry Editor’s “Citations” tab, a tooltip containing the entry preview rendered in the currently selected style should be displayed. The preview is not shown automatically on hover, because a large floating card popping up on every hover is too intrusive.

Needs: impl

Main tab shows all fields in one scrollable list

req~entry-editor.main-tab.single-list~1

The “Main” tab shows the citation key, all required fields of the entry type (even when unset), and every set field of the entry in a single vertically scrolling list with natural row heights. Field order: citation key, required fields (entry-type order), set optional fields (important before secondary, each in entry-type order), remaining set fields sorted by name, then fields added by the user that are still empty. Multiline fields are one row when empty and grow with their content, showing at most five rows (with a scrollbar) until they are focused for the first time; from then on they show the complete text until another entry is opened.

Needs: impl

Fields are grouped into collapsible sections

req~entry-editor.main-tab.sections~1

Identifier fields (DOI, ISBN, ISSN, eprint variants, PMID, MR number), file and link fields (file, URL, URI, urldate), bibliometrics fields (citation count, ICORE ranking), comment fields (comment plus user-specific comment fields), and meta fields (crossref, groups, owner, timestamps, special fields — data about the library entry rather than the paper) are shown in their own always-present, collapsible sections in this order after the main fields. A section is collapsed by default when it contains no shown field and expanded when it contains at least one; a manual expand/collapse by the user survives rebuilds until another entry is opened.

Needs: impl

Unset optional fields are offered as one-click chips

req~entry-editor.main-tab.add-chips~1

The entry type’s unset important-optional fields that belong to the main group are offered as one-click “+” chips directly below the main fields, followed by an “Abstract” chip for every entry type (no entry type lists the abstract as an optional field); a “Show more” toggle reveals chips for the unset secondary-optional fields (“Show less” hides them again). Clicking a chip shows an empty, focused editor for that field, removes the chip, and keeps the field visible — even while still empty — until another entry is opened.

Needs: impl

Each section offers chips for its unset member fields

req~entry-editor.main-tab.section-chips~2

Every section offers “+” chips for its unset member fields: the identifiers section collects all identifier fields, the files and links section its link fields (URL, URI, urldate — the file field is always shown instead), the bibliometrics section its fields, the comments section the general comment plus the current user’s personal comment field (only when user-specific comment fields are enabled), and the meta section crossref, groups, owner, and the special fields (ranking, priority, read status, quality, relevance, printed). The automatically managed timestamp fields have no chip.

Needs: impl

req~entry-editor.main-tab.file-editor-always-shown~1

Whenever the files and links section is expanded, it shows the file editor as its first row, also when the entry has no file linked. The editor’s own buttons add, search for, or download a file; no file dialog opens on its own.

Needs: impl, utest

Arbitrary fields can be added via a field-name box

req~entry-editor.main-tab.free-form-add~1

Below the sections, an editable combo box pre-filled with all known field names plus an “Add” button (Enter works as well) adds an editor for any field name; unknown names create a custom field. Blank input is ignored.

Needs: impl

The list refreshes on external field changes without disturbing typing

req~entry-editor.main-tab.live-refresh~1

When fields of the shown entry are set or unset outside the Main tab (source tab, fetchers, undo), the list updates to reflect the new field set. Typing inside a visible editor never rebuilds the list or steals focus; a visible field whose content is deleted stays visible until another entry is opened.

Needs: impl

A focused, empty, non-required field can be removed from the list

req~entry-editor.main-tab.remove-field~1

A field’s row shows a small gray “remove field” icon button pinned to its top-right corner while the field’s editor is focused and the field is currently blank. Clicking it hides the row again. The citation key and the entry type’s required fields never show this button, so they cannot be removed this way.

Needs: impl

Files found in the file directory are suggested even when no file is linked

req~entry-editor.main-tab.autolink-suggestions~1

When “Automatically search and show unlinked files in the entry editor” is enabled and files in the file directory match the entry but are not linked in it, the file editor is shown in the files and links section even if the entry has no file field, listing those files as suggestions with a gray background and an accept button. This matches the file editor’s behavior for entries that already have linked files.

Needs: impl, utest

Custom tabs show a user-defined list of field patterns

req~entry-editor.custom-tabs~1

Users can define custom entry editor tabs in the preferences (“Entry editor” → “Editor tabs”): a “Tabs” column lists all tabs (built-in tabs with a visibility checkbox, custom tabs with a delete action) and supports adding custom tabs and reordering all tabs via drag and drop; a “Fields” column edits the selected custom tab’s ordered field list, also reorderable via drag and drop. A field entry is either a plain field name (always shown on the tab, even while unset) or a regular expression (e.g. comment-.*), which shows every set field of the entry whose name matches. A field listed on more than one tab is marked with a warning sign. Custom tabs configured in JabRef versions before the “Main” tab rework are picked up again on upgrade — except stored tabs that are exactly one of the former default tabs “General”, “Abstract”, “Comments”, or “Review” (localized name paired with the field set shipped in JabRef ≤ 5.x or a 6.0 alpha), which are dropped, since the “Main” tab already shows all their fields.

Needs: impl

Extracted custom-tab fields leave the Main tab

req~entry-editor.custom-tabs.extract-field~1

The “Fields” column offers an “Extract field” checkbox per field pattern, unchecked by default; its tooltip explains that a checked field is not shown in the “Main” tab anymore. The fields resolved by a checked pattern are moved to the custom tab: the “Main” tab shows neither an editor nor an add-chip for them. Unchecked patterns only mirror their fields on the custom tab, leaving the “Main” tab unchanged. The choice exists only for plain names of known fields — fields the “Main” tab shows on its own. A regular expression or an unknown field name is always extracted; its checkbox is shown checked and disabled, with a tooltip stating that the field is not contained in the “Main” tab.

Needs: impl, utest

Special fields are edited with the same icon controls as the main table

req~entry-editor.special-field-editors~1

Special fields (ranking, priority, read status, printed, quality, relevance) are edited with the same icon-based controls the main table’s special field columns use: a five-star rating for the ranking, one icon toggle per value for priority and read status (deselecting the active toggle clears the field), and a single icon toggle for the one-value fields printed, quality, and relevance. Field labels and add-chips show the localized special field name instead of the raw field name. Values changed elsewhere (main table, source tab, undo) are reflected live.

Needs: impl

Source tab replaces its content atomically when entries change

req~entry-editor.source-tab.atomic-replacement~1

When changing the selected entry, the Source tab replaces its full document in one operation so transient model states cannot prevent the newly selected entry’s source from being displayed. While a new selection is still settling, saving or leaving the Source tab writes the visible source back to the entry it was rendered from, not the newly selected one.

Needs: impl