Skip to content

Commit

Permalink
Extract pages into templates for better overwriting (#209)
Browse files Browse the repository at this point in the history
  • Loading branch information
tian-im committed Sep 13, 2023
1 parent 6bdbd3f commit 8de1148
Show file tree
Hide file tree
Showing 21 changed files with 210 additions and 156 deletions.
20 changes: 20 additions & 0 deletions app/views/wallaby/resources/_edit_page.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<%
# decorate first on every page or partial
decorated = decorate resource
%>
<article class="resource">
<div class="resource__header">
<h1><%= wt 'labels.edit', id: decorated.id %></h1>
<%= render 'resource_navs' %>
</div>
<%= render 'flash_messages' %>
<section>
<div class="resource__container">
<%= form_for decorated,
url: url_for(action: :show), method: :put,
html: { :multipart => true } do |form| %>
<%= render 'form', form: form, decorated: decorated %>
<% end %>
</div>
</section>
</article>
5 changes: 5 additions & 0 deletions app/views/wallaby/resources/_home_page.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<h1>
Welcome
</h1>
<%# TODO: turn this page into intro maybe? %>
<%= render 'flash_messages' %>
59 changes: 59 additions & 0 deletions app/views/wallaby/resources/_index_page.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<%
# decorate first on every page or partial
decorated_collection = decorate collection
%>
<article class="resources">
<div class="resources__header">
<h1><%= to_model_label(current_model_class) %></h1>
<%= render 'index_query' %>
<%= render 'index_filters' %>
<%= render 'index_pagination' %>
</div>
<%= render 'flash_messages' %>

<section>
<% # Data table %>
<% if decorated_collection.present? %>
<% field_names = current_model_decorator.index_field_names %>
<div class="resources__container">
<table class="resources__data">
<thead>
<tr>
<% field_names.each do |field_name| %>
<%= content_tag :th, class: sort_link_builder.current_sort[field_name] do %>
<%= sort_link_builder.build field_name %>
<% end %>
<% end %>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<% decorated_collection.each do |decorated| %>
<tr>
<% field_names.each do |field_name| %>
<td>
<%= render decorated.index_type_of(field_name),
object: decorated,
field_name: field_name,
value: decorated.try(field_name),
metadata: decorated.index_metadata_of(field_name)
%>
</td>
<% end %>
<td class="resource__actions">
<%= render 'resource_actions', decorated: decorated %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
<% else %>
<div class="resources__not-found">
<%= image_tag 'wallaby/not_found.png' %>
<%= wt 'errors.not_found.collection' %>
</div>
<% end %>
<% # /Data table %>
</section>
</article>
19 changes: 19 additions & 0 deletions app/views/wallaby/resources/_new_page.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<% decorated = decorate resource %>
<article class="resource">
<div class="resource__header">
<h1><%= wt 'labels.create', model: to_model_label(current_model_class) %></h1>
<%= render 'resource_navs' %>
</div>
<%= render 'flash_messages' %>
<section>
<div class="resource__container">
<%= form_for(
decorated,
url: url_for(action: :index), method: :post,
html: { :multipart => true }
) do |form| %>
<%= render 'form', form: form, decorated: decorated %>
<% end %>
</div>
</section>
</article>
42 changes: 42 additions & 0 deletions app/views/wallaby/resources/_show_page.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<article class="resource">
<%
if resource
# decorate first on every page or partial
decorated = decorate resource
%>
<div class="resource__header">
<h1><%= show_title decorated %></h1>
<%= render 'resource_navs' %>
</div>
<%= render 'flash_messages' %>
<section>
<div class="resource__container">
<% decorated.show_field_names.each do |field_name| %>
<dl>
<dt><%= decorated.show_label_of field_name %></dt>
<dd>
<%= render decorated.show_type_of(field_name),
object: decorated,
field_name: field_name,
value: decorated.try(field_name),
metadata: decorated.show_metadata_of(field_name)
%>
</dd>
</dl>
<% end %>
</div>
</section>
<% else %>
<div class="resource__header">
<h1><%= to_model_label(current_model_class) %></h1>
<%= render 'resource_navs' %>
</div>
<%= render 'flash_messages' %>
<section>
<div class="resource__not-found">
<%= image_tag 'wallaby/not_found.png' %>
<%= wt 'errors.not_found.resource', resource: to_model_label(current_model_class) %>
</div>
</section>
<% end %>
</article>
21 changes: 1 addition & 20 deletions app/views/wallaby/resources/edit.html.erb
Original file line number Diff line number Diff line change
@@ -1,20 +1 @@
<%
# decorate first on every page or partial
decorated = decorate resource
%>
<article class="resource">
<div class="resource__header">
<h1><%= wt 'labels.edit', id: decorated.id %></h1>
<%= render 'resource_navs' %>
</div>
<%= render 'flash_messages' %>
<section>
<div class="resource__container">
<%= form_for decorated,
url: url_for(action: :show), method: :put,
html: { :multipart => true } do |form| %>
<%= render 'form', form: form, decorated: decorated %>
<% end %>
</div>
</section>
</article>
<%= render 'edit_page' %>
6 changes: 1 addition & 5 deletions app/views/wallaby/resources/home.html.erb
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
<h1>
Welcome
</h1>
<%# TODO: turn this page into intro maybe? %>
<%= render 'flash_messages' %>
<%= render 'home_page' %>
60 changes: 1 addition & 59 deletions app/views/wallaby/resources/index.html.erb
Original file line number Diff line number Diff line change
@@ -1,59 +1 @@
<%
# decorate first on every page or partial
decorated_collection = decorate collection
%>
<article class="resources">
<div class="resources__header">
<h1><%= to_model_label(current_model_class) %></h1>
<%= render 'index_query' %>
<%= render 'index_filters' %>
<%= render 'index_pagination' %>
</div>
<%= render 'flash_messages' %>

<section>
<% # Data table %>
<% if decorated_collection.present? %>
<% field_names = current_model_decorator.index_field_names %>
<div class="resources__container">
<table class="resources__data">
<thead>
<tr>
<% field_names.each do |field_name| %>
<%= content_tag :th, class: sort_link_builder.current_sort[field_name] do %>
<%= sort_link_builder.build field_name %>
<% end %>
<% end %>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<% decorated_collection.each do |decorated| %>
<tr>
<% field_names.each do |field_name| %>
<td>
<%= render decorated.index_type_of(field_name),
object: decorated,
field_name: field_name,
value: decorated.try(field_name),
metadata: decorated.index_metadata_of(field_name)
%>
</td>
<% end %>
<td class="resource__actions">
<%= render 'resource_actions', decorated: decorated %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
<% else %>
<div class="resources__not-found">
<%= image_tag 'wallaby/not_found.png' %>
<%= wt 'errors.not_found.collection' %>
</div>
<% end %>
<% # /Data table %>
</section>
</article>
<%= render 'index_page' %>
5 changes: 5 additions & 0 deletions app/views/wallaby/resources/index/_dollar.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%# @param object [model] model instance %>
<%# @param field_name [String] name of the field %>
<%# @param value [Object] value of the field %>
<%# @param metadata [Hash] metadata of the field %>
<%= value.try { |v| number_to_currency(v, metadata[:dollar] || {}) } || null %>
10 changes: 10 additions & 0 deletions app/views/wallaby/resources/index/_percent.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<%# @param object [model] model instance %>
<%# @param field_name [String] name of the field %>
<%# @param value [Object] value of the field %>
<%# @param metadata [Hash] metadata of the field %>
<%= if value.nil?
null
else
"%.#{ metadata[:precision] || 2 }f%%" %
(value.to_f * (metadata[:is_percent] ? 1 : 100))
end %>
20 changes: 1 addition & 19 deletions app/views/wallaby/resources/new.html.erb
Original file line number Diff line number Diff line change
@@ -1,19 +1 @@
<% decorated = decorate resource %>
<article class="resource">
<div class="resource__header">
<h1><%= wt 'labels.create', model: to_model_label(current_model_class) %></h1>
<%= render 'resource_navs' %>
</div>
<%= render 'flash_messages' %>
<section>
<div class="resource__container">
<%= form_for(
decorated,
url: url_for(action: :index), method: :post,
html: { :multipart => true }
) do |form| %>
<%= render 'form', form: form, decorated: decorated %>
<% end %>
</div>
</section>
</article>
<%= render 'new_page' %>
43 changes: 1 addition & 42 deletions app/views/wallaby/resources/show.html.erb
Original file line number Diff line number Diff line change
@@ -1,42 +1 @@
<article class="resource">
<%
if resource
# decorate first on every page or partial
decorated = decorate resource
%>
<div class="resource__header">
<h1><%= show_title decorated %></h1>
<%= render 'resource_navs' %>
</div>
<%= render 'flash_messages' %>
<section>
<div class="resource__container">
<% decorated.show_field_names.each do |field_name| %>
<dl>
<dt><%= decorated.show_label_of field_name %></dt>
<dd>
<%= render decorated.show_type_of(field_name),
object: decorated,
field_name: field_name,
value: decorated.try(field_name),
metadata: decorated.show_metadata_of(field_name)
%>
</dd>
</dl>
<% end %>
</div>
</section>
<% else %>
<div class="resource__header">
<h1><%= to_model_label(current_model_class) %></h1>
<%= render 'resource_navs' %>
</div>
<%= render 'flash_messages' %>
<section>
<div class="resource__not-found">
<%= image_tag 'wallaby/not_found.png' %>
<%= wt 'errors.not_found.resource', resource: to_model_label(current_model_class) %>
</div>
</section>
<% end %>
</article>
<%= render 'show_page' %>
6 changes: 6 additions & 0 deletions spec/dummy/app/controllers/admin/categories_controller.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
module Admin
class CategoriesController < Wallaby::ResourcesController
add_mapping_actions(member_edit: 'form', collection_list: 'index')

def collection_list
index!(template: :index, prefixes: wallaby_prefixes)
end

def member_edit
flash.now[:notice] = "member_edit for #{self.class.name}"
edit!
Expand Down
5 changes: 5 additions & 0 deletions spec/dummy/app/decorators/admin/product_decorator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class Admin::ProductDecorator < Wallaby::ResourceDecorator
filters[:featured] = {
scope: -> { where(featured: true) }
}
end
6 changes: 3 additions & 3 deletions spec/dummy/app/decorators/all_postgres_type_decorator.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
class AllPostgresTypeDecorator < Wallaby::ResourceDecorator
# self.fields[:color][:type] = 'color'
# self.fields[:email][:type] = 'email'
# self.fields[:password][:type] = 'password'
self.fields[:color][:type] = 'color'
self.fields[:email][:type] = 'email'
self.fields[:password][:type] = 'password'

self.filters[:true] = {
scope: -> { where(boolean: true) }
Expand Down
1 change: 1 addition & 0 deletions spec/dummy/app/models/person.rb
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
class Person < ActiveRecord::Base
has_one :picture, as: :imageable
end
21 changes: 20 additions & 1 deletion spec/dummy/app/views/admin/categories/member_edit.html.erb
Original file line number Diff line number Diff line change
@@ -1 +1,20 @@
<%= render 'edit', form_url: url_for(action: :member_update) %>
<%
# decorate first on every page or partial
decorated = decorate resource
%>
<article class="resource">
<div class="resource__header">
<h1><%= wt 'labels.edit', id: decorated.id %></h1>
<%= render 'resource_navs' %>
</div>
<%= render 'flash_messages' %>
<section>
<div class="resource__container">
<%= form_for decorated,
url: url_for(action: :member_update), method: :put,
html: { :multipart => true } do |form| %>
<%= render 'form', form: form, decorated: decorated %>
<% end %>
</div>
</section>
</article>
4 changes: 2 additions & 2 deletions spec/dummy/config/database.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ mysql: &mysql
adapter: mysql2
username: root
password: <%= ENV['MYSQL_ROOT_PASSWORD'] %>
database: <%= Rails.root.basename.to_s %>_<%= Rails.env %>
database: wallaby_<%= Rails.root.basename.to_s %>_<%= Rails.env %>

postgresql: &postgresql
host: 127.0.0.1
adapter: postgresql
database: <%= Rails.root.basename.to_s %>_<%= Rails.env %>
database: wallaby_<%= Rails.root.basename.to_s %>_<%= Rails.env %>
username: <%= ENV['POSTGRES_USER'] %>
password: <%= ENV['POSTGRES_PASSWORD'] %>
min_messages: ERROR
Expand Down

0 comments on commit 8de1148

Please sign in to comment.