Browse Source

Merge remote-tracking branch 'origin/master'

KrisVos130 9 years ago
parent
commit
c66313e205

+ 1 - 2
app/client/app.css

@@ -1505,9 +1505,8 @@ input[type="checkbox"]:checked + #two-label:after {
     max-width: 25px; /*an arbitratry number more than the icon's width*/
     max-width: 25px; /*an arbitratry number more than the icon's width*/
     opacity: 1; /*for fade in effect*/
     opacity: 1; /*for fade in effect*/
 }
 }
-
-/*adding some colors for fun*/
 #two+label:before, #two+label:after {color: hsl(180, 45%, 40%);}
 #two+label:before, #two+label:after {color: hsl(180, 45%, 40%);}
+/*End of checkbox awesomeness!*/
 
 
 #chat-tab, #global-chat-tab {
 #chat-tab, #global-chat-tab {
     -webkit-transition: background-color 500ms linear;
     -webkit-transition: background-color 500ms linear;

+ 86 - 88
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");
@@ -125,7 +151,7 @@ Template.settings.events({
 });
 });
 
 
 Template.profile.events({
 Template.profile.events({
-    //Edit reak name
+    //Edit real name
     "click #edit-name": function(){
     "click #edit-name": function(){
         $("#name").hide();
         $("#name").hide();
         $("#name-div").show();
         $("#name-div").show();
@@ -170,6 +196,7 @@ Template.profile.events({
         $("#username").text("Username: " + newUserName);
         $("#username").text("Username: " + newUserName);
         $("#input-username").val("")
         $("#input-username").val("")
         Meteor.call("updateUserName", username, newUserName);
         Meteor.call("updateUserName", username, newUserName);
+        window.location = "/u/" + newUserName;
     },
     },
     "click #cancel-username": function(){
     "click #cancel-username": function(){
         $("#username").show();
         $("#username").show();
@@ -177,6 +204,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 +275,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();
@@ -305,33 +347,8 @@ Handlebars.registerHelper('active', function(path) {
 });
 });
 
 
 Template.header.helpers({
 Template.header.helpers({
-    currentUser: function() {
-        return Meteor.user();
-    },
     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;
-        }
     }
     }
 });
 });
 
 
@@ -342,6 +359,9 @@ Template.header.events({
         if (hpSound !== undefined) {
         if (hpSound !== undefined) {
             hpSound.stop();
             hpSound.stop();
         }
         }
+    },
+    "click #profile": function(){
+        window.location = "/u/" + Meteor.user().profile.username;
     }
     }
 });
 });
 
 
@@ -448,20 +468,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;
-        }
     }
     }
 });
 });
 
 
@@ -1111,20 +1117,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";
     },
     },
@@ -1256,31 +1248,49 @@ Template.admin.helpers({
 });
 });
 
 
 Template.admin.events({
 Template.admin.events({
-  "click #croom_create": function() {
-      Meteor.call("createRoom", $("#croom_display").val(), $("#croom_tag").val(), function (err, res) {
-          if (err) {
-              alert("Error " + err.error + ": " + err.reason);
-          } else {
-              window.location = "/" + $("#croom_tag").val();
-          }
-      });
-  },
-  "click a": function(e){
-    var id = e.currentTarget.id;
-    console.log(id.toLowerCase());
-    Session.set("playlistToEdit", id);
-  }
+    "click #croom_create": function() {
+        Meteor.call("createRoom", $("#croom_display").val(), $("#croom_tag").val(), function (err, res) {
+            if (err) {
+            alert("Error " + err.error + ": " + err.reason);
+        } else {
+            window.location = "/" + $("#croom_tag").val();
+            }
+        });
+    },
+    "click a": function(e){
+        var id = e.currentTarget.id;
+        console.log(id.toLowerCase());
+        Session.set("playlistToEdit", id);
+    },
+    "click #croom_create": function() {
+        Meteor.call("createRoom", $("#croom_display").val(), $("#croom_tag").val(), $("#two").prop("checked"), function (err, res) {
+            if (err) {
+                alert("Error " + err.error + ": " + err.reason);
+            } else {
+                window.location = "/" + $("#croom_tag").val();
+            }
+        });
+    },
+    "click #rreset_confirm": function(){
+        $('#confirmModal').modal('hide');
+        Meteor.call("resetRating");
+    }
 });
 });
 
 
 Template.stations.helpers({
 Template.stations.helpers({
     playlist: function() {
     playlist: function() {
       var query = {type: Session.get("playlistToEdit").toLowerCase()};
       var query = {type: Session.get("playlistToEdit").toLowerCase()};
       var playlists = Playlists.find(query).fetch();
       var playlists = Playlists.find(query).fetch();
-      console.log(Session.get("playlistToEdit"), query, playlists);
       return playlists;
       return playlists;
     },
     },
     whichStation: function(){
     whichStation: function(){
       return Session.get("playlistToEdit");
       return Session.get("playlistToEdit");
+    },
+    reports: function() {
+      var query = {room: Session.get("playlistToEdit").toLowerCase()};
+      var reports = Reports.find(query).fetch();
+      console.log(reports);
+      return reports;
     }
     }
 });
 });
 
 
@@ -1340,9 +1350,6 @@ Template.stations.events({
         $("#duration").val(this.duration);
         $("#duration").val(this.duration);
         $("#skip-duration").val(this.skipDuration);
         $("#skip-duration").val(this.skipDuration);
     },
     },
-    "click #rreset_confirm": function(e){
-        Meteor.call("resetRating");
-    },
     "click .add-song-button": function(e){
     "click .add-song-button": function(e){
         var genre = $(e.target).data("genre") || $(e.target).parent().data("genre");
         var genre = $(e.target).data("genre") || $(e.target).parent().data("genre");
         Meteor.call("addSongToPlaylist", genre, this);
         Meteor.call("addSongToPlaylist", genre, this);
@@ -1482,15 +1489,6 @@ Template.stations.events({
             }, 10000);
             }, 10000);
         }
         }
     },
     },
-    "click #croom_create": function() {
-        Meteor.call("createRoom", $("#croom_display").val(), $("#croom_tag").val(), $("#two").prop("checked"), function (err, res) {
-            if (err) {
-                alert("Error " + err.error + ": " + err.reason);
-            } else {
-                window.location = "/" + $("#croom_tag").val();
-            }
-        });
-    },
     "click #get-spotify-info": function() {
     "click #get-spotify-info": function() {
         var search = $("#title").val();
         var search = $("#title").val();
         var artistName = $("#artist").val();
         var artistName = $("#artist").val();

+ 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");
+});

+ 22 - 0
app/client/templates/admin.html

@@ -27,6 +27,7 @@
                   </tr>
                   </tr>
                 </table>
                 </table>
               {{/each}}
               {{/each}}
+              <button class="btn btn-danger col-md-6 col-md-offset-3" id="rrating" data-toggle="modal" data-target="#confirmModal">Reset All Ratings</button>
             </div>
             </div>
             <div class="col-md-3 col-md-offset-1 admin-container" style="height: 80%;">
             <div class="col-md-3 col-md-offset-1 admin-container" style="height: 80%;">
               <div>
               <div>
@@ -56,6 +57,8 @@
                           <div class="input-group">
                           <div class="input-group">
                             <input type="text" class="croom" id="croom_tag" name="croom" required />
                             <input type="text" class="croom" id="croom_tag" name="croom" required />
                           </div>
                           </div>
+                          <input type="checkbox" name="two" id="two"/>
+                          <label id="two-label" for="two">Make Room Private?</label>
                           <button class="btn btn-warning btn-block" id="croom_create">Create</button>
                           <button class="btn btn-warning btn-block" id="croom_create">Create</button>
                         </div>
                         </div>
                       </div>
                       </div>
@@ -67,4 +70,23 @@
               </div>
               </div>
           </div>
           </div>
     </div>
     </div>
+
+    <div id="confirmModal" class="modal fade" role="dialog">
+        <div class="modal-dialog">
+            <!-- Modal content-->
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal">&times;</button>
+                    <h4 class="modal-title">Confirm Reset</h4>
+                </div>
+                <div class="modal-body">
+                    <h3 style="margin-top: 0">Are you sure you want to reset all likes and dislikes?</h3>
+                    <button id="rreset_confirm" class="btn btn-danger">Reset All Ratings</button>
+                </div>
+                <div class="modal-footer">
+                    <button id="close-modal" type="button" class="btn btn-default" data-dismiss="modal">Close</button>
+                </div>
+            </div>
+        </div>
+    </div>
 </template>
 </template>

+ 1 - 1
app/client/templates/header.html

@@ -26,7 +26,7 @@
                     <li class="dropdown">
                     <li class="dropdown">
                       <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{> avatar userId=userId shape="circle" size="header" class="header-avatar" initials=initials}} {{currentUser.profile.username}} <span class="caret"></span></a>
                       <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{> avatar userId=userId shape="circle" size="header" class="header-avatar" initials=initials}} {{currentUser.profile.username}} <span class="caret"></span></a>
                         <ul class="dropdown-menu" id="header-dropdown">
                         <ul class="dropdown-menu" id="header-dropdown">
-                            <li><a href="/u/{{currentUser.profile.username}}">Profile</a></li>
+                            <li><a id="profile">Profile</a></li>
                             <li><a href="/settings">Settings</a></li>
                             <li><a href="/settings">Settings</a></li>
                             <li role="separator" class="divider"></li>
                             <li role="separator" class="divider"></li>
                             <li><a class="logout" href="#">Logout</a></li>
                             <li><a class="logout" href="#">Logout</a></li>

+ 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>

+ 25 - 22
app/client/templates/stations.html

@@ -3,7 +3,6 @@
   <div class="landing">
   <div class="landing">
     {{> header}}
     {{> header}}
       <h1 class="col-md-8 col-md-offset-2 admin-header">Playlist for {{whichStation}}</h1>
       <h1 class="col-md-8 col-md-offset-2 admin-header">Playlist for {{whichStation}}</h1>
-      {{#each playlist}}
           <div class="col-md-8 col-md-offset-2 admin-playlist-panel">
           <div class="col-md-8 col-md-offset-2 admin-playlist-panel">
               <div class="panel panel-primary">
               <div class="panel panel-primary">
                   <div class="panel-heading">
                   <div class="panel-heading">
@@ -47,28 +46,32 @@
                   </div>
                   </div>
               </div>
               </div>
           </div>
           </div>
-      {{/each}}
-
-      <!--<button class="btn btn-danger col-md-6 col-md-offset-3" id="rrating" data-toggle="modal" data-target="#confirmModal">Reset Rating</button>-->
-
-        <div id="confirmModal" class="modal fade" role="dialog">
-            <div class="modal-dialog">
-                <!-- Modal content-->
-                <div class="modal-content">
-                    <div class="modal-header">
-                        <button type="button" class="close" data-dismiss="modal">&times;</button>
-                        <h4 class="modal-title">Confirm</h4>
-                    </div>
-                    <div class="modal-body">
-                        <button id="rreset_confirm" class="btn btn-danger">Reset All Ratings</button>
-                    </div>
-                    <div class="modal-footer">
-                        <button id="close-modal" type="button" class="btn btn-default" data-dismiss="modal">Close</button>
-                    </div>
-                </div>
-            </div>
+      <div class="row" style="margin-top: 20px; height: 100%;">
+        <div class="col-md-8 col-md-offset-2 admin-container">
+          <div>
+            <h1>Reports</h1>
+          </div>
+            <p>{{display}}</p>
+            <table class="table" style="border-bottom: 1px solid white;">
+              <tr>
+                <th>Song mid</th>
+                <th>Report Type</th>
+                <th>Report Reason</th>
+                <th>Comments</th>
+              </tr>
+              {{#each reports}}
+                {{#each report}}
+                <tr>
+                  <td>{{song}}</td>
+                  <td>{{type}}</td>
+                  <td>{{reason}}</td>
+                  <td>{{other}}</td>
+                </tr>
+                {{/each}}
+              {{/each}}
+            </table>
         </div>
         </div>
-
+      </div>
 
 
       <div id="previewModal" class="modal fade" role="dialog">
       <div id="previewModal" class="modal fade" role="dialog">
           <div class="modal-dialog">
           <div class="modal-dialog">

+ 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});