From 09967e7186539737caa42d85858e54fe7667770c Mon Sep 17 00:00:00 2001 From: Sidharth Arya Date: Sat, 3 Apr 2021 00:13:42 +0530 Subject: [PATCH] Add org-roam-server adaptive tags support --- index.html | 32 +++++++++++++++++++++++--------- org-roam-server.el | 29 ++++++++++++++++++++++++++--- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/index.html b/index.html index 969bbdc..1f2c75f 100644 --- a/index.html +++ b/index.html @@ -305,12 +305,7 @@ var defaultExcludeFilters = []; const filterButtonTitles = ['Exclude', 'Include']; const filterButtonColors = ['#c82333', 'green']; - - $.ajax({ - async: false, - type: 'GET', - url: `/default-filters?token=${token}`, - success: function(data) { + function applyFilters(data) { if (data.include) { for (let i = 0; i < data.include.length; i++) { filters[FilterEnum.include] @@ -325,8 +320,8 @@ defaultExcludeFilters.push(data.exclude[i].id); } } + console.log(filters); } - }); var previewFrame = document.getElementById("preview-frame"); // div var hoverNode = document.getElementById("hovernode"); // iframe @@ -410,7 +405,7 @@ } else { $('#colormode-checkbox').bootstrapToggle('off') } - + $('#colormode-checkbox').change(function() { if(this.checked) { $(document.body).addClass("darkmode"); @@ -524,7 +519,26 @@ } } } + var filterSource; setCurrentBufferSource(); + $.get(`/default-filters?force=1&token=${token}`, function(data, status){ + defaultExcludeFilters = [] + defaultIncludeFilters = [] + console.log(`Connection to /default-filters: ${status}`); + applyFilters(JSON.parse(data.substring(data.indexOf(':') + 1))); + filterSource = new EventSource(`/default-filters?token=${token}`); + console.log(filterSource.readyState); + filterSource.onmessage = function (event) { + + defaultExcludeFilters = [] + defaultIncludeFilters = [] + filters[0].clear(); + filters[1].clear(); + applyFilters(JSON.parse(event.data)); + view.refresh(); + updateDropdown(); + } + }); function debugFunction() { } @@ -551,7 +565,7 @@ reload(); $("#reload-button").click(function() { - roamSource.close() + roamSource.close(); reload(); currentBuffer.close() setCurrentBufferSource(); diff --git a/org-roam-server.el b/org-roam-server.el index 930a7bc..02b1128 100644 --- a/org-roam-server.el +++ b/org-roam-server.el @@ -195,6 +195,12 @@ or [{ \"id\": \"test\", \"parent\" : \"tags\" }]" :group 'org-roam-server :type 'string) +(defcustom org-roam-server-tags "" + "Option to set tags. +Format: +tag1 -tag2 +tag3" + :group 'org-roam-server + :type 'string) + (defcustom org-roam-server-link-auto-replace t "When non-nil, replace Org-roam's roam links on export." :group 'org-roam-server @@ -447,6 +453,21 @@ DESCRIPTION is the shown attribute to the user if the image is not rendered." html-link org-roam-server-token desc) (format "%s" html-link desc))))))) +(defun org-roam-server-set-tags() + "Process org-roam-server-tags" + (interactive) + (let* ( + (tags (read-string "Tags: " org-roam-server-tags)) + (tags-temp (cdr (split-string tags "\ [\+]"))) + (plus (mapcar (lambda(a) (string-trim (car (split-string a "\ [\-]")))) tags-temp)) + (tags-temp (cdr (split-string tags "\ [\-]"))) + (minus (mapcar (lambda(a) (string-trim (car (split-string a "\ [\+]")))) tags-temp))) + + (setq org-roam-server-default-include-filters (json-encode (mapcar (lambda (tag) (list (cons 'id tag ) (cons 'parent "tags"))) plus))) + (setq org-roam-server-default-exclude-filters (json-encode (mapcar (lambda (tag) (list (cons 'id tag ) (cons 'parent "tags"))) minus))) + (setq org-roam-server-tags tags) + )) + ;;;###autoload (define-minor-mode org-roam-server-mode "Start the http server and serve org-roam files." @@ -556,14 +577,16 @@ DESCRIPTION is the shown attribute to the user if the image is not rendered." (if (not (string= org-roam-server-token token)) (httpd-error httpd-current-proc 403))) (insert (or org-roam-server-style ":empty"))) - -(defservlet* default-filters application/json (token) +(setq org-roam-server-default-filters-last "") +(defservlet* default-filters text/event-stream (token &optional force) (if org-roam-server-authenticate (if (not (string= org-roam-server-token token)) (httpd-error httpd-current-proc 403))) - (insert (format "{\"include\" : %s, \"exclude\": %s}" + (when (or force (not (equal org-roam-server-default-filters-last org-roam-server-tags))) + (insert (format "data: %s\n\n" (format "{\"include\" : %s, \"exclude\": %s}" org-roam-server-default-include-filters org-roam-server-default-exclude-filters))) + (setq org-roam-server-default-filters-last org-roam-server-tags))) (defun org-roam-server-insert-title (title) "Insert the TITLE as `org-document-title`."