1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# frozen_string_literal: true
require "phlex"
require_relative "../layout"
require_relative "../axis_tags"
module RankKing
module Views
module ListViews
# A future setting is a new section of this form, not a new screen.
class Settings < Phlex::HTML
def initialize(list:, source:, csrf:)
@list = list
@source = source
@csrf = csrf
end
def view_template
settings = "/lists/#{@list.id}/settings"
delete = "/lists/#{@list.id}/delete"
render Layout.new(title: "Settings · #{@list.name} — Rank King") do
render PageHeader.new(title: "Settings", back: "/lists/#{@list.id}", back_label: @list.name)
form(id: "settings", method: "post", action: settings) do
input(type: "hidden", name: "_csrf", value: @csrf.call(settings))
label(class: "field") do
plain "Name"
input(type: "text", name: "name", value: @list.name, required: true)
end
# A list keeps the source it was made from, so this is a
# fact about the list, not a control.
div(class: "field") do
plain "Source"
p { @source }
end
render AxisTags.new(axes: @list.axes, hint: "Removing an axis deletes its results.")
end
form(method: "post", action: delete, data_confirm: "Delete #{@list.name} and all its results?") do
input(type: "hidden", name: "_csrf", value: @csrf.call(delete))
footer do
button(type: "submit", data_variant: "danger", data_size: "sm") { "Delete list" }
button(type: "submit", form: "settings", data_variant: "primary") { "Save" }
end
end
end
end
end
end
end
end