anchor.diff:  	(hide! (by-selector ".book-title input"))
   	(nativesortable (by-selector "ul.cells"))
   	(set-page-hash (create :book (notebook-name *notebook*)))
  -	(chain (by-selector "#book-list option")
  -	       (remove-attribute :selected))
  +	(map (lambda (opt) (chain opt (remove-attribute :selected)))
  +	     (by-selector-all "#book-list option"))
   	(chain (by-selector (+ "#book-list option[value='" (notebook-name *notebook*) "']"))
   	       (set-attribute :selected "selected"))
   	(map (lambda (cell) 
  
positive.code: 	(chain req (open :GET (if params (+ uri "?" (obj->params params)) uri) t))
  	(chain req (send))))
  
      (defun post (uri params callback)
        (let ((req (new (-x-m-l-http-request)))
  	    (encoded-params (obj->params params)))
  	(setf (@ req onreadystatechange)
  	      (lambda ()
  		(when (and (equal (@ req ready-state) 4)
  			   (equal (@ req status) 200))
  		  (let ((result (@ req response-text)))
  		    (when (function? callback)
  		      (callback result))))))
  	(chain req (open :POST uri t))
  	(chain req (set-request-header "Content-type" "application/x-www-form-urlencoded"))
  	(chain req (set-request-header "Content-length" (length encoded-params)))
  	(chain req (set-request-header "Connection" "close"))
  	(chain req (send encoded-params))))
  
      (defun post/json (uri params callback)
        (post uri params
  	    (lambda (raw)
  	      (when callback
  		(let ((res (string->obj raw)))
  		  (callback res))))))
  
      (defun event-source (uri bindings)
        (let ((stream (new (-event-source uri))))
  
negative.code: 
      ;; cl-notebook specific DOM manipulation
      (defun display-book (book-name)
        (when book-name
  	(console.log "CHANGING TO " book-name)
  	(set-page-hash (create :book book-name))
  	(hash-updated)))
  
      (defun hash-updated ()
        (let ((book-name (@ (get-page-hash) :book)))
  