瀏覽代碼

Worked more on queues page and removed more reference to song type.

KrisVos130 9 年之前
父節點
當前提交
2351cca96d
共有 5 個文件被更改,包括 78 次插入60 次删除
  1. 3 3
      app/client/app.css
  2. 21 27
      app/client/scripts/events.js
  3. 47 18
      app/client/templates/queues.html
  4. 0 10
      app/database/schemas.js
  5. 7 2
      app/server/server.js

+ 3 - 3
app/client/app.css

@@ -209,7 +209,7 @@ main {
     resize: none;
 }
 
-.song-input-select {
+/*.song-input-select {
     -webkit-appearance: none;
     -moz-appearance: none;
     appearance: none;
@@ -249,7 +249,7 @@ main {
 .song-input:focus {
     width: 354px;
     color: white;
-}
+}*/
 
 #search-song {
     display: block;
@@ -1018,4 +1018,4 @@ nav form input[type="image"]{
 
 .modal-trigger{
     margin-left: 10px;
-}
+}

+ 21 - 27
app/client/scripts/events.js

@@ -382,16 +382,15 @@ Template.queues.events({
         Session.set("song", this);
         Session.set("genre", $(e.target).data("genre"));
         Session.set("type", "queue");
-        $("#type").val(this.type);
-        $("#mid").val(this.mid);
-        $("#artist").val(this.artist);
-        $("#title").val(this.title);
-        $("#img").val(this.img);
-        $("#id").val(this.id);
-        $("#likes").val(this.likes);
-        $("#dislikes").val(this.dislikes);
-        $("#duration").val(this.duration);
-        $("#skip-duration").val(this.skipDuration);
+        $("#mid").val(this.mid).change();
+        $("#artist").val(this.artist).change();
+        $("#title").val(this.title).change();
+        $("#img").val(this.img).change();
+        $("#id").val(this.id).change();
+        $("#likes").val(this.likes).change();
+        $("#dislikes").val(this.dislikes).change();
+        $("#duration").val(this.duration).change();
+        $("#skip-duration").val(this.skipDuration).change();
         $("#editModal").openModal();
     },
     "click .add-song-button": function(e){
@@ -513,12 +512,11 @@ Template.queues.events({
         newSong.title = $("#title").val();
         newSong.artist = $("#artist").val();
         newSong.img = $("#img").val();
-        newSong.type = $("#type").val();
         newSong.duration = Number($("#duration").val());
         newSong.skipDuration = $("#skip-duration").val();
         if(newSong.skipDuration === undefined){
             newSong.skipDuration = 0;
-        };
+        }
         if (Session.get("type") === "playlist") {
             Meteor.call("updatePlaylistSong", Session.get("genre"), Session.get("song"), newSong, function() {
                 $('#editModal').modal('hide');
@@ -897,7 +895,6 @@ Template.room.events({
                             $("#title").val(songObj.title);
                             $("#artist").val("");
                             $("#id").val(songObj.id);
-                            $("#type").val("YouTube");
                             getSpotifyInfo(songObj.title.replace(/\[.*\]/g, ""), function (data) {
                                 if (data.tracks.items.length > 0) {
                                     $("#title").val(data.tracks.items[0].name);
@@ -1356,22 +1353,20 @@ Template.stations.events({
         Session.set("song", this);
         Session.set("genre", $(e.target).data("genre"));
         Session.set("type", "queue");
-        $("#type").val(this.type);
-        $("#mid").val(this.mid);
-        $("#artist").val(this.artist);
-        $("#title").val(this.title);
-        $("#img").val(this.img);
-        $("#id").val(this.id);
-        $("#likes").val(this.likes);
-        $("#dislikes").val(this.dislikes);
-        $("#duration").val(this.duration);
-        $("#skip-duration").val(this.skipDuration);
+        $("#mid").val(this.mid).change();
+        $("#artist").val(this.artist).change();
+        $("#title").val(this.title).change();
+        $("#img").val(this.img).change();
+        $("#id").val(this.id).change();
+        $("#likes").val(this.likes).change();
+        $("#dislikes").val(this.dislikes).change();
+        $("#duration").val(this.duration).change();
+        $("#skip-duration").val(this.skipDuration).change();
     },
     "click .edit-playlist-button": function(e){
         Session.set("song", this);
         Session.set("genre", $(e.target).data("genre"));
         Session.set("type", "playlist");
-        $("#type").val(this.type);
         $("#mid").val(this.mid);
         $("#artist").val(this.artist);
         $("#title").val(this.title);
@@ -1397,7 +1392,7 @@ Template.stations.events({
     "click #moveSong": function(e){
         var genre = $(e.target).data("genre") || $(e.target).parent().data("genre");
         if (genre !== Session.get(genre)) {
-            Meteor.call("addSongToPlaylist", genre, {type: Session.get("song").type, mid: Session.get("song").mid, id: Session.get("song").id, title: Session.get("song").title, artist: Session.get("song").artist, duration: Session.get("song").duration, skipDuration: Session.get("song").skipDuration, img: Session.get("song").img, likes: Session.get("song").likes, dislikes: Session.get("song").dislikes});
+            Meteor.call("addSongToPlaylist", genre, Session.get("song"));
             Meteor.call("removeSongFromPlaylist", Session.get("genre"), Session.get("song").mid);
         }else {
             console.log("Something Went Wrong?!");
@@ -1407,7 +1402,7 @@ Template.stations.events({
     },
     "click #copySong": function(e){
         var genre = $(e.target).data("genre") || $(e.target).parent().data("genre");
-        Meteor.call("addSongToPlaylist", genre, {type: Session.get("song").type, mid: Session.get("song").mid, id: Session.get("song").id, title: Session.get("song").title, artist: Session.get("song").artist, duration: Session.get("song").duration, skipDuration: Session.get("song").skipDuration, img: Session.get("song").img, likes: Session.get("song").likes, dislikes: Session.get("song").dislikes});
+        Meteor.call("addSongToPlaylist", genre, Session.get("song"));
     },
     "click .copyMove-button": function(e){
         Session.set("song", this);
@@ -1523,7 +1518,6 @@ Template.stations.events({
         newSong.title = $("#title").val();
         newSong.artist = $("#artist").val();
         newSong.img = $("#img").val();
-        newSong.type = $("#type").val();
         newSong.duration = Number($("#duration").val());
         newSong.skipDuration = $("#skip-duration").val();
         if(newSong.skipDuration === undefined){

+ 47 - 18
app/client/templates/queues.html

@@ -103,24 +103,53 @@
     </div-->
     <div id="editModal" class="modal modal-fixed-footer">
         <div class="modal-content">
-            <label for="mid" class="song-input-label">Song MID</label>
-            <input class="song-input" name="mid" id="mid" type="text"/>
-            <label for="id" class="song-input-label">Song ID</label>
-            <input class="song-input" name="id" id="id" type="text"/>
-            <label for="id" class="song-input-label">Song Artist</label>
-            <input class="song-input" name="artist" id="artist" type="text"/>
-            <label for="title" class="song-input-label">Song Title</label>
-            <input class="song-input" name="title" id="title" type="text"/>
-            <label for="title" class="song-input-label">Song Duration</label>
-            <input class="song-input" name="duration" id="duration" type="number"/>
-            <label for="skip-duration" class="song-input-label">Skip Duration</label>
-            <input class="song-input" id="skip-duration" type="number"/>
-            <label for="likes" class="song-input-label">Likes</label>
-            <input class="song-input" id="likes" type="number"/>
-            <label for="dislikes" class="song-input-label">Dislikes</label>
-            <input class="song-input" id="dislikes" type="number"/>
-            <label for="img" class="song-input-label">Song Image</label>
-            <input class="song-input" name="img" id="img" type="text"/>
+            <div class="row">
+                <div class="input-field col l8 m8 s12 offset-l2 offset-m2">
+                    <i class="material-icons prefix">vpn_key</i>
+                    <label for="mid" class="white-text">Song MID</label>
+                    <input class="validate" name="mid" id="mid" type="text" pattern=".{6}"/>
+                </div>
+                <div class="input-field col l8 m8 s12 offset-l2 offset-m2">
+                    <i class="material-icons prefix">vpn_key</i>
+                    <label for="mid" class="white-text">Song ID</label>
+                    <input class="validate" name="id" id="id" type="text" pattern=".{11}"/>
+                </div>
+                <div class="input-field col l8 m8 s12 offset-l2 offset-m2">
+                    <i class="material-icons prefix">person</i>
+                    <label for="id" class="white-text">Song Artist</label>
+                    <input class="validate" name="artist" id="artist" aria-required="true" type="text"/>
+                </div>
+                <div class="input-field col l8 m8 s12 offset-l2 offset-m2">
+                    <i class="material-icons prefix">subject</i>
+                    <label for="title" class="white-text">Song Title</label>
+                    <input class="validate required" name="title" id="title" type="text"/>
+                </div>
+                <div class="input-field col l8 m8 s12 offset-l2 offset-m2">
+                    <i class="material-icons prefix">timelapse</i>
+                    <label for="title" class="white-text">Song Duration</label>
+                    <input class="validate" name="duration" id="duration" type="number" min="0"/>
+                </div>
+                <div class="input-field col l8 m8 s12 offset-l2 offset-m2">
+                    <i class="material-icons prefix">timer_off</i>
+                    <label for="skip-duration" class="white-text">Skip Duration</label>
+                    <input class="validate" id="skip-duration" type="number" min="0"/>
+                </div>
+                <div class="input-field col l8 m8 s12 offset-l2 offset-m2">
+                    <i class="material-icons prefix">thumb_up</i>
+                    <label for="likes" class="white-text">Likes</label>
+                    <input disabled id="likes" type="number"/>
+                </div>
+                <div class="input-field col l8 m8 s12 offset-l2 offset-m2">
+                    <i class="material-icons prefix">thumb_down</i>
+                    <label for="dislikes" class="white-text">Dislikes</label>
+                    <input disabled id="dislikes" type="number"/>
+                </div>
+                <div class="input-field col l8 m8 s12 offset-l2 offset-m2">
+                    <i class="material-icons prefix">image</i>
+                    <label for="img" class="white-text">Song Image</label>
+                    <input class="validate" name="img" id="img" type="url"/>
+                </div>
+            </div>
             <button type="button" id="get-spotify-info" class="button">Get Spotify Data</button>
             <button type="button" id="save-song-button" class="button">Save Changes</button>
         </div>

+ 0 - 10
app/database/schemas.js

@@ -31,11 +31,6 @@ Schemas.FullSong = new SimpleSchema({
         type: String,
         label: "Song img"
     },
-    "type": {
-        type: String,
-        label: "Song type",
-        defaultValue: "YouTube"
-    },
     "duration": {
         type: Number,
         label: "Song duration",
@@ -89,11 +84,6 @@ Schemas.QueueSong = new SimpleSchema({
         type: String,
         label: "Song img"
     },
-    "type": {
-        type: String,
-        label: "Song type",
-        defaultValue: "YouTube"
-    },
     "duration": {
         type: Number,
         label: "Song duration",

+ 7 - 2
app/server/server.js

@@ -934,7 +934,13 @@ Meteor.methods({
                 if (Queues.find({type: type}).count() === 0) {
                     Queues.insert({type: type, songs: []});
                 }
-                if (songData !== undefined && Object.keys(songData).length === 5 && songData.type !== undefined && songData.title !== undefined && songData.artist !== undefined && songData.img !== undefined) {
+                var requiredProperties = ["title", "artist", "img", "id"];
+                if (songData !== undefined && Object.keys(songData).length === requiredProperties.length) {
+                    for (var property in requiredProperties) {
+                        if (songData[requiredProperties[property]] === undefined) {
+                            throw new Meteor.Error(403, "Invalid data.");
+                        }
+                    }
                     songData.duration = Number(getSongDuration(songData.title, songData.artist));
                     songData.img = getSongAlbumArt(songData.title, songData.artist) || "";
                     songData.skipDuration = 0;
@@ -955,7 +961,6 @@ Meteor.methods({
                                     likes: songData.likes,
                                     dislikes: songData.dislikes,
                                     img: songData.img,
-                                    type: songData.type,
                                     requestedBy: userId
                                 }
                             }