浏览代码

Updated profile page to allow admins to change rank. Added global helpers to Client.js still much more to do. Added comments as I went through the code.

Wesley McCann 9 年之前
父节点
当前提交
4014804191
共有 4 个文件被更改,包括 74 次插入66 次删除
  1. 48 57
      app/client/client.js
  2. 3 3
      app/client/routes.js
  3. 19 5
      app/client/templates/profile.html
  4. 4 1
      app/server/server.js

+ 48 - 57
app/client/client.js

@@ -13,6 +13,32 @@ Meteor.startup(function() {
     });
     });
 });
 });
 
 
+/* Global Helpers */
+Handlebars.registerHelper("isAdmin", function(argument){
+  if (Meteor.user() && Meteor.user().profile) {
+      return Meteor.user().profile.rank === "admin";
+  } else {
+      return false;
+  }
+});
+
+Handlebars.registerHelper("isModerator", function(argument){
+  if (Meteor.user() && Meteor.user().profile && (Meteor.user().profile.rank === "admin" || Meteor.user().profile.rank === "moderator")) {
+    return true;
+  } else {
+    return false;
+  }
+});
+
+Handlebars.registerHelper("initials", function(argument){
+  var user = Meteor.user();
+  if (user !== undefined) {
+      return user.profile.username[0].toUpperCase();
+  } else {
+      return "";
+  }
+});
+
 Deps.autorun(function() {
 Deps.autorun(function() {
     Meteor.subscribe("queues");
     Meteor.subscribe("queues");
     Meteor.subscribe("reports");
     Meteor.subscribe("reports");
@@ -177,6 +203,28 @@ Template.profile.events({
         $("#edit-username").show();
         $("#edit-username").show();
         $("#cancel-username").hide();
         $("#cancel-username").hide();
         $("#input-username").val("");
         $("#input-username").val("");
+    },
+    // Admins only Edit Rank
+    "click #edit-rank": function() {
+      $("#rank").hide();
+      $("#rank-div").show();
+      $("#edit-rank").hide();
+      $("#cancel-rank").show();
+    },
+    "click #submit-rank": function() {
+      $("#rank").show();
+      $("#rank-div").hide();
+      $("#edit-rank").show();
+      $("#cancel-rank").hide();
+      var newRank = $("#select-rank option:selected").val();
+      var username = Session.get("username");
+      console.log(username, newRank);
+    },
+    "click #cancel-rank": function() {
+      $("#rank").show();
+      $("#rank-div").hide();
+      $("#edit-rank").show();
+      $("#cancel-rank").hide();
     }
     }
 })
 })
 
 
@@ -226,13 +274,6 @@ Template.profile.helpers({
         });
         });
         return dislikedArr;
         return dislikedArr;
     },
     },
-    initials: function() {
-        if (Session.get("username") !== undefined) {
-            return Session.get("username")[0].toUpperCase();
-        } else {
-            return "";
-        }
-    },
     isUser: function(){
     isUser: function(){
         var parts = Router.current().url.split('/');
         var parts = Router.current().url.split('/');
         var username = parts.pop();
         var username = parts.pop();
@@ -310,28 +351,6 @@ Template.header.helpers({
     },
     },
     userId: function() {
     userId: function() {
         return Meteor.userId();
         return Meteor.userId();
-    },
-    initials: function() {
-        var user = Meteor.user();
-        if (user !== undefined) {
-            return user.profile.username[0].toUpperCase();
-        } else {
-            return "";
-        }
-    },
-    isAdmin: function() {
-        if (Meteor.user() && Meteor.user().profile) {
-            return Meteor.user().profile.rank === "admin";
-        } else {
-            return false;
-        }
-    },
-    isModerator: function() {
-        if (Meteor.user() && Meteor.user().profile && (Meteor.user().profile.rank === "admin" || Meteor.user().profile.rank === "moderator")) {
-            return true;
-        } else {
-            return false;
-        }
     }
     }
 });
 });
 
 
@@ -448,20 +467,6 @@ Template.dashboard.helpers({
         } else {
         } else {
             return {};
             return {};
         }
         }
-    },
-    isAdmin: function() {
-        if (Meteor.user() && Meteor.user().profile) {
-            return Meteor.user().profile.rank === "admin";
-        } else {
-            return false;
-        }
-    },
-    isModerator: function() {
-        if (Meteor.user() && Meteor.user().profile && (Meteor.user().profile.rank === "admin" || Meteor.user().profile.rank === "moderator")) {
-            return true;
-        } else {
-            return false;
-        }
     }
     }
 });
 });
 
 
@@ -1100,20 +1105,6 @@ Template.room.helpers({
     loaded: function() {
     loaded: function() {
         return Session.get("loaded");
         return Session.get("loaded");
     },
     },
-    isAdmin: function() {
-        if (Meteor.user() && Meteor.user().profile) {
-            return Meteor.user().profile.rank === "admin";
-        } else {
-            return false;
-        }
-    },
-    isModerator: function() {
-        if (Meteor.user() && Meteor.user().profile && (Meteor.user().profile.rank === "admin" || Meteor.user().profile.rank === "moderator")) {
-            return true;
-        } else {
-            return false;
-        }
-    },
     paused: function() {
     paused: function() {
         return Session.get("state") === "paused";
         return Session.get("state") === "paused";
     },
     },

+ 3 - 3
app/client/routes.js

@@ -145,6 +145,6 @@ Router.route("/:type", {
     }
     }
 });
 });
 
 
-Router.route("/u/:user", {
-    template: "profile"
-});
+Router.route("/u/:user", function() {
+    this.render("profile");
+});

+ 19 - 5
app/client/templates/profile.html

@@ -13,23 +13,37 @@
                     <div class="panel-body">
                     <div class="panel-body">
                         <ul>
                         <ul>
                             {{#if isUser}}
                             {{#if isUser}}
-                                <a href="#" id="edit-name" class="profile-action">Edit</a>
                                 <a href="#" id="cancel-edit" class="profile-action" style="display:none;">Cancel</a>
                                 <a href="#" id="cancel-edit" class="profile-action" style="display:none;">Cancel</a>
                             {{/if}}
                             {{/if}}
-                            <li class="user-stat" id="name">Name: {{real_name}}</li>
+                            <li class="user-stat" id="name">Name: {{real_name}} <i class="fa fa-pencil" id="edit-name" style="font-size: 14px; cursor: pointer;"></i></li>
                             <div id="name-div" style="display: none">
                             <div id="name-div" style="display: none">
                                 <input type="text" id="input-name"><button id="submit-name" class="btn btn-primary btn-sm">Submit</button>
                                 <input type="text" id="input-name"><button id="submit-name" class="btn btn-primary btn-sm">Submit</button>
                             </div>
                             </div>
                             {{#if isUser}}
                             {{#if isUser}}
-                                <a href="#" id="edit-username" class="profile-action">Edit</a>
                                 <a href="#" id="cancel-username" class="profile-action" style="display:none;">Cancel</a>
                                 <a href="#" id="cancel-username" class="profile-action" style="display:none;">Cancel</a>
                             {{/if}}
                             {{/if}}
-                            <li class="user-stat" id="username">Username: {{username}}</li>
+                            <li class="user-stat" id="username">Username: {{username}} <i class="fa fa-pencil" id="edit-username" style="font-size: 14px; cursor: pointer;"></i></li>
                             <div id="username-div" style="display: none">
                             <div id="username-div" style="display: none">
                                 <input type="text" id="input-username"><button id="submit-username" class="btn btn-primary btn-sm">Submit</button>
                                 <input type="text" id="input-username"><button id="submit-username" class="btn btn-primary btn-sm">Submit</button>
                             </div>
                             </div>
                             <li class="user-stat">Joined: {{first_joined}}</li>
                             <li class="user-stat">Joined: {{first_joined}}</li>
-                            <li class="user-stat">Rank: {{rank}}</li>
+                            {{#if isAdmin}}
+                              <a href="#" id="cancel-rank" class="profile-action" style="display:none;">Cancel</a>
+                              <li class="user-stat" id="rank">Rank: {{rank}} <i class="fa fa-pencil" id="edit-rank" style="font-size: 14px; cursor: pointer;"></i></li>
+                              <div class="user-stat" id="rank-div" style="display: none">
+                                Rank:
+                                <select id="select-rank">
+                                  <option value="default">Default</option>
+                                  <option value="moderator">Moderator</option>
+                                  <option value="admin">Admin</option>
+                                </select>
+                                <button id="submit-rank" class="btn btn-primary btn-sm">Submit</button>
+                              </div>
+                            {{else}}
+                              {{#if isUser}}
+                                <li class="user-stat">Rank: {{rank}}</li>
+                                {{/if}}
+                            {{/if}}
                         </ul>
                         </ul>
                     </div>
                     </div>
                 </div>
                 </div>

+ 4 - 1
app/server/server.js

@@ -1013,7 +1013,10 @@ Meteor.methods({
         Meteor.users.update({"profile.username": username}, {$set: {"profile.realname": realname}});
         Meteor.users.update({"profile.username": username}, {$set: {"profile.realname": realname}});
     },
     },
     updateUserName: function(username, newUserName){
     updateUserName: function(username, newUserName){
-        Meteor.users.update({"username": username}, {$set: {"username": newUserName, "profile.username": newUserName, "profile.usernameL": newUserName.toLowerCase()}})
+        Meteor.users.update({"username": username}, {$set: {"username": newUserName, "profile.username": newUserName, "profile.usernameL": newUserName.toLowerCase()}});
+    },
+    updateUserRank: function(username, newRank){
+      Meteor.users.update({"username" : username}, {$set: {"profile.rank": newRank}});
     },
     },
     deleteAccount: function(userID) {
     deleteAccount: function(userID) {
         Meteor.users.remove({_id: userID});
         Meteor.users.remove({_id: userID});