From 46b95cadc0221c575a3514f075f8dc6be7001c94 Mon Sep 17 00:00:00 2001 From: Peter Deltchev Date: Fri, 5 Feb 2016 12:44:56 -0800 Subject: [PATCH 1/2] #2: Implemented the new track editor directive. --- public/templates/account/track.html | 121 +------- public/templates/directives/track-editor.html | 120 ++++++++ .../app/controllers/account-track.coffee | 284 +++++++++--------- .../scripts/app/controllers/track-edit.coffee | 19 +- .../app/directives/track-editor.coffee | 180 +++++++++++ 5 files changed, 454 insertions(+), 270 deletions(-) create mode 100644 public/templates/directives/track-editor.html create mode 100644 resources/assets/scripts/app/directives/track-editor.coffee diff --git a/public/templates/account/track.html b/public/templates/account/track.html index dc4328d0..032a518b 100644 --- a/public/templates/account/track.html +++ b/public/templates/account/track.html @@ -1,120 +1 @@ -
- -
-
- - -
{{errors.title}}
-
-
-
- - -
{{errors.description}}
-
-
- - -
{{errors.lyrics}}
-
{{errors.lyrics}}
-
-
-
-
- - -
{{errors.genre_id}}
-
-
- - -
{{errors.track_type_id}}
-
-
-
-
- - Album: - {{selectedAlbum.title}} - None - -
- -
-
{{errors.album_id}}
-
-
- Show Songs: {{selectedSongsTitle}} -
- -
-
{{errors.show_song_ids}}
-
-
-
-
- - -
-
- - -
{{errors.released_at}}
-
-
-
-
- -
-
- -
-
- -
-
-
- - -
-
-
+ diff --git a/public/templates/directives/track-editor.html b/public/templates/directives/track-editor.html new file mode 100644 index 00000000..6855894d --- /dev/null +++ b/public/templates/directives/track-editor.html @@ -0,0 +1,120 @@ +
+ +
+
+ + +
{{errors.title}}
+
+
+
+ + +
{{errors.description}}
+
+
+ + +
{{errors.lyrics}}
+
{{errors.lyrics}}
+
+
+
+
+ + +
{{errors.genre_id}}
+
+
+ + +
{{errors.track_type_id}}
+
+
+
+
+ + Album: + {{selectedAlbum.title}} + None + +
+ +
+
{{errors.album_id}}
+
+
+ Show Songs: {{selectedSongsTitle}} +
+ +
+
{{errors.show_song_ids}}
+
+
+
+
+ + +
+
+ + +
{{errors.released_at}}
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+ + +
+
+
diff --git a/resources/assets/scripts/app/controllers/account-track.coffee b/resources/assets/scripts/app/controllers/account-track.coffee index 7ce9a99b..14390611 100644 --- a/resources/assets/scripts/app/controllers/account-track.coffee +++ b/resources/assets/scripts/app/controllers/account-track.coffee @@ -14,149 +14,151 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -window.pfm.preloaders['account-track'] = [ - 'account-tracks', 'account-albums', 'taxonomies', '$state' - (tracks, albums, taxonomies, state) -> - $.when.all [albums.refresh(), taxonomies.refresh(), tracks.getEdit(state.params.track_id, true)] -] +#window.pfm.preloaders['account-track'] = [ +# 'account-tracks', 'account-albums', 'taxonomies', '$state' +# (tracks, albums, taxonomies, state) -> +# $.when.all [albums.refresh(), taxonomies.refresh(), tracks.getEdit(state.params.track_id, true)] +#] angular.module('ponyfm').controller "account-track", [ '$scope', '$state', 'taxonomies', '$dialog', 'account-albums', 'account-tracks', 'images' ($scope, $state, taxonomies, $dialog, albums, tracks, images) -> - $scope.isDirty = false - $scope.isSaving = false - $scope.taxonomies = taxonomies - $scope.selectedSongsTitle = 'None' - $scope.selectedSongs = {} - $scope.albums = [] - $scope.selectedAlbum = null - - albumsDb = {} - albums.refresh().done (albums) -> - $scope.albums.legnth = 0 - albumsDb = {} - for album in albums - albumsDb[album.id] = album - $scope.albums.push album - - $scope.selectAlbum = (album) -> - $scope.selectedAlbum = album - $scope.edit.album_id = if album then album.id else null - $scope.isDirty = true - - $scope.setCover = (image, type) -> - delete $scope.edit.cover_id - delete $scope.edit.cover - - if image == null - $scope.edit.remove_cover = true - else if type == 'file' - $scope.edit.cover = image - else if type == 'gallery' - $scope.edit.cover_id = image.id - - $scope.isDirty = true - - updateSongDisplay = () -> - if _.size $scope.selectedSongs - $scope.selectedSongsTitle = (_.map _.values($scope.selectedSongs), (s) -> s.title).join(', ') - else - $scope.selectedSongsTitle = 'None' - - $scope.toggleSong = (song) -> - $scope.isDirty = true - if $scope.selectedSongs[song.id] - delete $scope.selectedSongs[song.id] - else - $scope.selectedSongs[song.id] = song - - updateSongDisplay() - - $scope.updateIsVocal = () -> - delete $scope.errors.lyrics if !$scope.edit.is_vocal - - $scope.updateTrack = () -> - xhr = new XMLHttpRequest() - xhr.onload = -> $scope.$apply -> - $scope.isSaving = false - if xhr.status != 200 - errors = - if xhr.getResponseHeader('content-type') == 'application/json' - $.parseJSON(xhr.responseText).errors - else - ['There was an unknown error!'] - - $scope.errors = {} - _.each errors, (value, key) -> $scope.errors[key] = value.join ', ' - return - - track = $.parseJSON(xhr.responseText) - - trackDbItem = $scope.data.selectedTrack - trackDbItem.title = $scope.edit.title - trackDbItem.is_explicit = $scope.edit.is_explicit - trackDbItem.is_vocal = $scope.edit.is_vocal - trackDbItem.genre_id = $scope.edit.genre_id - trackDbItem.is_published = true - trackDbItem.cover_url = track.real_cover_url - $scope.isDirty = false - $scope.errors = {} - images.refresh true - - formData = new FormData(); - _.each $scope.edit, (value, name) -> - if name == 'cover' - return if value == null - if typeof(value) == 'object' - formData.append name, value, value.name - else if value != null - formData.append name, value - - if parseInt($scope.edit.track_type_id) == 2 - formData.append 'show_song_ids', _.map(_.values($scope.selectedSongs), (s) -> s.id).join() - - xhr.open 'POST', '/api/web/tracks/edit/' + $scope.edit.id, true - xhr.setRequestHeader 'X-XSRF-TOKEN', $.cookie('XSRF-TOKEN') - $scope.isSaving = true - xhr.send formData - - tracks.getEdit($state.params.track_id).done (track) -> - $scope.edit = - id: track.id - title: track.title - description: track.description - lyrics: track.lyrics - is_explicit: track.is_explicit - is_downloadable: track.is_downloadable - is_vocal: track.is_vocal - license_id: track.license_id - genre_id: track.genre_id - track_type_id: track.track_type_id - released_at: if track.released_at then track.released_at.date else '' - remove_cover: false - cover: track.cover_url - album_id: track.album_id - is_published: track.is_published - is_listed: track.is_listed - - $scope.selectedAlbum = if track.album_id then albumsDb[track.album_id] else null - $scope.selectedSongs = {} - $scope.selectedSongs[song.id] = song for song in track.show_songs - updateSongDisplay() - - $scope.touchModel = -> $scope.isDirty = true - - $scope.deleteTrack = (track) -> - $dialog.messageBox('Delete ' + track.title, 'Are you sure you want to delete "' + track.title + '"?', [ - {result: 'ok', label: 'Yes', cssClass: 'btn-danger'}, {result: 'cancel', label: 'No', cssClass: 'btn-primary'} - ]).open().then (res) -> - return if res == 'cancel' - $.post('/api/web/tracks/delete/' + track.id) - .then -> $scope.$apply -> - $scope.$emit 'track-deleted' - $state.transitionTo 'account.tracks' - - $scope.$on '$locationChangeStart', (e) -> - return if !$scope.isDirty - e.preventDefault() if !confirm('Are you sure you want to leave this page without saving your changes?') + $scope.trackId = $state.params.track_id +# $scope.isDirty = false +# $scope.isSaving = false +# $scope.taxonomies = taxonomies +# $scope.selectedSongsTitle = 'None' +# $scope.selectedSongs = {} +# $scope.albums = [] +# $scope.selectedAlbum = null +# +# albumsDb = {} +# albums.refresh().done (albums) -> +# $scope.albums.legnth = 0 +# albumsDb = {} +# for album in albums +# albumsDb[album.id] = album +# $scope.albums.push album +# +# $scope.selectAlbum = (album) -> +# $scope.selectedAlbum = album +# $scope.edit.album_id = if album then album.id else null +# $scope.isDirty = true +# +# $scope.setCover = (image, type) -> +# delete $scope.edit.cover_id +# delete $scope.edit.cover +# +# if image == null +# $scope.edit.remove_cover = true +# else if type == 'file' +# $scope.edit.cover = image +# else if type == 'gallery' +# $scope.edit.cover_id = image.id +# +# $scope.isDirty = true +# +# updateSongDisplay = () -> +# if _.size $scope.selectedSongs +# $scope.selectedSongsTitle = (_.map _.values($scope.selectedSongs), (s) -> s.title).join(', ') +# else +# $scope.selectedSongsTitle = 'None' +# +# $scope.toggleSong = (song) -> +# $scope.isDirty = true +# if $scope.selectedSongs[song.id] +# delete $scope.selectedSongs[song.id] +# else +# $scope.selectedSongs[song.id] = song +# +# updateSongDisplay() +# +# $scope.updateIsVocal = () -> +# delete $scope.errors.lyrics if !$scope.edit.is_vocal +# +# $scope.updateTrack = () -> +# xhr = new XMLHttpRequest() +# xhr.onload = -> $scope.$apply -> +# $scope.isSaving = false +# if xhr.status != 200 +# errors = +# if xhr.getResponseHeader('content-type') == 'application/json' +# $.parseJSON(xhr.responseText).errors +# else +# ['There was an unknown error!'] +# +# $scope.errors = {} +# _.each errors, (value, key) -> $scope.errors[key] = value.join ', ' +# return +# +# track = $.parseJSON(xhr.responseText) +# +# trackDbItem = $scope.data.selectedTrack +# trackDbItem.title = $scope.edit.title +# trackDbItem.is_explicit = $scope.edit.is_explicit +# trackDbItem.is_vocal = $scope.edit.is_vocal +# trackDbItem.genre_id = $scope.edit.genre_id +# trackDbItem.is_published = true +# trackDbItem.cover_url = track.real_cover_url +# $scope.isDirty = false +# $scope.errors = {} +# images.refresh true +# +# formData = new FormData(); +# _.each $scope.edit, (value, name) -> +# if name == 'cover' +# return if value == null +# if typeof(value) == 'object' +# formData.append name, value, value.name +# else if value != null +# formData.append name, value +# +# if parseInt($scope.edit.track_type_id) == 2 +# formData.append 'show_song_ids', _.map(_.values($scope.selectedSongs), (s) -> s.id).join() +# +# xhr.open 'POST', '/api/web/tracks/edit/' + $scope.edit.id, true +# xhr.setRequestHeader 'X-XSRF-TOKEN', $.cookie('XSRF-TOKEN') +# $scope.isSaving = true +# xhr.send formData +# +# +# tracks.getEdit($state.params.track_id).done (track) -> +# $scope.edit = +# id: track.id +# title: track.title +# description: track.description +# lyrics: track.lyrics +# is_explicit: track.is_explicit +# is_downloadable: track.is_downloadable +# is_vocal: track.is_vocal +# license_id: track.license_id +# genre_id: track.genre_id +# track_type_id: track.track_type_id +# released_at: if track.released_at then track.released_at.date else '' +# remove_cover: false +# cover: track.cover_url +# album_id: track.album_id +# is_published: track.is_published +# is_listed: track.is_listed +# +# $scope.selectedAlbum = if track.album_id then albumsDb[track.album_id] else null +# $scope.selectedSongs = {} +# $scope.selectedSongs[song.id] = song for song in track.show_songs +# updateSongDisplay() +# +# $scope.touchModel = -> $scope.isDirty = true +# +# $scope.deleteTrack = (track) -> +# $dialog.messageBox('Delete ' + track.title, 'Are you sure you want to delete "' + track.title + '"?', [ +# {result: 'ok', label: 'Yes', cssClass: 'btn-danger'}, {result: 'cancel', label: 'No', cssClass: 'btn-primary'} +# ]).open().then (res) -> +# return if res == 'cancel' +# $.post('/api/web/tracks/delete/' + track.id) +# .then -> $scope.$apply -> +# $scope.$emit 'track-deleted' +# $state.transitionTo 'account.tracks' +# +# $scope.$on '$locationChangeStart', (e) -> +# return if !$scope.isDirty +# e.preventDefault() if !confirm('Are you sure you want to leave this page without saving your changes?') ] diff --git a/resources/assets/scripts/app/controllers/track-edit.coffee b/resources/assets/scripts/app/controllers/track-edit.coffee index e76e139d..37b4e818 100644 --- a/resources/assets/scripts/app/controllers/track-edit.coffee +++ b/resources/assets/scripts/app/controllers/track-edit.coffee @@ -15,17 +15,18 @@ # along with this program. If not, see . window.pfm.preloaders['track-edit'] = [ - 'tracks', '$state', 'playlists' - (tracks, $state, playlists) -> - $.when.all [tracks.fetch $state.params.id, playlists.refreshOwned(true)] + 'tracks', '$state', 'playlists' + (tracks, $state, playlists) -> + $.when.all [tracks.fetch $state.params.id, playlists.refreshOwned(true)] ] angular.module('ponyfm').controller "track-edit", [ - '$scope', 'tracks', '$state', 'playlists', 'auth', 'favourites', '$dialog' - ($scope, tracks, $state, playlists, auth, favourites, $dialog) -> - track = null + '$scope', 'tracks', '$state', 'playlists', 'auth', 'favourites', '$dialog' + ($scope, tracks, $state, playlists, auth, favourites, $dialog) -> + track = null + + tracks.fetch($state.params.id).done (trackResponse) -> + $scope.track = trackResponse.track + track = trackResponse.track - tracks.fetch($state.params.id).done (trackResponse) -> - $scope.track = trackResponse.track - track = trackResponse.track ] diff --git a/resources/assets/scripts/app/directives/track-editor.coffee b/resources/assets/scripts/app/directives/track-editor.coffee new file mode 100644 index 00000000..b15881ed --- /dev/null +++ b/resources/assets/scripts/app/directives/track-editor.coffee @@ -0,0 +1,180 @@ +# Pony.fm - A community for pony fan music. +# Copyright (C) 2015 Peter Deltchev +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +# +#window.pfm.preloaders['account-track'] = [ +# 'account-albums', 'taxonomies' +# (albums, taxonomies, state) -> +# $.when.all [albums.refresh(), taxonomies.refresh()] +#] + + +angular.module('ponyfm').directive 'pfmTrackEditor', () -> + restrict: 'E' + templateUrl: '/templates/directives/track-editor.html' + scope: + trackId: '=trackId' + + controller: [ + '$scope', 'auth', 'account-tracks', 'account-albums', 'taxonomies', 'images' + ($scope, auth, tracks, albums, taxonomies, images) -> + $scope.isDirty = false + $scope.isSaving = false + $scope.taxonomies = taxonomies + $scope.selectedSongsTitle = 'None' + $scope.selectedSongs = {} + $scope.albums = [] + $scope.selectedAlbum = null + albumsDb = {} + + $scope.selectAlbum = (album) -> + $scope.selectedAlbum = album + $scope.track.album_id = if album then album.id else null + $scope.isDirty = true + + $scope.setCover = (image, type) -> + delete $scope.track.cover_id + delete $scope.track.cover + + if image == null + $scope.track.remove_cover = true + else if type == 'file' + $scope.track.cover = image + else if type == 'gallery' + $scope.track.cover_id = image.id + + $scope.isDirty = true + + updateSongDisplay = () -> + if _.size $scope.selectedSongs + $scope.selectedSongsTitle = (_.map _.values($scope.selectedSongs), (s) -> s.title).join(', ') + else + $scope.selectedSongsTitle = 'None' + + + $scope.toggleSong = (song) -> + $scope.isDirty = true + if $scope.selectedSongs[song.id] + delete $scope.selectedSongs[song.id] + else + $scope.selectedSongs[song.id] = song + + updateSongDisplay() + + + $scope.updateIsVocal = () -> + delete $scope.errors.lyrics if !$scope.track.is_vocal + + $scope.updateTrack = () -> + xhr = new XMLHttpRequest() + xhr.onload = -> $scope.$apply -> + $scope.isSaving = false + if xhr.status != 200 + errors = + if xhr.getResponseHeader('content-type') == 'application/json' + $.parseJSON(xhr.responseText).errors + else + ['There was an unknown error!'] + + $scope.errors = {} + _.each errors, (value, key) -> $scope.errors[key] = value.join ', ' + return + + track = $.parseJSON(xhr.responseText) + +# trackDbItem = $scope.data.selectedTrack +# trackDbItem.title = $scope.track.title +# trackDbItem.is_explicit = $scope.track.is_explicit +# trackDbItem.is_vocal = $scope.track.is_vocal +# trackDbItem.genre_id = $scope.track.genre_id +# trackDbItem.is_published = true +# trackDbItem.cover_url = track.real_cover_url + $scope.isDirty = false + $scope.errors = {} + images.refresh true + + formData = new FormData(); + _.each $scope.track, (value, name) -> + if name == 'cover' + return if value == null + if typeof(value) == 'object' + formData.append name, value, value.name + else if value != null + formData.append name, value + + if parseInt($scope.track.track_type_id) == 2 + formData.append 'show_song_ids', _.map(_.values($scope.selectedSongs), (s) -> s.id).join() + + xhr.open 'POST', '/api/web/tracks/edit/' + $scope.track.id, true + xhr.setRequestHeader 'X-XSRF-TOKEN', $.cookie('XSRF-TOKEN') + $scope.isSaving = true + xhr.send formData + + $scope.deleteTrack = (track) -> + $dialog.messageBox('Delete ' + track.title, 'Are you sure you want to delete "' + track.title + '"?', [ + {result: 'ok', label: 'Yes', cssClass: 'btn-danger'}, + {result: 'cancel', label: 'No', cssClass: 'btn-primary'} + ]).open().then (res) -> + return if res == 'cancel' + $.post('/api/web/tracks/delete/' + track.id) + .then -> $scope.$apply -> + $scope.$emit 'track-deleted' + $state.transitionTo 'account.tracks' + + ## Bootstrap this thing + + $.when( + albums.refresh(), + taxonomies.refresh(), + tracks.getEdit($scope.trackId) + ).done (albums, taxonomies, track)-> + $scope.track = + id: track.id + title: track.title + description: track.description + lyrics: track.lyrics + is_explicit: track.is_explicit + is_downloadable: track.is_downloadable + is_vocal: track.is_vocal + license_id: track.license_id + genre_id: track.genre_id + track_type_id: track.track_type_id + released_at: if track.released_at then track.released_at.date else '' + remove_cover: false + cover: track.cover_url + album_id: track.album_id + is_published: track.is_published + is_listed: track.is_listed + + $scope.selectedAlbum = if track.album_id then albumsDb[track.album_id] else null + $scope.selectedSongs = {} + $scope.selectedSongs[song.id] = song for song in track.show_songs + updateSongDisplay() + + + albums.refresh().done (albums) -> + $scope.albums.legnth = 0 + albumsDb = {} + for album in albums + albumsDb[album.id] = album + $scope.albums.push album + + $scope.touchModel = -> $scope.isDirty = true + + $scope.$on '$locationChangeStart', (e) -> + return if !$scope.isDirty + e.preventDefault() if !confirm('Are you sure you want to leave this page without saving your changes?') + ] From dda46768fb95b130abc696389521bcc26624c816 Mon Sep 17 00:00:00 2001 From: Peter Deltchev Date: Sat, 13 Feb 2016 17:38:45 -0800 Subject: [PATCH 2/2] #2: The track editor now updates the list of tracks in the account section. --- public/templates/account/tracks.html | 2 +- public/templates/directives/track-editor.html | 2 +- .../app/controllers/account-track.coffee | 148 +----------------- .../app/controllers/account-tracks.coffee | 5 + .../scripts/app/controllers/track-edit.coffee | 15 +- .../app/directives/track-editor.coffee | 51 +++--- 6 files changed, 31 insertions(+), 192 deletions(-) diff --git a/public/templates/account/tracks.html b/public/templates/account/tracks.html index a9b5f11a..0d06e0e7 100644 --- a/public/templates/account/tracks.html +++ b/public/templates/account/tracks.html @@ -1,7 +1,7 @@
diff --git a/resources/assets/scripts/app/controllers/account-track.coffee b/resources/assets/scripts/app/controllers/account-track.coffee index 14390611..274a5122 100644 --- a/resources/assets/scripts/app/controllers/account-track.coffee +++ b/resources/assets/scripts/app/controllers/account-track.coffee @@ -14,151 +14,9 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -#window.pfm.preloaders['account-track'] = [ -# 'account-tracks', 'account-albums', 'taxonomies', '$state' -# (tracks, albums, taxonomies, state) -> -# $.when.all [albums.refresh(), taxonomies.refresh(), tracks.getEdit(state.params.track_id, true)] -#] - angular.module('ponyfm').controller "account-track", [ - '$scope', '$state', 'taxonomies', '$dialog', 'account-albums', 'account-tracks', 'images' - ($scope, $state, taxonomies, $dialog, albums, tracks, images) -> + '$scope', '$state' + ($scope, $state) -> + # All the fun stuff happens in the pfmTrackEditor directive. $scope.trackId = $state.params.track_id -# $scope.isDirty = false -# $scope.isSaving = false -# $scope.taxonomies = taxonomies -# $scope.selectedSongsTitle = 'None' -# $scope.selectedSongs = {} -# $scope.albums = [] -# $scope.selectedAlbum = null -# -# albumsDb = {} -# albums.refresh().done (albums) -> -# $scope.albums.legnth = 0 -# albumsDb = {} -# for album in albums -# albumsDb[album.id] = album -# $scope.albums.push album -# -# $scope.selectAlbum = (album) -> -# $scope.selectedAlbum = album -# $scope.edit.album_id = if album then album.id else null -# $scope.isDirty = true -# -# $scope.setCover = (image, type) -> -# delete $scope.edit.cover_id -# delete $scope.edit.cover -# -# if image == null -# $scope.edit.remove_cover = true -# else if type == 'file' -# $scope.edit.cover = image -# else if type == 'gallery' -# $scope.edit.cover_id = image.id -# -# $scope.isDirty = true -# -# updateSongDisplay = () -> -# if _.size $scope.selectedSongs -# $scope.selectedSongsTitle = (_.map _.values($scope.selectedSongs), (s) -> s.title).join(', ') -# else -# $scope.selectedSongsTitle = 'None' -# -# $scope.toggleSong = (song) -> -# $scope.isDirty = true -# if $scope.selectedSongs[song.id] -# delete $scope.selectedSongs[song.id] -# else -# $scope.selectedSongs[song.id] = song -# -# updateSongDisplay() -# -# $scope.updateIsVocal = () -> -# delete $scope.errors.lyrics if !$scope.edit.is_vocal -# -# $scope.updateTrack = () -> -# xhr = new XMLHttpRequest() -# xhr.onload = -> $scope.$apply -> -# $scope.isSaving = false -# if xhr.status != 200 -# errors = -# if xhr.getResponseHeader('content-type') == 'application/json' -# $.parseJSON(xhr.responseText).errors -# else -# ['There was an unknown error!'] -# -# $scope.errors = {} -# _.each errors, (value, key) -> $scope.errors[key] = value.join ', ' -# return -# -# track = $.parseJSON(xhr.responseText) -# -# trackDbItem = $scope.data.selectedTrack -# trackDbItem.title = $scope.edit.title -# trackDbItem.is_explicit = $scope.edit.is_explicit -# trackDbItem.is_vocal = $scope.edit.is_vocal -# trackDbItem.genre_id = $scope.edit.genre_id -# trackDbItem.is_published = true -# trackDbItem.cover_url = track.real_cover_url -# $scope.isDirty = false -# $scope.errors = {} -# images.refresh true -# -# formData = new FormData(); -# _.each $scope.edit, (value, name) -> -# if name == 'cover' -# return if value == null -# if typeof(value) == 'object' -# formData.append name, value, value.name -# else if value != null -# formData.append name, value -# -# if parseInt($scope.edit.track_type_id) == 2 -# formData.append 'show_song_ids', _.map(_.values($scope.selectedSongs), (s) -> s.id).join() -# -# xhr.open 'POST', '/api/web/tracks/edit/' + $scope.edit.id, true -# xhr.setRequestHeader 'X-XSRF-TOKEN', $.cookie('XSRF-TOKEN') -# $scope.isSaving = true -# xhr.send formData -# -# -# tracks.getEdit($state.params.track_id).done (track) -> -# $scope.edit = -# id: track.id -# title: track.title -# description: track.description -# lyrics: track.lyrics -# is_explicit: track.is_explicit -# is_downloadable: track.is_downloadable -# is_vocal: track.is_vocal -# license_id: track.license_id -# genre_id: track.genre_id -# track_type_id: track.track_type_id -# released_at: if track.released_at then track.released_at.date else '' -# remove_cover: false -# cover: track.cover_url -# album_id: track.album_id -# is_published: track.is_published -# is_listed: track.is_listed -# -# $scope.selectedAlbum = if track.album_id then albumsDb[track.album_id] else null -# $scope.selectedSongs = {} -# $scope.selectedSongs[song.id] = song for song in track.show_songs -# updateSongDisplay() -# -# $scope.touchModel = -> $scope.isDirty = true -# -# $scope.deleteTrack = (track) -> -# $dialog.messageBox('Delete ' + track.title, 'Are you sure you want to delete "' + track.title + '"?', [ -# {result: 'ok', label: 'Yes', cssClass: 'btn-danger'}, {result: 'cancel', label: 'No', cssClass: 'btn-primary'} -# ]).open().then (res) -> -# return if res == 'cancel' -# $.post('/api/web/tracks/delete/' + track.id) -# .then -> $scope.$apply -> -# $scope.$emit 'track-deleted' -# $state.transitionTo 'account.tracks' -# -# $scope.$on '$locationChangeStart', (e) -> -# return if !$scope.isDirty -# e.preventDefault() if !confirm('Are you sure you want to leave this page without saving your changes?') ] diff --git a/resources/assets/scripts/app/controllers/account-tracks.coffee b/resources/assets/scripts/app/controllers/account-tracks.coffee index 3ba4cff2..358bf250 100644 --- a/resources/assets/scripts/app/controllers/account-tracks.coffee +++ b/resources/assets/scripts/app/controllers/account-tracks.coffee @@ -54,7 +54,12 @@ angular.module('ponyfm').controller "account-tracks", [ else $scope.selectTrack null + $scope.$on 'track-updated', (track) -> + tracks.clearCache() + $scope.refreshList() + $scope.$on 'track-deleted', () -> + $state.transitionTo 'account.tracks' tracks.clearCache() $scope.refreshList() ] diff --git a/resources/assets/scripts/app/controllers/track-edit.coffee b/resources/assets/scripts/app/controllers/track-edit.coffee index 37b4e818..87a0f0a6 100644 --- a/resources/assets/scripts/app/controllers/track-edit.coffee +++ b/resources/assets/scripts/app/controllers/track-edit.coffee @@ -14,19 +14,8 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -window.pfm.preloaders['track-edit'] = [ - 'tracks', '$state', 'playlists' - (tracks, $state, playlists) -> - $.when.all [tracks.fetch $state.params.id, playlists.refreshOwned(true)] -] angular.module('ponyfm').controller "track-edit", [ - '$scope', 'tracks', '$state', 'playlists', 'auth', 'favourites', '$dialog' - ($scope, tracks, $state, playlists, auth, favourites, $dialog) -> - track = null - - tracks.fetch($state.params.id).done (trackResponse) -> - $scope.track = trackResponse.track - track = trackResponse.track - + '$scope', '$state' + ($scope, $state) -> ] diff --git a/resources/assets/scripts/app/directives/track-editor.coffee b/resources/assets/scripts/app/directives/track-editor.coffee index b15881ed..14f533b4 100644 --- a/resources/assets/scripts/app/directives/track-editor.coffee +++ b/resources/assets/scripts/app/directives/track-editor.coffee @@ -1,5 +1,5 @@ # Pony.fm - A community for pony fan music. -# Copyright (C) 2015 Peter Deltchev +# Copyright (C) 2016 Peter Deltchev # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -14,14 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -# -#window.pfm.preloaders['account-track'] = [ -# 'account-albums', 'taxonomies' -# (albums, taxonomies, state) -> -# $.when.all [albums.refresh(), taxonomies.refresh()] -#] - - angular.module('ponyfm').directive 'pfmTrackEditor', () -> restrict: 'E' templateUrl: '/templates/directives/track-editor.html' @@ -29,8 +21,8 @@ angular.module('ponyfm').directive 'pfmTrackEditor', () -> trackId: '=trackId' controller: [ - '$scope', 'auth', 'account-tracks', 'account-albums', 'taxonomies', 'images' - ($scope, auth, tracks, albums, taxonomies, images) -> + '$scope', '$dialog', 'auth', 'account-tracks', 'account-albums', 'taxonomies', 'images' + ($scope, $dialog, auth, tracks, albums, taxonomies, images) -> $scope.isDirty = false $scope.isSaving = false $scope.taxonomies = taxonomies @@ -94,14 +86,9 @@ angular.module('ponyfm').directive 'pfmTrackEditor', () -> return track = $.parseJSON(xhr.responseText) + $scope.$emit('track-updated', track) -# trackDbItem = $scope.data.selectedTrack -# trackDbItem.title = $scope.track.title -# trackDbItem.is_explicit = $scope.track.is_explicit -# trackDbItem.is_vocal = $scope.track.is_vocal -# trackDbItem.genre_id = $scope.track.genre_id -# trackDbItem.is_published = true -# trackDbItem.cover_url = track.real_cover_url + $scope.track.is_published = true $scope.isDirty = false $scope.errors = {} images.refresh true @@ -123,24 +110,32 @@ angular.module('ponyfm').directive 'pfmTrackEditor', () -> $scope.isSaving = true xhr.send formData - $scope.deleteTrack = (track) -> - $dialog.messageBox('Delete ' + track.title, 'Are you sure you want to delete "' + track.title + '"?', [ + $scope.deleteTrack = () -> + $dialog.messageBox('Delete ' + $scope.track.title, 'Are you sure you want to delete "' + $scope.track.title + '"?', [ {result: 'ok', label: 'Yes', cssClass: 'btn-danger'}, {result: 'cancel', label: 'No', cssClass: 'btn-primary'} ]).open().then (res) -> return if res == 'cancel' - $.post('/api/web/tracks/delete/' + track.id) + $.post('/api/web/tracks/delete/' + $scope.track.id) .then -> $scope.$apply -> $scope.$emit 'track-deleted' - $state.transitionTo 'account.tracks' - - ## Bootstrap this thing + # ======================================== + # The part where everything gets loaded! + # ======================================== $.when( albums.refresh(), taxonomies.refresh(), tracks.getEdit($scope.trackId) ).done (albums, taxonomies, track)-> + # Update album data + $scope.albums.length = 0 + albumsDb = {} + for album in albums + albumsDb[album.id] = album + $scope.albums.push album + + # Update track data $scope.track = id: track.id title: track.title @@ -164,14 +159,6 @@ angular.module('ponyfm').directive 'pfmTrackEditor', () -> $scope.selectedSongs[song.id] = song for song in track.show_songs updateSongDisplay() - - albums.refresh().done (albums) -> - $scope.albums.legnth = 0 - albumsDb = {} - for album in albums - albumsDb[album.id] = album - $scope.albums.push album - $scope.touchModel = -> $scope.isDirty = true $scope.$on '$locationChangeStart', (e) ->