;; -*- mode: lisp; -*- ;; (pushnew '(SLYNK:*STRING-ELISION-LENGTH* . nil) slynk:*slynk-pprint-bindings* :test #'equal) (in-package :webstats-js) (defun register-visit (data) (fetch "http://localhost/stats/visit" (create :method "POST" :headers (create "Content-Type" "application/x-www-form-urlencoded") :body (new (-u-r-l-search-params data))))) (defun register-click (event) (when (or (= 1 (@ event which)) (= 2 (@ event which))) (chain event (prevent-default)) (let ((link (getprop event 'target 'href))) (chain (register-visit (create :click link :page (@ document location href))) (finally (lambda () (if (= 1 (@ event which)) (setf (@ window location href) link) (chain window (open link "_blank"))))))))) (defun instrument-links () (for-of (link ((@ document query-selector-all) "a")) (setf (@ link onclick) #'register-click) (setf (@ link onauxclick) #'register-click))) (defun register-page-load () (let ((data (create :title (@ document title) :page (@ document location href) :referer (@ document referrer)))) (chain (register-visit data) (then (lambda (r) ((@ console log) r) ((@ r text)))) (then (@ console log))))) (add-event-listener "load" (lambda () (instrument-links) (register-page-load)))