iron-cms 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/builds/iron.css +1468 -1447
- data/app/assets/tailwind/iron/application.css +12 -1
- data/app/assets/tailwind/iron/components/button.css +110 -60
- data/app/assets/tailwind/iron/components/input.css +11 -9
- data/app/assets/tailwind/iron/components/sidebar.css +13 -17
- data/app/helpers/iron/application_helper.rb +1 -1
- data/app/helpers/iron/form_builder.rb +46 -0
- data/app/javascript/iron/application.js +2 -0
- data/app/models/iron/entry/web_publishable.rb +12 -12
- data/app/views/iron/block_definitions/_form.html.erb +1 -1
- data/app/views/iron/block_definitions/index.html.erb +1 -1
- data/app/views/iron/block_definitions/show.html.erb +3 -3
- data/app/views/iron/content_types/_form.html.erb +1 -1
- data/app/views/iron/content_types/index.html.erb +4 -7
- data/app/views/iron/content_types/show.html.erb +3 -9
- data/app/views/iron/contents/new.html.erb +2 -2
- data/app/views/iron/entries/_form.html.erb +45 -37
- data/app/views/iron/entries/edit.html.erb +2 -12
- data/app/views/iron/entries/fields/_block.html.erb +3 -4
- data/app/views/iron/entries/fields/_block_list.html.erb +26 -17
- data/app/views/iron/entries/fields/_reference_item.html.erb +2 -3
- data/app/views/iron/entries/fields/_text_field.html.erb +1 -1
- data/app/views/iron/entries/index.html.erb +1 -1
- data/app/views/iron/field_definitions/_field_definition.html.erb +1 -2
- data/app/views/iron/field_definitions/edit.html.erb +1 -7
- data/app/views/iron/field_definitions/layouts/_form.html.erb +1 -1
- data/app/views/iron/first_runs/show.html.erb +1 -1
- data/app/views/iron/locales/_form.html.erb +1 -1
- data/app/views/iron/locales/_locale.html.erb +1 -1
- data/app/views/iron/locales/index.html.erb +1 -1
- data/app/views/iron/passwords/edit.html.erb +31 -6
- data/app/views/iron/passwords/new.html.erb +19 -18
- data/app/views/iron/schemas/new.html.erb +2 -2
- data/app/views/iron/sessions/new.html.erb +27 -26
- data/app/views/iron/settings/show.html.erb +3 -4
- data/app/views/iron/shared/_collection_select.html.erb +31 -0
- data/app/views/iron/users/_form.html.erb +1 -1
- data/app/views/iron/users/new.html.erb +1 -1
- data/app/views/iron/users/show.html.erb +1 -4
- data/app/views/layouts/iron/_mobile_header.html.erb +10 -0
- data/app/views/layouts/iron/_sidebar.html.erb +26 -81
- data/app/views/layouts/iron/_sidebar_content.html.erb +36 -0
- data/app/views/layouts/iron/_sidebar_item.html.erb +1 -5
- data/app/views/layouts/iron/_user_menu.html.erb +26 -0
- data/app/views/layouts/iron/application.html.erb +11 -27
- data/app/views/layouts/iron/authentication.html.erb +4 -21
- data/config/importmap.rb +1 -0
- data/lib/iron/version.rb +1 -1
- metadata +6 -3
- data/app/helpers/iron/components/dropdown_helper.rb +0 -161
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<%# locals: (class: nil, anchor: "bottom end", show_name: true) -%>
|
|
2
|
+
|
|
3
|
+
<el-dropdown class="block">
|
|
4
|
+
<button class="<%= local_assigns[:class] %>">
|
|
5
|
+
<%= avatar Iron::Current.user, class: "size-8 bg-stone-50 outline -outline-offset-1 outline-black/5 dark:bg-stone-800 dark:outline-white/10" %>
|
|
6
|
+
<span class="sr-only">Your profile</span>
|
|
7
|
+
<% if show_name %>
|
|
8
|
+
<span aria-hidden="true"><%= Iron::Current.user.name %></span>
|
|
9
|
+
<% end %>
|
|
10
|
+
</button>
|
|
11
|
+
|
|
12
|
+
<el-menu anchor="<%= anchor %>" popover class="<%= anchor.include?('top') ? 'mx-2' : '' %> w-56 origin-bottom-right divide-y divide-stone-100 rounded-md bg-white shadow-lg outline-1 outline-black/5 transition transition-discrete [--anchor-gap:--spacing(2)] data-closed:scale-95 data-closed:transform data-closed:opacity-0 data-enter:duration-100 data-enter:ease-out data-leave:duration-75 data-leave:ease-in dark:divide-white/10 dark:bg-stone-800 dark:shadow-none dark:-outline-offset-1 dark:outline-white/10">
|
|
13
|
+
<div class="py-1">
|
|
14
|
+
<a href="#" class="group/item flex items-center px-4 py-2 text-sm text-stone-700 focus:bg-stone-100 focus:text-stone-900 focus:outline-hidden dark:text-stone-300 dark:focus:bg-white/5 dark:focus:text-white">
|
|
15
|
+
<%= icon "circle-user", class: "mr-3 size-5 text-stone-400 group-focus/item:text-stone-500 dark:text-stone-500 dark:group-focus/item:text-white" %>
|
|
16
|
+
My account
|
|
17
|
+
</a>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="py-1">
|
|
20
|
+
<%= link_to session_path, method: :delete, class: "group/item flex items-center px-4 py-2 text-sm text-stone-700 focus:bg-stone-100 focus:text-stone-900 focus:outline-hidden dark:text-stone-300 dark:focus:bg-white/5 dark:focus:text-white" do %>
|
|
21
|
+
<%= icon "log-out", class: "mr-3 size-5 text-stone-400 group-focus/item:text-stone-500 dark:text-stone-500 dark:group-focus/item:text-white" %>
|
|
22
|
+
Sign out
|
|
23
|
+
<% end %>
|
|
24
|
+
</div>
|
|
25
|
+
</el-menu>
|
|
26
|
+
</el-dropdown>
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html
|
|
3
|
-
class="
|
|
4
|
-
text-stone-950 antialiased lg:bg-stone-100 dark:bg-stone-900 dark:text-white
|
|
5
|
-
dark:lg:bg-stone-950
|
|
6
|
-
"
|
|
7
|
-
>
|
|
2
|
+
<html class="h-full bg-stone-50 text-stone-950 antialiased dark:bg-stone-900 dark:text-white">
|
|
8
3
|
<head>
|
|
9
4
|
<title><%= content_for(:title).present? ? "#{content_for(:title)} | Iron CMS" : "Iron CMS" %></title>
|
|
10
5
|
<%= csrf_meta_tags %>
|
|
@@ -19,27 +14,16 @@
|
|
|
19
14
|
|
|
20
15
|
<%= yield :head %>
|
|
21
16
|
</head>
|
|
22
|
-
<body>
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class="
|
|
33
|
-
grow p-6 lg:rounded-lg lg:bg-white lg:p-10 lg:shadow-xs lg:ring-1
|
|
34
|
-
lg:ring-stone-950/5 dark:lg:bg-stone-900 dark:lg:ring-white/10
|
|
35
|
-
"
|
|
36
|
-
>
|
|
37
|
-
<div class="mx-auto max-w-6xl">
|
|
38
|
-
<%= yield %>
|
|
39
|
-
</div>
|
|
40
|
-
</div>
|
|
41
|
-
</main>
|
|
42
|
-
</div>
|
|
17
|
+
<body class="h-full">
|
|
18
|
+
<%= render "layouts/iron/sidebar" %>
|
|
19
|
+
|
|
20
|
+
<%= render "layouts/iron/mobile_header" %>
|
|
21
|
+
|
|
22
|
+
<main class="py-10 lg:pl-72">
|
|
23
|
+
<div class="px-4 sm:px-6 lg:px-8">
|
|
24
|
+
<%= yield %>
|
|
25
|
+
</div>
|
|
26
|
+
</main>
|
|
43
27
|
|
|
44
28
|
<%= render "layouts/iron/toast" %>
|
|
45
29
|
</body>
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html
|
|
3
|
-
class="
|
|
4
|
-
text-stone-950 antialiased bg-stone-100 dark:bg-stone-950 dark:text-white
|
|
5
|
-
"
|
|
6
|
-
>
|
|
2
|
+
<html class="h-full bg-white dark:bg-stone-900">
|
|
7
3
|
<head>
|
|
8
4
|
<title><%= content_for(:title).present? ? "#{content_for(:title)} | Iron CMS" : "Iron CMS" %></title>
|
|
9
5
|
<%= csrf_meta_tags %>
|
|
@@ -18,22 +14,9 @@
|
|
|
18
14
|
|
|
19
15
|
<%= yield :head %>
|
|
20
16
|
</head>
|
|
21
|
-
<body>
|
|
22
|
-
<div
|
|
23
|
-
|
|
24
|
-
flex min-h-svh items-center justify-center bg-stone-100 p-6 dark:bg-stone-950
|
|
25
|
-
"
|
|
26
|
-
>
|
|
27
|
-
<div class="w-full max-w-md">
|
|
28
|
-
<div
|
|
29
|
-
class="
|
|
30
|
-
rounded-lg bg-white p-8 shadow-xs ring-1 ring-stone-950/5 dark:bg-stone-900
|
|
31
|
-
dark:ring-white/10
|
|
32
|
-
"
|
|
33
|
-
>
|
|
34
|
-
<%= yield %>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
17
|
+
<body class="h-full">
|
|
18
|
+
<div class="flex min-h-full flex-col justify-center px-6 py-12 lg:px-8">
|
|
19
|
+
<%= yield %>
|
|
37
20
|
</div>
|
|
38
21
|
|
|
39
22
|
<%= render "layouts/iron/toast" %>
|
data/config/importmap.rb
CHANGED
|
@@ -7,3 +7,4 @@ pin "@rails/actiontext", to: "actiontext.esm.js"
|
|
|
7
7
|
|
|
8
8
|
pin_all_from Iron::Engine.root.join("app/javascript/iron/lib"), under: "lib", to: "iron/lib"
|
|
9
9
|
pin_all_from Iron::Engine.root.join("app/javascript/iron/controllers"), under: "controllers", to: "iron/controllers"
|
|
10
|
+
pin "@tailwindplus/elements", to: "@tailwindplus--elements.js" # @1.0.18
|
data/lib/iron/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: iron-cms
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Massimo De Marchi
|
|
@@ -216,7 +216,6 @@ files:
|
|
|
216
216
|
- app/helpers/iron/block_helper.rb
|
|
217
217
|
- app/helpers/iron/buttons_helper.rb
|
|
218
218
|
- app/helpers/iron/components/badge_helper.rb
|
|
219
|
-
- app/helpers/iron/components/dropdown_helper.rb
|
|
220
219
|
- app/helpers/iron/content_types_helper.rb
|
|
221
220
|
- app/helpers/iron/entries_helper.rb
|
|
222
221
|
- app/helpers/iron/field_definitions_helper.rb
|
|
@@ -379,6 +378,7 @@ files:
|
|
|
379
378
|
- app/views/iron/schemas/new.html.erb
|
|
380
379
|
- app/views/iron/sessions/new.html.erb
|
|
381
380
|
- app/views/iron/settings/show.html.erb
|
|
381
|
+
- app/views/iron/shared/_collection_select.html.erb
|
|
382
382
|
- app/views/iron/shared/_icon_picker.html.erb
|
|
383
383
|
- app/views/iron/users/_form.html.erb
|
|
384
384
|
- app/views/iron/users/_user.html.erb
|
|
@@ -387,9 +387,12 @@ files:
|
|
|
387
387
|
- app/views/iron/users/new.html.erb
|
|
388
388
|
- app/views/iron/users/show.html.erb
|
|
389
389
|
- app/views/layouts/action_text/contents/_content.html.erb
|
|
390
|
+
- app/views/layouts/iron/_mobile_header.html.erb
|
|
390
391
|
- app/views/layouts/iron/_sidebar.html.erb
|
|
392
|
+
- app/views/layouts/iron/_sidebar_content.html.erb
|
|
391
393
|
- app/views/layouts/iron/_sidebar_item.html.erb
|
|
392
394
|
- app/views/layouts/iron/_toast.html.erb
|
|
395
|
+
- app/views/layouts/iron/_user_menu.html.erb
|
|
393
396
|
- app/views/layouts/iron/application.html.erb
|
|
394
397
|
- app/views/layouts/iron/authentication.html.erb
|
|
395
398
|
- config/importmap.rb
|
|
@@ -451,7 +454,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
451
454
|
- !ruby/object:Gem::Version
|
|
452
455
|
version: '0'
|
|
453
456
|
requirements: []
|
|
454
|
-
rubygems_version: 3.6.
|
|
457
|
+
rubygems_version: 3.6.9
|
|
455
458
|
specification_version: 4
|
|
456
459
|
summary: Iron is a Ruby on Rails engine for managing and publishing content.
|
|
457
460
|
test_files: []
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
# module Iron
|
|
2
|
-
# module Components::DropdownHelper
|
|
3
|
-
# def dropdown_divider
|
|
4
|
-
# tag.div role: "separator", class: "col-span-full mx-3.5 my-1 h-px border-0 bg-stone-950/5 sm:mx-3 dark:bg-white/10 forced-colors:bg-[CanvasText]"
|
|
5
|
-
# end
|
|
6
|
-
# end
|
|
7
|
-
# end
|
|
8
|
-
|
|
9
|
-
module Iron
|
|
10
|
-
module Components::DropdownHelper
|
|
11
|
-
# Main dropdown container
|
|
12
|
-
def dropdown_menu(options = {}, &block)
|
|
13
|
-
# Initialize storage for different parts of the dropdown
|
|
14
|
-
@dropdown_id = options[:id] || "dropdown-#{SecureRandom.hex(4)}"
|
|
15
|
-
@dropdown_trigger = nil
|
|
16
|
-
@dropdown_content = nil
|
|
17
|
-
|
|
18
|
-
# Capture the nested content
|
|
19
|
-
capture(&block)
|
|
20
|
-
|
|
21
|
-
# Build the complete dropdown
|
|
22
|
-
content_tag(:div, class: options[:class]) do
|
|
23
|
-
safe_join([
|
|
24
|
-
@dropdown_trigger,
|
|
25
|
-
@dropdown_content
|
|
26
|
-
].compact)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# Button that toggles the dropdown
|
|
31
|
-
def dropdown_menu_trigger(options = {}, &block)
|
|
32
|
-
css_class = options.delete(:class)
|
|
33
|
-
trigger_content = capture(&block)
|
|
34
|
-
|
|
35
|
-
@dropdown_trigger = content_tag(:button,
|
|
36
|
-
trigger_content,
|
|
37
|
-
id: "#{@dropdown_id}-trigger",
|
|
38
|
-
popovertarget: @dropdown_id,
|
|
39
|
-
class: tw("inline-flex items-center justify-center gap-2", css_class),
|
|
40
|
-
style: "anchor-name: --#{@dropdown_id}-trigger;",
|
|
41
|
-
**options
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
nil # Return nil to avoid content being rendered twice
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def dropdown_menu_content(options = {}, &block)
|
|
48
|
-
css_class = options.delete(:class)
|
|
49
|
-
width = options[:width] || "16rem"
|
|
50
|
-
align = options[:align] || "end" # Default to end alignment
|
|
51
|
-
side = options[:side]
|
|
52
|
-
|
|
53
|
-
positioning = "position-anchor: --#{@dropdown_id}-trigger;"
|
|
54
|
-
|
|
55
|
-
# Add alignment to positioning
|
|
56
|
-
positioning += " position-align: #{align};" if align.present?
|
|
57
|
-
|
|
58
|
-
# Add side to positioning if provided
|
|
59
|
-
positioning += " position-side: #{side};" if side.present?
|
|
60
|
-
|
|
61
|
-
content = capture(&block)
|
|
62
|
-
|
|
63
|
-
@dropdown_content = content_tag(:div,
|
|
64
|
-
content,
|
|
65
|
-
id: @dropdown_id,
|
|
66
|
-
popover: "",
|
|
67
|
-
class: tw("dropdown", css_class),
|
|
68
|
-
style: "#{positioning} --popover-width: #{width};",
|
|
69
|
-
**options
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
nil # Return nil to avoid content being rendered twice
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# Individual dropdown menu item
|
|
76
|
-
def dropdown_menu_item(*args, &block)
|
|
77
|
-
options = args.extract_options!
|
|
78
|
-
|
|
79
|
-
# Determine what the remaining args are
|
|
80
|
-
text = args[0]
|
|
81
|
-
url = args[1]
|
|
82
|
-
|
|
83
|
-
# Extract common options
|
|
84
|
-
css_class = options.delete(:class)
|
|
85
|
-
icon_name = options.delete(:icon)
|
|
86
|
-
method = options.delete(:method)
|
|
87
|
-
|
|
88
|
-
item_content = if block_given?
|
|
89
|
-
capture(&block)
|
|
90
|
-
elsif icon_name.present?
|
|
91
|
-
safe_join([
|
|
92
|
-
icon(icon_name, variant: :micro, data: { slot: "icon" }),
|
|
93
|
-
content_tag(:div, text, data: { slot: "label" })
|
|
94
|
-
])
|
|
95
|
-
else
|
|
96
|
-
text
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
if url.nil? && method.present?
|
|
100
|
-
# Button form
|
|
101
|
-
button_tag(item_content,
|
|
102
|
-
type: "button",
|
|
103
|
-
class: tw("dropdown-item w-full text-left", css_class),
|
|
104
|
-
**options
|
|
105
|
-
)
|
|
106
|
-
elsif method.present?
|
|
107
|
-
# Button_to form
|
|
108
|
-
button_to(url.to_s,
|
|
109
|
-
method: method,
|
|
110
|
-
class: tw("dropdown-item w-full", css_class),
|
|
111
|
-
**options
|
|
112
|
-
) { item_content }
|
|
113
|
-
elsif url.present?
|
|
114
|
-
# Link form
|
|
115
|
-
link_to(url.to_s,
|
|
116
|
-
class: tw("dropdown-item", css_class),
|
|
117
|
-
**options
|
|
118
|
-
) { item_content }
|
|
119
|
-
else
|
|
120
|
-
# Plain item
|
|
121
|
-
content_tag(:div, item_content,
|
|
122
|
-
class: tw("dropdown-item", css_class),
|
|
123
|
-
**options
|
|
124
|
-
)
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
# Label for dropdown sections
|
|
129
|
-
def dropdown_menu_label(text = nil, options = {}, &block)
|
|
130
|
-
css_class = options.delete(:class)
|
|
131
|
-
|
|
132
|
-
content = block_given? ? capture(&block) : text
|
|
133
|
-
|
|
134
|
-
content_tag(:div, content,
|
|
135
|
-
class: tw("px-3.5 py-2 text-sm font-semibold text-stone-950 dark:text-white sm:px-3", css_class),
|
|
136
|
-
**options
|
|
137
|
-
)
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
# Divider between dropdown items
|
|
141
|
-
def dropdown_menu_separator(options = {})
|
|
142
|
-
css_class = options.delete(:class)
|
|
143
|
-
|
|
144
|
-
content_tag(:div, nil,
|
|
145
|
-
role: "separator",
|
|
146
|
-
class: tw("dropdown-divider", css_class),
|
|
147
|
-
**options
|
|
148
|
-
)
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
# Group of related dropdown items
|
|
152
|
-
def dropdown_menu_group(options = {}, &block)
|
|
153
|
-
css_class = options.delete(:class)
|
|
154
|
-
|
|
155
|
-
content_tag(:div, capture(&block),
|
|
156
|
-
class: tw("p-1", css_class),
|
|
157
|
-
**options
|
|
158
|
-
)
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
end
|