cambium 1.3.0 → 1.3.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 +4 -4
- data/app/assets/javascripts/cambium/admin/views/editor.js.coffee +1 -0
- data/app/assets/stylesheets/cambium/admin/partials/activity.scss +1 -1
- data/app/assets/stylesheets/cambium/admin/partials/components.scss +1 -1
- data/app/assets/stylesheets/cambium/admin/partials/forms.scss +15 -7
- data/app/assets/stylesheets/cambium/admin/partials/header.scss +1 -1
- data/app/controllers/cambium/admin_controller.rb +2 -0
- data/app/controllers/cambium/pages_controller.rb +26 -2
- data/app/helpers/cambium/cambium_helper.rb +40 -18
- data/app/models/cambium/document.rb +2 -0
- data/app/models/cambium/page.rb +11 -1
- data/app/views/cambium/admin/_header.html.erb +8 -14
- data/app/views/cambium/admin/edit.html.erb +4 -5
- data/app/views/cambium/admin/new.html.erb +4 -5
- data/app/views/cambium/admin/settings/index.html.erb +2 -4
- data/app/views/layouts/admin.html.erb +3 -0
- data/config/routes.rb +7 -1
- data/lib/cambium/configuration.rb +3 -1
- data/lib/cambium/version.rb +1 -1
- data/lib/generators/cambium/controller_generator.rb +4 -4
- data/lib/generators/templates/config/initializers/assets.rb +1 -1
- data/lib/generators/templates/config/initializers/cambium.rb +9 -0
- metadata +2 -3
- data/app/assets/javascripts/cambium/admin/users.js +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 367bb1dafa5ce1f34612a0e5092e05a74a1d8121
|
4
|
+
data.tar.gz: d9ec577e4616fadb2fb3ff1b19d861d254731a62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02c0947e578e85183f2768d4c8f697881d979dcdaa4000d831b0dc214558b1b2433ea0c791a9c9b8aa8f84ce86d12b5be4f9134d42e564b9f42ec16837009220
|
7
|
+
data.tar.gz: 9be5055314f591116cc9041efb5b42015549c6139f73a4ced6657b0b7d0c4a3dc5ade4e8ce879640f0f99fc8e2d90fb49086688c1a1ef57f64c37bdf0e136f92
|
@@ -37,14 +37,13 @@ section.form {
|
|
37
37
|
& + .image-actions, & + img + .image-actions, .image-actions {
|
38
38
|
display: block;
|
39
39
|
clear: both;
|
40
|
-
width:
|
41
|
-
margin: 5px 0 20px
|
40
|
+
width: 75%;
|
41
|
+
margin: 5px 0 20px 25%;
|
42
42
|
font-size: 14px;
|
43
43
|
line-height: 14px;
|
44
|
-
text-align: right;
|
45
44
|
a {
|
46
45
|
display: inline-block;
|
47
|
-
margin-
|
46
|
+
margin-right: 10px;
|
48
47
|
}
|
49
48
|
}
|
50
49
|
& + div.input {
|
@@ -103,7 +102,7 @@ section.form {
|
|
103
102
|
vertical-align: bottom;
|
104
103
|
font-size: 16px;
|
105
104
|
border: none;
|
106
|
-
|
105
|
+
box-sizing: border-box;;
|
107
106
|
&[readonly=readonly] {
|
108
107
|
background-color: $color-light-dark;
|
109
108
|
border-bottom-color: $color-light-dark;
|
@@ -167,15 +166,23 @@ section.form {
|
|
167
166
|
.trumbowyg-box {
|
168
167
|
display: inline-block;
|
169
168
|
width: 75%;
|
169
|
+
min-height: 375px;
|
170
170
|
margin: 5px 0;
|
171
171
|
&.trumbowyg-fullscreen {
|
172
172
|
width: 100%;
|
173
173
|
}
|
174
|
+
.trumbowyg-button-pane button {
|
175
|
+
margin: 0 0 1px;
|
176
|
+
}
|
177
|
+
textarea {
|
178
|
+
border: none;
|
179
|
+
width: 100%;
|
180
|
+
}
|
174
181
|
}
|
175
182
|
.trumbowyg-modal {
|
176
183
|
// position: fixed;
|
177
184
|
.trumbowyg-modal-box {
|
178
|
-
height:
|
185
|
+
height: 315px;
|
179
186
|
form {
|
180
187
|
input {
|
181
188
|
height: auto;
|
@@ -198,6 +205,7 @@ section.form {
|
|
198
205
|
width: auto;
|
199
206
|
.trumbowyg-input-infos {
|
200
207
|
float: left;
|
208
|
+
margin-top: -24px;
|
201
209
|
span {
|
202
210
|
font-size: 14px;
|
203
211
|
border: none;
|
@@ -217,7 +225,7 @@ section.form {
|
|
217
225
|
display: block;
|
218
226
|
width: 100%;
|
219
227
|
margin: 15px 0 0 0;
|
220
|
-
|
228
|
+
box-sizing: border-box;;
|
221
229
|
@include transition(all 0.35s linear);
|
222
230
|
font-size: 16px;
|
223
231
|
font-weight: 600;
|
@@ -1,12 +1,18 @@
|
|
1
1
|
class Cambium::PagesController < ApplicationController
|
2
2
|
|
3
|
+
before_filter :set_page, :only => [:show]
|
4
|
+
before_filter :set_home_page, :only => [:home]
|
5
|
+
|
6
|
+
if Cambium.configuration.cache_pages
|
7
|
+
caches_action :show, :cache_path => :page_cache_path.to_proc
|
8
|
+
caches_action :home, :cache_path => :page_cache_path.to_proc
|
9
|
+
end
|
10
|
+
|
3
11
|
def show
|
4
|
-
@page = Cambium::Page.find_by_page_path(request.path)
|
5
12
|
render :inline => @page.template.content, :layout => 'application'
|
6
13
|
end
|
7
14
|
|
8
15
|
def home
|
9
|
-
@page = Cambium::Page.home
|
10
16
|
if @page.nil?
|
11
17
|
render 'home_missing'
|
12
18
|
else
|
@@ -14,4 +20,22 @@ class Cambium::PagesController < ApplicationController
|
|
14
20
|
end
|
15
21
|
end
|
16
22
|
|
23
|
+
protected
|
24
|
+
|
25
|
+
def set_page
|
26
|
+
@page = Cambium::Page.find_by_page_path(request.path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def set_home_page
|
30
|
+
@page = Cambium::Page.home
|
31
|
+
end
|
32
|
+
|
33
|
+
def q_to_s
|
34
|
+
request.query_parameters.to_a.collect { |q| "_#{q[0]}_#{q[1]}" }.join('')
|
35
|
+
end
|
36
|
+
|
37
|
+
def page_cache_path
|
38
|
+
"_p#{@page.id}#{q_to_s}"
|
39
|
+
end
|
40
|
+
|
17
41
|
end
|
@@ -162,7 +162,7 @@ module Cambium
|
|
162
162
|
|
163
163
|
def cambium_field(f, obj, field)
|
164
164
|
attr = field.first.to_s
|
165
|
-
options = field.last
|
165
|
+
options = field.is_a?(OpenStruct) ? field : field.last
|
166
166
|
options = options.to_ostruct unless options.class == OpenStruct
|
167
167
|
readonly = options.readonly || false
|
168
168
|
label = options.label || attr.titleize
|
@@ -213,7 +213,7 @@ module Cambium
|
|
213
213
|
end
|
214
214
|
elsif options.type == 'wysiwyg'
|
215
215
|
f.input(attr.to_sym, :as => :text, :label => label,
|
216
|
-
:input_html => { :class => 'editor' })
|
216
|
+
:input_html => { :class => 'editor' }, :required => required)
|
217
217
|
elsif options.type == 'media'
|
218
218
|
content_tag(:div, :class => 'input media-picker file') do
|
219
219
|
o2 = content_tag(:label, label)
|
@@ -235,30 +235,52 @@ module Cambium
|
|
235
235
|
o = f.input(attr.to_sym, :as => options.type, :label => label,
|
236
236
|
:readonly => readonly, :required => required)
|
237
237
|
unless obj.send(attr).blank?
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
238
|
+
# Dragonfly ...
|
239
|
+
if obj.send(attr).respond_to?(:ext)
|
240
|
+
if %w(jpg jpeg gif png).include?(obj.send(attr).ext.downcase)
|
241
|
+
o += image_tag obj.send(attr)
|
242
|
+
.thumb("200x200##{obj.send("#{attr}_gravity")}")
|
243
|
+
.url
|
244
|
+
o += content_tag(:div, :class => 'image-actions') do
|
245
|
+
o2 = ''.html_safe
|
246
|
+
o2 += link_to('Crop Image', '#', :class => 'crop',
|
247
|
+
:target => :blank, :data => {
|
248
|
+
:url => obj.send(attr).url,
|
249
|
+
:width => obj.send(attr).width,
|
250
|
+
:height => obj.send(attr).height }) if options.crop
|
251
|
+
o2 += link_to(obj.send(attr).name, obj.send(attr).url,
|
252
|
+
:class => 'file', :target => :blank)
|
253
|
+
o2 += f.input :"#{attr}_gravity", :as => :hidden
|
254
|
+
end
|
255
|
+
else
|
256
|
+
o += link_to(obj.send(attr).name, obj.send(attr).url,
|
257
|
+
:class => 'file', :target => :blank)
|
252
258
|
end
|
259
|
+
# CarrierWave (assumed, for now)
|
253
260
|
else
|
254
|
-
|
261
|
+
if %w(jpg jpeg gif png).include?(obj.send(attr).file.extension.downcase)
|
262
|
+
o += image_tag obj.send(attr).thumb.url
|
263
|
+
o += content_tag(:div, :class => 'image-actions') do
|
264
|
+
o2 = ''.html_safe
|
265
|
+
# o2 += link_to('Crop Image', '#', :class => 'crop',
|
266
|
+
# :target => :blank, :data => {
|
267
|
+
# :url => obj.send(attr).url,
|
268
|
+
# :width => obj.send(attr).width,
|
269
|
+
# :height => obj.send(attr).height }) if options.crop
|
270
|
+
o2 += link_to(obj.send(attr).file.filename, obj.send(attr).url,
|
255
271
|
:class => 'file', :target => :blank)
|
272
|
+
# o2 += f.input :"#{attr}_gravity", :as => :hidden
|
273
|
+
end
|
274
|
+
else
|
275
|
+
o += link_to(obj.send(attr).name, obj.send(attr).url,
|
276
|
+
:class => 'file', :target => :blank)
|
277
|
+
end
|
256
278
|
end
|
257
279
|
end
|
258
280
|
o
|
259
281
|
else
|
260
282
|
f.input(attr.to_sym, :as => options.type, :label => label,
|
261
|
-
:readonly => readonly)
|
283
|
+
:readonly => readonly, :required => required)
|
262
284
|
end
|
263
285
|
end
|
264
286
|
|
data/app/models/cambium/page.rb
CHANGED
@@ -22,6 +22,7 @@ module Cambium
|
|
22
22
|
|
23
23
|
after_save :cache_page_path
|
24
24
|
after_save :reload_routes!
|
25
|
+
after_save :expire_caches
|
25
26
|
|
26
27
|
# ------------------------------------------ Class Methods
|
27
28
|
|
@@ -53,7 +54,9 @@ module Cambium
|
|
53
54
|
|
54
55
|
def method_missing(method, *arguments, &block)
|
55
56
|
if respond_to?(method.to_s)
|
56
|
-
if template.fields[method.to_s]['type'] == '
|
57
|
+
if template.fields[method.to_s.gsub(/\?$/, '')]['type'] == 'boolean'
|
58
|
+
template_data[method.to_s.gsub(/\?$/, '')].to_i == 1
|
59
|
+
elsif template.fields[method.to_s]['type'] == 'media'
|
57
60
|
Cambium::Document.find_by_id(template_data[method.to_s].to_i)
|
58
61
|
else
|
59
62
|
template_data[method.to_s]
|
@@ -67,6 +70,9 @@ module Cambium
|
|
67
70
|
return true if super
|
68
71
|
return false if template.blank?
|
69
72
|
return true if template.fields.keys.include?(method.to_s)
|
73
|
+
template.fields.each do |name, attrs|
|
74
|
+
return true if attrs["type"] == 'boolean' && method.to_s == "#{name}?"
|
75
|
+
end
|
70
76
|
false
|
71
77
|
end
|
72
78
|
|
@@ -80,5 +86,9 @@ module Cambium
|
|
80
86
|
update_columns(:page_path => "/#{path.collect(&:slug).join('/')}")
|
81
87
|
end
|
82
88
|
|
89
|
+
def expire_caches
|
90
|
+
Rails.cache.delete_matched(/\_p#{id}(.*)/)
|
91
|
+
end
|
92
|
+
|
83
93
|
end
|
84
94
|
end
|
@@ -14,20 +14,14 @@
|
|
14
14
|
<% end %>
|
15
15
|
<div class="dropdown-menu">
|
16
16
|
<ul>
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
:li,
|
26
|
-
link_to(
|
27
|
-
'Sign Out',
|
28
|
-
main_app.destroy_user_session_path,
|
29
|
-
)
|
30
|
-
) %>
|
17
|
+
<li>
|
18
|
+
<%= link_to 'Edit Profile',
|
19
|
+
cambium.edit_admin_user_path(current_user) %>
|
20
|
+
</li>
|
21
|
+
<li>
|
22
|
+
<%= link_to 'Sign Out', main_app.destroy_user_session_path,
|
23
|
+
:method => :delete %>
|
24
|
+
</li>
|
31
25
|
</ul>
|
32
26
|
</div>
|
33
27
|
</div>
|
@@ -1,7 +1,6 @@
|
|
1
1
|
<%= cambium_page_title(admin_form.title) %>
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
cambium_form(@object, admin_form.fields)
|
6
|
-
|
7
|
-
) %>
|
3
|
+
<div id="page-content"
|
4
|
+
data-library="<%= cambium.admin_documents_path(:no_layout => true) %>">
|
5
|
+
<%= cambium_form(@object, admin_form.fields) %>
|
6
|
+
</div>
|
@@ -1,7 +1,6 @@
|
|
1
1
|
<%= cambium_page_title(admin_form.title) %>
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
cambium_form(@object, admin_form.fields)
|
6
|
-
|
7
|
-
) %>
|
3
|
+
<div id="page-content"
|
4
|
+
data-library="<%= cambium.admin_documents_path(:no_layout => true) %>">
|
5
|
+
<%= cambium_form(@object, admin_form.fields) %>
|
6
|
+
</div>
|
@@ -4,10 +4,8 @@
|
|
4
4
|
<section class="form settings">
|
5
5
|
<% @collection.each do |obj| %>
|
6
6
|
<%= simple_form_for [:admin, obj] do |f| %>
|
7
|
-
|
8
|
-
|
9
|
-
:label => admin_view.form.edit.fields.send(obj.key).label,
|
10
|
-
:input_html => { :id => obj.key } %>
|
7
|
+
<% field = [:value, admin_view.form.edit.fields.send(obj.key)] %>
|
8
|
+
<%= cambium_field(f, obj, field) %>
|
11
9
|
<%= f.submit "Save #{admin_view.form.edit.fields.send(obj.key).label}" %>
|
12
10
|
<% end %>
|
13
11
|
<% end %>
|
@@ -8,6 +8,9 @@
|
|
8
8
|
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0">
|
9
9
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
10
10
|
<meta name="format-detection" content="telephone=no">
|
11
|
+
<script>
|
12
|
+
TRUMBOWYG_SVG = '<%= image_path('trumbowyg/images/icons.svg') %>';
|
13
|
+
</script>
|
11
14
|
<%= stylesheet_link_tag 'cambium/admin/application', :media => 'all' %>
|
12
15
|
<%= javascript_include_tag "modernizr" %>
|
13
16
|
<%= csrf_meta_tags %>
|
data/config/routes.rb
CHANGED
@@ -12,8 +12,14 @@ Cambium::Engine.routes.draw do
|
|
12
12
|
|
13
13
|
if ActiveRecord::Base.connection.table_exists?('cambium_pages')
|
14
14
|
Cambium::Page.published.each do |page|
|
15
|
+
template = page.template
|
16
|
+
next if template.nil? || page.page_path.blank?
|
15
17
|
begin
|
16
|
-
|
18
|
+
if template.respond_to?(:controller) && template.respond_to?(:action)
|
19
|
+
get page.page_path => "/#{template.controller}##{template.action}"
|
20
|
+
else
|
21
|
+
get page.page_path => 'pages#show'
|
22
|
+
end
|
17
23
|
rescue
|
18
24
|
end
|
19
25
|
end
|
@@ -2,13 +2,15 @@ module Cambium
|
|
2
2
|
class Configuration
|
3
3
|
|
4
4
|
attr_accessor :app_title,
|
5
|
+
:cache_pages,
|
5
6
|
:development_url,
|
6
7
|
:production_url
|
7
8
|
|
8
9
|
def initialize
|
10
|
+
@app_title = 'Cambium'
|
11
|
+
@cache_pages = false
|
9
12
|
@development_url = 'localhost:3000'
|
10
13
|
@production_url = 'example.com'
|
11
|
-
@app_title = 'Cambium'
|
12
14
|
end
|
13
15
|
|
14
16
|
end
|
data/lib/cambium/version.rb
CHANGED
@@ -32,10 +32,10 @@ module Cambium
|
|
32
32
|
# end
|
33
33
|
|
34
34
|
def confirm_model
|
35
|
-
@model = model.constantize
|
36
|
-
rescue
|
37
|
-
|
38
|
-
|
35
|
+
@model = model.classify.singularize.constantize
|
36
|
+
# rescue
|
37
|
+
# puts "Can't find the model: #{model}"
|
38
|
+
# exit
|
39
39
|
end
|
40
40
|
|
41
41
|
def set_model_attrs
|
@@ -13,4 +13,13 @@ Cambium.configure do |config|
|
|
13
13
|
#
|
14
14
|
config.app_title = 'Cambium'
|
15
15
|
|
16
|
+
# -------------------------------------------------- Caching
|
17
|
+
|
18
|
+
# Cambium's Pages come with action caching support. It is disabled by default.
|
19
|
+
# Uncomment the setting below to enable action caching.
|
20
|
+
#
|
21
|
+
# NOTE: You must install the 'actionpack-action_caching' gem for this to work.
|
22
|
+
#
|
23
|
+
# config.cache_pages = true
|
24
|
+
|
16
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cambium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean C Davis
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-09-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -254,7 +254,6 @@ files:
|
|
254
254
|
- app/assets/javascripts/cambium/admin/templates/.keep
|
255
255
|
- app/assets/javascripts/cambium/admin/templates/image_cropper.jst.ejs
|
256
256
|
- app/assets/javascripts/cambium/admin/templates/modal.jst.ejs
|
257
|
-
- app/assets/javascripts/cambium/admin/users.js
|
258
257
|
- app/assets/javascripts/cambium/admin/views/default_helpers.js.coffee
|
259
258
|
- app/assets/javascripts/cambium/admin/views/dropdown_menu.js.coffee
|
260
259
|
- app/assets/javascripts/cambium/admin/views/editor.js.coffee
|