biola_wcms_components 0.15.3 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/app/assets/javascripts/biola-wcms-components.js.coffee +2 -0
- data/app/assets/javascripts/components/forms/presentation_data_editor.js.coffee +21 -73
- data/app/views/wcms_components/forms/_data_template_picker.html.slim +24 -2
- data/app/views/wcms_components/forms/_presentation_data_editor.html.slim +13 -25
- data/app/views/wcms_components/navigation/_site_nav.html.slim +5 -2
- data/lib/biola_wcms_components.rb +0 -1
- data/lib/biola_wcms_components/version.rb +1 -1
- data/vendor/assets/javascripts/json-editor.js +6912 -0
- data/vendor/assets/javascripts/redactor.js +3 -8759
- data/vendor/assets/javascripts/redactor_fullscreen.js +1 -3
- data/vendor/assets/javascripts/redactor_table.js +468 -336
- data/vendor/assets/javascripts/redactor_video.js +60 -62
- data/vendor/assets/stylesheets/redactor.css +53 -43
- metadata +3 -3
- data/lib/components/presentation_data_editor.rb +0 -238
@@ -1,77 +1,75 @@
|
|
1
|
-
if (!RedactorPlugins) var RedactorPlugins = {};
|
2
|
-
|
3
1
|
(function($)
|
4
2
|
{
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
3
|
+
$.Redactor.prototype.video = function()
|
4
|
+
{
|
5
|
+
return {
|
6
|
+
reUrlYoutube: /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|<\/a>))[?=&+%\w.-]*/ig,
|
7
|
+
reUrlVimeo: /https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/,
|
8
|
+
getTemplate: function()
|
9
|
+
{
|
10
|
+
return String()
|
11
|
+
+ '<section id="redactor-modal-video-insert">'
|
12
|
+
+ '<label>' + this.lang.get('video_html_code') + '</label>'
|
13
|
+
+ '<textarea id="redactor-insert-video-area" style="height: 160px;"></textarea>'
|
14
|
+
+ '</section>';
|
15
|
+
},
|
16
|
+
init: function()
|
17
|
+
{
|
18
|
+
var button = this.button.addAfter('image', 'video', this.lang.get('video'));
|
19
|
+
this.button.addCallback(button, this.video.show);
|
20
|
+
},
|
21
|
+
show: function()
|
22
|
+
{
|
23
|
+
this.modal.addTemplate('video', this.video.getTemplate());
|
26
24
|
|
27
|
-
|
28
|
-
|
25
|
+
this.modal.load('video', this.lang.get('video'), 700);
|
26
|
+
this.modal.createCancelButton();
|
29
27
|
|
30
|
-
|
31
|
-
|
28
|
+
var button = this.modal.createActionButton(this.lang.get('insert'));
|
29
|
+
button.on('click', this.video.insert);
|
32
30
|
|
33
|
-
|
34
|
-
|
31
|
+
this.selection.save();
|
32
|
+
this.modal.show();
|
35
33
|
|
36
|
-
|
34
|
+
$('#redactor-insert-video-area').focus();
|
37
35
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
},
|
37
|
+
insert: function()
|
38
|
+
{
|
39
|
+
var data = $('#redactor-insert-video-area').val();
|
42
40
|
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
if (!data.match(/<iframe|<video/gi))
|
42
|
+
{
|
43
|
+
data = this.clean.stripTags(data);
|
46
44
|
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
// parse if it is link on youtube & vimeo
|
46
|
+
var iframeStart = '<iframe style="width: 500px; height: 281px;" src="',
|
47
|
+
iframeEnd = '" frameborder="0" allowfullscreen></iframe>';
|
50
48
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
49
|
+
if (data.match(this.video.reUrlYoutube))
|
50
|
+
{
|
51
|
+
data = data.replace(this.video.reUrlYoutube, iframeStart + '//www.youtube.com/embed/$1' + iframeEnd);
|
52
|
+
}
|
53
|
+
else if (data.match(this.video.reUrlVimeo))
|
54
|
+
{
|
55
|
+
data = data.replace(this.video.reUrlVimeo, iframeStart + '//player.vimeo.com/video/$2' + iframeEnd);
|
56
|
+
}
|
57
|
+
}
|
60
58
|
|
61
|
-
|
62
|
-
|
59
|
+
this.selection.restore();
|
60
|
+
this.modal.close();
|
63
61
|
|
64
|
-
|
62
|
+
var current = this.selection.getBlock() || this.selection.getCurrent();
|
65
63
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
64
|
+
if (current) $(current).after(data);
|
65
|
+
else
|
66
|
+
{
|
67
|
+
this.insert.html(data);
|
68
|
+
}
|
71
69
|
|
72
|
-
|
73
|
-
|
70
|
+
this.code.sync();
|
71
|
+
}
|
74
72
|
|
75
|
-
|
76
|
-
|
77
|
-
})(jQuery);
|
73
|
+
};
|
74
|
+
};
|
75
|
+
})(jQuery);
|
@@ -1,10 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
Icon font
|
3
3
|
*/
|
4
|
-
@font-face {
|
5
|
-
font-family: 'RedactorFont';
|
6
|
-
src: url('redactor-font.eot');
|
7
|
-
}
|
8
4
|
@font-face {
|
9
5
|
font-family: 'RedactorFont';
|
10
6
|
src: url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,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) format('woff');
|
@@ -32,7 +28,7 @@
|
|
32
28
|
box-shadow: none;
|
33
29
|
color: #ccc;
|
34
30
|
font-size: 13px;
|
35
|
-
font-family: Menlo, Monaco, monospace, sans-serif;
|
31
|
+
font-family: Menlo, Monaco, monospace, sans-serif !important;
|
36
32
|
resize: none;
|
37
33
|
}
|
38
34
|
.redactor-box textarea:focus {
|
@@ -64,22 +60,6 @@
|
|
64
60
|
#redactor-modal {
|
65
61
|
z-index: 1053;
|
66
62
|
}
|
67
|
-
/*
|
68
|
-
Resize
|
69
|
-
*/
|
70
|
-
.redactor-resize {
|
71
|
-
background: #f4f4f4;
|
72
|
-
padding: 4px 0 3px 0;
|
73
|
-
cursor: move;
|
74
|
-
border: 1px solid #e3e3e3;
|
75
|
-
border-top: none;
|
76
|
-
}
|
77
|
-
.redactor-resize div {
|
78
|
-
width: 30px;
|
79
|
-
margin: auto;
|
80
|
-
border-top: 1px solid #bbb;
|
81
|
-
border-bottom: 1px solid #fff;
|
82
|
-
}
|
83
63
|
/*
|
84
64
|
Fullscreen
|
85
65
|
*/
|
@@ -92,8 +72,12 @@ body .redactor-box-fullscreen {
|
|
92
72
|
/*
|
93
73
|
Utils
|
94
74
|
*/
|
95
|
-
.
|
96
|
-
|
75
|
+
.redactor-scrollbar-measure {
|
76
|
+
position: absolute;
|
77
|
+
top: -9999px;
|
78
|
+
width: 50px;
|
79
|
+
height: 50px;
|
80
|
+
overflow: scroll;
|
97
81
|
}
|
98
82
|
/*
|
99
83
|
Editor
|
@@ -103,10 +87,11 @@ body .redactor-box-fullscreen {
|
|
103
87
|
overflow: auto;
|
104
88
|
margin: 0 !important;
|
105
89
|
padding: 20px;
|
90
|
+
min-height: 80px;
|
106
91
|
outline: none;
|
107
92
|
white-space: normal;
|
108
93
|
border: 1px solid #eee;
|
109
|
-
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
|
94
|
+
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
|
110
95
|
font-size: 14px;
|
111
96
|
line-height: 1.6em;
|
112
97
|
}
|
@@ -119,22 +104,16 @@ body .redactor-box-fullscreen {
|
|
119
104
|
/*
|
120
105
|
Placeholder
|
121
106
|
*/
|
122
|
-
.redactor-placeholder {
|
123
|
-
position: relative;
|
124
|
-
}
|
125
107
|
.redactor-placeholder:after {
|
126
108
|
position: absolute;
|
127
109
|
top: 20px;
|
128
110
|
left: 20px;
|
129
111
|
content: attr(placeholder);
|
112
|
+
display: block;
|
113
|
+
/* For Firefox */
|
130
114
|
color: #999 !important;
|
131
115
|
font-weight: normal !important;
|
132
116
|
}
|
133
|
-
/* Placeholder in linebreaks mode */
|
134
|
-
.redactor-linebreaks.redactor-placeholder:after {
|
135
|
-
top: 20px;
|
136
|
-
left: 20px;
|
137
|
-
}
|
138
117
|
/*
|
139
118
|
Toolbar
|
140
119
|
*/
|
@@ -227,6 +206,10 @@ body .redactor-box-fullscreen {
|
|
227
206
|
background-color: transparent !important;
|
228
207
|
cursor: default;
|
229
208
|
}
|
209
|
+
.redactor-toolbar li a.redactor-button-focus {
|
210
|
+
color: #fff;
|
211
|
+
background: #000;
|
212
|
+
}
|
230
213
|
/*
|
231
214
|
CodeMirror
|
232
215
|
*/
|
@@ -361,7 +344,7 @@ body .redactor-box-fullscreen {
|
|
361
344
|
color: #fff;
|
362
345
|
padding: 5px 8px;
|
363
346
|
line-height: 1;
|
364
|
-
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
|
347
|
+
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
|
365
348
|
font-size: 12px;
|
366
349
|
border-radius: 2px;
|
367
350
|
}
|
@@ -379,7 +362,7 @@ body .redactor-box-fullscreen {
|
|
379
362
|
background-color: #fff;
|
380
363
|
box-shadow: 0 1px 7px rgba(0, 0, 0, 0.25);
|
381
364
|
font-size: 14px;
|
382
|
-
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
|
365
|
+
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
|
383
366
|
line-height: 1.6em;
|
384
367
|
}
|
385
368
|
.redactor-dropdown a {
|
@@ -397,6 +380,23 @@ body .redactor-box-fullscreen {
|
|
397
380
|
color: #fff !important;
|
398
381
|
text-decoration: none;
|
399
382
|
}
|
383
|
+
.redactor-dropdown a.selected {
|
384
|
+
background-color: #000;
|
385
|
+
color: #fff;
|
386
|
+
}
|
387
|
+
.redactor-dropdown a.redactor-dropdown-link-inactive,
|
388
|
+
.redactor-dropdown a.redactor-dropdown-link-inactive:hover {
|
389
|
+
background: none;
|
390
|
+
cursor: default;
|
391
|
+
color: #000 !important;
|
392
|
+
filter: alpha(opacity=40);
|
393
|
+
-moz-opacity: 0.4;
|
394
|
+
opacity: 0.4;
|
395
|
+
}
|
396
|
+
.redactor-dropdown a.redactor-dropdown-link-selected {
|
397
|
+
color: #fff;
|
398
|
+
background: #000;
|
399
|
+
}
|
400
400
|
/*
|
401
401
|
IMAGE BOX
|
402
402
|
*/
|
@@ -438,7 +438,7 @@ body .redactor-box-fullscreen {
|
|
438
438
|
*/
|
439
439
|
.redactor-link-tooltip {
|
440
440
|
position: absolute;
|
441
|
-
z-index:
|
441
|
+
z-index: 99;
|
442
442
|
padding: 10px;
|
443
443
|
line-height: 1;
|
444
444
|
display: inline-block;
|
@@ -448,7 +448,7 @@ body .redactor-box-fullscreen {
|
|
448
448
|
.redactor-link-tooltip,
|
449
449
|
.redactor-link-tooltip a {
|
450
450
|
font-size: 12px;
|
451
|
-
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
|
451
|
+
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
|
452
452
|
}
|
453
453
|
.redactor-link-tooltip a {
|
454
454
|
color: #ccc;
|
@@ -552,6 +552,7 @@ body .redactor-box-fullscreen {
|
|
552
552
|
overflow-y: auto;
|
553
553
|
}
|
554
554
|
#redactor-modal {
|
555
|
+
outline: 0;
|
555
556
|
position: relative;
|
556
557
|
margin: auto;
|
557
558
|
margin-bottom: 20px;
|
@@ -559,7 +560,7 @@ body .redactor-box-fullscreen {
|
|
559
560
|
background: #fff;
|
560
561
|
color: #000;
|
561
562
|
font-size: 14px !important;
|
562
|
-
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
|
563
|
+
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
|
563
564
|
box-shadow: 0 1px 70px rgba(0, 0, 0, 0.5);
|
564
565
|
}
|
565
566
|
#redactor-modal header {
|
@@ -601,7 +602,7 @@ body .redactor-box-fullscreen {
|
|
601
602
|
color: #333;
|
602
603
|
width: 100%;
|
603
604
|
font-size: 14px;
|
604
|
-
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
|
605
|
+
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
|
605
606
|
-moz-transition: border 0.3s ease-in;
|
606
607
|
transition: border 0.3s ease-in;
|
607
608
|
}
|
@@ -691,6 +692,11 @@ body .redactor-box-fullscreen {
|
|
691
692
|
font-size: 30px;
|
692
693
|
font-weight: 300;
|
693
694
|
cursor: pointer;
|
695
|
+
-webkit-appearance: none;
|
696
|
+
padding: 0;
|
697
|
+
border: 0;
|
698
|
+
background: 0;
|
699
|
+
outline: none;
|
694
700
|
}
|
695
701
|
#redactor-modal-close:hover {
|
696
702
|
color: #000;
|
@@ -708,7 +714,7 @@ body .redactor-box-fullscreen {
|
|
708
714
|
text-decoration: none;
|
709
715
|
font-weight: normal;
|
710
716
|
font-size: 12px;
|
711
|
-
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
|
717
|
+
font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
|
712
718
|
line-height: 1;
|
713
719
|
cursor: pointer;
|
714
720
|
}
|
@@ -784,7 +790,8 @@ body .redactor-box-fullscreen {
|
|
784
790
|
*/
|
785
791
|
.redactor-editor code,
|
786
792
|
.redactor-editor pre {
|
787
|
-
font-family: Menlo, Monaco, monospace, sans-serif;
|
793
|
+
font-family: Menlo, Monaco, monospace, sans-serif !important;
|
794
|
+
cursor: text;
|
788
795
|
}
|
789
796
|
.redactor-editor div,
|
790
797
|
.redactor-editor p,
|
@@ -834,10 +841,15 @@ body .redactor-box-fullscreen {
|
|
834
841
|
}
|
835
842
|
.redactor-editor blockquote {
|
836
843
|
margin-left: 1.6em !important;
|
837
|
-
padding
|
844
|
+
padding: 0;
|
845
|
+
text-align: left;
|
838
846
|
color: #777;
|
839
847
|
font-style: italic;
|
840
848
|
}
|
849
|
+
.redactor-editor blockquote:before,
|
850
|
+
.redactor-editor blockquote:after {
|
851
|
+
content: '';
|
852
|
+
}
|
841
853
|
.redactor-editor ul,
|
842
854
|
.redactor-editor ol {
|
843
855
|
padding-left: 2em;
|
@@ -883,12 +895,10 @@ body .redactor-box-fullscreen {
|
|
883
895
|
background-color: #d8d7d7;
|
884
896
|
}
|
885
897
|
.redactor-editor pre {
|
886
|
-
overflow: auto;
|
887
898
|
padding: 1em;
|
888
899
|
border: 1px solid #ddd;
|
889
900
|
border-radius: 3px;
|
890
901
|
background: #f8f8f8;
|
891
|
-
white-space: pre;
|
892
902
|
font-size: 90%;
|
893
903
|
}
|
894
904
|
.redactor-editor hr {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: biola_wcms_components
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Hall
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ace-rails-ap
|
@@ -221,10 +221,10 @@ files:
|
|
221
221
|
- lib/components/cas_authentication.rb
|
222
222
|
- lib/components/gallery_photos.rb
|
223
223
|
- lib/components/menu_block.rb
|
224
|
-
- lib/components/presentation_data_editor.rb
|
225
224
|
- vendor/assets/javascripts/bootstrap-multiselect.js
|
226
225
|
- vendor/assets/javascripts/bootstrap-tagsinput.js
|
227
226
|
- vendor/assets/javascripts/handlebars.js
|
227
|
+
- vendor/assets/javascripts/json-editor.js
|
228
228
|
- vendor/assets/javascripts/redactor.js
|
229
229
|
- vendor/assets/javascripts/redactor_fullscreen.js
|
230
230
|
- vendor/assets/javascripts/redactor_table.js
|
@@ -1,238 +0,0 @@
|
|
1
|
-
class PresentationDataEditor
|
2
|
-
attr_reader :view
|
3
|
-
attr_reader :data
|
4
|
-
attr_reader :schema
|
5
|
-
attr_reader :form
|
6
|
-
|
7
|
-
# Expects a hash schema definition.
|
8
|
-
# will probably come from presentation_data_template.schema
|
9
|
-
def initialize(view_context, data, schema, form)
|
10
|
-
@view = view_context
|
11
|
-
@data = data
|
12
|
-
@schema = schema
|
13
|
-
@form = form
|
14
|
-
end
|
15
|
-
|
16
|
-
def render
|
17
|
-
presentation_data_editor if schema.is_a? Array
|
18
|
-
end
|
19
|
-
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def presentation_data_editor
|
24
|
-
view.content_tag :div, array_of_attributes(schema), id: 'presentation_data_editor'
|
25
|
-
end
|
26
|
-
|
27
|
-
def array_of_attributes(attributes, parent_keys=[], wrapper_class: 'nest')
|
28
|
-
view.content_tag(:div, class: wrapper_class) do
|
29
|
-
Array(attributes).map do |attribute|
|
30
|
-
build_form_attribute(ActiveSupport::HashWithIndifferentAccess.new(attribute), parent_keys)
|
31
|
-
end.join(" ").html_safe
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def build_form_attribute(attribute, parent_keys)
|
36
|
-
case attribute[:type]
|
37
|
-
when 'hash'
|
38
|
-
build_hash(attribute, parent_keys)
|
39
|
-
when 'array'
|
40
|
-
build_array(attribute, parent_keys)
|
41
|
-
when 'string', nil # String should be the default value
|
42
|
-
build_string(attribute, parent_keys)
|
43
|
-
when 'image'
|
44
|
-
build_image_uploader(attribute, parent_keys)
|
45
|
-
when 'html'
|
46
|
-
build_html(attribute, parent_keys)
|
47
|
-
when 'checkbox'
|
48
|
-
build_check_box(attribute, parent_keys)
|
49
|
-
when 'number'
|
50
|
-
build_number(attribute, parent_keys)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
############################
|
57
|
-
### Type specific Builders
|
58
|
-
############################
|
59
|
-
def build_hash(attribute, parent_keys)
|
60
|
-
view.content_tag(:h4, attribute[:name].titleize) +
|
61
|
-
array_of_attributes(attribute[:nested_attributes], parent_keys + Array(attribute[:name]))
|
62
|
-
end
|
63
|
-
|
64
|
-
def build_array(attribute, parent_keys)
|
65
|
-
view.content_tag(:div, class: 'array_wrapper') do
|
66
|
-
view.content_tag(:h4, attribute[:name].titleize) +
|
67
|
-
# build empty form template for creating new items
|
68
|
-
build_array_with_data(
|
69
|
-
attribute[:nested_attributes],
|
70
|
-
parent_keys,
|
71
|
-
attribute[:name]
|
72
|
-
)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def build_array_with_data(attributes, parent_keys, array_name)
|
77
|
-
view.content_tag(:div, class: 'nest existing_array') do
|
78
|
-
build_array_framework(attributes, parent_keys, array_name) +
|
79
|
-
build_array_items(attributes, parent_keys, array_name) +
|
80
|
-
view.content_tag(:a, 'Add Item', href:'#', class: 'add_array_item', tabindex: '-1')
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def build_array_items(attributes, parent_keys, array_name)
|
85
|
-
Array(data_grab(parent_keys, array_name)).each_with_index.map do |v,i|
|
86
|
-
view.content_tag :div, class: 'array_item' do
|
87
|
-
view.content_tag(:a, 'Delete Item', href:'#', class: 'delete_array_item pull-right', tabindex: '-1') +
|
88
|
-
array_of_attributes(attributes, parent_keys + Array(array_name) + Array(i), wrapper_class: nil)
|
89
|
-
end
|
90
|
-
end.join(" ").html_safe
|
91
|
-
end
|
92
|
-
|
93
|
-
def build_array_framework(attributes, parent_keys, array_name)
|
94
|
-
view.content_tag(:div, class: 'array_item framework') do
|
95
|
-
view.content_tag(:a, 'Delete Item', href:'#', class: 'delete_array_item pull-right', tabindex: '-1') +
|
96
|
-
array_of_attributes(attributes, parent_keys + Array(array_name) + Array(0), wrapper_class: nil)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
|
101
|
-
def build_string(attribute, parent_keys)
|
102
|
-
view.content_tag :div, class: 'form-group' do
|
103
|
-
view.label_tag(attribute[:name]) +
|
104
|
-
view.text_field_tag(
|
105
|
-
form_name(parent_keys, attribute[:name]),
|
106
|
-
data_grab(parent_keys, attribute[:name]),
|
107
|
-
{
|
108
|
-
class: "form-control #{attribute[:class]}",
|
109
|
-
id: attribute_id(parent_keys, attribute[:name]),
|
110
|
-
placeholder: attribute[:placeholder]
|
111
|
-
}
|
112
|
-
)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
def build_check_box(attribute, parent_keys)
|
117
|
-
view.content_tag :div, class: 'form-group' do
|
118
|
-
view.label_tag(attribute[:name]) +
|
119
|
-
view.check_box_tag(
|
120
|
-
form_name(parent_keys, attribute[:name]), # name
|
121
|
-
1, # value
|
122
|
-
data_grab(parent_keys, attribute[:name]).to_i == 1,# checked or not
|
123
|
-
{ # options
|
124
|
-
class: "form-control #{attribute[:class]}",
|
125
|
-
id: attribute_id(parent_keys, attribute[:name]),
|
126
|
-
placeholder: attribute[:placeholder]
|
127
|
-
}
|
128
|
-
)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def build_number(attribute, parent_keys)
|
133
|
-
view.content_tag :div, class: 'form-group' do
|
134
|
-
view.label_tag(attribute[:name]) +
|
135
|
-
view.number_field_tag(
|
136
|
-
form_name(parent_keys, attribute[:name]),
|
137
|
-
data_grab(parent_keys, attribute[:name]),
|
138
|
-
{
|
139
|
-
class: "form-control #{attribute[:class]}",
|
140
|
-
id: attribute_id(parent_keys, attribute[:name]),
|
141
|
-
placeholder: attribute[:placeholder]
|
142
|
-
}
|
143
|
-
)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def build_image_uploader(attribute, parent_keys)
|
148
|
-
view.content_tag :div, class: 'form-group type-image-uploader' do
|
149
|
-
view.label_tag(attribute[:name]) +
|
150
|
-
view.text_field_tag(
|
151
|
-
form_name(parent_keys, attribute[:name]),
|
152
|
-
data_grab(parent_keys, attribute[:name]),
|
153
|
-
{
|
154
|
-
class: "form-control drop-image-uploader #{attribute[:class]}",
|
155
|
-
id: attribute_id(parent_keys, attribute[:name]),
|
156
|
-
placeholder: "Drop image here"
|
157
|
-
}
|
158
|
-
) +
|
159
|
-
view.content_tag(:div, class: 'image_preview') do
|
160
|
-
view.image_tag data_grab(parent_keys, attribute[:name])
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
def build_html(attribute, parent_keys)
|
166
|
-
view.content_tag :div, class: 'form-group' do
|
167
|
-
view.label_tag(attribute[:name]) +
|
168
|
-
view.text_area_tag(
|
169
|
-
form_name(parent_keys, attribute[:name]),
|
170
|
-
data_grab(parent_keys, attribute[:name]),
|
171
|
-
{
|
172
|
-
class: "redactor #{attribute[:class]}",
|
173
|
-
id: attribute_id(parent_keys, attribute[:name]),
|
174
|
-
'data-buttons' => editor_buttons(attribute),
|
175
|
-
'data-formatting' => 'p h1 h2 h3 h4 h5 quote'
|
176
|
-
}
|
177
|
-
)
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
############################
|
184
|
-
### helper methods
|
185
|
-
############################
|
186
|
-
|
187
|
-
# This will create the name parameter for a given form input
|
188
|
-
# Example:
|
189
|
-
# research(hash) > books(array) > 2(array index) > title(attribute_name)
|
190
|
-
# will become
|
191
|
-
# "pdata[research][books][][title]"
|
192
|
-
def form_name(parent_keys, attr_name)
|
193
|
-
p = ['pdata'] + parent_keys + [attr_name]
|
194
|
-
p.compact.each_with_index.map do |v,i|
|
195
|
-
if i == 0
|
196
|
-
v # don't wrap the first key in brackets
|
197
|
-
elsif v.is_a?(Integer)
|
198
|
-
"[]" # Skip the number, this will be an array...
|
199
|
-
else
|
200
|
-
"[#{v}]"
|
201
|
-
end
|
202
|
-
end.join('')
|
203
|
-
end
|
204
|
-
|
205
|
-
# Creates an underscored version of the form_name above.
|
206
|
-
# Example:
|
207
|
-
# "pdata_research_books_2_title"
|
208
|
-
def attribute_id(parent_keys, attr_name)
|
209
|
-
p = ['pdata'] + parent_keys + [attr_name]
|
210
|
-
p.compact.join('_')
|
211
|
-
end
|
212
|
-
|
213
|
-
# Will look up the data given the correct path
|
214
|
-
def data_grab(parent_keys, attr_name)
|
215
|
-
path = parent_keys + [attr_name]
|
216
|
-
|
217
|
-
# I'm using inject here to traverse the data hash with each sequential
|
218
|
-
# key or index value. I use `try` just in case the data is not there
|
219
|
-
# and `last` is nil.
|
220
|
-
path.compact.inject(data) do |last, p|
|
221
|
-
if last.is_a? Array
|
222
|
-
# Use a number to reference the array element
|
223
|
-
last.try(:[], p.to_i)
|
224
|
-
elsif last.is_a? Hash
|
225
|
-
last.try(:[], p.to_s)
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
def editor_buttons(attribute)
|
231
|
-
default_buttons = %w(formatting bold italic unorderedlist orderedlist link)
|
232
|
-
buttons = attribute[:editor_buttons].to_s.split(' ').presence || default_buttons
|
233
|
-
buttons.push('html') if !buttons.include?('html')
|
234
|
-
buttons.push('fullscreen') unless buttons.include?('fullscreen')
|
235
|
-
buttons.join(' ')
|
236
|
-
end
|
237
|
-
|
238
|
-
end
|