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
57
# frozen_string_literal: true
require "phlex"
require_relative "../layout"
require_relative "../axis_tags"
module RankKing
module Views
module ListViews
class New < Phlex::HTML
def initialize(sources:, csrf:)
@sources = sources
@csrf = csrf
end
def view_template
render Layout.new(title: "New list — Rank King") do
render PageHeader.new(title: "New list", back: "/", back_label: "Lists")
form(method: "post", action: "/lists") do
input(type: "hidden", name: "_csrf", value: @csrf.call("/lists"))
label(class: "field") do
plain "Name"
input(type: "text", name: "name", required: true, autofocus: true)
end
label(class: "field") do
plain "Source"
select(name: "source") do
@sources.each do |kind, title, _fields|
option(value: kind) { title }
end
end
small { "A list keeps its source." }
end
# Each source's own fields. Only the chosen source's are
# enabled, so only they are checked and posted; app.js
# switches them when the dropdown changes.
@sources.each.with_index do |(kind, _title, fields), index|
fieldset(data_source: kind, disabled: index > 0, hidden: index > 0) { render fields }
end
render AxisTags.new
footer do
button(type: "submit", data_variant: "primary") { "Create list" }
end
end
end
end
end
end
end
end