Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 3.23 KB | None | 0 0
  1. (labels ((make-button (&rest options)
  2.            (new (dijit.form.*button (object-from-list options)))))
  3.   (let* ((result-number-node (document.create-text-node "0"))
  4.          (mod-result-value
  5.           (let ((x 0))
  6.             (lambda (modifier)
  7.               (setf x (modifier x)) (setf result-number-node.node-value (.to-string x))))))
  8.     (creation
  9.      :div
  10.      (list
  11.       (document.create-text-node "(Press some buttons to add math operations and apply them)")
  12.       (table-creation (list (tr (list (td (document.create-text-node "Calculation Accumulator:"))
  13.                                       (td (progn result-number-node))))))
  14.       (table-creation
  15.        (append
  16.         (map
  17.          (lambda (op)
  18.            (destructuring-bind (op-string op-func) op
  19.              (let* ((var-table (table-creation (list (tr ))))
  20.                     (get-var-table-row
  21.                      (lambda () (aref (slot-value (aref var-table.t-bodies 0) 'rows) 0)))
  22.                     (add-button-id (get-new-label))
  23.                     (del-button-id (get-new-label))
  24.                     (add-button
  25.                      (make-button
  26.                       :id add-button-id :label "Add"
  27.                       :on-click
  28.                       (lambda ()
  29.                         (let ((num (+ (slot-value (slot-value (get-var-table-row) 'cells) 'length) 1))
  30.                               (click-count 0)
  31.                               (click-count-text (document.create-text-node "0")))
  32.                           (.append-child
  33.                            (.insert-cell (get-var-table-row) -1)
  34.                            (table-creation
  35.                             (list
  36.                              (trd (progn click-count-text))
  37.                              (trd
  38.                               (slot-value
  39.                                (make-button
  40.                                 :label (+ op-string " " (.to-string num))
  41.                                 :on-click
  42.                                 (lambda ()
  43.                                   (mod-result-value (rcurried op-func num))
  44.                                   (incf click-count)
  45.                                   (setf click-count-text.node-value (.to-string click-count))))
  46.                                'dom-node))))))
  47.                         (.set (dijit.by-id del-button-id) "disabled" (not t)))))
  48.                     (del-button
  49.                      (make-button
  50.                       :id del-button-id :disabled t :label "Del" :on-click
  51.                       (lambda ()
  52.                         (.delete-cell (get-var-table-row) -1)
  53.                         (when (== (slot-value (slot-value (get-var-table-row) 'cells) 'length) 0)
  54.                           (.set (dijit.by-id del-button-id) "disabled" t))))))
  55.                (tr
  56.                 (list
  57.                  (td (document.create-text-node op-string))
  58.                  (td (table-creation
  59.                       (list (trd (slot-value add-button 'dom-node))
  60.                             (trd (slot-value del-button 'dom-node)))))
  61.                  (td (progn var-table)))))))
  62.          #.`(list
  63.              ,@(mapcar
  64.                 (lambda (op) `(list ,(string op) (lambda (a b) (,op a b))))
  65.                 '(+ - * /))))))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement