Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 3.11 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 (lambda () (aref (slot-value (aref var-table.t-bodies 0) 'rows) 0)))
  21.                     (add-button-id (get-new-label))
  22.                     (del-button-id (get-new-label))
  23.                     (add-button
  24.                      (make-button
  25.                       :id add-button-id :label "Add"
  26.                       :on-click
  27.                       (lambda ()
  28.                         (let ((num (+ (slot-value (slot-value (get-var-table-row) 'cells) 'length) 1))
  29.                               (click-count 0)
  30.                               (click-count-text (document.create-text-node "0")))
  31.                           (.append-child
  32.                            (.insert-cell (get-var-table-row) -1)
  33.                            (table-creation
  34.                             (list
  35.                              (trd (progn click-count-text))
  36.                              (trd
  37.                               (slot-value
  38.                                (make-button
  39.                                 :label (+ op-string " " (.to-string num))
  40.                                 :on-click
  41.                                 (lambda ()
  42.                                   (mod-result-value (rcurried op-func num))
  43.                                   (incf click-count)
  44.                                   (setf click-count-text.node-value (.to-string click-count))))
  45.                                'dom-node))))))
  46.                         (.set (dijit.by-id del-button-id) "disabled" (not t)))))
  47.                     (del-button
  48.                      (make-button
  49.                       :id del-button-id :disabled t :label "Del" :on-click
  50.                       (lambda ()
  51.                         (.delete-cell (get-var-table-row) -1)
  52.                         (when (== (slot-value (slot-value (get-var-table-row) 'cells) 'length) 0)
  53.                           (.set (dijit.by-id del-button-id) "disabled" t))))))
  54.                (tr
  55.                 (list
  56.                  (td (document.create-text-node op-string))
  57.                  (td (table-creation (list (trd (slot-value add-button 'dom-node)) (trd (slot-value del-button 'dom-node)))))
  58.                  (td (progn var-table)))))))
  59.          #.`(list ,@(mapcar (lambda (op) `(list ,(string op) (lambda (a b) (,op a b)))) '(+ - * /))))))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement