lapis = require "lapis" console = require "lapis.console" import respond_to from require "lapis.application" import escape_identifier from require "lapis.db" import create_track, update_track from require "helpers" import Tracks, Tags from require "models" class extends lapis.Application layout: "layout" "/console": console.make! [track: "/track/:id[%d]"]: respond_to { GET: => if @track = Tracks\find id: tonumber @params.id @next = @track\next! @previous = @track\previous! return render: true else return redirect_to: @url_for "tracks" POST: => if track = update_track(@params) return redirect_to: @url_for "track", id: @track.id else return redirect_to: @url_for "tracks" } [tracks: "/tracks(/:order[%a])(/:asc_desc)(/:page[%d])"]: => update_track(@params) if @params.id -- update a track if needed -- validate order @order = tostring(@params.order)\lower! unless Tracks.fields[@order] @order = "id" -- validate ascending/descending (ascending default) @asc_desc = tostring(@params.asc_desc)\upper! if @asc_desc != "DESC" and @asc_desc != "ASC" @asc_desc = "ASC" @page = tonumber(@params.page) or 1 tracks = Tracks\paginated "* ORDER BY #{escape_identifier @order} #{@asc_desc}", per_page: 32 @last_page = 1 + math.floor Tracks\count("true") / 32 -- tracks\num_pages! errors for an unknown reason -- validate page if @page < 1 return redirect_to: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: 1 if @page > @last_page return redirect_to: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: @last_page @tracks = tracks\get_page(@page) return render: true [tag: "/tag/:name(/:asc_desc)(/:page[%d])"]: => -- SHOULD GRAB A GROUP OF TRACKS AND PAGINATE THEM -- REPURPOSE THE TRACKS VIEW TO BE USABLE ON ANY PAGE @write "Haven't made this yet!" [tags: "/tags(/:order[%a])(/:asc_desc)(/:page[%d])"]: => -- validate order @order = tostring(@params.order)\lower! unless Tags.fields[@order] @order = "id" -- validate ascending/descending (ascending default) @asc_desc = tostring(@params.asc_desc)\upper! if @asc_desc != "DESC" and @asc_desc != "ASC" @asc_desc = "ASC" @page = tonumber(@params.page) or 1 tags = Tags\paginated "* ORDER BY #{escape_identifier @order} #{@asc_desc}", per_page: 32 @last_page = 1 + math.floor Tags\count("true") / 32 -- copying from tracks since num_pages wasn't working then -- validate page if @page < 1 return redirect_to: @url_for "tags", order: @order, asc_desc: @asc_desc, page: 1 else return redirect_to: @url_for "tags", order: @order, asc_desc: @asc_desc, page: @last_page @tags = tags\get_page(@page) return render: true [new_track: "/new"]: respond_to { GET: => render: true POST: => track = create_track(@params) if track return redirect_to: @url_for "track", id: track.id else return redirect_to: @url_for "new_track" }