Code Monkey home page Code Monkey logo

bedelibry-app's People

Contributors

sintrastes avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

bedelibry-app's Issues

Move page modules to separate parent module

Currently our modules for individual pages are stored in modules like Montague.Frontend.Types, Montague.Frontend.Schema.

It would be convenient if these were all grouped under a common Montague.Frontend.Pages module (e.x. Montague.Frontend.Pages.Types, Montague.Frontend.Pages.Schema) that re-exported all of the submodules.

Allow for plain reflex-platform cabal builds in addition to obelisk builds

Currently, support for obelisk on M1 OSX hardware is lacking.

My workaround for this currently is to just use reflex-platform rather than obelisk, and to build a jsaddle-warp executable via cabal when testing things on my macbook.

However, we may still want to support obelisk for how it handles Android builds (I'm not entirely sure how this works yet -- but it seems with the same main.hs they are able to compile something to either use jsaddle-warp, or jsaddle compiled via ghcjs.

It's currently unclear to me how we might accomplish this with nix. One thought was to use two separate cabal.nix files (as using plain reflex-platform + cabal, cabal has a hard time finding some of the obelisk dependencies, so the idea is to have one cabal.project file that excludes these for cabal builds, and one that includes them for obelisk builds), but I am unsure what the "right" way is to make nix use one or the other depending on the attribute.

Add types page

Similarly to the entities page, we should also have a page for displaying types.

Incorporate the Montague changes here into the core Montague repo, and publish to Hackage.

As this project is still in the prototype stages, I've decided to do all of my active development of "core montague" from this repo, in order to get the quickest possible feedback loop for the app.

Eventually, once some of the core MVP features become stable, I'll want to backport these changes into the core Montague repo, and publish to Hackage so we can use that as a dependency here.

Add "empty views" for types/entities pages.

When no types or entities are available, something such as "No entities have been entered" should be displayed -- possibly with a link to how the user could add new entities.

Add better error reporting.

Currently, when entering in sentences into Montague, the only two possible results are a "Could not parse" error, or correctly displaying the parsed term and it's type.

While this capability will no doubt be expounded upon over time, as a first step, it would be nice to have some better error reporting (for instance: "Could not parse: Unknown word "bob"."

A possible extension of this capability in the future would be to add suggested fixes to the relevant problems (for instance, "Would you like to add "Bob" to the lexicon?")

Implement navigation to sub-routes.

Currently, our Page type is just an enum.

However, in order to support features such as #19, we will need to add "sub-routes" (such as "anchors" to specific types/entities) into this data type.

This should be fairly straightforward to do with Haskell's ADTs. Example:

data Route =
    Home
    ...
  | Entities { anchor :: Maybe EntityId }
    ...

As the application becomes more complex, this would also allow for things like specific preference pages.

Fix size of schema entry text box.

Now that the schema entry text is on its own page, it should extend to fit most of the screen space.

Note that this is also currently inconsistent between iOS and Android styles.

Move Page type to separate module.

It would be nice to move the Page type to a separate module so we can import it qualified and use it like Route.Types, Route.Home, Route.Schema, etc...

This would allow (potentially?) for better auto-completion opportunities for HLS.

Add Meriv integration.

In addition to simply being able to parse sentences with regard to a schema, the user should be able to make queries via the parsed logical forms of sentences via meriv-core.

Add entry forms for entities/types.

The user should have the ability to enter in new entities and types via an entry form.

These could be displayed via modal dialogs on Android and iOS targets. Perhaps on Desktop targets we can look into using new windows via Tauri.

Note: The user should probably be warned when they do this that this will overwrite then hand-written schema.

Investigate how to implement preferences.

It is currently unclear to me how one would implement user preferences in a reflex app. The easiest thing to do would probably be to just dump preferences into something like a yaml file -- but how do we access the underlying file APIs necessary to do that?

I'm not sure if this is something that would be simple to do from the native Haskell .so that is built by nix, or if modifications need to be made on the Java side in order to get this to work properly with Android permissions. It would probably be worth it to reach out to others using reflex to see if there is already an easy solution for this.

Add desktop styles

Currently we only have desktop-oriented css styles for the app. We should add some more desktop-oriented ones as well.

Get GitHub actions working for ghcjs and Android builds.

Currently, I can't figure out a way to build montague-reflex via ghcjs, or to build reflex-platform's Android target on my M1 macbook. Thus, it is crucial to get CI working for these two targets in order to make sure these targets are being built properly.

install-nix should be able to do this.

Also, CI is just nice to have in general. ๐Ÿ˜„

Add schema management page allowing for multiple schema files to be loaded.

Currently the user can only have one schema loaded at once.

The user should be able to pull multiple schemas from different sources, and be able to manage them -- so there should be a page for the user to be able to do this.

Once this is implemented, the current schema page should be changed to a page that the user can open to edit individual schema files, and should not be part of the standard navigation menu options.

Clean up CSS

Currently, we have a bunch of css style attributes used in various places in Haskell code.

Most (if not all of these) should probably be moved into main.css.

Allow users to "share" research entries with Bedelibry.

This is something that I assume will require working from the Java side (though, maybe I'll be surprised!) -- however, the idea here is to use the "share" feature found on relevant apps on Android (I assume iOS has a similar feature if someone wants to work on that) to send a link to Bedelibry, which would then open up a UI for registering notes about a relevant article/video/etc... -- ideally working intelligently and guessing the correct type, and auto-filling some of the relevant metadata.

Doing this on the desktop/web side of things would probably require something like a browser extension.

Add "unsaved" and "reset" features to schema page.

Currently it is hard to tell whether or not what is currently displayed in the schema page has been saved or not, and it is not possible to reset unsaved changes.

To remedy this, we should add a "saved" status indicator light, and a reset button.

Allow for custom tab view that allows pages to depend on eachother.

Essentially, I think the API we want is something like this:

monadicTabDisplay $ do
    preferences  <- tab "Preferences" preferencePage 
    schemaResult <- tab "Schema" $ schemaPage preferences
    tab "Home" $ homePage preferences 

where the do block there is essentially a free monad for specifying the tabs and their dependencies. This could probably be a generalization of tabDisplay. We could maybe even make it a higher-order-component and backport these changes to reflex, as I think this kind of pattern would be very useful in general.

Feature: Add a GUI lexicon viewer/editor.

Currently, the idea is to have lexicons specified in a special human-readable file format (.mont files) -- however, it would be nice if there was also a nice GUI for viewing/browsing a schema.

This could be a simple two-paned view which the user can easily switch between (one for types, one for lexicon entries) with a search bar that each displays a list of entries.

The entries could be something like:

  1. One line with the name (and possibly some other relevant info such as synonyms for lexical entries).
  2. 2-3 lines showing a preview of the "description" associated with the type/lexical entry.

Where the "description" is essentially documentation coming from a doc string in the .mont file about the relevant entry.

Implement "welcome" page.

It would be nice to have a "welcome" page that greets the users whenever they open the app, and points them towards tutorials, and some basic tips for how to use the app.

This page would not be part of the standard navigation menu, and there should be an option to hide this page for advanced users (e.x. "Don't show this page on startup" preference).

Add "export file" feature.

The user should be able to export mont files to their hard-drive outside of Montague's internal storage location.

This would be particular useful for web targets, as we cannot directly save things to the user's hard drive.

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.