This commit is contained in:
parent
9d6b5f7f5e
commit
9e43167722
59
app.moon
59
app.moon
@ -2,9 +2,8 @@ lapis = require "lapis"
|
|||||||
console = require "lapis.console"
|
console = require "lapis.console"
|
||||||
|
|
||||||
import respond_to from require "lapis.application"
|
import respond_to from require "lapis.application"
|
||||||
import trim from require "lapis.util"
|
|
||||||
import escape_identifier from require "lapis.db"
|
import escape_identifier from require "lapis.db"
|
||||||
import process_tags from require "helpers"
|
import create_track, update_track from require "helpers"
|
||||||
|
|
||||||
import Tracks from require "models"
|
import Tracks from require "models"
|
||||||
|
|
||||||
@ -21,36 +20,14 @@ class extends lapis.Application
|
|||||||
else
|
else
|
||||||
return redirect_to: @url_for "tracks"
|
return redirect_to: @url_for "tracks"
|
||||||
POST: =>
|
POST: =>
|
||||||
if @track = Tracks\find id: tonumber @params.id
|
if track = update_track(@params)
|
||||||
updates = {}
|
|
||||||
-- automatic tags
|
|
||||||
for field in *{"artist", "mood", "link", "genre"}
|
|
||||||
if @params[field]
|
|
||||||
if @params.tags
|
|
||||||
@params.tags ..= " #{field}:#{@params[field]}"
|
|
||||||
else
|
|
||||||
@params.tags = "#{field}:#{@params[field]}"
|
|
||||||
-- update all fields
|
|
||||||
for field in pairs Tracks.fields
|
|
||||||
if @params[field]
|
|
||||||
switch field
|
|
||||||
when "status"
|
|
||||||
updates.status = Tracks.statuses\for_db tonumber(@params.status) or @params.status
|
|
||||||
when "quality"
|
|
||||||
updates.quality = Tracks.qualities\for_db tonumber(@params.quality) or @params.quality
|
|
||||||
when "tags"
|
|
||||||
updates.tags = process_tags @params.tags
|
|
||||||
when "id"
|
|
||||||
nil -- IDs cannot be modified
|
|
||||||
else
|
|
||||||
updates[field] = trim @params[field]
|
|
||||||
@track\update updates
|
|
||||||
return redirect_to: @url_for "track", id: @track.id
|
return redirect_to: @url_for "track", id: @track.id
|
||||||
else
|
else
|
||||||
return redirect_to: @url_for "tracks"
|
return redirect_to: @url_for "tracks"
|
||||||
}
|
}
|
||||||
|
|
||||||
[tracks: "/tracks(/:order[%a])(/:asc_desc)(/:page[%d])"]: =>
|
[tracks: "/tracks(/:order[%a])(/:asc_desc)(/:page[%d])"]: =>
|
||||||
|
update_track(@params) if @params.id -- update a track if needed
|
||||||
-- validate order field
|
-- validate order field
|
||||||
@order = tostring(@params.order)\lower!
|
@order = tostring(@params.order)\lower!
|
||||||
unless Tracks.fields[@order]
|
unless Tracks.fields[@order]
|
||||||
@ -69,31 +46,15 @@ class extends lapis.Application
|
|||||||
if @page > @last_page
|
if @page > @last_page
|
||||||
return redirect_to: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: @last_page
|
return redirect_to: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: @last_page
|
||||||
|
|
||||||
@tracks = tracks\get_page @page
|
@tracks = tracks\get_page(@page)
|
||||||
return render: true
|
return render: true
|
||||||
|
|
||||||
-- NOTE deprecated
|
[new_track: "/new"]: respond_to {
|
||||||
[index: "/(:page[%d])"]: respond_to {
|
GET: => render: true
|
||||||
GET: =>
|
|
||||||
tracks = Tracks\paginated "* ORDER BY id", per_page: 32
|
|
||||||
@page = tonumber(@params.page) or 1
|
|
||||||
@tracks = tracks\get_page @page
|
|
||||||
render: true
|
|
||||||
POST: =>
|
POST: =>
|
||||||
if @params.id
|
track = create_track(@params)
|
||||||
track = Tracks\find id: @params.id
|
if track
|
||||||
track\update {
|
redirect_to: @url_for "track", id: track.id
|
||||||
artist: @params.artist
|
|
||||||
title: @params.title
|
|
||||||
link: @params.link
|
|
||||||
status: tonumber @params.status
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
Tracks\create {
|
redirect_to: @url_for "new_track"
|
||||||
artist: @params.artist
|
|
||||||
title: @params.title
|
|
||||||
link: @params.link
|
|
||||||
status: @params.status
|
|
||||||
}
|
|
||||||
redirect_to: @url_for "index", page: @params.page
|
|
||||||
}
|
}
|
||||||
|
33
helpers.moon
33
helpers.moon
@ -12,6 +12,39 @@ process_tags = (tags_str) ->
|
|||||||
table.sort taglist, (a, b) -> a\lower! < b\lower!
|
table.sort taglist, (a, b) -> a\lower! < b\lower!
|
||||||
return " #{table.concat taglist, " "} "
|
return " #{table.concat taglist, " "} "
|
||||||
|
|
||||||
|
update_track = (user_input) ->
|
||||||
|
if track = Tracks\find id: tonumber @params.id
|
||||||
|
updates = {}
|
||||||
|
-- automatic tags
|
||||||
|
for field in *{"artist", "mood", "link", "genre"}
|
||||||
|
if user_input[field] and #user_input[field] > 0 -- NOTE includes fix
|
||||||
|
if user_input.tags
|
||||||
|
user_input.tags ..= " #{field}:#{user_input[field]\gsub "%s*", "_"}" -- NOTE fix!
|
||||||
|
else
|
||||||
|
user_input.tags = "#{field}:#{user_input[field]\gsub "%s*", "_"}"
|
||||||
|
-- update all fields
|
||||||
|
for field in pairs Tracks.fields
|
||||||
|
if user_input[field]
|
||||||
|
switch field
|
||||||
|
when "status"
|
||||||
|
updates.status = Tracks.statuses\for_db user_input.status
|
||||||
|
when "quality"
|
||||||
|
updates.quality = Tracks.qualities\for_db user_input.quality
|
||||||
|
when "tags"
|
||||||
|
updates.tags = process_tags user_input.tags
|
||||||
|
when "id"
|
||||||
|
nil -- IDs cannot be modified
|
||||||
|
else
|
||||||
|
updates[field] = trim user_input[field]
|
||||||
|
track\update updates
|
||||||
|
|
||||||
|
create_track = (user_input) ->
|
||||||
|
if track = Tracks\create!
|
||||||
|
user_input.id = track.id
|
||||||
|
update_track user_input
|
||||||
|
|
||||||
return {
|
return {
|
||||||
:process_tags
|
:process_tags
|
||||||
|
:update_track
|
||||||
|
:create_track
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ class Tracks extends Model
|
|||||||
imported: 6 -- needs to be checked out
|
imported: 6 -- needs to be checked out
|
||||||
}
|
}
|
||||||
@qualities: enum {
|
@qualities: enum {
|
||||||
not_available: 1 -- not in library
|
unavailable: 1 -- not in library
|
||||||
lossless: 2
|
lossless: 2
|
||||||
high: 3
|
high: 3
|
||||||
acceptable: 4
|
acceptable: 4
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
import Widget from require "lapis.html"
|
|
||||||
|
|
||||||
import Tracks from require "models"
|
|
||||||
|
|
||||||
class extends Widget
|
|
||||||
content: =>
|
|
||||||
div ->
|
|
||||||
a href: @url_for("index", page: @page - 1), "<"
|
|
||||||
raw " "
|
|
||||||
a href: @url_for("index", page: @page + 1), ">"
|
|
||||||
element "table", ->
|
|
||||||
tr ->
|
|
||||||
th "Artist"
|
|
||||||
th "Title"
|
|
||||||
th "Link"
|
|
||||||
th "Status"
|
|
||||||
th "✓"
|
|
||||||
|
|
||||||
for track in *@tracks
|
|
||||||
tr ->
|
|
||||||
form {
|
|
||||||
action: @url_for "index", page: @page
|
|
||||||
method: "POST"
|
|
||||||
enctype: "multipart/form-data"
|
|
||||||
}, ->
|
|
||||||
td -> input type: "text", name: "artist", value: track.artist
|
|
||||||
td -> input type: "text", name: "title", value: track.title
|
|
||||||
td ->
|
|
||||||
if track.link and #track.link > 0
|
|
||||||
a href: track.link, "*"
|
|
||||||
else
|
|
||||||
text "+"
|
|
||||||
text " "
|
|
||||||
input type: "text", name: "link", value: track.link
|
|
||||||
td ->
|
|
||||||
element "select", name: "status", ->
|
|
||||||
for status in *Tracks.statuses
|
|
||||||
if status == Tracks.statuses[track.status]
|
|
||||||
option value: Tracks.statuses[status], selected: true, status
|
|
||||||
else
|
|
||||||
option value: Tracks.statuses[status], status
|
|
||||||
td ->
|
|
||||||
input type: "hidden", name: "id", value: track.id
|
|
||||||
input type: "submit", value: "Update"
|
|
||||||
|
|
||||||
tr ->
|
|
||||||
form {
|
|
||||||
action: @url_for "index", page: @page
|
|
||||||
method: "POST"
|
|
||||||
enctype: "multipart/form-data"
|
|
||||||
}, ->
|
|
||||||
td -> input type: "text", name: "artist", placeholder: "artist"
|
|
||||||
td -> input type: "text", name: "title", placeholder: "title"
|
|
||||||
td ->
|
|
||||||
raw " "
|
|
||||||
input type: "text", name: "link", placeholder: "link"
|
|
||||||
td ->
|
|
||||||
element "select", name: "status", ->
|
|
||||||
for status in *Tracks.statuses
|
|
||||||
option value: Tracks.statuses[status], status
|
|
||||||
td -> input type: "submit", value: "Submit"
|
|
54
views/new_track.moon
Normal file
54
views/new_track.moon
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
import Widget from require "lapis.html"
|
||||||
|
|
||||||
|
import trim from require "lapis.util"
|
||||||
|
|
||||||
|
import Tracks from require "models"
|
||||||
|
|
||||||
|
class extends Widget
|
||||||
|
content: =>
|
||||||
|
div ->
|
||||||
|
form {
|
||||||
|
action: @url_for "new_track"
|
||||||
|
method: "POST"
|
||||||
|
enctype: "multipart/form"
|
||||||
|
}, ->
|
||||||
|
text "Artist: "
|
||||||
|
input type: "text", name: "artist", placeholder: "Artist"
|
||||||
|
text " Title: "
|
||||||
|
input type: "text", name: "title", placeholder: "Title"
|
||||||
|
br!
|
||||||
|
|
||||||
|
text "Album: "
|
||||||
|
input type: "text", name: "album", placeholder: "Album"
|
||||||
|
text " Link: "
|
||||||
|
input type: "text", name: "link", placeholder: "Link"
|
||||||
|
br!
|
||||||
|
|
||||||
|
text "Status: "
|
||||||
|
element "select", name: "status", ->
|
||||||
|
statuses = Tracks.statuses
|
||||||
|
for status_name in *statuses
|
||||||
|
if status_name == "new"
|
||||||
|
option value: statuses[status_name], selected: true, status_name
|
||||||
|
else
|
||||||
|
option value: statuses[status_name], status_name
|
||||||
|
text " Quality: "
|
||||||
|
element "select", name: "quality", ->
|
||||||
|
qualities = Tracks.qualities
|
||||||
|
for quality_name in *qualities
|
||||||
|
if quality_name == "unavailable"
|
||||||
|
option value: qualities[quality_name], selected: true, quality_name
|
||||||
|
else
|
||||||
|
option value: qualities[quality_name], quality_name
|
||||||
|
br!
|
||||||
|
|
||||||
|
text "Genre: "
|
||||||
|
input type: "text", name: "genre", placeholder: "Genre"
|
||||||
|
text " Mood: "
|
||||||
|
input type: "text", name: "mood", placeholder: "Mood"
|
||||||
|
br!
|
||||||
|
|
||||||
|
text "Tags: "
|
||||||
|
textarea rows: 8, name: "tags", placeholder: "untagged"
|
||||||
|
br!
|
||||||
|
input type: "submit", value: "Update"
|
@ -65,7 +65,6 @@ class extends Widget
|
|||||||
br!
|
br!
|
||||||
|
|
||||||
text "Tags: "
|
text "Tags: "
|
||||||
-- input type: "text", name: "tags", value: trim(@track.tags), placeholder: "untagged"
|
|
||||||
textarea rows: 8, name: "tags", placeholder: "untagged", trim(@track.tags)
|
textarea rows: 8, name: "tags", placeholder: "untagged", trim(@track.tags)
|
||||||
br!
|
br!
|
||||||
input type: "submit", value: "Update"
|
input type: "submit", value: "Update"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import Widget from require "lapis.html"
|
import Widget from require "lapis.html"
|
||||||
|
|
||||||
|
import trim from require "lapis.util"
|
||||||
import Tracks from require "models"
|
import Tracks from require "models"
|
||||||
|
|
||||||
class extends Widget
|
class extends Widget
|
||||||
@ -37,18 +38,42 @@ class extends Widget
|
|||||||
th "Link"
|
th "Link"
|
||||||
th "Status"
|
th "Status"
|
||||||
th "Quality"
|
th "Quality"
|
||||||
|
th "✓"
|
||||||
|
|
||||||
for track in *@tracks
|
for track in *@tracks
|
||||||
tr ->
|
tr ->
|
||||||
td ->
|
form {
|
||||||
a href: @url_for("track", id: track.id), track.title
|
action: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: @page
|
||||||
td track.artist
|
method: "POST"
|
||||||
td track.genre
|
enctype: "multipart/form-data"
|
||||||
td track.mood
|
}, ->
|
||||||
td track.album
|
td -> input type: "text", name: "title", value: track.title
|
||||||
td ->
|
td -> input type: "text", name: "artist", value: track.artist
|
||||||
if track.link and #track.link > 0
|
td -> input type: "text", name: "genre", value: track.genre
|
||||||
a href: track.link, track.link
|
td -> input type: "text", name: "mood", value: track.mood
|
||||||
td Tracks.statuses[track.status]
|
td -> input type: "text", name: "album", value: track.album
|
||||||
td Tracks.qualities[track.quality]
|
td ->
|
||||||
|
if track.link and #track.link > 0
|
||||||
|
a href: track.link, "*"
|
||||||
|
else
|
||||||
|
text "+"
|
||||||
|
text " "
|
||||||
|
input type: "text", name: "link", value: track.link
|
||||||
|
td ->
|
||||||
|
element "select", name: "status", ->
|
||||||
|
for status_name in *Tracks.statuses
|
||||||
|
if status_name == Tracks.statuses[track.status]
|
||||||
|
option value: Tracks.statuses[status_name], selected: true, status_name
|
||||||
|
else
|
||||||
|
option value: Tracks.statuses[status_name], status_name
|
||||||
|
td ->
|
||||||
|
element "select", name: "quality", ->
|
||||||
|
for quality_name in *Tracks.qualities
|
||||||
|
if quality_name == Tracks.qualities[track.quality]
|
||||||
|
option value: Tracks.qualities[quality_name], selected: true, quality_name
|
||||||
|
else
|
||||||
|
option value: Tracks.qualities[quality_name], quality_name
|
||||||
|
td ->
|
||||||
|
input type: "hidden", name: "id", value: track.id
|
||||||
|
input type: "submit", value: "Update"
|
||||||
@menu!
|
@menu!
|
||||||
|
Reference in New Issue
Block a user