Abstract logic that requires the user to be an owner
Make username use stronger type
Use stronger type for user IDs.
The best part of Windows is notepad.exe. It opens instantly and has a minimal, exactly-what-I-wanted interface; its simplicity is its greatest strength. In contrast, Google Docs is so much more than I want for keeping track of lists or writing notes. Those tasks do not require the functionality of a word processor, and Google Docs comes with the cost of slower load times and more data transferred in total (which especially matters when you don't have an unlimited data plan).
However, Docs has one major benefit: documents are available everywhere with no extra effort (you don't even have to save the document). This is a such a huge benefit that it's worth the pain of dealing with Docs in order to obtain it. Docs additionally allows sharing of documents so that more than one person can edit the document; this is also a very useful feature that makes Docs an extremely useful program.
This project intends to provide the same major benefits of Google Docs, while also providing a simple, notepad-like experience. In addition, there should be no reason to avoid using the software heavily on a very limited data plan (for example, a 1 GB/month).
This project has a modest list of dependencies in build-depends
, but a much
smaller list of native dependencies. All that is required to be installed on
the host OS is zlib and sqlite (and GHC and cabal-install of course). If you are a Nix
user (I personally run NixOS), then you can just execute nix-shell --command "cabal build"
since Nix will ensure the availability of all the dependencies,
as described in shell.nix
.
The tests are a Selenium python script in test.py
. Running run_tests.sh
deletes the database, starts the chromedriver
program that automates the
browser, starts the haskell server, and runs the test script. run_tests.sh
requires the python selenium library and the chromedriver program, both of
which are in shell.nix
, so you can run nix-shell --command "./run_tests.sh"
. The test script uses a test database and test directory for
files, so you don't have to worry about it resetting same database that is used
when you execute cabal run
.
Contributions are welcome! However, I would suggest contacting me before doing something too substantial, just to make sure that I am not already working on it or am not opposed to adding the feature itself. Contributions should use 4-space indent for Haskell (since it is whitespace sensitive), and single-tab indent for JS/CSS/HTML. It would also be helpful to add tests for any added functionality as well.
Feature requests are also welcome! It would be cool if people started using using this. Let me know if there are any blocking issues for hosting your own site.
Here are some ways you can help out with this project:
Currently, the CSS styles for this project very bare-bones. I'd like to make the pages look better, so this is an easy way to help out with the project. Unfortunately, editing styles for the site does require knowledge of Haskell, since I am using Lucid to generate the page structure.
The pages on this site are the following:
/users
/
/document/<document-id>
Send an email to the mailing list asking how to help. I'll let you know what I'm working on and what would be most helpful in the moment.
Let me know how this README could be improved.
Send patches, feedback, comments, and salutations to the mailing list -
~philipwhite/webpad@lists.sr.ht
. I want to hear if you are interested in
this.
Documents may be public or private, and additionally may have any number of users assigned one of three roles on the document. The roles include "owner", "editor", and "viewer". A user may view a document if the document is public, or if they have a role on the document. A user may edit a document only if they have the "editor" or "owner" role. Only owners may delete or add roles on a document.
If a user attempts to update both the title (or body) and the publicity, but they are only and editor (and thus cannot update the publicity), then neither the title nor the publicity will update, even though the user has permission to update the title. This is only a concern in the server API, since the only controls available in the UI will be controls that the user is authorized to use.