Creating and deleting notebooks

Creating and deleting notebooks from the notebooklist buffer is now
funcitonal and supports subdirectories per IPEP 16.
This commit is contained in:
John Miller 2014-09-19 09:17:12 -05:00
parent b9e145c4db
commit 7185d18e8c

View file

@ -112,7 +112,8 @@ To suppress popup, you can pass a function `ein:do-nothing' as CALLBACK."
(ein:url url-or-port "api/notebooks"))) (ein:url url-or-port "api/notebooks")))
(defun ein:notebooklist-new-url (url-or-port &optional path) (defun ein:notebooklist-new-url (url-or-port &optional path)
(if path (ein:log 'info "New notebook. Port: %s, Path: %s" url-or-port path)
(if (and path (not (string= path "")))
(ein:url url-or-port "api/notebooks" path) (ein:url url-or-port "api/notebooks" path)
(ein:url url-or-port "api/notebooks"))) (ein:url url-or-port "api/notebooks")))
@ -202,50 +203,53 @@ This function is called via `ein:notebook-after-rename-hook'."
(add-hook 'ein:notebook-after-rename-hook 'ein:notebooklist-refresh-related) (add-hook 'ein:notebook-after-rename-hook 'ein:notebooklist-refresh-related)
(defun ein:notebooklist-open-notebook (nblist notebook-id path &optional name (defun ein:notebooklist-open-notebook (nblist name path &optional
callback cbargs) callback cbargs)
(ein:notebook-open (ein:$notebooklist-url-or-port nblist) notebook-id path ;notebook-id (ein:notebook-open (ein:$notebooklist-url-or-port nblist) name path
callback cbargs)) callback cbargs))
;;;###autoload ;;;###autoload
(defun ein:notebooklist-new-notebook (&optional url-or-port callback cbargs) b(defun ein:notebooklist-new-notebook (&optional url-or-port callback cbargs)
"Ask server to create a new notebook and open it in a new buffer." "Ask server to create a new notebook and open it in a new buffer."
(interactive (list (ein:notebooklist-ask-url-or-port))) (interactive (list (ein:notebooklist-ask-url-or-port)))
(ein:log 'info "Creating a new notebook...") (let ((path (ein:$notebooklist-path ein:%notebooklist%)))
(ein:log 'info "Creating a new notebook at %s..." path)
(unless url-or-port (unless url-or-port
(setq url-or-port (ein:$notebooklist-url-or-port ein:%notebooklist%))) (setq url-or-port (ein:$notebooklist-url-or-port ein:%notebooklist%)))
(assert url-or-port nil (assert url-or-port nil
(concat "URL-OR-PORT is not given and the current buffer " (concat "URL-OR-PORT is not given and the current buffer "
"is not the notebook list buffer.")) "is not the notebook list buffer."))
(let ((url (ein:notebooklist-new-url url-or-port))) (let ((url (ein:notebooklist-new-url url-or-port
path)))
(ein:query-singleton-ajax (ein:query-singleton-ajax
(list 'notebooklist-new-notebook url-or-port) (list 'notebooklist-new-notebook url-or-port path)
url url
:type "POST" :type "POST"
:parser (lambda () :parser (lambda ()
(ein:html-get-data-in-body-tag "data-notebook-id")) (ein:html-get-data-in-body-tag "data-notebook-id"))
:error (apply-partially #'ein:notebooklist-new-notebook-error :error (apply-partially #'ein:notebooklist-new-notebook-error
url-or-port callback cbargs) url-or-port path callback cbargs)
:success (apply-partially #'ein:notebooklist-new-notebook-callback :success (apply-partially #'ein:notebooklist-new-notebook-callback
url-or-port callback cbargs)))) url-or-port path callback cbargs)))))
(defun* ein:notebooklist-new-notebook-callback (url-or-port (defun* ein:notebooklist-new-notebook-callback (url-or-port
path
callback callback
cbargs cbargs
&key &key
data data
&allow-other-keys &allow-other-keys
&aux &aux
(notebook-id data) (notebook-name data)
(no-popup t)) (no-popup t))
(ein:log 'info "Creating a new notebook... Done.") (ein:log 'info "Creating a new notebook... Done.")
(if notebook-id (if notebook-name
(ein:notebook-open url-or-port notebook-id callback cbargs) (ein:notebook-open url-or-port notebook-name path callback cbargs)
(ein:log 'info (concat "Oops. EIN failed to open new notebook. " (ein:log 'info (concat "Oops. EIN failed to open new notebook. "
"Please find it in the notebook list.")) "Please find it in the notebook list."))
(setq no-popup nil)) (setq no-popup nil))
;; reload or open notebook list ;; reload or open notebook list
(ein:notebooklist-open url-or-port no-popup)) (ein:notebooklist-open url-or-port path no-popup))
(defun* ein:notebooklist-new-notebook-error (defun* ein:notebooklist-new-notebook-error
(url-or-port callback cbargs (url-or-port callback cbargs
@ -282,17 +286,18 @@ You may find the new one in the notebook list." error)
(pop-to-buffer (current-buffer)))) (pop-to-buffer (current-buffer))))
(list name))) (list name)))
(defun ein:notebooklist-delete-notebook-ask (notebook-id name) (defun ein:notebooklist-delete-notebook-ask (name path)
(when (y-or-n-p (format "Delete notebook %s?" name)) (when (y-or-n-p (format "Delete notebook %s/%s?" path name))
(ein:notebooklist-delete-notebook notebook-id name))) (ein:notebooklist-delete-notebook name path)))
(defun ein:notebooklist-delete-notebook (notebook-id name) (defun ein:notebooklist-delete-notebook (name path)
(ein:log 'info "Deleting notebook %s..." name) (ein:log 'info "Deleting notebook %s/%s..." path name)
(ein:query-singleton-ajax (ein:query-singleton-ajax
(list 'notebooklist-delete-notebook (list 'notebooklist-delete-notebook
(ein:$notebooklist-url-or-port ein:%notebooklist%) notebook-id) (ein:$notebooklist-url-or-port ein:%notebooklist%) name path)
(ein:notebook-url-from-url-and-id (ein:notebook-url-from-url-and-id
(ein:$notebooklist-url-or-port ein:%notebooklist%) (ein:$notebooklist-url-or-port ein:%notebooklist%)
path
name) name)
:type "DELETE" :type "DELETE"
:success (apply-partially (lambda (buffer name &rest ignore) :success (apply-partially (lambda (buffer name &rest ignore)
@ -360,11 +365,11 @@ Notebook list data is passed via the buffer local variable
(widget-create (widget-create
'link 'link
:notify (lexical-let ((name name) :notify (lexical-let ((name name)
(notebook-id notebook-id)) (path path))
(lambda (&rest ignore) (lambda (&rest ignore)
(ein:notebooklist-delete-notebook-ask (ein:notebooklist-delete-notebook-ask
notebook-id name
name))) path)))
"Delete") "Delete")
(widget-insert " : " name) (widget-insert " : " name)
(widget-insert "\n"))) (widget-insert "\n")))