overlook 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/app/assets/images/.DS_Store +0 -0
- data/app/assets/images/admin/glyphicons-halflings-white.png +0 -0
- data/app/assets/images/admin/glyphicons-halflings.png +0 -0
- data/app/assets/javascripts/.DS_Store +0 -0
- data/app/assets/javascripts/admin/bootstrap.js +7 -0
- data/app/assets/javascripts/admin.js.coffee +3 -0
- data/app/assets/stylesheets/.DS_Store +0 -0
- data/app/assets/stylesheets/admin/.DS_Store +0 -0
- data/app/assets/stylesheets/admin/bootstrap.css +706 -0
- data/app/assets/stylesheets/admin.css +12 -0
- data/app/controllers/.DS_Store +0 -0
- data/app/controllers/admin/application_controller.rb +3 -0
- data/app/controllers/admin/articles_controller.rb +82 -0
- data/app/controllers/admin/users_controller.rb +76 -0
- data/app/helpers/.DS_Store +0 -0
- data/app/helpers/admin/application_helper.rb +26 -0
- data/app/views/.DS_Store +0 -0
- data/app/views/kaminari/admin/_gap.html.erb +8 -0
- data/app/views/kaminari/admin/_next_page.html.erb +11 -0
- data/app/views/kaminari/admin/_page.html.erb +12 -0
- data/app/views/kaminari/admin/_paginator.html.erb +23 -0
- data/app/views/kaminari/admin/_prev_page.html.erb +11 -0
- data/app/views/layouts/.DS_Store +0 -0
- data/app/views/layouts/admin.html.erb +30 -0
- data/lib/generators/overlook/.DS_Store +0 -0
- data/lib/generators/overlook/admin/admin_generator.rb +60 -0
- data/lib/generators/overlook/admin/templates/breadcrumb.html.erb +14 -0
- data/lib/generators/overlook/admin/templates/controller.rb +82 -0
- data/lib/generators/overlook/admin/templates/destroy.js.erb +1 -0
- data/lib/generators/overlook/admin/templates/edit.html.erb +12 -0
- data/lib/generators/overlook/admin/templates/form.html.erb +21 -0
- data/lib/generators/overlook/admin/templates/index.html.erb +44 -0
- data/lib/generators/overlook/admin/templates/new.html.erb +12 -0
- data/lib/generators/overlook/admin/templates/partial.html.erb +30 -0
- data/lib/generators/overlook/admin/templates/show.html.erb +17 -0
- data/lib/generators/overlook/admin/templates/sidebar.html.erb +30 -0
- data/lib/generators/overlook/install/USAGE +5 -0
- data/lib/generators/overlook/install/install_generator.rb +15 -0
- data/lib/generators/overlook/install/templates/assets/images/.DS_Store +0 -0
- data/lib/generators/overlook/install/templates/assets/images/admin/glyphicons-halflings-white.png +0 -0
- data/lib/generators/overlook/install/templates/assets/images/admin/glyphicons-halflings.png +0 -0
- data/lib/generators/overlook/install/templates/assets/javascripts/.DS_Store +0 -0
- data/lib/generators/overlook/install/templates/assets/javascripts/admin/bootstrap.js +7 -0
- data/lib/generators/overlook/install/templates/assets/javascripts/admin.js.coffee +3 -0
- data/lib/generators/overlook/install/templates/assets/stylesheets/.DS_Store +0 -0
- data/lib/generators/overlook/install/templates/assets/stylesheets/admin/.DS_Store +0 -0
- data/lib/generators/overlook/install/templates/assets/stylesheets/admin/bootstrap.css +706 -0
- data/lib/generators/overlook/install/templates/assets/stylesheets/admin.css +12 -0
- data/lib/generators/overlook/install/templates/controllers/.DS_Store +0 -0
- data/lib/generators/overlook/install/templates/controllers/admin/application_controller.rb +3 -0
- data/lib/generators/overlook/install/templates/controllers/admin/articles_controller.rb +82 -0
- data/lib/generators/overlook/install/templates/controllers/admin/users_controller.rb +76 -0
- data/lib/generators/overlook/install/templates/helpers/.DS_Store +0 -0
- data/lib/generators/overlook/install/templates/helpers/admin/application_helper.rb +26 -0
- data/lib/generators/overlook/install/templates/views/.DS_Store +0 -0
- data/lib/generators/overlook/install/templates/views/kaminari/admin/_gap.html.erb +8 -0
- data/lib/generators/overlook/install/templates/views/kaminari/admin/_next_page.html.erb +11 -0
- data/lib/generators/overlook/install/templates/views/kaminari/admin/_page.html.erb +12 -0
- data/lib/generators/overlook/install/templates/views/kaminari/admin/_paginator.html.erb +23 -0
- data/lib/generators/overlook/install/templates/views/kaminari/admin/_prev_page.html.erb +11 -0
- data/lib/generators/overlook/install/templates/views/layouts/.DS_Store +0 -0
- data/lib/generators/overlook/install/templates/views/layouts/admin.html.erb +30 -0
- data/lib/overlook/version.rb +3 -0
- data/lib/overlook.rb +5 -0
- data/overlook.gemspec +25 -0
- metadata +157 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
/*
|
2
|
+
*= require admin/bootstrap
|
3
|
+
*= require_self
|
4
|
+
*/
|
5
|
+
|
6
|
+
body { padding-top: 60px; }
|
7
|
+
div.sidebar { padding: 8px 0; }
|
8
|
+
td.options div.btn-group { width: 110px; }
|
9
|
+
table.table td { vertical-align: middle; }
|
10
|
+
td.center { text-align: center; }
|
11
|
+
td.right { text-align: right; }
|
12
|
+
|
Binary file
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
class Admin::ArticlesController < Admin::ApplicationController
|
4
|
+
# filters
|
5
|
+
before_filter :load_article, only: [:show, :edit, :update, :destroy]
|
6
|
+
|
7
|
+
# index
|
8
|
+
def index
|
9
|
+
@articles = Article.search(params[:q]).sorty(params)
|
10
|
+
|
11
|
+
respond_to do |format|
|
12
|
+
format.html do
|
13
|
+
@articles = @articles.page(params[:page])
|
14
|
+
end
|
15
|
+
|
16
|
+
format.csv do
|
17
|
+
data = CSV.generate do |csv|
|
18
|
+
columns = Article.columns.map(&:name)
|
19
|
+
csv << columns.map(&:titleize)
|
20
|
+
|
21
|
+
@articles.map do |article|
|
22
|
+
csv << columns.map{|c| article.send(c)}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
filename = "articles-#{Time.now.strftime('%d-%m-%Y')}.csv"
|
27
|
+
send_data(data, filename: filename, type: 'text/csv')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# show
|
33
|
+
def show
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
# new
|
38
|
+
def new
|
39
|
+
@article = Article.new
|
40
|
+
end
|
41
|
+
|
42
|
+
# create
|
43
|
+
def create
|
44
|
+
@article = Article.new(params[:article])
|
45
|
+
|
46
|
+
if @article.save
|
47
|
+
redirect_to admin_articles_url, notice: "Article has been created"
|
48
|
+
else
|
49
|
+
render :new
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# edit
|
54
|
+
def edit
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
# update
|
59
|
+
def update
|
60
|
+
if @article.update_attributes(params[:article])
|
61
|
+
redirect_to admin_articles_url, notice: "Article has been updated"
|
62
|
+
else
|
63
|
+
render :edit
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# destroy
|
68
|
+
def destroy
|
69
|
+
@article.destroy
|
70
|
+
|
71
|
+
respond_to do |format|
|
72
|
+
format.html { redirect_to :back, notice: "Article has been deleted" }
|
73
|
+
format.js
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
protected
|
78
|
+
|
79
|
+
def load_article
|
80
|
+
@article = Article.find(params[:id])
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
class Admin::UsersController < Admin::ApplicationController
|
4
|
+
# filters
|
5
|
+
before_filter :load_user, only: [:edit, :update, :destroy]
|
6
|
+
|
7
|
+
# index
|
8
|
+
def index
|
9
|
+
@users = User.search(params[:q]).sorty(params)
|
10
|
+
|
11
|
+
respond_to do |format|
|
12
|
+
format.html do
|
13
|
+
@users = @users.page(params[:page])
|
14
|
+
end
|
15
|
+
format.csv do
|
16
|
+
data = CSV.generate do |csv|
|
17
|
+
columns = User.columns.map(&:name)
|
18
|
+
csv << columns.map(&:titleize)
|
19
|
+
|
20
|
+
@users.map do |user|
|
21
|
+
csv << columns.map{|c| user.send(c)}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
filename = "users-#{Time.now.strftime('%d-%m-%Y')}.csv"
|
26
|
+
send_data(data, filename: filename, type: 'text/csv')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# new
|
32
|
+
def new
|
33
|
+
@user = User.new
|
34
|
+
end
|
35
|
+
|
36
|
+
# create
|
37
|
+
def create
|
38
|
+
@user = User.new(params[:user])
|
39
|
+
|
40
|
+
if @user.save
|
41
|
+
redirect_to admin_users_url, notice: "User has been created"
|
42
|
+
else
|
43
|
+
render :new
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# edit
|
48
|
+
def edit
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
# update
|
53
|
+
def update
|
54
|
+
if @user.update_attributes(params[:user])
|
55
|
+
redirect_to admin_users_url, notice: "User has been updated"
|
56
|
+
else
|
57
|
+
render :edit
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# destroy
|
62
|
+
def destroy
|
63
|
+
@user.destroy
|
64
|
+
|
65
|
+
respond_to do |format|
|
66
|
+
format.html { redirect_to :back, notice: "User has been deleted" }
|
67
|
+
format.js
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
protected
|
72
|
+
|
73
|
+
def load_user
|
74
|
+
@user = User.find(params[:id])
|
75
|
+
end
|
76
|
+
end
|
Binary file
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Admin::ApplicationHelper
|
2
|
+
def flash_messages
|
3
|
+
classes = { notice: 'success', warning: 'warning', error: 'error' }
|
4
|
+
|
5
|
+
output = flash.map do |name, message|
|
6
|
+
if message.present?
|
7
|
+
class_name = ['alert', "alert-#{classes[name]}"].join(' ')
|
8
|
+
message << '<a class="close" data-dismiss="alert">×</a>'
|
9
|
+
|
10
|
+
content_tag(:div, class: 'span12') do
|
11
|
+
content_tag(:div, raw(message), class: class_name)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
raw(output.join)
|
17
|
+
end
|
18
|
+
|
19
|
+
def nav(name)
|
20
|
+
class_name = params[:controller].eql?("admin/#{name}") ? 'active' : nil
|
21
|
+
|
22
|
+
content_tag(:li, class: class_name) do
|
23
|
+
link_to(name.to_s.titleize, "/admin/#{name}")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/app/views/.DS_Store
ADDED
Binary file
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%# Non-link tag that stands for skipped pages...
|
2
|
+
- available local variables
|
3
|
+
current_page: a page object for the currently displayed page
|
4
|
+
num_pages: total number of pages
|
5
|
+
per_page: number of items to fetch per page
|
6
|
+
remote: data-remote
|
7
|
+
-%>
|
8
|
+
<li class="disabled"><a href="#"><%= raw(t 'views.pagination.truncate') %></a></li>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%# Link to the "Next" page
|
2
|
+
- available local variables
|
3
|
+
url: url to the next page
|
4
|
+
current_page: a page object for the currently displayed page
|
5
|
+
num_pages: total number of pages
|
6
|
+
per_page: number of items to fetch per page
|
7
|
+
remote: data-remote
|
8
|
+
-%>
|
9
|
+
<li class="<%= 'disabled' if current_page.last? %>">
|
10
|
+
<%= link_to raw("»"), url, :rel => 'next', :remote => remote %>
|
11
|
+
</li>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%# Link showing page number
|
2
|
+
- available local variables
|
3
|
+
page: a page object for "this" page
|
4
|
+
url: url to this page
|
5
|
+
current_page: a page object for the currently displayed page
|
6
|
+
num_pages: total number of pages
|
7
|
+
per_page: number of items to fetch per page
|
8
|
+
remote: data-remote
|
9
|
+
-%>
|
10
|
+
<li class="<%= 'active' if page.current? %>">
|
11
|
+
<%= link_to page, url, opts = { :remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
|
12
|
+
</li>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%# The container tag
|
2
|
+
- available local variables
|
3
|
+
current_page: a page object for the currently displayed page
|
4
|
+
num_pages: total number of pages
|
5
|
+
per_page: number of items to fetch per page
|
6
|
+
remote: data-remote
|
7
|
+
paginator: the paginator that renders the pagination tags inside
|
8
|
+
-%>
|
9
|
+
<%= paginator.render do -%>
|
10
|
+
<div class="pagination pagination-centered">
|
11
|
+
<ul>
|
12
|
+
<%= prev_page_tag unless current_page.first? %>
|
13
|
+
<% each_page do |page| -%>
|
14
|
+
<% if page.left_outer? || page.right_outer? || page.inside_window? -%>
|
15
|
+
<%= page_tag page %>
|
16
|
+
<% elsif !page.was_truncated? -%>
|
17
|
+
<%= gap_tag %>
|
18
|
+
<% end -%>
|
19
|
+
<% end -%>
|
20
|
+
<%= next_page_tag unless current_page.last? %>
|
21
|
+
</ul>
|
22
|
+
</div>
|
23
|
+
<% end -%>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%# Link to the "Previous" page
|
2
|
+
- available local variables
|
3
|
+
url: url to the previous page
|
4
|
+
current_page: a page object for the currently displayed page
|
5
|
+
num_pages: total number of pages
|
6
|
+
per_page: number of items to fetch per page
|
7
|
+
remote: data-remote
|
8
|
+
-%>
|
9
|
+
<li class="<%= 'disabled' if current_page.first? %>">
|
10
|
+
<%= link_to raw("«"), url, :rel => 'prev', :remote => remote %>
|
11
|
+
</li>
|
Binary file
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title><%= @page_title || 'Admin' %></title>
|
6
|
+
<%= stylesheet_link_tag "admin", media: "all" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<div class="navbar navbar-fixed-top">
|
12
|
+
<div class="navbar-inner">
|
13
|
+
<div class="container">
|
14
|
+
<a class="brand" href="/admin">Admin</a>
|
15
|
+
<ul class="nav">
|
16
|
+
<%= nav(:users) %>
|
17
|
+
<%= nav(:articles) %>
|
18
|
+
</ul>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
<div class="container">
|
23
|
+
<div class="row">
|
24
|
+
<%= flash_messages %>
|
25
|
+
<%= yield %>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
<%= javascript_include_tag "admin" %>
|
29
|
+
</body>
|
30
|
+
</html>
|
Binary file
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Overlook
|
2
|
+
class AdminGenerator < Rails::Generators::NamedBase
|
3
|
+
# source
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
|
6
|
+
def add_route
|
7
|
+
inject_into_file 'config/routes.rb', "\n resources :#{table_name}", {
|
8
|
+
after: /namespace :admin do$/
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_navigation
|
13
|
+
inject_into_file 'app/views/layouts/admin.html.erb', "\n <%= nav(:#{table_name}) %>", {
|
14
|
+
after: /<ul class="nav">/
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def copy_controller_file
|
19
|
+
template "controller.rb", "app/controllers/admin/#{plural_file_name}_controller.rb"
|
20
|
+
end
|
21
|
+
|
22
|
+
def copy_view_files
|
23
|
+
template "index.html.erb", "app/views/admin/#{plural_file_name}/index.html.erb"
|
24
|
+
template "show.html.erb", "app/views/admin/#{plural_file_name}/show.html.erb"
|
25
|
+
template "new.html.erb", "app/views/admin/#{plural_file_name}/new.html.erb"
|
26
|
+
template "edit.html.erb", "app/views/admin/#{plural_file_name}/edit.html.erb"
|
27
|
+
template "form.html.erb", "app/views/admin/#{plural_file_name}/_form.html.erb"
|
28
|
+
template "partial.html.erb", "app/views/admin/#{plural_file_name}/_#{file_name}.html.erb"
|
29
|
+
template "sidebar.html.erb", "app/views/admin/#{plural_file_name}/_sidebar.html.erb"
|
30
|
+
template "breadcrumb.html.erb", "app/views/admin/#{plural_file_name}/_breadcrumb.html.erb"
|
31
|
+
template "destroy.js.erb", "app/views/admin/#{plural_file_name}/destroy.js.erb"
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
|
36
|
+
def name_attribute(klass)
|
37
|
+
klass = klass.new
|
38
|
+
|
39
|
+
methods = %w[title name subject login user_name screen_name first_name id].map do |attribute|
|
40
|
+
klass.respond_to?(attribute) ? attribute : nil
|
41
|
+
end
|
42
|
+
|
43
|
+
methods.compact.first
|
44
|
+
end
|
45
|
+
|
46
|
+
def listing_columns
|
47
|
+
self.columns.select do |column|
|
48
|
+
![:text].include?(column.type)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def columns
|
53
|
+
columns = class_name.constantize.columns
|
54
|
+
|
55
|
+
columns.select do |column|
|
56
|
+
!column.name[/^id$/]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<ul class="breadcrumb">
|
2
|
+
<li><a href="/admin">Admin</a> <span class="divider">/</span></li>
|
3
|
+
<%% if params[:action] != 'index' %>
|
4
|
+
<%% if params[:action] == 'show' %>
|
5
|
+
<li><a href="/admin/<%= table_name %>"><%= plural_name.titleize %></a> <span class="divider">/</span></li>
|
6
|
+
<li class="active"><%%= @<%= file_name %>.<%= name_attribute(class_name.constantize) %> %></li>
|
7
|
+
<%% else %>
|
8
|
+
<li><a href="/admin/<%= table_name %>"><%= plural_name.titleize %></a> <span class="divider">/</span></li>
|
9
|
+
<li class="active"><%%= params[:action].titleize %></li>
|
10
|
+
<%% end %>
|
11
|
+
<%% else %>
|
12
|
+
<li class="active"><%= plural_name.titleize %></li>
|
13
|
+
<%% end %>
|
14
|
+
</ul>
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
class Admin::<%= class_name.pluralize %>Controller < Admin::ApplicationController
|
4
|
+
# filters
|
5
|
+
before_filter :load_<%= file_name %>, only: [:show, :edit, :update, :destroy]
|
6
|
+
|
7
|
+
# index
|
8
|
+
def index
|
9
|
+
@<%= table_name %> = <%= class_name %>.search(params[:q]).sorty(params)
|
10
|
+
|
11
|
+
respond_to do |format|
|
12
|
+
format.html do
|
13
|
+
@<%= table_name %> = @<%= table_name %>.page(params[:page])
|
14
|
+
end
|
15
|
+
|
16
|
+
format.csv do
|
17
|
+
data = CSV.generate do |csv|
|
18
|
+
columns = <%= class_name %>.columns.map(&:name)
|
19
|
+
csv << columns.map(&:titleize)
|
20
|
+
|
21
|
+
@<%= table_name %>.map do |<%= file_name %>|
|
22
|
+
csv << columns.map{|c| <%= file_name %>.send(c)}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
filename = "<%= table_name %>-#{Time.now.strftime('%d-%m-%Y')}.csv"
|
27
|
+
send_data(data, filename: filename, type: 'text/csv')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# show
|
33
|
+
def show
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
# new
|
38
|
+
def new
|
39
|
+
@<%= file_name %> = <%= class_name %>.new
|
40
|
+
end
|
41
|
+
|
42
|
+
# create
|
43
|
+
def create
|
44
|
+
@<%= file_name %> = <%= class_name %>.new(params[:<%= file_name %>])
|
45
|
+
|
46
|
+
if @<%= file_name %>.save
|
47
|
+
redirect_to admin_<%= table_name %>_url, notice: "<%= human_name %> has been created"
|
48
|
+
else
|
49
|
+
render :new
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# edit
|
54
|
+
def edit
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
# update
|
59
|
+
def update
|
60
|
+
if @<%= file_name %>.update_attributes(params[:<%= file_name %>])
|
61
|
+
redirect_to admin_<%= table_name %>_url, notice: "<%= human_name %> has been updated"
|
62
|
+
else
|
63
|
+
render :edit
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# destroy
|
68
|
+
def destroy
|
69
|
+
@<%= file_name %>.destroy
|
70
|
+
|
71
|
+
respond_to do |format|
|
72
|
+
format.html { redirect_to :back, notice: "<%= human_name %> has been deleted" }
|
73
|
+
format.js
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
protected
|
78
|
+
|
79
|
+
def load_<%= file_name %>
|
80
|
+
@<%= file_name %> = <%= class_name %>.find(params[:id])
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
$('#<%%= dom_id(@<%= file_name %>)%>').remove();
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%% @page_title = 'Edit <%= singular_name.titleize %>' %>
|
2
|
+
|
3
|
+
<div class="span9">
|
4
|
+
<%%= render 'breadcrumb' %>
|
5
|
+
<div class="page-header">
|
6
|
+
<h2>Edit <%= singular_name.titleize %></h2>
|
7
|
+
</div>
|
8
|
+
<%%= render 'form' %>
|
9
|
+
</div>
|
10
|
+
<div class="span3">
|
11
|
+
<%%= render 'sidebar' %>
|
12
|
+
</div>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<%%= simple_form_for([:admin, @<%= file_name %>], html: { multipart: true, class: 'form-horizontal' }) do |f| %>
|
2
|
+
<% columns.each do |column| -%>
|
3
|
+
<% if column.type == :text -%>
|
4
|
+
<%%= f.input :<%= column.name %>, as: :text, input_html: { rows: 10, columns: 100, class: 'span6' } %>
|
5
|
+
<% elsif [:string].include?(column.type) -%>
|
6
|
+
<%%= f.input :<%= column.name %>, as: :<%= column.type %>, input_html: { class: 'span4' } %>
|
7
|
+
<% elsif (association = column.name[/^(.*)_id$/, 1]) -%>
|
8
|
+
<%%= f.association :<%= association %>, input_html: { class: 'span2' } %>
|
9
|
+
<% elsif [:integer].include?(column.type) -%>
|
10
|
+
<%%= f.input :<%= column.name %>, as: :<%= column.type %>, input_html: { class: 'span1' } %>
|
11
|
+
<% elsif [:date, :datetime].include?(column.type) -%>
|
12
|
+
<%%= f.input :<%= column.name %>, as: :<%= column.type %>, order: [:day, :month, :year], input_html: { class: 'span1' } %>
|
13
|
+
<% else -%>
|
14
|
+
<%%= f.input :<%= column.name %>, as: :<%= column.type %> %>
|
15
|
+
<% end -%>
|
16
|
+
<% end -%>
|
17
|
+
<div class="form-actions">
|
18
|
+
<%%= f.button :submit, class: 'btn btn-primary' %>
|
19
|
+
<%%= link_to('Cancel', admin_<%= table_name %>_path, class: 'btn') %>
|
20
|
+
</div>
|
21
|
+
<%% end %>
|
@@ -0,0 +1,44 @@
|
|
1
|
+
<%% @page_title = '<%= plural_name.titleize %>' %>
|
2
|
+
|
3
|
+
<div class="span9">
|
4
|
+
<%%= render 'breadcrumb' %>
|
5
|
+
<div class="page-header">
|
6
|
+
<h2><%= plural_name.titleize %></h2>
|
7
|
+
</div>
|
8
|
+
<%% if @<%= table_name %>.present? %>
|
9
|
+
<%% if params[:q].present? %>
|
10
|
+
<div class="alert">
|
11
|
+
Showing search results for <strong><%%= params[:q] %></strong>
|
12
|
+
</div>
|
13
|
+
<%% end %>
|
14
|
+
<table class="table table-striped">
|
15
|
+
<thead>
|
16
|
+
<tr>
|
17
|
+
<% listing_columns.each do |column| -%>
|
18
|
+
<% if column.name[/_id$/] -%>
|
19
|
+
<th><%%= sorty('<%= (relation = column.name[/^(.*)_id$/, 1]) %>.<%= name_attribute(relation.classify.constantize) %>', label: '<%= column.name[/^(.*)_id$/, 1].titleize %>') %></th>
|
20
|
+
<% elsif column.type == :boolean -%>
|
21
|
+
<th class="center"><%%= sorty(:<%= column.name %>) %></th>
|
22
|
+
<% elsif [:integer, :float].include?(column.type) -%>
|
23
|
+
<th class="right"><%%= sorty(:<%= column.name %>) %></th>
|
24
|
+
<% else -%>
|
25
|
+
<th><%%= sorty(:<%= column.name %>) %></th>
|
26
|
+
<% end -%>
|
27
|
+
<% end -%>
|
28
|
+
<th class="options"></th>
|
29
|
+
</tr>
|
30
|
+
</thead>
|
31
|
+
<tbody>
|
32
|
+
<%%= render(@<%= table_name %>) %>
|
33
|
+
</tbody>
|
34
|
+
</table>
|
35
|
+
<%%= paginate(@<%= table_name %>, theme: 'admin') %>
|
36
|
+
<%% else %>
|
37
|
+
<div class="alert">
|
38
|
+
There are currently no <%= plural_name %> <%% if params[:q] %>for <strong><%%= params[:q] %></strong><%% end %>
|
39
|
+
</div>
|
40
|
+
<%% end %>
|
41
|
+
</div>
|
42
|
+
<div class="span3">
|
43
|
+
<%%= render 'sidebar' %>
|
44
|
+
</div>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%% @page_title = 'New <%= singular_name.titleize %>' %>
|
2
|
+
|
3
|
+
<div class="span9">
|
4
|
+
<%%= render 'breadcrumb' %>
|
5
|
+
<div class="page-header">
|
6
|
+
<h2>New <%= plural_name.titleize %></h2>
|
7
|
+
</div>
|
8
|
+
<%%= render 'form' %>
|
9
|
+
</div>
|
10
|
+
<div class="span3">
|
11
|
+
<%%= render 'sidebar' %>
|
12
|
+
</div>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<tr id="<%%= dom_id(<%= file_name %>) %>">
|
2
|
+
<% listing_columns.each do |column| -%>
|
3
|
+
<% if column.name[/email/] -%>
|
4
|
+
<td><%%= mail_to(<%= file_name %>.<%= column.name %>) %></td>
|
5
|
+
<% elsif column.name[/url|website/] -%>
|
6
|
+
<td><%%= link_to(<%= file_name %>.<%= column.name %>, <%= file_name %>.<%= column.name %>, target: '_blank') %></td>
|
7
|
+
<% elsif (relation = column.name[/^(.*)_id$/, 1]) -%>
|
8
|
+
<td><%%= <%= file_name %>.<%= column.name[/^(.*)_id$/, 1] %>.<%= name_attribute(relation.classify.constantize) %> %></td>
|
9
|
+
<% elsif column.type == :date -%>
|
10
|
+
<td><%%= <%= file_name %>.<%= column.name %>.strftime('%d/%m/%Y') %></td>
|
11
|
+
<% elsif column.type == :datetime -%>
|
12
|
+
<td><%%= <%= file_name %>.<%= column.name %>.strftime('%d/%m/%Y %H:%M') %></td>
|
13
|
+
<% elsif column.type == :boolean -%>
|
14
|
+
<td class="center"><%%= <%= file_name %>.<%= column.name %> ? 'Yes' : 'No' %></td>
|
15
|
+
<% elsif column.type == :text -%>
|
16
|
+
<td><%%= <%= file_name %>.<%= column.name %>.truncate(30) %></td>
|
17
|
+
<% elsif [:integer, :float].include?(column.type) -%>
|
18
|
+
<td class="right"><%%= <%= file_name %>.<%= column.name %> %></td>
|
19
|
+
<% else -%>
|
20
|
+
<td><%%= <%= file_name %>.<%= column.name %> %></td>
|
21
|
+
<% end -%>
|
22
|
+
<% end -%>
|
23
|
+
<td class="options">
|
24
|
+
<div class="btn-group">
|
25
|
+
<%%= link_to('view', [:admin, <%= file_name %>], class: 'btn btn-mini') %>
|
26
|
+
<%%= link_to('edit', [:edit, :admin, <%= file_name %>], class: 'btn btn-mini') %>
|
27
|
+
<%%= link_to('delete', [:admin, <%= file_name %>], method: :delete, remote: true, confirm: 'Are you sure?', class: 'btn btn-mini btn-danger') %>
|
28
|
+
</div>
|
29
|
+
</td>
|
30
|
+
</tr>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%% @page_title = '<%= singular_name.titleize %> Details' %>
|
2
|
+
|
3
|
+
<div class="span9">
|
4
|
+
<%%= render 'breadcrumb' %>
|
5
|
+
<div class="page-header">
|
6
|
+
<h2><%%= @<%= file_name %>.<%= name_attribute(class_name.constantize) %> %></h2>
|
7
|
+
</div>
|
8
|
+
<dl class="dl-horizontal">
|
9
|
+
<% columns.each do |column| -%>
|
10
|
+
<dt><%= column.name.humanize %></dt>
|
11
|
+
<dd><%%= @<%= file_name %>.<%= column.name %> %></dd>
|
12
|
+
<% end -%>
|
13
|
+
</dl>
|
14
|
+
</div>
|
15
|
+
<div class="span3">
|
16
|
+
<%%= render 'sidebar' %>
|
17
|
+
</div>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<div class="well sidebar">
|
2
|
+
<ul class="nav nav-list">
|
3
|
+
<li class="nav-header">
|
4
|
+
<%= singular_name.titleize %> Options
|
5
|
+
</li>
|
6
|
+
<li>
|
7
|
+
<a href="<%%= admin_<%= table_name %>_path %>"><i class="icon-list"></i> List <%= plural_name %></a>
|
8
|
+
</li>
|
9
|
+
<li>
|
10
|
+
<a href="<%%= new_admin_<%= file_name %>_path %>"><i class="icon-plus"></i> New <%= singular_name %></a>
|
11
|
+
</li>
|
12
|
+
<li>
|
13
|
+
<a href="<%%= admin_<%= table_name %>_path(format: :csv) %>"><i class="icon-download"></i> Download CSV</a>
|
14
|
+
</li>
|
15
|
+
<%% if params[:action] == 'edit' %>
|
16
|
+
<li>
|
17
|
+
<a href="<%%= admin_<%= file_name %>_path(@<%= file_name %>) %>"><i class="icon-search"></i> View this <%= singular_name %></a>
|
18
|
+
</li>
|
19
|
+
<%% end %>
|
20
|
+
<%% if params[:action] == 'show' %>
|
21
|
+
<li>
|
22
|
+
<a href="<%%= edit_admin_<%= file_name %>_path(@<%= file_name %>) %>"><i class="icon-pencil"></i> Edit this <%= singular_name %></a>
|
23
|
+
</li>
|
24
|
+
<%% end %>
|
25
|
+
</ul>
|
26
|
+
</div>
|
27
|
+
<form class="form-search well" action="<%%= admin_<%= table_name %>_path %>">
|
28
|
+
<input type="text" class="input-medium search-query" name="q" value="<%%= params[:q] %>" placeholder="Search <%= plural_name %>...">
|
29
|
+
<button type="submit" class="btn btn-primary">Go</button>
|
30
|
+
</form>
|