aboutsummaryrefslogtreecommitdiff
path: root/static/script.ts
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2023-09-05 01:25:00 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2023-09-05 01:25:00 +0200
commit7949fcdc683d07689bad5da5d20bfa3eeb5a6a46 (patch)
treec1bc39dc0e508ee498cf7119f888f513db4bab8f /static/script.ts
parentAdd build step for jsdoc. (diff)
downloadcalp-7949fcdc683d07689bad5da5d20bfa3eeb5a6a46.tar.gz
calp-7949fcdc683d07689bad5da5d20bfa3eeb5a6a46.tar.xz
Move frontend code to subdirectories, to simplify command line flags.
Diffstat (limited to 'static/script.ts')
-rw-r--r--static/script.ts162
1 files changed, 0 insertions, 162 deletions
diff --git a/static/script.ts b/static/script.ts
deleted file mode 100644
index 9238d834..00000000
--- a/static/script.ts
+++ /dev/null
@@ -1,162 +0,0 @@
-import { VEvent, xml_to_vcal } from './vevent'
-import {
- SmallcalCellHighlight, Timebar,
- initialize_clock_components
-} from './clock'
-import { vcal_objects, event_calendar_mapping } from './globals'
-import { EventCreator } from './event-creator'
-import { PopupElement, setup_popup_element } from './components/popup-element'
-import { initialize_components } from './components'
-
-/*
- calp specific stuff
-*/
-
-window.addEventListener('load', function() {
-
- /*
- TODO possibly check here that both window.EDIT_MODE and window.VIEW have
- defined values.
- */
-
- // let json_objects_el = document.getElementById('json-objects');
- let div = document.getElementById('xcal-data')!;
- let vevents = div.firstElementChild!.children;
-
- for (let vevent of vevents) {
- let ev = xml_to_vcal(vevent);
- vcal_objects.set(ev.getProperty('uid'), ev)
- }
-
-
- let div2 = document.getElementById('calendar-event-mapping')!;
- for (let calendar of div2.children) {
- let calendar_name = calendar.getAttribute('key')!;
- for (let child of calendar.children) {
- let uid = child.textContent;
- if (!uid) {
- throw "UID required"
- }
- event_calendar_mapping.set(uid, calendar_name);
- let obj = vcal_objects.get(uid);
- if (obj) obj.calendar = calendar_name
- }
- }
-
- initialize_clock_components();
- initialize_components();
-
- /* A full redraw here is WAY to slow */
- // for (let [_, obj] of vcal_objects) {
- // for (let registered of obj.registered) {
- // registered.redraw(obj);
- // }
- // }
-
-
-
- // let start_time = document.querySelector("meta[name='start-time']").content;
- // let end_time = document.querySelector("meta[name='end-time']").content;
-
- const sch = new SmallcalCellHighlight(
- document.querySelector('.small-calendar')!)
-
- const timebar = new Timebar(/*start_time, end_time*/);
-
- timebar.update(new Date);
- sch.update(new Date);
- window.setInterval(() => {
- let d = new Date;
- timebar.update(d);
- sch.update(d);
- }, 1000 * 60);
-
- /* Is event creation active? */
- if (true && window.EDIT_MODE) {
- let eventCreator = new EventCreator;
- for (let c of document.getElementsByClassName("events")) {
- if (!(c instanceof HTMLElement)) continue;
- c.addEventListener('mousedown', eventCreator.create_event_down(c));
- c.addEventListener('mousemove', eventCreator.create_event_move(
- (c, e) => e.offsetY / c.clientHeight,
- /* every quarter, every hour */
- 1 / (24 * 4), false
- ));
- c.addEventListener('mouseup', eventCreator.create_event_finisher(
- function(ev: VEvent) {
- let uid = ev.getProperty('uid');
- vcal_objects.set(uid, ev);
- setup_popup_element(ev);
- }));
- }
-
- for (let c of document.getElementsByClassName("longevents")) {
- if (!(c instanceof HTMLElement)) continue;
- c.onmousedown = eventCreator.create_event_down(c);
- c.onmousemove = eventCreator.create_event_move(
- (c, e) => e.offsetX / c.clientWidth,
- /* every day, NOTE should be changed to check
- interval of longevents */
- 1 / 7, true
- );
- c.onmouseup = eventCreator.create_event_finisher(
- function(ev: VEvent) {
- let uid = ev.getProperty('uid');
- vcal_objects.set(uid, ev);
- setup_popup_element(ev);
- });
- }
- }
-
- for (let el of document.getElementsByClassName("event")) {
- /* Popup script replaces need for anchors to events.
- On mobile they also have the problem that they make
- the whole page scroll there.
- */
- el.parentElement!.removeAttribute("href");
- }
-
- document.onkeydown = function(evt) {
- evt = evt || window.event;
- if (!evt.key) return;
- if (evt.key.startsWith("Esc")) {
- for (let popup of document.querySelectorAll("popup-element[visible]")) {
- popup.removeAttribute('visible')
- }
- }
- }
-
- /* ---------------------------------------- */
-
- document.addEventListener('keydown', function(event) {
- /* Physical key position, names are what that key would
- be in QWERTY */
- let i = ({
- 'KeyQ': 0,
- 'KeyW': 1,
- 'KeyE': 2,
- 'KeyR': 3,
- 'KeyT': 4,
- 'KeyY': 5,
- })[event.code];
- if (i === undefined) return
- if (!PopupElement.activePopup) return;
- let element = PopupElement
- .activePopup
- .querySelectorAll("[role=tab]")[i] as HTMLInputElement | undefined
- if (!element) return;
- /* don't switch tab if event was fired while writing */
- if ('value' in (event.target as any)) return;
- element.click();
- });
-
- document.addEventListener('keydown', function(event) {
- if (event.key !== '/') return;
- if ('value' in (event.target as any)) return;
-
- let searchbox = document.querySelector('.simplesearch [name=q]') as HTMLInputElement
- // focuses the input, and selects all the text in it
- searchbox.select();
- event.preventDefault();
- });
-})