releaf-core 1.0.10 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/releaf/include/field.type_richtext.js +10 -2
- data/app/assets/stylesheets/releaf/layout/main.scss +5 -1
- data/app/builders/releaf/builders/page/layout_builder.rb +18 -4
- data/app/controllers/releaf/action_controller.rb +1 -0
- data/app/lib/releaf/action_controller/layout.rb +7 -0
- data/spec/builders/releaf/builders/page/layout_builder_spec.rb +72 -5
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b20117c8f011eeb352f897d424a54c9aca0da121
|
4
|
+
data.tar.gz: f350cbf3d9c4c8428b023457e0ad705c633f9af0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe61243ff475a95c0fea93023b5a3e83f212e981c3ad2871315d411cf9f396affbb4f3bb3ca7f46ce97edf7b1aa71da887270283e7550017d80a4427da97f1fb
|
7
|
+
data.tar.gz: aa0c250c7a029ef6dbee115b458ed1135eda3ea7571c70ee13f4aad45a62fb84ba6d19a59a0a143a41929ecdaf9a9a2c1e917ca296d70575f0528bda5a13c32a
|
@@ -84,9 +84,17 @@ jQuery(function()
|
|
84
84
|
textarea.attr( 'id', 'richtext_' + String((new Date()).getTime()).replace(/\D/gi,'') );
|
85
85
|
}
|
86
86
|
|
87
|
-
if (textarea.data('attachment-upload-url'))
|
87
|
+
if (textarea.data('attachment-upload-url') || textarea.data('attachment-browse-url'))
|
88
88
|
{
|
89
|
-
|
89
|
+
if (textarea.data('attachment-browse-url'))
|
90
|
+
{
|
91
|
+
config.filebrowserBrowseUrl = textarea.data('attachment-browse-url');
|
92
|
+
}
|
93
|
+
|
94
|
+
if (textarea.data('attachment-upload-url'))
|
95
|
+
{
|
96
|
+
config.filebrowserUploadUrl = textarea.data('attachment-upload-url');
|
97
|
+
}
|
90
98
|
}
|
91
99
|
else
|
92
100
|
{
|
@@ -12,12 +12,16 @@ main
|
|
12
12
|
position: relative;
|
13
13
|
min-height: 100%;
|
14
14
|
}
|
15
|
+
body[data-layout-features~="sidebar"] > main
|
16
|
+
{
|
17
|
+
padding-left: steps(20 + 3);
|
18
|
+
}
|
15
19
|
|
16
20
|
main
|
17
21
|
{
|
18
22
|
display: block; /* as of now, not all rendering engines recognize the main element as a block */
|
19
23
|
position: relative;
|
20
|
-
padding: 0 steps(3) steps(4) steps(
|
24
|
+
padding: 0 steps(3) steps(4) steps(3);
|
21
25
|
z-index: 1;
|
22
26
|
|
23
27
|
.side-compact &
|
@@ -21,20 +21,30 @@ module Releaf::Builders::Page
|
|
21
21
|
|
22
22
|
def body
|
23
23
|
tag(:body, body_atttributes) do
|
24
|
-
|
24
|
+
safe_join{ body_content_blocks{ yield } }
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
def body_atttributes
|
29
|
-
{class: body_classes, "data-settings-path" => settings_path}
|
29
|
+
{class: body_classes, "data-settings-path" => settings_path, "data-layout-features" => features.join(" ")}
|
30
30
|
end
|
31
31
|
|
32
32
|
def settings_path
|
33
33
|
url_for(action: "store_settings", controller: "/releaf/root", only_path: true)
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
37
|
-
|
36
|
+
def feature_available?(feature)
|
37
|
+
features.include? feature
|
38
|
+
end
|
39
|
+
|
40
|
+
def body_content_blocks
|
41
|
+
parts = []
|
42
|
+
parts << header if feature_available?(:header)
|
43
|
+
parts << menu if feature_available?(:sidebar)
|
44
|
+
parts << tag(:main, id: :main){ yield } if feature_available?(:main)
|
45
|
+
parts << notifications
|
46
|
+
parts << assets(:javascripts, :javascript_include_tag)
|
47
|
+
parts
|
38
48
|
end
|
39
49
|
|
40
50
|
def notifications
|
@@ -57,6 +67,10 @@ module Releaf::Builders::Page
|
|
57
67
|
Releaf::Builders::Page::MenuBuilder
|
58
68
|
end
|
59
69
|
|
70
|
+
def features
|
71
|
+
controller.layout_features
|
72
|
+
end
|
73
|
+
|
60
74
|
def assets(type, tag_method)
|
61
75
|
safe_join do
|
62
76
|
send(type).collect do |asset|
|
@@ -13,6 +13,7 @@ class Releaf::ActionController < ActionController::Base
|
|
13
13
|
include Releaf::ActionController::Breadcrumbs
|
14
14
|
include Releaf::ActionController::RichtextAttachments
|
15
15
|
include Releaf::ActionController::Views
|
16
|
+
include Releaf::ActionController::Layout
|
16
17
|
include Releaf::Responders
|
17
18
|
|
18
19
|
helper_method :controller_scope_name, :page_title
|
@@ -47,6 +47,14 @@ describe Releaf::Builders::Page::LayoutBuilder, type: :class do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
describe "#features" do
|
51
|
+
it "returns controller layout features" do
|
52
|
+
allow(subject).to receive(:controller).and_return(NewRolesController.new)
|
53
|
+
allow(subject.controller).to receive(:layout_features).and_return([:a, :c])
|
54
|
+
expect(subject.features).to eq([:a, :c])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
50
58
|
describe "#header_builder" do
|
51
59
|
it "returns `Releaf::Builders::Page::HeaderBuilder` class" do
|
52
60
|
expect(subject.header_builder).to eq(Releaf::Builders::Page::HeaderBuilder)
|
@@ -59,6 +67,20 @@ describe Releaf::Builders::Page::LayoutBuilder, type: :class do
|
|
59
67
|
end
|
60
68
|
end
|
61
69
|
|
70
|
+
describe "#feature_available?" do
|
71
|
+
before do
|
72
|
+
allow(subject).to receive(:features).and_return([:a, :b])
|
73
|
+
end
|
74
|
+
|
75
|
+
it "returns true when feature is available" do
|
76
|
+
expect(subject.feature_available?(:a)).to be true
|
77
|
+
end
|
78
|
+
|
79
|
+
it "returns false when feature is not available" do
|
80
|
+
expect(subject.feature_available?(:c)).to be false
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
62
84
|
describe "#stylesheets" do
|
63
85
|
it "returns stylesheets from assets resolver for given controller" do
|
64
86
|
allow(subject).to receive(:assets_resolver).and_return(DummyAssetsResolver)
|
@@ -111,10 +133,52 @@ describe Releaf::Builders::Page::LayoutBuilder, type: :class do
|
|
111
133
|
|
112
134
|
describe "#body" do
|
113
135
|
it "returns body with body attributes and" do
|
114
|
-
allow(subject).to receive(:assets).with(:javascripts, :javascript_include_tag).and_return("_assets_")
|
115
136
|
allow(subject).to receive(:body_atttributes).and_return(class: ["xx", "y"], id: "121212")
|
116
|
-
allow(subject).to receive(:
|
117
|
-
|
137
|
+
allow(subject).to receive(:body_content_blocks){|*args, &block| expect(block.call).to eq("x") }
|
138
|
+
.and_return(["a<b>".html_safe, "b<i>", "c<d>".html_safe])
|
139
|
+
expect(subject.body{ "x" }).to eq("<body class=\"xx y\" id=\"121212\">a<b>b<i>c<d></body>")
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
#parts = []
|
144
|
+
#parts << header if feature_available?(:header)
|
145
|
+
#parts << menu if feature_available?(:sidebar)
|
146
|
+
#parts << tag(:main, id: "main"){ yield } if feature_available?(:main)
|
147
|
+
#parts << notifications
|
148
|
+
#parts << assets(:javascripts, :javascript_include_tag)
|
149
|
+
#parts
|
150
|
+
|
151
|
+
|
152
|
+
describe "#body_content_blocks" do
|
153
|
+
before do
|
154
|
+
allow(subject).to receive(:feature_available?).with(:header).and_return(true)
|
155
|
+
allow(subject).to receive(:feature_available?).with(:sidebar).and_return(true)
|
156
|
+
allow(subject).to receive(:feature_available?).with(:main).and_return(true)
|
157
|
+
|
158
|
+
allow(subject).to receive(:assets).with(:javascripts, :javascript_include_tag).and_return("_assets_")
|
159
|
+
allow(subject).to receive(:header).and_return("_header_")
|
160
|
+
allow(subject).to receive(:menu).and_return("_menu_")
|
161
|
+
allow(subject).to receive(:notifications).and_return("_notifications_")
|
162
|
+
allow(subject).to receive(:tag).with(:main, id: :main){|*args, &block| expect(block.call).to eq("x") }.and_return("body content")
|
163
|
+
end
|
164
|
+
|
165
|
+
it "returns body with body attributes and" do
|
166
|
+
expect(subject.body_content_blocks{ "x" }).to eq(["_header_", "_menu_", "body content", "_notifications_", "_assets_"])
|
167
|
+
end
|
168
|
+
|
169
|
+
it "skips header when header feature not available" do
|
170
|
+
allow(subject).to receive(:feature_available?).with(:header).and_return(false)
|
171
|
+
expect(subject.body_content_blocks{ "x" }).to eq(["_menu_", "body content", "_notifications_", "_assets_"])
|
172
|
+
end
|
173
|
+
|
174
|
+
it "skips menu when sidebar feature not available" do
|
175
|
+
allow(subject).to receive(:feature_available?).with(:sidebar).and_return(false)
|
176
|
+
expect(subject.body_content_blocks{ "x" }).to eq(["_header_", "body content", "_notifications_", "_assets_"])
|
177
|
+
end
|
178
|
+
|
179
|
+
it "skips main conrtent when main feature not available" do
|
180
|
+
allow(subject).to receive(:feature_available?).with(:main).and_return(false)
|
181
|
+
expect(subject.body_content_blocks{ "x" }).to eq(["_header_", "_menu_", "_notifications_", "_assets_"])
|
118
182
|
end
|
119
183
|
end
|
120
184
|
|
@@ -134,10 +198,13 @@ describe Releaf::Builders::Page::LayoutBuilder, type: :class do
|
|
134
198
|
end
|
135
199
|
|
136
200
|
describe "#body_atttributes" do
|
137
|
-
it "returns hash with classes and data-
|
201
|
+
it "returns hash with classes, data-settings-path and data-layout-features" do
|
202
|
+
allow(subject).to receive(:features).and_return([:top, :bottom])
|
138
203
|
allow(subject).to receive(:controller_body_classes).and_return(["a", "b"])
|
139
204
|
allow(subject).to receive(:settings_path).and_return("/xxx/sett")
|
140
|
-
expect(subject.body_atttributes).to eq(class: ["application-dummy", "a", "b"],
|
205
|
+
expect(subject.body_atttributes).to eq(class: ["application-dummy", "a", "b"],
|
206
|
+
"data-settings-path" => "/xxx/sett",
|
207
|
+
"data-layout-features" => "top bottom")
|
141
208
|
end
|
142
209
|
end
|
143
210
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: releaf-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CubeSystems
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -395,6 +395,7 @@ files:
|
|
395
395
|
- app/lib/releaf/action_controller/breadcrumbs.rb
|
396
396
|
- app/lib/releaf/action_controller/builders.rb
|
397
397
|
- app/lib/releaf/action_controller/features.rb
|
398
|
+
- app/lib/releaf/action_controller/layout.rb
|
398
399
|
- app/lib/releaf/action_controller/notifications.rb
|
399
400
|
- app/lib/releaf/action_controller/resources.rb
|
400
401
|
- app/lib/releaf/action_controller/richtext_attachments.rb
|