Giter Site home page Giter Site logo

excal's Introduction

============
Excal
============

The name ``excal`` is derived from Microsoft's Excel and Google's Google Calendar. This project was created to serve as a seamless bridge between the two, since Excel did not support class scheduling to the extent that Google Calendar did (even though that's not its primary purpose), and Google Calendar did not support test and assignment tracking with features such as conditional formatting, automatic time remaining updaters, etc.


The objective of Excal is to mimic the behavior of Google Calendar in how it displays class items, while adding in the functionality of Excel so that each class instance displays the schedule on which the class recurs, as well as any class assignments and tests, with the ability to add notes, resources, and more.

============
Building for Linux
============

Download and install the latest stable versions of ``Python`` and ``pip``. Then navigate to the project root directory.
Build instructions are available in ``/Dockerfile``.


If you choose to build a docker image, you can do that by using
``docker build .``


The process is fairly similar for Windows and macOS environments.

excal's People

Contributors

srenduch avatar clairdeluna01 avatar

Watchers

 avatar

excal's Issues

Add delete modal for quick item deletion

  • Just like how alt+n displays the "new" modal (popup), need a similar hotkey to display the "delete" modal
  • Ideally, it would be similar in shape and size to the new modal to encourage uniformity

Maybe a item type toggler like in the new modal, and based on the active item type, display elements accordingly?


Possible layouts:

  • Assignment

image

Pick the class the assignment belongs to, then in an (not pictured here) adjacent drop-down pick the assignment to delete

  • Need to ensure that there are no two assignments with the same name (a_name) within the same class

  • Class
    Similar as above, but without the extra assignment toggle

Delete assignments

The current view on the homepage:
image

Need a way to delete this item. For now, let's try adding a clickable element to the right of the title, perhaps a button.
On button-click, remove the item from the homepage and remove the corresponding element from the db table.

Preferably, the deletion would be dynamic in that it is reflected across the page on the click itself (without reloading the page).
If that doesn't work, we might need to reload the page for the changes to take effect.

Might also need JS to do this but hopefully we can keep it in Python.

This may be useful for reference.

Database migration from local instance to server/cloud instance

Currently, the assignment, class, and tests tables are stored in a local database in /db/db.sqlite3. This is a naive approach for the following reasons:

  • If the database is corrupted, there is no backup for it. All information is lost.
  • When deploying, the database is overwritten. Again, all information is lost.
  • When the application has been idle on Heroku's side for too long and is finally refreshed, the database is wiped and again, all information is lost.

By porting this local database instance to a server instance:

  • Even if a local copy of the database is corrupted, a backup is available on the server. Information can be reobtained.
  • When deploying, the application need only fetch existing information from the server.
  • Even if Heroku has been idle, when it refreshes, it can simply fetch the information from the server again.

Add DB API in static files

Just like the DB API written to communicate with the DB in backend, we need a similar DB written for the frontend so that we can invoke those methods across various DOM element-user interactions. The frontend API has the same limitations and goals as the backend API.

Add an auto-updating counter for assignment tracking

Currently, assignments only refresh on page reload or HTTP request.

  1. All assignments should be refreshing every X seconds (leave that to decide up to the developer, will add a setting feature to customize later).
  2. Display changes on the front-end first, then after that works, write changes to database before server termination.

Things to consider:

  1. Threading in javascript if it exists so that updating does not block main thread.
  2. If JS does not have a threading library or threading is not feasible, might need to look into backend threading.

Add assignment creation by hotkey

Ideally, want Ctrl + Alt + <key> binds sitewide to allow on the fly item creation.

Ctrl + Alt + N: Bring up a popup to create an assignment.

Refer here for a rough idea:
image

Need to move HTML generation from server to client side

Current dynamic is done by generating HTML with the dynamic info on the server-side.

  • Rendering should be done by the client, since the server is only meant to process requests and return responses.
  • Server routes should be meant only for retrieving and return data along with the webpage to load and the response status.

We can probably offload this overhead by creating a client-sided HTML generator object, so that HTML generation is centralized and easy to modify.

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.