blacksand 2.2.2.1
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +27 -0
- data/app/assets/javascripts/blacksand/dashboard/navigations.form.js.erb +34 -0
- data/app/assets/javascripts/blacksand/dashboard/navigations.index.js +18 -0
- data/app/assets/javascripts/blacksand/dashboard/pages.form.js.erb +69 -0
- data/app/assets/javascripts/blacksand/dashboard/pages.index.js +17 -0
- data/app/assets/javascripts/blacksand/dashboard.js +14 -0
- data/app/assets/javascripts/blacksand/ie.js +2 -0
- data/app/assets/javascripts/bootstrap-datepicker.zh-CN.js +20 -0
- data/app/assets/stylesheets/blacksand/dashboard.scss +26 -0
- data/app/controllers/blacksand/dashboard/base_controller.rb +35 -0
- data/app/controllers/blacksand/dashboard/navigations_controller.rb +88 -0
- data/app/controllers/blacksand/dashboard/pages_controller.rb +176 -0
- data/app/controllers/blacksand/dashboard/prototypes_controller.rb +12 -0
- data/app/controllers/blacksand/dashboard/templates_controller.rb +8 -0
- data/app/controllers/blacksand/dashboard/users_controller.rb +78 -0
- data/app/controllers/blacksand_front/pages_controller.rb +17 -0
- data/app/helpers/blacksand/application_helper.rb +42 -0
- data/app/helpers/blacksand/page_helper.rb +11 -0
- data/app/helpers/blacksand_front/pages_helper.rb +20 -0
- data/app/models/blacksand/field.rb +35 -0
- data/app/models/blacksand/navigation.rb +24 -0
- data/app/models/blacksand/page.rb +194 -0
- data/app/models/blacksand/picture.rb +7 -0
- data/app/models/blacksand/property/as_array.rb +5 -0
- data/app/models/blacksand/property/file.rb +5 -0
- data/app/models/blacksand/property/gallery.rb +7 -0
- data/app/models/blacksand/property/slide.rb +5 -0
- data/app/models/blacksand/property.rb +76 -0
- data/app/models/blacksand/prototype.rb +11 -0
- data/app/models/blacksand/template.rb +9 -0
- data/app/models/kindeditor/asset.rb +14 -0
- data/app/models/kindeditor/file.rb +3 -0
- data/app/models/kindeditor/flash.rb +3 -0
- data/app/models/kindeditor/image.rb +3 -0
- data/app/models/kindeditor/media.rb +3 -0
- data/app/uploaders/blacksand/base_uploader.rb +16 -0
- data/app/uploaders/blacksand/file_uploader.rb +4 -0
- data/app/uploaders/blacksand/image_uploader.rb +78 -0
- data/app/uploaders/blacksand/slide_image_uploader.rb +66 -0
- data/app/views/blacksand/dashboard/navigations/_form.html.erb +23 -0
- data/app/views/blacksand/dashboard/navigations/edit.html.erb +3 -0
- data/app/views/blacksand/dashboard/navigations/index.html.erb +40 -0
- data/app/views/blacksand/dashboard/navigations/index.json.jbuilder +4 -0
- data/app/views/blacksand/dashboard/navigations/new.html.erb +3 -0
- data/app/views/blacksand/dashboard/navigations/reorder.js.erb +1 -0
- data/app/views/blacksand/dashboard/navigations/show.html.erb +4 -0
- data/app/views/blacksand/dashboard/navigations/show.json.jbuilder +1 -0
- data/app/views/blacksand/dashboard/pages/_fields.html.erb +89 -0
- data/app/views/blacksand/dashboard/pages/_form.html.erb +26 -0
- data/app/views/blacksand/dashboard/pages/_manage_list.html.erb +123 -0
- data/app/views/blacksand/dashboard/pages/_picture_fields.html.erb +18 -0
- data/app/views/blacksand/dashboard/pages/children_partial.js.erb +14 -0
- data/app/views/blacksand/dashboard/pages/edit.html.erb +20 -0
- data/app/views/blacksand/dashboard/pages/index.html.erb +27 -0
- data/app/views/blacksand/dashboard/pages/new.html.erb +20 -0
- data/app/views/blacksand/dashboard/pages/onchange_render.js.erb +14 -0
- data/app/views/blacksand/dashboard/pages/search.json.jbuilder +7 -0
- data/app/views/blacksand/dashboard/pages/show.html.erb +34 -0
- data/app/views/blacksand/dashboard/prototypes/index.html.erb +15 -0
- data/app/views/blacksand/dashboard/prototypes/show.html.erb +31 -0
- data/app/views/blacksand/dashboard/templates/index.html.erb +17 -0
- data/app/views/blacksand/dashboard/users/_form.html.erb +40 -0
- data/app/views/blacksand/dashboard/users/edit.html.erb +47 -0
- data/app/views/blacksand/dashboard/users/index.html.erb +37 -0
- data/app/views/blacksand/dashboard/users/index.json.jbuilder +4 -0
- data/app/views/blacksand/dashboard/users/new.html.erb +4 -0
- data/app/views/blacksand/dashboard/users/show.html.erb +2 -0
- data/app/views/blacksand/dashboard/users/show.json.jbuilder +1 -0
- data/app/views/layouts/blacksand/_navbar.html.erb +42 -0
- data/app/views/layouts/blacksand/dashboard.html.erb +33 -0
- data/config/locales/kaminari.zh-CN.yml +17 -0
- data/config/locales/nestable.zh-CN.yml +14 -0
- data/config/locales/zh-CN.yml +69 -0
- data/config/routes.rb +31 -0
- data/db/migrate/20151112055035_create_templates.rb +10 -0
- data/db/migrate/20151112055425_create_prototypes.rb +9 -0
- data/db/migrate/20151112055438_create_fields.rb +14 -0
- data/db/migrate/20151112055821_create_pages.rb +15 -0
- data/db/migrate/20151112060015_create_properties.rb +15 -0
- data/db/migrate/20151112060605_create_navigations.rb +13 -0
- data/db/migrate/20151209022305_create_kindeditor_assets.rb +17 -0
- data/db/migrate/20160513080702_create_pictures.rb +12 -0
- data/db/migrate/20170104014706_add_values_to_properties.rb +5 -0
- data/db/migrate/20170310092041_add_owner_type_to_kindeditor_asset.rb +5 -0
- data/db/migrate/20170322021913_add_options_to_template_and_prototype.rb +6 -0
- data/lib/blacksand/caching_pages.rb +16 -0
- data/lib/blacksand/cancancan.rb +19 -0
- data/lib/blacksand/controller_helper.rb +21 -0
- data/lib/blacksand/engine.rb +69 -0
- data/lib/blacksand/expire_pages.rb +21 -0
- data/lib/blacksand/my_json_type.rb +61 -0
- data/lib/blacksand/routing.rb +11 -0
- data/lib/blacksand/version.rb +3 -0
- data/lib/blacksand.rb +53 -0
- data/lib/generators/blacksand/install_generator.rb +30 -0
- data/lib/generators/blacksand/new_site_generator.rb +28 -0
- data/lib/tasks/blacksand_tasks.rake +72 -0
- data/lib/tasks/carrierwave_storage_migrate_to_qiniu.rake +25 -0
- metadata +541 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<h2>用户列表</h2>
|
|
2
|
+
|
|
3
|
+
<%= link_to '添加用户', new_dashboard_user_path, class: 'btn btn-default' %>
|
|
4
|
+
|
|
5
|
+
<table class="table">
|
|
6
|
+
<thead>
|
|
7
|
+
<tr>
|
|
8
|
+
<th>顺序</th>
|
|
9
|
+
<th>邮箱</th>
|
|
10
|
+
<th>验证</th>
|
|
11
|
+
<th>角色</th>
|
|
12
|
+
<th></th>
|
|
13
|
+
</tr>
|
|
14
|
+
</thead>
|
|
15
|
+
|
|
16
|
+
<tbody>
|
|
17
|
+
<% @users.each_with_index do |user, i| %>
|
|
18
|
+
<tr>
|
|
19
|
+
<td><%= i + 1 %></td>
|
|
20
|
+
<td><%= user.email %></td>
|
|
21
|
+
<td><%= user.confirmed_at.present? ? '已验证' : '未验证' %></td>
|
|
22
|
+
<td><%= user.role.text %></td>
|
|
23
|
+
<td>
|
|
24
|
+
<% if can? :edit, user %>
|
|
25
|
+
<%= link_to '编辑', edit_dashboard_user_path(user), class: 'btn btn-default btn-sm' if can? :edit, user %>
|
|
26
|
+
<% else %>
|
|
27
|
+
自己
|
|
28
|
+
<% end %>
|
|
29
|
+
<% if user.confirmed_at.blank? %>
|
|
30
|
+
<%= link_to '删除', dashboard_user_path(user), method: :delete, data: { confirm: '确定删除?' } %>
|
|
31
|
+
<% end %>
|
|
32
|
+
</td>
|
|
33
|
+
</tr>
|
|
34
|
+
<% end %>
|
|
35
|
+
</tbody>
|
|
36
|
+
</table>
|
|
37
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
json.extract! @user, :id, :created_at, :updated_at
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<nav id="navbar" class="navbar navbar-inverse">
|
|
2
|
+
<div class="container">
|
|
3
|
+
<!-- Brand and toggle get grouped for better mobile display -->
|
|
4
|
+
<div class="navbar-header">
|
|
5
|
+
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
|
|
6
|
+
<span class="sr-only">Toggle navigation</span>
|
|
7
|
+
<span class="icon-bar"></span>
|
|
8
|
+
<span class="icon-bar"></span>
|
|
9
|
+
<span class="icon-bar"></span>
|
|
10
|
+
</button>
|
|
11
|
+
<a class="navbar-brand" href="<%= Blacksand.root_path %>">后台管理 - <%= Blacksand.site_name %></a>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
<!-- Collect the nav links, forms, and other content for toggling -->
|
|
15
|
+
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
|
16
|
+
<ul class="nav navbar-nav">
|
|
17
|
+
<li><a href="<%= pages_path %>">页面</a></li>
|
|
18
|
+
<li><a href="<%= navigations_path %>">导航</a></li>
|
|
19
|
+
<li><a href="<%= templates_path %>">模板</a></li>
|
|
20
|
+
<li><a href="<%= prototypes_path %>">原型</a></li>
|
|
21
|
+
<% if false && can?(:create, User) %>
|
|
22
|
+
<li><a href="<%= users_path %>">用户</a></li>
|
|
23
|
+
<% end %>
|
|
24
|
+
<li><a href="<%= main_app.root_path %>">回首页<span class="sr-only">(current)</span></a></li>
|
|
25
|
+
</ul>
|
|
26
|
+
|
|
27
|
+
<ul class="nav navbar-nav navbar-right">
|
|
28
|
+
<% if false && user_signed_in? %>
|
|
29
|
+
<li>
|
|
30
|
+
<span class="navbar-text text-muted"><%= current_user.email%>已登录</span>
|
|
31
|
+
</li>
|
|
32
|
+
<li>
|
|
33
|
+
<%= link_to destroy_user_session_path, method: :delete do %>
|
|
34
|
+
<i class="glyphicon glyphicon-log-out"></i>
|
|
35
|
+
退出
|
|
36
|
+
<% end %>
|
|
37
|
+
</li>
|
|
38
|
+
<% end %>
|
|
39
|
+
</ul>
|
|
40
|
+
</div><!-- /.navbar-collapse -->
|
|
41
|
+
</div><!-- /.container-fluid -->
|
|
42
|
+
</nav>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
7
|
+
<%= display_meta_tags site: Blacksand.site_name, reverse: true %>
|
|
8
|
+
<%= csrf_meta_tags %>
|
|
9
|
+
<%= content_for :head if content_for? :head %>
|
|
10
|
+
|
|
11
|
+
<%= stylesheet_link_tag 'blacksand/dashboard', media: 'all' %>
|
|
12
|
+
|
|
13
|
+
<!--[if lt IE 9]>
|
|
14
|
+
<%= javascript_include_tag 'blacksand/ie' %>
|
|
15
|
+
<![endif]-->
|
|
16
|
+
|
|
17
|
+
<%= Gon::Base.render_data %>
|
|
18
|
+
</head>
|
|
19
|
+
<body id="<%= "#{controller_name}-#{action_name}" %>"
|
|
20
|
+
data-controller="<%= controller_name %>"
|
|
21
|
+
data-action="<%= action_name %>">
|
|
22
|
+
<%= javascript_include_tag 'blacksand/dashboard' %>
|
|
23
|
+
<%= render 'layouts/blacksand/navbar' %>
|
|
24
|
+
|
|
25
|
+
<div class="container">
|
|
26
|
+
|
|
27
|
+
<%= yield %>
|
|
28
|
+
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<%= content_for :javascript if content_for? :javascript %>
|
|
32
|
+
</body>
|
|
33
|
+
</html>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
zh-CN:
|
|
2
|
+
views:
|
|
3
|
+
pagination:
|
|
4
|
+
first: "« 第一页"
|
|
5
|
+
last: "最后一页 »"
|
|
6
|
+
previous: "‹ 上一页"
|
|
7
|
+
next: "下一页 ›"
|
|
8
|
+
truncate: "…"
|
|
9
|
+
helpers:
|
|
10
|
+
page_entries_info:
|
|
11
|
+
one_page:
|
|
12
|
+
display_entries:
|
|
13
|
+
zero: "No %{entry_name} found"
|
|
14
|
+
one: "Displaying <b>1</b> %{entry_name}"
|
|
15
|
+
other: "Displaying <b>all %{count}</b> %{entry_name}"
|
|
16
|
+
more_pages:
|
|
17
|
+
display_entries: "Displaying %{entry_name} <b>%{first} - %{last}</b> of <b>%{total}</b> in total"
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
zh-CN:
|
|
2
|
+
activerecord:
|
|
3
|
+
models:
|
|
4
|
+
user: 用户
|
|
5
|
+
blacksand/template: 模板
|
|
6
|
+
blacksand/prototype: 原型
|
|
7
|
+
blacksand/field: 字段
|
|
8
|
+
blacksand/page: 页面
|
|
9
|
+
blacksand/property: 属性
|
|
10
|
+
blacksand/navigation: 导航
|
|
11
|
+
attributes:
|
|
12
|
+
user:
|
|
13
|
+
email: "邮箱"
|
|
14
|
+
current_password: "当前密码"
|
|
15
|
+
username: "用户名"
|
|
16
|
+
password: "密码"
|
|
17
|
+
password_confirmation: "密码确认"
|
|
18
|
+
remember_me: "记住我"
|
|
19
|
+
role: 角色
|
|
20
|
+
page: 负责板块
|
|
21
|
+
blacksand/template:
|
|
22
|
+
name: 名称
|
|
23
|
+
path: 路径
|
|
24
|
+
blacksand/prototype:
|
|
25
|
+
name: 名称
|
|
26
|
+
blacksand/field:
|
|
27
|
+
description: 描述
|
|
28
|
+
name: 字段名(英文)
|
|
29
|
+
field_type: 类型
|
|
30
|
+
prototype: 原型
|
|
31
|
+
blacksand/page:
|
|
32
|
+
title: 标题
|
|
33
|
+
en_name: 英文名
|
|
34
|
+
content: 内容
|
|
35
|
+
parent: 父页面
|
|
36
|
+
template: 模板
|
|
37
|
+
prototype: 原型
|
|
38
|
+
position: 位置
|
|
39
|
+
parent_id: 父页面
|
|
40
|
+
template_id: 模板
|
|
41
|
+
prototype_id: 原型
|
|
42
|
+
blacksand/navigation:
|
|
43
|
+
name: 名称
|
|
44
|
+
url: 地址
|
|
45
|
+
page: 页面
|
|
46
|
+
page_id: 页面
|
|
47
|
+
position: 位置
|
|
48
|
+
blacksand/property:
|
|
49
|
+
value: 值
|
|
50
|
+
page: 页面
|
|
51
|
+
field: 字段
|
|
52
|
+
blacksand/picture:
|
|
53
|
+
name: 名称
|
|
54
|
+
file: 图片
|
|
55
|
+
enumerize:
|
|
56
|
+
field:
|
|
57
|
+
field_type:
|
|
58
|
+
string: 字符串
|
|
59
|
+
number: 数字
|
|
60
|
+
date: 日期
|
|
61
|
+
textarea: 文本域
|
|
62
|
+
rich_text: 富文本
|
|
63
|
+
image: 图片
|
|
64
|
+
gallery: 相册
|
|
65
|
+
user:
|
|
66
|
+
role:
|
|
67
|
+
admin: 高级管理员
|
|
68
|
+
manager: 管理员
|
|
69
|
+
editor: 编辑
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
Blacksand::Engine.routes.draw do
|
|
2
|
+
scope module: :dashboard do
|
|
3
|
+
get '/' => 'pages#default'
|
|
4
|
+
|
|
5
|
+
# TODO
|
|
6
|
+
# resources :users
|
|
7
|
+
|
|
8
|
+
resources :pages, except: [:show] do
|
|
9
|
+
collection do
|
|
10
|
+
get 'onchange_new'
|
|
11
|
+
post 'sort'
|
|
12
|
+
|
|
13
|
+
get 'children_partial'
|
|
14
|
+
get 'search'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
member do
|
|
18
|
+
get 'onchange_edit'
|
|
19
|
+
get 'get_prototype_id'
|
|
20
|
+
get 'render_manage'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
resources :navigations do
|
|
25
|
+
post :reorder, on: :collection
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
resources :templates, only: [:index]
|
|
29
|
+
resources :prototypes, only: [:index, :show]
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class CreateFields < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :fields do |t|
|
|
4
|
+
t.string :name
|
|
5
|
+
t.string :description
|
|
6
|
+
t.string :field_type
|
|
7
|
+
t.references :prototype, index: true, foreign_key: true
|
|
8
|
+
t.json :options
|
|
9
|
+
t.boolean :required, :default => false
|
|
10
|
+
|
|
11
|
+
t.timestamps null: false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class CreatePages < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :pages do |t|
|
|
4
|
+
t.string :title
|
|
5
|
+
t.string :en_name
|
|
6
|
+
t.text :content
|
|
7
|
+
t.integer :parent_id
|
|
8
|
+
t.references :template, index: true, foreign_key: true
|
|
9
|
+
t.references :prototype, index: true, foreign_key: true
|
|
10
|
+
t.integer :position, default: 0
|
|
11
|
+
|
|
12
|
+
t.timestamps null: false
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class CreateProperties < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :properties do |t|
|
|
4
|
+
t.text :value
|
|
5
|
+
t.references :page, index: true, foreign_key: true
|
|
6
|
+
t.references :field, index: true, foreign_key: true
|
|
7
|
+
t.string :type
|
|
8
|
+
t.json :gallery
|
|
9
|
+
t.string :image
|
|
10
|
+
t.string :file
|
|
11
|
+
|
|
12
|
+
t.timestamps null: false
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class CreateNavigations < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :navigations do |t|
|
|
4
|
+
t.string :name
|
|
5
|
+
t.string :url
|
|
6
|
+
t.integer :position, default: 0
|
|
7
|
+
t.references :page, index: true, foreign_key: true
|
|
8
|
+
t.json :options
|
|
9
|
+
|
|
10
|
+
t.timestamps null: false
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class CreateKindeditorAssets < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :kindeditor_assets do |t|
|
|
4
|
+
t.string :asset
|
|
5
|
+
t.integer :file_size
|
|
6
|
+
t.string :file_type
|
|
7
|
+
t.integer :owner_id
|
|
8
|
+
t.string :asset_type # list by kindeditor: image, file, media, flash
|
|
9
|
+
t.timestamps
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.down
|
|
14
|
+
drop_table :kindeditor_assets
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Blacksand
|
|
2
|
+
module CachingPages
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
caches_page :show
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# 覆盖 actionpack-page_caching 的方法,如果页面带参数将不会生成缓存页。例如带分页的页面。
|
|
10
|
+
def caching_allowed?
|
|
11
|
+
return false if request.query_string.present?
|
|
12
|
+
|
|
13
|
+
super
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Blacksand
|
|
2
|
+
|
|
3
|
+
class Cancancan
|
|
4
|
+
def initialize(controller)
|
|
5
|
+
@controller = controller
|
|
6
|
+
@controller.extend ControllerExtension
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def authorized?(action, object)
|
|
10
|
+
@controller.current_ability.can?(action, object)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module ControllerExtension
|
|
14
|
+
def current_ability
|
|
15
|
+
@current_ability ||= ::Ability.new(_current_user)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Blacksand
|
|
2
|
+
module ControllerHelper
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
class_methods do
|
|
6
|
+
|
|
7
|
+
# 应用 theme, 加载导航, 引用 helper method 到 view
|
|
8
|
+
def blacksand
|
|
9
|
+
theme Blacksand.site_id
|
|
10
|
+
loan_navigations
|
|
11
|
+
helper BlacksandFront::PagesHelper
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def loan_navigations
|
|
15
|
+
before_action do
|
|
16
|
+
@navigations = Blacksand::Navigation.includes(page: :positioned_children).order(:position)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require 'rails'
|
|
2
|
+
require 'carrierwave'
|
|
3
|
+
require 'carrierwave-qiniu'
|
|
4
|
+
require 'rails_kindeditor'
|
|
5
|
+
require 'mini_magick'
|
|
6
|
+
require 'kaminari'
|
|
7
|
+
require 'bootstrap-kaminari-views'
|
|
8
|
+
require 'gon'
|
|
9
|
+
require 'meta-tags'
|
|
10
|
+
require 'bootstrap-sass'
|
|
11
|
+
require 'bootstrap_form'
|
|
12
|
+
require 'cocoon'
|
|
13
|
+
require 'font-awesome-rails'
|
|
14
|
+
require 'enumerize'
|
|
15
|
+
require 'ransack'
|
|
16
|
+
require 'themes_on_rails'
|
|
17
|
+
require 'actionpack/page_caching'
|
|
18
|
+
|
|
19
|
+
require 'rails-assets-util.css'
|
|
20
|
+
require 'rails-assets-html5shiv'
|
|
21
|
+
require 'rails-assets-respond'
|
|
22
|
+
require 'rails-assets-bootstrap-datepicker'
|
|
23
|
+
require 'rails-assets-headroom.js'
|
|
24
|
+
require 'rails-assets-dragula'
|
|
25
|
+
require 'rails-assets-bootstrap-treeview'
|
|
26
|
+
require 'rails-assets-multiselect'
|
|
27
|
+
require 'rails-assets-select2'
|
|
28
|
+
|
|
29
|
+
require 'blacksand/routing'
|
|
30
|
+
require 'blacksand/controller_helper'
|
|
31
|
+
require 'blacksand/caching_pages'
|
|
32
|
+
require 'blacksand/expire_pages'
|
|
33
|
+
|
|
34
|
+
module Blacksand
|
|
35
|
+
|
|
36
|
+
class Engine < ::Rails::Engine
|
|
37
|
+
isolate_namespace Blacksand
|
|
38
|
+
|
|
39
|
+
# USING: rake blacksand_engine:install:migrations
|
|
40
|
+
|
|
41
|
+
initializer "blacksand.precompile", group: :all do |app|
|
|
42
|
+
app.config.assets.precompile += %w(
|
|
43
|
+
blacksand/dashboard.js
|
|
44
|
+
blacksand/dashboard.css
|
|
45
|
+
blacksand/ie.js
|
|
46
|
+
)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
initializer "blacksand.override_upload_storage", after: "rails_kindeditor.image_process" do
|
|
50
|
+
# Storage be same with Our uploaders
|
|
51
|
+
Kindeditor::AssetUploader.class_eval do
|
|
52
|
+
storage Blacksand.carrierwave_storage
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
initializer "blacksand.page_caching", after: 'action_pack.page_caching' do |app|
|
|
57
|
+
if Blacksand.page_caching
|
|
58
|
+
BlacksandFront::PagesController.send(:include, CachingPages)
|
|
59
|
+
Blacksand::Dashboard::PagesController.send(:include, ExpirePages)
|
|
60
|
+
Blacksand::Dashboard::NavigationsController.send(:include, ExpirePages)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
ActiveSupport.on_load :action_controller do
|
|
65
|
+
include ControllerHelper
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Blacksand
|
|
2
|
+
module ExpirePages
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
after_action :expire_cache_pages, only: [:create, :update, :destroy]
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def expire_cache_pages
|
|
11
|
+
if defined? Rails.application.routes.url_helpers.root_path
|
|
12
|
+
expire_page Rails.application.routes.url_helpers.root_path
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# TODO: 有点暴力, 可以扫描缓存文件夹,挨个删除
|
|
16
|
+
Blacksand::Page.find_each do |p|
|
|
17
|
+
expire_page Rails.application.routes.url_helpers.page_path(p)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'ostruct'
|
|
2
|
+
require 'active_record/connection_adapters/postgresql/oid/json'
|
|
3
|
+
|
|
4
|
+
module Blacksand
|
|
5
|
+
# 为了能使 form 获取对象的状态,因为获取状态是使用 obj.send(name). 而默认 hash 是不能工作的。
|
|
6
|
+
class MyJsonType < ::ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Json
|
|
7
|
+
|
|
8
|
+
# override active_record 4
|
|
9
|
+
def type_cast_from_database(value)
|
|
10
|
+
super_value = super
|
|
11
|
+
|
|
12
|
+
if value.is_a?(::String)
|
|
13
|
+
MyOpenStruct.new super_value
|
|
14
|
+
else
|
|
15
|
+
super_value
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# override active_record 4
|
|
20
|
+
def type_cast_for_database(value)
|
|
21
|
+
if value.is_a? MyOpenStruct
|
|
22
|
+
::ActiveSupport::JSON.encode(value.to_h)
|
|
23
|
+
else
|
|
24
|
+
super
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# override active_record 5
|
|
30
|
+
def deserialize(value)
|
|
31
|
+
super_value = super
|
|
32
|
+
|
|
33
|
+
if value.is_a?(::String)
|
|
34
|
+
MyOpenStruct.new super_value
|
|
35
|
+
else
|
|
36
|
+
super_value
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# override active_record 5
|
|
41
|
+
def serialize(value)
|
|
42
|
+
if value.is_a? MyOpenStruct
|
|
43
|
+
::ActiveSupport::JSON.encode(value.to_h)
|
|
44
|
+
else
|
|
45
|
+
super
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class MyOpenStruct < OpenStruct
|
|
51
|
+
# hack for bootstrap_form FormBuilder#required_attribute?
|
|
52
|
+
def self.validators_on(*args)
|
|
53
|
+
[]
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
if ActiveRecord::VERSION::MAJOR >= 5
|
|
59
|
+
puts "ActiveRecord Register json_type => Blacksand::MyJsonType, at #{__FILE__}:#{__LINE__}"
|
|
60
|
+
ActiveRecord::Type.register(:json_type, Blacksand::MyJsonType, adapter: :postgresql)
|
|
61
|
+
end
|