Coder Social home page Coder Social logo

hugonikanor / calp Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 0.0 2.09 MB

iCalendar compatible parser and viewer [MIRROR].

Home Page: https://git.hornquist.se/calparse/

License: GNU Affero General Public License v3.0

Makefile 0.45% Scheme 83.53% Shell 0.39% JavaScript 0.43% CSS 0.03% SCSS 2.96% TypeScript 12.09% Python 0.13%

calp's People

Contributors

hugonikanor avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

calp's Issues

Figure out install method.

Currently module/util.scm is installed to $GUILE_SITE_DIR/util, which reserves
the (util) module for the whole namespace.

Either properly namespace everything I have to keep installing it into the Guile
system directory, or allocate a private Guile module tree for calp.

Popup improvements.

Specify which component poups are relative to. Make that component have
overflow: hidden should prevent popups from growing the page.

Normalize multiple values

A few types can have multiple values. In those cases each vline can sometimes
have a (comma separated) list, and multiple vlines may exist. Difference being
that only items which share parameters can share a line.

The program currently stores multiple vlines, and sometimes multiple values
inside a single vline. Normalize this so:

Each value is stored in its own vline object, and then merged (as applicable)
upon output.

HTML Move created events.

Since cloneNode doesn't carry over event handlers newly spawned popups can't be
moved by dragging.

Event Creation.

Events can be inserted into a calendar through the calendar_import procedure.
Update this to actually update all the relevant data structures, so the program
doesn't have to be restarted to see the changes.

Creating and removing events.

Creating and removing events often fail with

Warning: Unwind-only `stack-overflow' exception; skipping pre-unwind handler.

Auto screenshot HTML components.

Firefox provides functions for creating screenshots in headless mode 1.
Use this to create examples of all HTML components (component producing
procedures) which make sense to use individually. Probably my creating a
document wrapper shim.

Terminal output on small terminals.

Pretty sure it's caused by there being more items than lines on the
screen, forcing the topmost items of the top, giving them a negative
index on the screen.

Backtrace:
          10 (apply-smob/1 #<catch-closure 7ffa7379a440>)
In ice-9/boot-9.scm:
    705:2  9 (call-with-prompt _ _ #<procedure default-prompt-handle…>)
In ice-9/eval.scm:
    619:8  8 (_ #(#(#<directory (guile-user) 7ffa73458140>)))
In ice-9/boot-9.scm:
    841:4  7 (with-throw-handler _ _ _)
In main.scm:
   150:35  6 (_)
In ice-9/boot-9.scm:
    829:9  5 (catch _ _ #<procedure values _> _)
In main.scm:
    120:4  4 (wrapped-main _)
In entry-points/terminal.scm:
    28:16  3 (main _)
In output/terminal.scm:
   127:29  2 (main-loop _ #:app _)
In unknown file:
           1 (list-head ("ID 1864203") -1)
In ice-9/boot-9.scm:
   752:25  0 (dispatch-exception _ _ _)

ice-9/boot-9.scm:752:25: In procedure dispatch-exception:
Value out of range 0 to 18446744073709551615: -1

Strip fields

Summary, and especially description, ought to be trimmed before being saved.

HTML Popup format text as HTML

Since many people send HTML in the description field it would be good with a "Reformat as HTML" button.
It should execute something along the lines of:

$0.innerHTML = $0.innerText.replaceAll('&nbsp;',' ').replaceAll('<br>','<br/>')

Problem being that since our document is in XML mode the HTML is (attempted to be) read as XML, which usually fails.

Objects without DTEND.

The standard says that events where DTSTART is a date (and not a
datetime) and DTEND is missing should be whole day events. Events
with DTSTART which is a datetime should be treated as a single
monment. (currently they get a default DTEND of +1h).

Replace server.

The primary problem with the current server implementation (entry-points server)
is that it blocks until it has served the current client.

It should be forking, and probably optimized to run behind a reverse proxy.

Multiple simultaneous create event popups HTML.

Currently all popups are created as exact clones of the template, meaning that
they all share id, and worse, tab group. This means that once the second create
event popup is opened all create event popups break.

Javascript timezones other than local and UTC.

As far as I can tell all Date objects in Javascript are in local time (but
internally stored as seconds since the epoch).
Commit 49b04a13a247c9bfd87e5a1e27ac853e945586fe adds basic functionality to
handle both local time, and UTC time.

It should also handle arbitrary zones. Currently anything with an explicit
timezone which is different from local time will fail in weird ways. But it
works on my machine since localtime == Europe/Stockholm, which just about all
events are in.

Events with multiple instances can't be removed.

An event with multiple instances, meaning multiple VEVENT components sharing the same UID. Attempting to remove them (from the HTML frontend) hangs the server for a few seconds, before the server times out, return HTTP 500, and writes stack-overflows to the log:

[2021-08-21T10:04:33] POST (localhost . 8080)//remove?
Warning: Unwind-only `stack-overflow' exception; skipping pre-unwind handler.
Warning: Unwind-only `stack-overflow' exception; skipping pre-unwind handler.
Warning: Unwind-only `stack-overflow' exception; skipping pre-unwind handler.

RDATE values.

Currently unimplemented. Should be trivial to add them when
calculating the recurrence set. I have however never seen anyone
actually use them.

Frontend response for adding and removing events.

Events can be created by dragging in empty space, and removed by pressing the
garbage bin in the popup. Currently however neither actually gives any feedback
to the user that something has happened. Requiring a manual reload to see
anything.

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.