Advertisement
Guest User

Untitled

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