sashomaga

Controller pattern

Jun 30th, 2013
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var controllers = (function () {
  2.     var rootUrl = "http://localhost:40643/api/";
  3.     var Controller = Class.create({
  4.         init: function () {
  5.             this.persister = persisters.get(rootUrl);
  6.         },
  7.         loadUI: function (selector) {
  8.             if (this.persister.isUserLoggedIn()) {
  9.                 this.loadGameUI(selector);
  10.             }
  11.             else {
  12.                 this.loadLoginFormUI(selector);
  13.             }
  14.             this.attachUIEventHandlers(selector);
  15.         },
  16.         loadLoginFormUI: function (selector) {
  17.             var loginFormHtml = ui.loginForm()
  18.             $(selector).html(loginFormHtml);
  19.         },
  20.         loadGameUI: function (selector) {
  21.             var list =
  22.                 ui.gameUI(this.persister.nickname());
  23.             $(selector).html(list);
  24.  
  25.  
  26.             this.persister.game.open(function (games) {
  27.                 var list = ui.openGamesList(games);
  28.                 $(selector + " #open-games")
  29.                     .html(list);
  30.             });
  31.  
  32.             this.persister.game.myActive(function (games) {
  33.                 var list = ui.activeGamesList(games);
  34.                 $(selector + " #active-games")
  35.                     .html(list);
  36.             });
  37.         },
  38.         loadGame: function (selector, gameId) {
  39.             this.persister.game.state(gameId, function (gameState) {
  40.                 var gameHtml = ui.gameState(gameState);
  41.                 $(selector + " #game-holder").html(gameHtml)
  42.             });
  43.         },
  44.         attachUIEventHandlers: function (selector) {
  45.             var wrapper = $(selector);
  46.             var self = this;
  47.  
  48.             wrapper.on("click", "#btn-show-login", function () {
  49.                 wrapper.find(".button.selected").removeClass("selected");
  50.                 $(this).addClass("selected");
  51.                 wrapper.find("#login-form").show();
  52.                 wrapper.find("#register-form").hide();
  53.             });
  54.             wrapper.on("click", "#btn-show-register", function () {
  55.                 wrapper.find(".button.selected").removeClass("selected");
  56.                 $(this).addClass("selected");
  57.                 wrapper.find("#register-form").show();
  58.                 wrapper.find("#login-form").hide();
  59.             });
  60.  
  61.             wrapper.on("click", "#btn-login", function () {
  62.                 var user = {
  63.                     username: $(selector + " #tb-login-username").val(),
  64.                     password: $(selector + " #tb-login-password").val()
  65.                 }
  66.  
  67.                 self.persister.user.login(user, function () {
  68.                     self.loadGameUI(selector);
  69.                 }, function () {
  70.                     wrapper.html("oh no..");
  71.                 });
  72.                 return false;
  73.             });
  74.             wrapper.on("click", "#btn-register", function () {
  75.  
  76.             });
  77.             wrapper.on("click", "#btn-logout", function () {
  78.                 self.persister.user.logout(function () {
  79.                     self.loadLoginFormUI(selector);
  80.                 });
  81.             });
  82.  
  83.             wrapper.on("click", "#open-games-container a", function () {
  84.                 $("#game-join-inputs").remove();
  85.                 var html =
  86.                     '<div id="game-join-inputs">' +
  87.                         'Number: <input type="text" id="tb-game-number"/>' +
  88.                         'Password: <input type="text" id="tb-game-pass"/>' +
  89.                         '<button id="btn-join-game">join</button>' +
  90.                     '</div>';
  91.                 $(this).after(html);
  92.             });
  93.             wrapper.on("click", "#btn-join-game", function () {
  94.                 var game = {
  95.                     number: $("#tb-game-number").val(),
  96.                     gameId: $(this).parents("li").first().data("game-id")
  97.                 };
  98.  
  99.                 var password = $("#tb-game-pass").val();
  100.  
  101.                 if (password) {
  102.                     game.password = password;
  103.                 }
  104.                 self.persister.game.join(game);
  105.             });
  106.             wrapper.on("click", "#btn-create-game", function () {
  107.                 var game = {
  108.                     title: $("#tb-create-title").val(),
  109.                     number: $("#tb-create-number").val(),
  110.                 }
  111.                 var password = $("#tb-create-pass").val();
  112.                 if (password) {
  113.                     game.password = password;
  114.                 }
  115.                 self.persister.game.create(game);
  116.             });
  117.  
  118.             wrapper.on("click", ".active-games .in-progress", function () {
  119.                 self.loadGame(selector, $(this).parent().data("game-id"));
  120.             });
  121.         }
  122.     });
  123.     return {
  124.         get: function () {
  125.             return new Controller();
  126.         }
  127.     }
  128. }());
  129.  
  130. $(function () {
  131.     var controller = controllers.get();
  132.     controller.loadUI("#content");
  133. });
Advertisement
Add Comment
Please, Sign In to add comment