Author: hhubner Date: 2006-03-07 01:01:12 -0500 (Tue, 07 Mar 2006) New Revision: 1893
Modified: branches/xml-class-rework/projects/mah-jongg/src/game.lisp branches/xml-class-rework/projects/mah-jongg/website/game.css branches/xml-class-rework/projects/mah-jongg/website/game.xsl Log: Add Button to undo last game entered.
Modified: branches/xml-class-rework/projects/mah-jongg/src/game.lisp =================================================================== --- branches/xml-class-rework/projects/mah-jongg/src/game.lisp 2006-03-07 05:58:42 UTC (rev 1892) +++ branches/xml-class-rework/projects/mah-jongg/src/game.lisp 2006-03-07 06:01:12 UTC (rev 1893) @@ -54,13 +54,14 @@ (defclass game () ((winner :reader winner :initarg :winner) (east :reader east :initarg :east) + (undo-timestamp :reader undo-timestamp :initarg :undo-timestamp) (results :reader results :initarg :results :documentation "List ((<player> <score>) (...))")))
(defmethod print-object ((game game) stream) (print-unreadable-object (game stream :type t) (format stream "WINNER: ~S" (name (winner game)))))
-(deftransaction make-game (winner results) +(deftransaction make-game (undo-timestamp winner results) (let* ((all-results (mapcar #'(lambda (name-score) (list (find-player (car name-score)) (cadr name-score))) results)) (winner (find-player winner)) (east (find-if #'east-p (players *round*))) @@ -78,6 +79,7 @@ (rotate-winds) (setf (east-win-count *round*) 0)) (car (push (make-instance 'game + :undo-timestamp undo-timestamp :winner winner :east east :results all-results) @@ -85,6 +87,8 @@
(defun round-as-xml () (with-element "round" + (when (games *round*) + (attribute "undo-timestamp" (undo-timestamp (first (games *round*))))) (dolist (player (players *round*)) (with-slots (name wind score) player (with-element "player" @@ -92,7 +96,7 @@ (attribute "wind" (string-downcase wind)) (attribute "score" score)))) (dolist (game (reverse (games *round*))) - (with-slots (winner east results) game + (with-slots (winner east results undo-timestamp) game (with-element "game" (dolist (player (players *round*)) (with-element "score" @@ -108,12 +112,15 @@
(defun handle-game (req ent) (when (eq :post (request-method req)) - (with-query-params (req action east north west south winner) + (with-query-params (req action undo-timestamp east north west south winner) (ecase (make-keyword-from-string action) + (:undo + (restore (parse-integer undo-timestamp))) (:make-round (make-round east north west south)) (:make-game - (make-game (name (wind->player (make-keyword-from-string winner))) + (make-game (1- (get-universal-time)) + (name (wind->player (make-keyword-from-string winner))) (mapcar #'(lambda (wind) (list (name (wind->player wind)) (parse-integer (query-param req (symbol-name wind))))) '(:east :north :west :south))))
Modified: branches/xml-class-rework/projects/mah-jongg/website/game.css =================================================================== --- branches/xml-class-rework/projects/mah-jongg/website/game.css 2006-03-07 05:58:42 UTC (rev 1892) +++ branches/xml-class-rework/projects/mah-jongg/website/game.css 2006-03-07 06:01:12 UTC (rev 1893) @@ -60,7 +60,7 @@ text-align: right; }
-#end-round-button { +#control-buttons { position: fixed; right: 20px; bottom: 20px;
Modified: branches/xml-class-rework/projects/mah-jongg/website/game.xsl =================================================================== --- branches/xml-class-rework/projects/mah-jongg/website/game.xsl 2006-03-07 05:58:42 UTC (rev 1892) +++ branches/xml-class-rework/projects/mah-jongg/website/game.xsl 2006-03-07 06:01:12 UTC (rev 1893) @@ -90,7 +90,13 @@ </tr> </tbody> </table> - <button type="submit" name="action" id="end-round-button" value="clear-round">End Round</button> + <div id="control-buttons"> + <xsl:if test="@undo-timestamp != ''"> + <input type="hidden" name="undo-timestamp" value="{@undo-timestamp}"/> + <button type="submit" name="action" value="undo">Undo Last Game</button> + </xsl:if> + <button type="submit" name="action" value="clear-round">End Round</button> + </div> </form> </body> </xsl:template>