bootybox 0.0.91

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +7 -0
  2. data/app/assets/images/alchemy/element_thumbnails/bootybox/defaults/default_image.png +0 -0
  3. data/app/assets/images/alchemy/element_thumbnails/bootybox/defaults/default_textbox.png +0 -0
  4. data/app/assets/images/alchemy/element_thumbnails/bootybox/grid/four_columns_25_25_25_25.png +0 -0
  5. data/app/assets/images/alchemy/element_thumbnails/bootybox/grid/one_column_100.png +0 -0
  6. data/app/assets/images/alchemy/element_thumbnails/bootybox/grid/three_columns_33_33_33.png +0 -0
  7. data/app/assets/images/alchemy/element_thumbnails/bootybox/grid/two_columns_25_75.png +0 -0
  8. data/app/assets/images/alchemy/element_thumbnails/bootybox/grid/two_columns_50_50.png +0 -0
  9. data/app/assets/images/alchemy/element_thumbnails/bootybox/grid/two_columns_75_25.png +0 -0
  10. data/app/assets/images/alchemy/element_thumbnails/bootybox/layout/element_container.png +0 -0
  11. data/app/assets/images/alchemy/element_thumbnails/bootybox/layout/seperator.png +0 -0
  12. data/app/assets/javascripts/bootybox/defaults.js +6 -0
  13. data/app/assets/javascripts/bootybox/modal.js.coffee +14 -0
  14. data/app/assets/javascripts/bootybox/portfolio.js.coffee +96 -0
  15. data/app/assets/javascripts/bootybox/slideshow.js.coffee +12 -0
  16. data/app/assets/javascripts/bootybox/templates/modal/buttons/cancel.hbs +1 -0
  17. data/app/assets/javascripts/bootybox/templates/modal/default.hbs +18 -0
  18. data/app/assets/javascripts/bootybox/templates/modal/modal_target.hbs +1 -0
  19. data/app/assets/javascripts/bootybox/templates/portfolio/portfolio_item.hbs +4 -0
  20. data/app/assets/javascripts/bootybox/vendor/flip.js +298 -0
  21. data/app/assets/stylesheets/bootybox/_elements.scss +54 -0
  22. data/app/assets/stylesheets/bootybox/_fixes.scss +22 -0
  23. data/app/assets/stylesheets/bootybox/_navi.scss +4 -0
  24. data/app/assets/stylesheets/bootybox/_portfolio.scss +37 -0
  25. data/app/assets/stylesheets/bootybox/_slides.scss +41 -0
  26. data/app/assets/stylesheets/bootybox/defaults.scss +7 -0
  27. data/app/assets/templates/framework.scss +50 -0
  28. data/app/helpers/bootybox_content_helper.rb +44 -0
  29. data/app/helpers/bootybox_form_helper.rb +39 -0
  30. data/app/helpers/bootybox_grid_helper.rb +112 -0
  31. data/app/services/bootybox/elements_config_service.rb +21 -0
  32. data/app/services/bootybox/navigational_context_pages_service.rb +15 -0
  33. data/app/services/bootybox/page_layout_config_service.rb +4 -0
  34. data/app/views/alchemy/elements/_contactform_editor.html.erb +6 -0
  35. data/app/views/alchemy/elements/_contactform_view.html.erb +48 -0
  36. data/app/views/alchemy/elements/bootybox/defaults/_button_editor.html.erb +8 -0
  37. data/app/views/alchemy/elements/bootybox/defaults/_button_view.html.erb +5 -0
  38. data/app/views/alchemy/elements/bootybox/defaults/_default_image_editor.html.erb +5 -0
  39. data/app/views/alchemy/elements/bootybox/defaults/_default_image_view.html.erb +8 -0
  40. data/app/views/alchemy/elements/bootybox/defaults/_default_textbox_editor.html.erb +5 -0
  41. data/app/views/alchemy/elements/bootybox/defaults/_default_textbox_view.html.erb +7 -0
  42. data/app/views/alchemy/elements/bootybox/defaults/_subheader_editor.html.erb +8 -0
  43. data/app/views/alchemy/elements/bootybox/defaults/_subheader_view.html.erb +10 -0
  44. data/app/views/alchemy/elements/bootybox/fancy/_flip_content_box_editor.html.erb +17 -0
  45. data/app/views/alchemy/elements/bootybox/fancy/_flip_content_box_view.html.erb +19 -0
  46. data/app/views/alchemy/elements/bootybox/grid/_four_columns_25_25_25_25_editor.html.haml +2 -0
  47. data/app/views/alchemy/elements/bootybox/grid/_four_columns_25_25_25_25_view.html.haml +10 -0
  48. data/app/views/alchemy/elements/bootybox/grid/_one_column_100_editor.html.haml +2 -0
  49. data/app/views/alchemy/elements/bootybox/grid/_one_column_100_view.html.haml +5 -0
  50. data/app/views/alchemy/elements/bootybox/grid/_three_columns_33_33_33_editor.html.haml +2 -0
  51. data/app/views/alchemy/elements/bootybox/grid/_three_columns_33_33_33_view.html.haml +8 -0
  52. data/app/views/alchemy/elements/bootybox/grid/_two_columns_25_75_editor.html.haml +2 -0
  53. data/app/views/alchemy/elements/bootybox/grid/_two_columns_25_75_view.html.haml +6 -0
  54. data/app/views/alchemy/elements/bootybox/grid/_two_columns_50_50_editor.html.haml +2 -0
  55. data/app/views/alchemy/elements/bootybox/grid/_two_columns_50_50_view.html.haml +6 -0
  56. data/app/views/alchemy/elements/bootybox/grid/_two_columns_66_33_editor.html.haml +3 -0
  57. data/app/views/alchemy/elements/bootybox/grid/_two_columns_66_33_view.html.haml +6 -0
  58. data/app/views/alchemy/elements/bootybox/grid/_two_columns_75_25_editor.html.haml +3 -0
  59. data/app/views/alchemy/elements/bootybox/grid/_two_columns_75_25_view.html.haml +6 -0
  60. data/app/views/alchemy/elements/bootybox/layout/_element_container_editor.html.erb +4 -0
  61. data/app/views/alchemy/elements/bootybox/layout/_element_container_view.html.erb +8 -0
  62. data/app/views/alchemy/elements/bootybox/layout/_page_header_editor.html.erb +3 -0
  63. data/app/views/alchemy/elements/bootybox/layout/_page_header_view.html.erb +6 -0
  64. data/app/views/alchemy/elements/bootybox/layout/_seperator_editor.html.erb +4 -0
  65. data/app/views/alchemy/elements/bootybox/layout/_seperator_view.html.erb +4 -0
  66. data/app/views/alchemy/elements/bootybox/navi/_sub_navi_container_editor.html.erb +3 -0
  67. data/app/views/alchemy/elements/bootybox/navi/_sub_navi_container_view.html.erb +5 -0
  68. data/app/views/alchemy/elements/bootybox/navi/_sub_navi_item_editor.html.erb +4 -0
  69. data/app/views/alchemy/elements/bootybox/navi/_sub_navi_item_view.html.erb +3 -0
  70. data/app/views/alchemy/elements/bootybox/portfolio/_portfolio_container_editor.html.erb +8 -0
  71. data/app/views/alchemy/elements/bootybox/portfolio/_portfolio_container_view.html.erb +12 -0
  72. data/app/views/alchemy/elements/bootybox/portfolio/_portfolio_item_editor.html.erb +7 -0
  73. data/app/views/alchemy/elements/bootybox/portfolio/_portfolio_item_view.html.erb +13 -0
  74. data/app/views/alchemy/elements/bootybox/slideshow/_image_slideshow_editor.html.erb +3 -0
  75. data/app/views/alchemy/elements/bootybox/slideshow/_image_slideshow_slide_editor.html.erb +4 -0
  76. data/app/views/alchemy/elements/bootybox/slideshow/_image_slideshow_slide_view.html.erb +4 -0
  77. data/app/views/alchemy/elements/bootybox/slideshow/_image_slideshow_view.html.erb +37 -0
  78. data/app/views/alchemy/elements/bootybox/slideshow_top/_slideshow_slide_container_editor.html.erb +4 -0
  79. data/app/views/alchemy/elements/bootybox/slideshow_top/_slideshow_slide_container_view.html.erb +10 -0
  80. data/app/views/alchemy/elements/bootybox/slideshow_top/_slideshow_slide_top_editor.html.erb +10 -0
  81. data/app/views/alchemy/elements/bootybox/slideshow_top/_slideshow_slide_top_view.html.erb +26 -0
  82. data/app/views/alchemy/elements/bootybox/slideshow_top/_slideshow_teaser_top_editor.html.erb +4 -0
  83. data/app/views/alchemy/elements/bootybox/slideshow_top/_slideshow_teaser_top_view.html.erb +28 -0
  84. data/app/views/alchemy/page_layouts/_default.html.erb +4 -0
  85. data/app/views/bootybox/forms/_form_group_container.html.erb +12 -0
  86. data/app/views/bootybox/forms/_form_group_input.html.erb +14 -0
  87. data/app/views/bootybox/forms/_form_group_select.html.erb +2 -0
  88. data/app/views/layouts/_footer.html.erb +5 -0
  89. data/app/views/layouts/_navigation.html.erb +32 -0
  90. data/app/views/layouts/_navigational_footer.html.erb +19 -0
  91. data/app/views/layouts/application.html.erb +42 -0
  92. data/config/elements.yml +274 -0
  93. data/config/locales/bootybox.de.yml +54 -0
  94. data/lib/bootybox.rb +19 -0
  95. data/lib/bootybox/engine.rb +41 -0
  96. data/lib/generators/bootybox/views/application_layout_generator.rb +20 -0
  97. data/lib/tasks/bootybox.rake +88 -0
  98. metadata +224 -0
@@ -0,0 +1,10 @@
1
+ <%= element_editor_for(element) do |el| -%>
2
+ <%= el.edit :header %>
3
+ <%= el.edit :sub_text %>
4
+ <%= el.edit :image %>
5
+ <%= el.edit :image_format %>
6
+ <%= el.edit :content %>
7
+ <%= el.edit :link %>
8
+
9
+
10
+ <%- end -%>
@@ -0,0 +1,26 @@
1
+ <%= element_view_for(element, tag: nil) do |el| -%>
2
+ <%= slideshow_top_slide_wrapper(element) do %>
3
+ <%= link_to "&nbsp;".html_safe, element.content_by_name(:link, :preview => session[:page_preview_mode]).ingredient, :class => "slideshow-link"%>
4
+
5
+ <% unless el.render(:content).blank? %>
6
+ <div class="container">
7
+ <div class="row">
8
+ <div class="col-md-12">
9
+ <div class="slide-textbox panel default-panel">
10
+ <div class="panel-heading">
11
+ <h2><%= el.render :header %></h2>
12
+ </div>
13
+ <div class="panel-body">
14
+ <%= el.render :content, {}, {:class =>"slide-text-content"} %>
15
+ <%= el.render :link %>
16
+ </div>
17
+ <div class="panel-footer">
18
+ <p class="text-right pricing"><%= el.render :price_text %></p>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ <% end %>
25
+ <% end %>
26
+ <%- end -%>
@@ -0,0 +1,4 @@
1
+ <%= element_editor_for(element) do |el| -%>
2
+
3
+
4
+ <%- end -%>
@@ -0,0 +1,28 @@
1
+ <%- cache_if(session[:page_preview_mode] != true, [element]) do -%>
2
+ <%= element_view_for(element) do |el| %>
3
+
4
+ <% slides = element.all_children %>
5
+
6
+ <div class="carousel slide" data-ride="xxx-carousel" id="start-slideshow-<%= element.id %>" >
7
+ <% if slides.size > 1 %>
8
+ <ol class="carousel-indicators">
9
+ <% slides.each_with_index do |sub_el, index| %>
10
+ <%= element_view_for(sub_el, tag: nil) do |el| -%>
11
+ <% (index == 0) ? item_active_class = "active" : item_active_class = "" %>
12
+ <li data-target="#start-slideshow-<%= element.id %>" data-slide-to="<%= index %>" class="<%= item_active_class %>"></li>
13
+ <%- end -%>
14
+ <% end %>
15
+ </ol>
16
+ <% end %>
17
+ <ul class="carousel-inner">
18
+ <% slides.each_with_index do |sub_el, index| %>
19
+ <%= render_element(sub_el) %>
20
+ <% end %>
21
+ </ul>
22
+ </div>
23
+ <%- end -%>
24
+ <% end %>
25
+
26
+
27
+
28
+
@@ -0,0 +1,4 @@
1
+ <div id="top-slideshow" class="<%= 'empty' if collect_elements_from_pages([@page], :from_cell => 'top_slideshow').empty? %>"><%= render_elements(:from_cell => 'top_slideshow') %></div>
2
+ <div id="page-wrapper" class="content-wrapper-row"><%= render_elements(:from_cell => 'main') %></div>
3
+
4
+
@@ -0,0 +1,12 @@
1
+ <div class="form-group <%= css_class rescue nil %> row" id="<%= id %>">
2
+ <% if method.nil? %>
3
+ <%= col({lg: 3, xs: 12}) do %>
4
+ &nbsp;
5
+ <% end %>
6
+ <% else %>
7
+ <%= form.label method, label_text, :class=>"control-label #{column_classes({lg: 3, xs: 12})}", :placeholder => (placeholder rescue nil) %>
8
+ <% end %>
9
+ <%= col({lg: 9, xs: 12}) do %>
10
+ <%= content %>
11
+ <% end %>
12
+ </div>
@@ -0,0 +1,14 @@
1
+ <% if validation.last.is_a?(Hash) %>
2
+ <% validator_options = validation.last[:validator_options] %>
3
+ <% field_id = validation.last[:id] %>
4
+ <% placeholder = validation.last[:placeholder] %>
5
+ <% validation.pop %>
6
+ <% else %>
7
+ <% validator_options = {} %>
8
+ <% field_id = nil %>
9
+ <% placeholder = nil %>
10
+ <% end %>
11
+
12
+ <%= render "/bootybox/forms/form_group_container", :form => form, :method => method, :id => "form-group-#{form.object_name}-#{method}", :label_text => label_text,
13
+ :content => form.send(type, method, jqac2_validation_for(*validation, :validator_options => validator_options, :id => field_id, :placeholder => placeholder,
14
+ :class=>"form-control", :data=>{ :toggle => "tooltip"}, :value => value, :title => (tooltip || I18n.t(method.to_s, :scope => :form_tooltips, :default => "")))) %>
@@ -0,0 +1,2 @@
1
+ <%= render "/bootybox/forms/form_group_container", :form => form, :method => method, :id => "form-group-#{form.object_name}-#{method}", :label_text => label_text,
2
+ :content => form.select(method, collection, {:selected => value}, {:data=>{ :toggle => "tooltip", :placement=>"left"}, :class => "searchable"}) %>
@@ -0,0 +1,5 @@
1
+ <div id="footer">
2
+ <% Alchemy::Page.link_container(:footer).children.visible.each do |link| %>
3
+ <%= link_to link.name, alchemy_url_for(link) %>
4
+ <% end %>
5
+ </div>
@@ -0,0 +1,32 @@
1
+ <nav class="navbar">
2
+ <div class="container-fluid navbar-container">
3
+ <div class="navbar-header">
4
+ <a class="navbar-brand" href="/"><%= image_tag "logo.png" %></a>
5
+ </div>
6
+ <div class="nav-container">
7
+ <ul class="nav navbar-nav">
8
+ <% @top_menu.each do |top_page| %>
9
+ <% if top_page.children.visible.any? %>
10
+ <li class="dropdown">
11
+ <%= link_to "#", :class => "dropdown-toggle", :id => "menu-#{top_page.id}", :data => {:toggle=>"dropdown"} do %>
12
+ <%= top_page.name %>&nbsp;<%= icon("navi-page-#{top_page.id}") %>
13
+ <% end %>
14
+ <ul class="dropdown-menu">
15
+ <% top_page.children.visible.each do |page| %>
16
+ <li><%= link_to page.name, alchemy_url_for(page) %></li>
17
+ <% end %>
18
+ </ul>
19
+ </li>
20
+ <% else %>
21
+ <li>
22
+ <%= link_to alchemy_url_for(top_page), :id => "menu-#{top_page.id}" do %>
23
+ <%= top_page.name %>&nbsp;<%= icon("navi-page-#{top_page.id}") %>
24
+ <% end %>
25
+
26
+ </li>
27
+ <% end %>
28
+ <% end %>
29
+ </ul>
30
+ </div>
31
+ </div>
32
+ </nav>
@@ -0,0 +1,19 @@
1
+ <% if !@page.nil? %>
2
+ <div id="navigational-footer">
3
+ <% if @page_previous %>
4
+ <%= link_to alchemy_url_for(@page_previous), :class => "btn btn-default pull-left navigational-footer-link navigational-footer-previous" do %>
5
+ <%= icon("fs-arrow-circle-1-left") %>&nbsp;<%= @page_previous.name %>
6
+ <% end %>
7
+ <% end %>
8
+ <% if @page_next %>
9
+ <%= link_to alchemy_url_for(@page_next), :class => "btn btn-default pull-right navigational-footer-link navigational-footer-next" do %>
10
+ <%= @page_next.name %>&nbsp;<%= icon("fs-arrow-circle-1-right") %>
11
+ <% end %>
12
+ <% end %>
13
+ <% if @page_parent %>
14
+ <div class="text-center">
15
+ <%= link_to @page_parent.name, alchemy_url_for(@page_parent), :class => "btn btn-default navigational-footer-link navigational-footer-parent" %>
16
+ </div>
17
+ <% end %>
18
+ </div>
19
+ <% end %>
@@ -0,0 +1,42 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= content_for?(:page_title) ? yield(:page_title) : (@page ? @page.name : '') %> | <%= COMPANY_NAME %></title>
5
+
6
+ <%= stylesheet_link_tag "application" %>
7
+ <%= javascript_include_tag "application" %>
8
+ <%= csrf_meta_tags %>
9
+
10
+ <% if @page && yield(:page_head).blank? && @page.meta_description.present? %>
11
+ <meta name="description" content="<%= @page.meta_description %>" />
12
+ <meta name="keywords" content="<%= @page.meta_keywords %>" />
13
+ <% elsif !yield(:page_head).blank? %>
14
+ <%= yield(:page_head) %>
15
+ <% elsif @product_base && @product_base.product.try?(:meta_description) %>
16
+ <meta name="description" content="<%= @product_base.product.meta_description %>" />
17
+ <% else %>
18
+ <meta name="description" content="Entdecken Sie <%= yield(:page_title) %> auf <%= COMPANY_NAME %>" />
19
+ <% end %>
20
+
21
+ <% if @page %>
22
+ <style type="text/css">
23
+ <%= @page.custom_css %>
24
+ </style>
25
+ <% end %>
26
+
27
+ </head>
28
+ <body class="<%= @page ? @page.color_theme : "theme-default" %>">
29
+
30
+ <%= render "layouts/navigation" %>
31
+
32
+ <div id="main">
33
+ <%= yield %>
34
+
35
+ <%= render "layouts/navigational_footer" %>
36
+
37
+ <%= render "layouts/footer" %>
38
+
39
+ </div>
40
+ <%= alchemy_preview_mode_code %>
41
+ </body>
42
+ </html>
@@ -0,0 +1,274 @@
1
+ # Template file for the elements
2
+ - name: page_header
3
+ contents:
4
+ - name: title
5
+ type: EssenceText
6
+ path: bootybox/layout
7
+ unique: true
8
+
9
+ - name: seperator
10
+ path: bootybox/layout
11
+ contents:
12
+ - name: style
13
+ type: EssenceSelect
14
+ - name: invisible
15
+ type: EssenceBoolean
16
+
17
+
18
+ - name: slideshow_teaser_top
19
+ path: bootybox/slideshow_top
20
+ elements: [slideshow_slide_top, slideshow_slide_container]
21
+ unique: true
22
+
23
+ - name: slideshow_slide_top
24
+ path: bootybox/slideshow_top
25
+ contents:
26
+ - name: sub_text
27
+ type: EssenceText
28
+ - name: header
29
+ type: EssenceText
30
+ - name: image
31
+ type: EssencePicture
32
+ image_size: 1600x400
33
+ - name: image_format
34
+ type: EssenceText
35
+ default: '1600x400'
36
+ - name: content
37
+ type: EssenceRichtext
38
+ - name: link
39
+ type: EssenceLink
40
+
41
+ - name: slideshow_slide_container
42
+ path: bootybox/slideshow_top
43
+ contents:
44
+ - name: image
45
+ type: EssencePicture
46
+ image_size: 1600x400
47
+ - name: image_format
48
+ type: EssenceText
49
+ default: '1600x400'
50
+ elements:
51
+ [one_column_100, four_columns_25_25_25_25, two_columns_50_50, two_columns_25_75, two_columns_75_25, three_columns_33_33_33]
52
+
53
+
54
+
55
+ #== Default elements like simple text boxes, Banners etc...
56
+ - name: default_textbox
57
+ path: bootybox/defaults
58
+ contents:
59
+ - name: text
60
+ type: EssenceRichtext
61
+ - name: style
62
+ type: EssenceSelect
63
+ - name: css_class
64
+ type: EssenceText
65
+ hint: Custom CSS class
66
+
67
+ - name: default_image
68
+ path: bootybox/defaults
69
+ contents:
70
+ - name: image
71
+ type: EssencePicture
72
+ - name: css_class
73
+ type: EssenceText
74
+
75
+
76
+ - name: button
77
+ path: bootybox/defaults
78
+ contents:
79
+ - name: link
80
+ type: EssenceLink
81
+ - name: position
82
+ type: EssenceSelect
83
+ - name: style
84
+ type: EssenceSelect
85
+ - name: css_class
86
+ type: EssenceText
87
+
88
+
89
+ - name: subheader
90
+ path: bootybox/defaults
91
+ contents:
92
+ - name: header_type
93
+ type: EssenceSelect
94
+ - name: title
95
+ type: EssenceText
96
+ - name: anchor
97
+ type: EssenceText
98
+ hint: ID zur verwendung in links
99
+ - name: subtitle
100
+ type: EssenceText
101
+ - name: icon
102
+ type: EssencePicture
103
+ image_format: '128x128'
104
+ - name: link
105
+ type: EssenceLink
106
+ hint: 'Wird um das gesamte Element gerendert'
107
+
108
+
109
+ #== Layout containers
110
+ #=== defining vars for allowed sub elements
111
+ - name: one_column_100
112
+ path: bootybox/grid
113
+ elements: [ portfolio_container, subheader, default_image, default_textbox, sub_navi_container ]
114
+ contents:
115
+ - name: name
116
+ type: EssenceText
117
+
118
+ - name: four_columns_25_25_25_25
119
+ max_children: 4
120
+ path: bootybox/grid
121
+ elements: &default_elements_for_grid
122
+ - default_textbox
123
+ - subheader
124
+ - default_image
125
+ - seperator
126
+ - element_container
127
+ - button
128
+ - two_columns_50_50
129
+ - two_columns_25_75
130
+ - two_columns_75_25
131
+ - portfolio_container
132
+ - flip_content_box
133
+ - image_slideshow
134
+
135
+ - name: two_columns_50_50
136
+ elements: *default_elements_for_grid
137
+ max_children: 2
138
+ contents:
139
+ - name: css_class
140
+ type: EssenceText
141
+ path: bootybox/grid
142
+
143
+ - name: two_columns_25_75
144
+ elements: *default_elements_for_grid
145
+ max_children: 2
146
+ path: bootybox/grid
147
+
148
+ - name: two_columns_75_25
149
+ elements: *default_elements_for_grid
150
+ path: bootybox/grid
151
+ max_children: 2
152
+
153
+ - name: two_columns_66_33
154
+ elements: *default_elements_for_grid
155
+ path: bootybox/grid
156
+ max_children: 2
157
+
158
+ - name: three_columns_33_33_33
159
+ elements: *default_elements_for_grid
160
+ path: bootybox/grid
161
+ max_children: 3
162
+
163
+
164
+
165
+ - name: element_container
166
+ elements: *default_elements_for_grid
167
+ path: bootybox/layout
168
+ contents:
169
+ - name: Name
170
+ type: EssenceText
171
+ - name: css_class
172
+ type: EssenceText
173
+
174
+ # portfolio container view
175
+ - name: portfolio_container
176
+ path: bootybox/portfolio
177
+ contents:
178
+ - name: name
179
+ type: EssenceText
180
+
181
+ - name: orientation
182
+ type: EssenceSelect
183
+
184
+ - name: fixed_image_size
185
+ type: EssenceText
186
+ validate: [format, presence]
187
+ validate_format_with: '[0-9]{1,}'
188
+
189
+ - name: padding
190
+ type: EssenceText
191
+ default: 5
192
+ validate: [format, presence]
193
+ validate_format_with: '[0-9]{1,}'
194
+
195
+ - name: portfolio_item
196
+ path: bootybox/portfolio
197
+ contents:
198
+ - name: name
199
+ type: EssenceText
200
+ - name: text
201
+ type: EssenceRichtext
202
+ - name: image
203
+ type: EssencePicture
204
+
205
+ # Fancy items
206
+ - name: flip_content_box
207
+ path: bootybox/fancy
208
+ contents:
209
+ - name: image
210
+ type: EssencePicture
211
+ - name: header_front
212
+ type: EssenceText
213
+ - name: subheader_front
214
+ type: EssenceText
215
+ - name: header_back
216
+ type: EssenceText
217
+ - name: subheader_back
218
+ type: EssenceText
219
+ - name: text_back
220
+ type: EssenceRichtext
221
+ - name: details_link
222
+ type: EssenceLink
223
+
224
+ - name: image_slideshow
225
+ path: bootybox/slideshow
226
+ elements: [image_slideshow_slide]
227
+
228
+ - name: image_slideshow_slide
229
+ path: bootybox/slideshow
230
+ contents:
231
+ - name: image
232
+ type: EssencePicture
233
+ - name: header
234
+ type: EssenceText
235
+
236
+
237
+ - name: contactform
238
+ contents:
239
+ - name: mail_from
240
+ type: EssenceText
241
+ validate:
242
+ - presence
243
+ - format
244
+ validate_format_as: email
245
+ - name: mail_to
246
+ type: EssenceText
247
+ validate:
248
+ - presence
249
+ - format
250
+ validate_format_as: email
251
+ - name: subject
252
+ type: EssenceText
253
+ validate:
254
+ - presence
255
+ - name: success_page
256
+ type: EssenceSelect
257
+ validate:
258
+ - presence
259
+
260
+
261
+ - name: sub_navi_container
262
+ path: bootybox/navi
263
+ elements: [sub_navi_item]
264
+ contents:
265
+ - name: name
266
+ type: EssenceText
267
+
268
+ - name: sub_navi_item
269
+ path: bootybox/navi
270
+ contents:
271
+ - name: name
272
+ type: EssenceText
273
+ - name: anchor
274
+ type: EssenceText