[app-shared] Add most functionality to open/save files
Add most functionality to open/save files
[app-shared] Add styling and features to file menu
Add styling and features to file menu
Quickfixes

- Allow empty temp files to be saved
- …
Limit displayed file name length in file menu items
Prevent same file from being open twice
Detect files deleted from the FS and offer to keep their contents in the editor
Make confirm() utility more configurable

Add the ability to customize buttons, including re-using and extending pre-defined buttons
Quickfix

Since File.prototype.markePermanent() is now async, make it return a promise for composition
[app-shared] Use input event on Markdown textarea when supported
Make the FileCache interface less verbose, with a more natural feel

In other words, get rid of the getters and setters, and stuff them inside property accessors.

To make memory use more efficient and ease saving cached properties to chrome.storage.local, the interface now consists of property accessors on FileCache's prototype. These accessors read and set values on FileCache instances' own properties, which are the ones saved to chrome.storage.local.

E.g. file.cache.tempContents (proto prop, with accessors) reads from file.cache._tempContents (own prop, saved to chrome.storage.local)
Add a JS-based undo manager

Manages one undo stack per open tab/"file", which isn't supported natively with textareas on Chrome
Quickfixes

- Prevent a modified file to be closed if the user chose to save it and cancelled by closing the "save as" dialog
- Wording
Reorganize files
[app-shared] Rename directory containing code shared between apps to "app-shared"
Rename directory containing code shared between apps to "app-shared"
Make older versions of the app auto-update to the new storage structure
Make fresh installs of the app display welcome instructions
[app-shared] Update welcome instructions, top panels text and some styling