Git Product home page Git Product logo

academic-journal's People

Contributors

jsabrahams avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

ag-fx

academic-journal's Issues

Add about page

Is your feature request related to a problem? Please describe.
Add a simple about window with version and description of the application

[BUG] Cannot read database if Zotero is open

Describe the bug
Refreshing the database connection does not do anything.

To Reproduce

  1. Make sure Zotero is open
  2. Load application, observe that references have not been loaded
  3. Close Zotero
  4. Refresh connection with database, note that nothing happens

Expected behavior
-[ ] A connection should be established.
-[ ] On boot, if a connection cannot be established, we should prompt the user to retry, giving a hint that we might need to close the other application

Additional context
Fixes #19
Ideally, we should be able to read form the sqlite database even if Zotero is accessing it.
In theory, sqlite does allow mutiple reads concurrently, however, if Zotero is continually writing to the database we are out of luck, as sqlite is not designed for concurrent reads and writes.

Load last saved Journal

Is your feature request related to a problem? Please describe.
Each time the application starts, it creates a new Journal

Describe the solution you'd like
Upon boot, it should load the last Journal.

Show more information for the sources loaded from Zotero

Is your feature request related to a problem? Please describe.
We currently show the minimum, the title and list of authors

Describe the solution you'd like
We should display all information as shown in the Zotero overview, and display this to the user. This includes:

  • Proper display of the article type (not the ugly database key)
  • Publication, volume, issue, pages, seires and date,
  • Language
  • DOI and ISSN
  • URL, which ideally is clickable and should take the user either to the website
  • Short title and library information
  • Date Accessed
  • Date added and modified

An item may have multiple pdf's or links associated with it, but in most cases it seems that there is only one.
So it might be nice that if there is only one we can double click an item to see the PDF we have stored locally on our machine instead of accessing some website.
Whether something is double clickable should be communicated to the user using some symbol.

We can also have some checkboxes in the view so the user can choose how much information they want to see.

Add images (and figures)

Is your feature request related to a problem? Please describe.
It would be nice to have figures or images we can insert.

Describe the solution you'd like
Have a directory where we can store figures into multiple libraries, similar to how Zotero allows us to store references and organize these in libraries.
We can then uses these images in any Journal we please.

On load, the images should then be inserted.
We will need to take care with positions and what we do when an image is not available.

Add referencing in several ways

Is your feature request related to a problem? Please describe.
All references are now highlights, but sometimes I want to write a summary and in that case I don't want to highlight the entire text.

Describe the solution you'd like
When creating a new reference, allow specifying whether:

  • It is a single line or a few lines, which is then rendered by a (yellow) highlight
  • Is a (large) summary, which is then rendered using a stop and starting delimiter, perhaps a thick horizontal red line.

Additional context
We can use multiple colors, and these can be set by the user as well perhaps, to also denote:

  • Important pieces of text (starred messages)
  • Definitions (definition has a word/phrase + definition in a personal dictionary)
  • Important individuals (collegue or author)

Allow referencing of other entries

Is your feature request related to a problem? Please describe.
Sometimes I want to reference a previous entry, but there is no elegant way to do so.

Describe the solution you'd like
Allow refercing of other entries, by right clicking in the text area.
Additionally, we can also allow adding of references in the dropdown menu.
We also need to ensure each entry has a UUID for cross-referencing.

Keep track of important terms

Is your feature request related to a problem? Please describe.
Sometimes I write down a very important term, but this can easily be lost in a sea of text.

Describe the solution you'd like
Similar to starring in Whatsapp, it would be nice to be able to star words or phrases and browse these a later date.
Starred words should be highlighted in a different color.

[BUG] Loading journals seems to be flaky, especially DateTime's

Describe the bug
Often times, when we open a journal we get an error that something is malformed.
This is caused by the DateTime integer, which seems to be loading incorrectly causing undefined behaviour.

Expected behavior
We would expect that the DateTime can be saved and written to file without any issues.

Additional context
In future we might want to consider noting down:
-[ ] Which file versions are compatible with which version
-[ ] Note the version within the file

Add spell checker and custom dictionary

Is your feature request related to a problem? Please describe.
When writing a lot down, it's easy to make some spelling errors in mistype something.
This quickly gets annoying, and will probably become an issue later if we want to do some sort of natural language processing or statistics and find that the analysis is worse due to spelling and typing errors.

Describe the solution you'd like
A spell checker and built-in dictionary where we can store (complicated) words such that our spelling is consistent.

Additional context
In Latex I often use macros for this, to ensure the spelling is consistent.
Perhaps in future we could have a system with hints where we can have words where we manually have synonyms, so that the spelling in our journal is consistent.
I.e. we can say that we suggest cybersecurity if I wrote cyber security, or vice-versa.

Keep track of names and individuals

Is your feature request related to a problem? Please describe.
It would be nice to have some sort of name list so that we can mention colleagues by name.

Describe the solution you'd like
Similar to the reference system, a way of tagging individuals.
We'll have to do this internally, as Zotero does not keep track of individuals.

Describe alternatives you've considered
We can either:

  • Store such data in the appdir folder, coupling it to a specific machine
  • Store it within a journal, making it more difficult to link individuals across different journals

Additional context
Considering the above issues, it might be good to consider, just like Zotero, to store all Journals within a special application folder which is left untouched by the user.
In this folder we could have a directory to store all the journals, making it easy for users to switch between them in-application, and we can have a single file where we store all individuals.
In future we could also then perhaps have integration for importing contacts from other applications, which could then be linked to the internal representation of users using some sort of mapping, just as how individuals in an address book can have links to external sources such as their personal website.

Add some styling

Is your feature request related to a problem? Please describe.
There should be some styling such that the Application has a more "academic" look.

Add overview of keywords

Is your feature request related to a problem? Please describe.
Just like in GitHub, keywords (labels) are pre-defined and colour coded.
These should be modifiable in a separate view.

In future, it would be nice to also have a history view where we can see what keyword is used when.

[BUG] Reference IDs do not work accross machines

Describe the bug
The identifier used to identify references is not linked to an account but is machine specific, meaning that using the same account on a different machine results in the identifiers being different.

To Reproduce
Steps to reproduce the behavior:

  1. Synchronize Zotero on a different machine
  2. Open application
  3. Observe that references are different

Expected behavior
References should work as long as Zotero is linked to the user's account and synchronized.
It should not matter what machine they use.

Additional context
So we should instead pick an identifier in the Zotero database, if there is any, which is unique to the item and machine-independent (not the row index of the item, which is what we appear to be using now).

It would also be nice if instead of using the identifier directly in entries, we have some intermediate mapping, so that we can assign additional properties to references in the future if we so choose (priority, importance, etc.).

Allow pasting in of Bibtex, or citation entries

Is your feature request related to a problem? Please describe.
Add dialogue for pasting in of citation entries. These can be Bibtex, or any other common citation style.
This should then be parsed and stored internally for easy export later on, and should be usable anywhere.

Add tabs in editor

Is your feature request related to a problem? Please describe.
Add tabs such that we can open multiple editors at once

Add keyword view and list of Journal

Is your feature request related to a problem? Please describe.
Keywords can now be created ad-hoc, which can create inconsistencies.

Describe the solution you'd like
We should have one single view, like the reference view, where we have all keywords, and their colours.
This data can then be stored alongside the journal.
In Journal entries we can then pick from this list of keywords instead of creating them on the fly.
This is similar to how labels work in GitHub.

Additional context
We might want to rename keywords to labels.

If failed to load journal, nothing happens

Describe the bug
If the application boots and the last journal is damaged or has been moved, we see no warning but simply an empty journal.
We also see an exception is the terminal if it so happens that the journal was damaged.

Expected behavior
Application should prompt user to start a new journal or open an existing one.
It should also remove the journal file location from the recent files in appdir so we don't run into the same issue upon next boot.

[BUG] Reference positions are not updated with the text

Describe the bug
Reference positions are not updated if we add/shift text.
Same for deleting text, as the end position is not updated either.

Expected behavior
I we add text before a reference, it's position should be updated in file.

Additional context
It does seem that the text area does already implement logic for moving around highlights,
so if we could observe the start and end positions, we could link this to the actual ReferencePosition,
and this issue would be solved.

Export citations

Is your feature request related to a problem? Please describe.
If we have (many) citations, we have no way of exporting them.

Describe the solution you'd like
The ability to export citations, with a window where we can select which.

[BUG] Reference positions get reset constantly

Describe the bug
If we switch between journal entries, all the reference positions are set to 0 in the entry we switch from.

Expected behavior
It shouldn't do this.

Additional context
This has to do with the fact that the position are bound to highlights in text, which seem to be set to 0 before being removed.
Or something along those lines at least.
We should do some sort of unbinding before switching to prevent this situation from occurring.

Add markdown support

Is your feature request related to a problem? Please describe.
I'm not a fan of under the hood text formatting, I'd rather use markdown which can easily be copy pasted.

Describe the solution you'd like
The text editor should render markdown as it is written.
Doing this dynamically would make the application look more professional, but might be more difficult to do right as well.

Additional context
In future, we could add export functionality where we insert the references as footers using a chosen citation format.

TODO

  • Add tables

Add Mathjax to text editor

Is your feature request related to a problem? Please describe.
There is no way to elegantly display mathematical notation.

Describe the solution you'd like
Since we're working towards using markdown (see #31), it would be nice to have Mathjax support as well.
If we could render this, this would allow use to elegantly write down mathematical notation.

Additional context
We may need to either change the texteditor we are currently using, or contribute or request a feature in the current project.

Show edited status for Journal

Is your feature request related to a problem? Please describe.
It is not possible to see if the Journal has been edited or not.

Describe the solution you'd like
It should show if there are entries that have unsaved changed, and which entries specifically.
In addition, a prompt should be shown upon close if we have unsaved changed.

Open most recent, or new entry, on boot

Is your feature request related to a problem? Please describe.
When I open the application, I don't see any entry.

Describe the solution you'd like
It should:

  • Open to today's entry if there is such an entry
  • Open a new entry if there is no entry for today, or the last entry, depending on the user's preference (which they can set and is stored to the application directory).

New window for new journals

Is your feature request related to a problem? Please describe.
We cannot have more than one journal open at once.

Describe the solution you'd like
A prompt which asks the user whether they want to open the journal in this window or a new window.

Describe alternatives you've considered
We could have more than one journal in the window at once, but whether this is desirable remains to be seen.
We could have an option on the side, a bit like Franz, where we have one icon per Journal, a bit like stickeynote tags in a book.

This design however does prompt the user to switch between journals, which might cause them to lose focus.

Double clicking on a reference should show it in the reference view

Is your feature request related to a problem? Please describe.
When double clicking on a reference, we should open the reference view and show all the information about a given reference.

Describe the solution you'd like
Additionally, hovering over a reference in the list of references next to the editor should also show some more information.

Allow editing of Journal title

Is your feature request related to a problem? Please describe.
We should be able to modify the Journal title, and any other properties

Describe the solution you'd like
The ability to modify the Journal title by clicking on the title.

[BUG] Pasting text into the text area gives exception

Describe the bug
When I paste something into the text area, I get an IllegalArgumentException.
The application does not crash, but I have to reload the text area (by switching entries) before I can continue editing.

To Reproduce
Steps to reproduce the behavior:

  1. Open text area
  2. Copy paste some text, either from external source, or from with text area

Expected behavior
No Exception.

Additional context
Stacktrace is as follows:

java.lang.IllegalArgumentException
	at javafx.scene.control.IndexRange.<init>(IndexRange.java:53)
	at org.fxmisc.richtext.SelectionImpl.selectRange(SelectionImpl.java:312)
	at org.fxmisc.richtext.SelectionImpl.lambda$new$7(SelectionImpl.java:276)
	at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
	at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
	at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
	at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
	at org.reactfx.FilterStream.lambda$observeInputs$0(FilterStream.java:20)
	at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
	at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
	at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
	at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
	at org.reactfx.MappedStream.lambda$observeInputs$0(MappedStream.java:25)
	at org.reactfx.util.QueuingStreamNotifications.lambda$head$0(NotificationAccumulator.java:217)
	at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
	at org.reactfx.SuspendableBase.resume(SuspendableBase.java:64)
	at org.reactfx.CloseableOnceGuard.close(Guard.java:49)
	at org.reactfx.MultiGuard.close(Guard.java:83)
	at org.reactfx.Suspendable$1.resumeSource(Suspendable.java:118)
	at org.reactfx.Suspendable$1.suspendSource(Suspendable.java:104)
	at org.reactfx.util.NonAccumulativeStreamNotifications.lambda$head$0(NotificationAccumulator.java:134)
	at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
	at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
	at org.reactfx.ProperEventStream.emit(ProperEventStream.java:18)
	at org.reactfx.EventStreams$3.lambda$observeInputs$0(EventStreams.java:105)
	at org.reactfx.value.ChangeListenerWrapper.accept(Val.java:786)
	at org.reactfx.util.AbstractReducingStreamNotifications.lambda$head$0(NotificationAccumulator.java:248)
	at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:68)
	at org.reactfx.ObservableBase.notifyObservers(ObservableBase.java:57)
	at org.reactfx.value.ValBase.invalidate(ValBase.java:32)
	at org.reactfx.SuspendableBoolean.release(SuspendableBoolean.java:24)
	at org.reactfx.CloseableOnceGuard.close(Guard.java:49)
	at org.reactfx.Suspendable.suspendWhile(Suspendable.java:49)
	at org.fxmisc.richtext.model.GenericEditableStyledDocumentBase.updateMulti(GenericEditableStyledDocumentBase.java:215)
	at org.fxmisc.richtext.model.GenericEditableStyledDocumentBase.updateSingle(GenericEditableStyledDocumentBase.java:207)
	at org.reactfx.util.Tuple3.exec(Tuple3.java:43)
	at org.fxmisc.richtext.model.GenericEditableStyledDocumentBase.replace(GenericEditableStyledDocumentBase.java:142)
	at org.fxmisc.richtext.model.SimpleEditableStyledDocument.replace(SimpleEditableStyledDocument.java:10)
	at org.fxmisc.richtext.GenericStyledArea.replace(GenericStyledArea.java:1195)
	at org.fxmisc.richtext.GenericStyledArea.replaceText(GenericStyledArea.java:1182)
	at org.fxmisc.richtext.TextEditingArea.replaceText(TextEditingArea.java:390)
	at org.fxmisc.richtext.EditActions.replaceSelection(EditActions.java:165)
	at org.fxmisc.richtext.ClipboardActions.paste(ClipboardActions.java:111)
	at org.fxmisc.richtext.GenericStyledAreaBehavior.lambda$static$1(GenericStyledAreaBehavior.java:65)
	at org.fxmisc.wellbehaved.event.template.InputMapTemplate.lambda$consume$0(InputMapTemplate.java:221)
	at org.fxmisc.wellbehaved.event.template.PatternActionTemplate.lambda$null$1(InputMapTemplate.java:425)
	at java.util.Optional.map(Optional.java:215)
	at org.fxmisc.wellbehaved.event.template.PatternActionTemplate.lambda$getInputHandlerTemplateMap$2(InputMapTemplate.java:425)
	at org.fxmisc.wellbehaved.event.template.InputHandlerTemplateMap.lambda$sequence$0(InputHandlerTemplateMap.java:25)
	at org.fxmisc.wellbehaved.event.template.InputHandlerTemplateMap.lambda$sequence$0(InputHandlerTemplateMap.java:24)
	at org.fxmisc.wellbehaved.event.template.InputHandlerTemplateMap.lambda$sequence$0(InputHandlerTemplateMap.java:24)
	at org.fxmisc.wellbehaved.event.template.InputHandlerTemplateMap.lambda$sequence$0(InputHandlerTemplateMap.java:24)
	at org.fxmisc.wellbehaved.event.template.InputHandlerTemplateMap.lambda$sequence$0(InputHandlerTemplateMap.java:24)
	at org.fxmisc.wellbehaved.event.template.InputMapTemplate$2.lambda$null$0(InputMapTemplate.java:341)
	at org.fxmisc.wellbehaved.event.template.InputHandlerTemplateMap.lambda$sequence$0(InputHandlerTemplateMap.java:24)
	at org.fxmisc.wellbehaved.event.template.InputMapTemplate$1.lambda$null$0(InputMapTemplate.java:202)
	at org.fxmisc.wellbehaved.event.template.InputHandlerTemplateMap.lambda$sequence$0(InputHandlerTemplateMap.java:24)
	at org.fxmisc.wellbehaved.event.template.InputHandlerTemplateMap.lambda$sequence$0(InputHandlerTemplateMap.java:24)
	at org.fxmisc.wellbehaved.event.template.InputMapTemplate$1.lambda$null$0(InputMapTemplate.java:202)
	at org.fxmisc.wellbehaved.event.template.InputHandlerTemplateMap.lambda$sequence$0(InputHandlerTemplateMap.java:24)
	at org.fxmisc.wellbehaved.event.template.InputMapTemplate$HandlerTemplateConsumer$1.lambda$accept$0(InputMapTemplate.java:103)
	at org.fxmisc.wellbehaved.event.InputHandler.handle(InputHandler.java:50)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene$KeyHandler.process(Scene.java:3964)
	at javafx.scene.Scene$KeyHandler.access$1800(Scene.java:3910)
	at javafx.scene.Scene.impl_processKeyEvent(Scene.java:2040)
	at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2501)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:217)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:149)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$353(GlassViewEventHandler.java:248)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:247)
	at com.sun.glass.ui.View.handleKeyEvent(View.java:546)
	at com.sun.glass.ui.View.notifyKey(View.java:966)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
	at java.lang.Thread.run(Thread.java:748)

Add (markdown) table generation

Is your feature request related to a problem? Please describe.
If I want to create a table, I have to do this manually and this takes a long time

Describe the solution you'd like
Add table generator within application, example here.
We can make that we have a menu that appears when we right-click, with the option to generate such a table.
This menu can also be used for #56 and #51

Additional context
We have to check that the markdown renderer we're using in #55 actually supports tables.

Add citation view for an entry

Is your feature request related to a problem? Please describe.
Add view where we can see a list of citations of an entry

Zotero Integration

Is your feature request related to a problem? Please describe.
It is not efficient to store references separately for each journal entry.
However, creating our own references is not efficient either.

Describe the solution you'd like
I would propose to start with Zotero integration (and perhaps later down the line other reference managers).
We would ask the user what reference manager they wish to use (and optionally where this data is stored if relevant, of course using the default location otherwise).
In the case of Zotero, everything we need is stored in an SQLite database.
So we would need functionality for:

  • Reading The papers from this database
  • Reading and identifying authors from this database
  • Refreshing this connection to the database

If we do this, we would only need to store a unique identifier, and mapping from our own unique identifiers to the
references stored in the appropriate database/reference manager.

Where Zotero data is stored can be viewed here.

This way, we get the power of an existing reference manager which we can then use in our application without having to re-invent the wheel.
The target audience of this application is also likely to have a reference manager which is a big bonus.

Additional context
Again we have to consider what added value our application has to reference managers.

Add more metadata info to Journals

Is your feature request related to a problem? Please describe.
Journals as they are now contain the bare minimum amount of information.

Describe the solution you'd like
We would like:
-[ ] To note what version of the application was used to save last time
-[ ] What reference manager has been used, and additionally where its data is stored
-[ ] The application should automatically load this data
-[ ] Show a warning if this is not possible, prompting the user to choose the data location for the reference system of this journal. If this is not possible, it should state that references will most likely be non-sensical due to the incorrect mapping

Add timeline view for when we write what, how much

Is your feature request related to a problem? Please describe.
Add another view where we can see how much we write and when. A bit like the timeline on GitHub which shows when we commit.

We can in future also add other cool stuff to this view as we begin to use the application.

Save journal entry

Describe the solution you'd like
Save journal entry to memory, and display it in history and in file

Add global citation view

Is your feature request related to a problem? Please describe.
Add view where we can see citations, with a timeline of when we cite what

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.