Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 3.09 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