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 @@
-
+
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 @@
+
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?')
+ ]