Project Plan

This document aims to be a complete plan for what needs to be done on this project, readable by developers. It can therefore be viewed as a to-do list in chronological order, the first items being those that should be done next, and the later items those that must come after. Necessarily, the later items are more vague than the earlier ones.

Note also that there are some known bugs and planned enhancements not listed in this file, because they are not part of the linear progression of the project. They can be addressed whenever it becomes convenient or useful; this document lists things in a more-or-less required order of completion.

Enabling and disabling features

Implement the following system satisfying the following requirements, for allowing users to enable/disable certain app features on a per-document basis. The first optional feature is pattern-based rules, so this is not necessary to implement until then.

Parsing test

Rewrite the following section to more accurately reflect Section 24 of the specification, then implement it as a module attached to the main Lurch application, a module that can easily be disabled if we need to redesign it.

Google Drive support

Google Drive also provides a very nice real time collaboration API that makes any document you like into a Google-Docs-like collaborative model where changes are auto-synced across collaborators. This was an idea that Dana Ernst asked for long ago when he first heard about the webLurch project. Integrate that into webLurch, imitating the UX Ken describes from typical online collaboration apps such as Google Docs and Overleaf, as follows.

Offline support

To make an HTML5 app available offline, I believe the appropriate step is simply to provide an app manifest. I'm verifying that with this StackOverflow question. That question links to a tutorial on app manifests, if the answer turns out to be "yes" to that question.

Ideas from various sources

Outsourcing the file dialog

The jsfs file dialogs I made myself, and thus must also maintain. They are not beautiful. Instead, you could use the jquery.filebrowser plugin. Furthermore, it's already generalized to allow you to swap out back ends. So you could not only update jsfs with this, but also easily make it support Google Drive or Dropbox with minimal changes. Create plans to do so.

Parsing speed improvements

If parsing with the current package becomes a performance bottleneck, note that there are several improvements available, some already implemented in JavaScript. See here.

All images consistently base64

This GitHub comment might be useful for ensuring that even images pasted into a document get converted to base64, as all the other images in the document are.

LMS integration

Suggestion from Dana Ernst: Perhaps this is not necessary or feasible, but if you go with a web app, could you make it easy for teachers to "plug into" the common LMS's (e.g. Blackboard, Canvas, etc.)? I'm envisioning students being able to submit assignments with ease to an LMS and then teachers can grade and enter grades easily without have to go back and forth between web pages.

Further wiki integration?

Is it possible for the entire Lurch app to exist inside MediaWiki, so that editing a wiki page was done using Lurch as the editor? That would be excellent for many use cases. Certainly, we can use the editor in an iframe but the question is about integrating with (replacing) MediaWiki's existing editing features. You would still want to keep the normal full-page app available for those who don't want the trappings of the wiki. But it would be very intuitive, because people are familiar with wikis, and can begin as readers, then move up to being writers.

Desktop app

Convert webLurch into a desktop app using electron. This gives the user an app that always works offline, has an icon in their Applications folder/Start menu, etc., and feels like an official app that they can alt-tab to, etc., but it’s the exact same web app, just wrapped in a thin desktop-app shell. You can then add features to that as time permits.

Repository organization

Improving documentation

Documentation at the top of most unit test spec files is incomplete. Add documentation so that someone who does not know how to read a test spec file could learn it from that documentation. Probably the best way to do this is to add general documentation to the simplest/main test spec, and then reference that general documentation from all other test specs.