refinerycms-llama_widgets 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/images/refinery/icons/lock.png +0 -0
- data/app/assets/images/refinery/itoggle.png +0 -0
- data/app/assets/javascripts/refinery/engage.itoggle-min.js +17 -0
- data/app/assets/javascripts/refinery/widgets.js.coffee.erb +91 -0
- data/app/assets/stylesheets/refinery/engage.itoggle.css +94 -0
- data/app/assets/stylesheets/refinery/widgets.scss +89 -0
- data/app/controllers/refinery/widgets/admin/templates_controller.rb +28 -0
- data/app/controllers/refinery/widgets/admin/widget_types_controller.rb +59 -0
- data/app/controllers/refinery/widgets/admin/widgets_controller.rb +30 -0
- data/app/decorators/controllers/refinery/admin/pages_controller.rb +23 -0
- data/app/decorators/controllers/refinery/pages_controller.rb +13 -0
- data/app/decorators/models/refinery/page.rb +28 -0
- data/app/decorators/models/refinery/page_part.rb +16 -0
- data/app/helpers/refinery/widgets/widgets_helper.rb +38 -0
- data/app/models/refinery/widgets/content_block_widget.rb +13 -0
- data/app/models/refinery/widgets/template.rb +64 -0
- data/app/models/refinery/widgets/template_part.rb +37 -0
- data/app/models/refinery/widgets/widget.rb +108 -0
- data/app/overrides/refinery/admin/pages/_actions.rb +5 -0
- data/app/overrides/refinery/admin/pages/_form.rb +4 -0
- data/app/overrides/refinery/admin/pages/_form_page_parts.rb +5 -0
- data/app/overrides/refinery/admin/pages/_page.rb +5 -0
- data/app/views/refinery/admin/_image_picker.html.erb +66 -0
- data/app/views/refinery/admin/_nested_image_picker.html.erb +58 -0
- data/app/views/refinery/admin/pages/_form_page_parts.html.erb +37 -0
- data/app/views/refinery/admin/pages/_page_part.slim +25 -0
- data/app/views/refinery/admin/pages/_widget_fields.slim +46 -0
- data/app/views/refinery/widgets/_content_block_widget.slim +2 -0
- data/app/views/refinery/widgets/_widget.slim +1 -0
- data/app/views/refinery/widgets/admin/templates/_actions.html.erb +25 -0
- data/app/views/refinery/widgets/admin/templates/_form.html.erb +17 -0
- data/app/views/refinery/widgets/admin/templates/_page_part.slim +22 -0
- data/app/views/refinery/widgets/admin/templates/_page_parts.html.erb +37 -0
- data/app/views/refinery/widgets/admin/templates/_records.html.erb +16 -0
- data/app/views/refinery/widgets/admin/templates/_sortable_list.html.erb +5 -0
- data/app/views/refinery/widgets/admin/templates/_template.html.erb +18 -0
- data/app/views/refinery/widgets/admin/templates/_templates.html.erb +2 -0
- data/app/views/refinery/widgets/admin/templates/_widget_fields.slim +26 -0
- data/app/views/refinery/widgets/admin/templates/edit.html.erb +1 -0
- data/app/views/refinery/widgets/admin/templates/index.html.erb +7 -0
- data/app/views/refinery/widgets/admin/templates/list.slim +15 -0
- data/app/views/refinery/widgets/admin/templates/new.html.erb +1 -0
- data/app/views/refinery/widgets/admin/widget_types/new_for_page.slim +4 -0
- data/app/views/refinery/widgets/admin/widget_types/new_for_template.slim +4 -0
- data/app/views/refinery/widgets/admin/widget_types/show_for_page.slim +4 -0
- data/app/views/refinery/widgets/admin/widget_types/show_for_template.slim +4 -0
- data/app/views/refinery/widgets/admin/widgets/_content_block_widget.slim +3 -0
- data/app/views/refinery/widgets/admin/widgets/_content_block_widget_preview.slim +3 -0
- data/app/views/refinery/widgets/admin/widgets/_widget.slim +2 -0
- data/app/views/refinery/widgets/admin/widgets/_widget_preview.slim +2 -0
- data/app/views/refinery/widgets/admin/widgets/new.slim +31 -0
- data/config/locales/cs.yml +27 -0
- data/config/locales/en.yml +34 -0
- data/config/locales/es.yml +28 -0
- data/config/locales/fr.yml +27 -0
- data/config/locales/it.yml +27 -0
- data/config/locales/nb.yml +27 -0
- data/config/locales/nl.yml +27 -0
- data/config/locales/sk.yml +27 -0
- data/config/locales/tr.yml +27 -0
- data/config/locales/zh-CN.yml +29 -0
- data/config/routes.rb +29 -0
- data/db/migrate/1_create_widgets_templates.rb +22 -0
- data/db/migrate/2_create_widgets_template_parts.rb +20 -0
- data/db/migrate/3_create_widgets_widgets.rb +24 -0
- data/db/migrate/4_create_widgets_content_block_widgets.rb +16 -0
- data/db/migrate/5_add_template_id_to_refinery_pages.rb +13 -0
- data/db/migrate/6_add_locked_to_refinery_page_parts.rb +13 -0
- data/db/seeds.rb +24 -0
- data/lib/generators/refinery/templates/config/initializers/refinery/widgets.rb.erb +7 -0
- data/lib/generators/refinery/widgets_generator.rb +27 -0
- data/lib/refinery/widgets.rb +24 -0
- data/lib/refinery/widgets/acts_as_widget.rb +31 -0
- data/lib/refinery/widgets/configuration.rb +15 -0
- data/lib/refinery/widgets/engine.rb +39 -0
- data/lib/refinery/widgets/widget_type.rb +31 -0
- data/lib/refinerycms-widgets.rb +4 -0
- data/lib/tasks/refinery/widgets.rake +26 -0
- metadata +202 -0
Binary file
|
Binary file
|
@@ -0,0 +1,17 @@
|
|
1
|
+
/*---------------
|
2
|
+
* jQuery iToggle Plugin by Engage Interactive
|
3
|
+
* Examples and documentation at: http://labs.engageinteractive.co.uk/itoggle/
|
4
|
+
* Copyright (c) 2009 Engage Interactive
|
5
|
+
* Version: 1.0 (10-JUN-2009)
|
6
|
+
* Dual licensed under the MIT and GPL licenses:
|
7
|
+
* http://www.opensource.org/licenses/mit-license.php
|
8
|
+
* http://www.gnu.org/licenses/gpl.html
|
9
|
+
* Requires: jQuery v1.3 or later
|
10
|
+
---------------*/
|
11
|
+
|
12
|
+
(function($){$.fn.iToggle=function(options){clickEnabled=true;var defaults={type:'checkbox',keepLabel:true,easing:false,speed:200,onClick:function(){},onClickOn:function(){},onClickOff:function(){},onSlide:function(){},onSlideOn:function(){},onSlideOff:function(){}},settings=$.extend({},defaults,options);this.each(function(){var $this=$(this);if($this.attr('tagName')=='INPUT'){var id=$this.attr('id');label(settings.keepLabel,id);$this.addClass('iT_checkbox').before('<label class="itoggle" for="'+id+'"><span></span></label>');if($this.attr('checked')){$this.prev('label').addClass('iTon');}else{$this.prev('label').addClass('iToff');}}else{$this.children('input:'+settings.type).each(function(){var id=$(this).attr('id');label(settings.keepLabel,id);$(this).addClass('iT_checkbox').before('<label class="itoggle" for="'+id+'"><span></span></label>');if($(this).attr('checked')){$(this).prev('label').addClass('iTon');}else{$(this).prev('label').addClass('iToff');}
|
13
|
+
if(settings.type=='radio'){$(this).prev('label').addClass('iT_radio');}});}});function label(e,id){if(e==true){if(settings.type=='radio'){$('label[for='+id+']').addClass('ilabel_radio');}else{$('label[for='+id+']').addClass('ilabel');}}else{$('label[for='+id+']').remove();}}
|
14
|
+
$('label.itoggle').click(function(){if(clickEnabled==true){clickEnabled=false;if($(this).hasClass('iT_radio')){if($(this).hasClass('iTon')){clickEnabled=true;}else{slide($(this),true);}}else{slide($(this));}}
|
15
|
+
return false;});$('label.ilabel').click(function(){if(clickEnabled==true){clickEnabled=false;slide($(this).next('label.itoggle'));}
|
16
|
+
return false;});function slide($object,radio){settings.onClick.call($object);h=$object.innerHeight();t=$object.attr('for');if($object.hasClass('iTon')){settings.onClickOff.call($object);$object.animate({backgroundPosition:'100% -'+h+'px'},settings.speed,settings.easing,function(){$object.removeClass('iTon').addClass('iToff');clickEnabled=true;settings.onSlide.call(this);settings.onSlideOff.call(this);});$('input#'+t).removeAttr('checked');}else{settings.onClickOn.call($object);$object.animate({backgroundPosition:'0% -'+h+'px'},settings.speed,settings.easing,function(){$object.removeClass('iToff').addClass('iTon');clickEnabled=true;settings.onSlide.call(this);settings.onSlideOn.call(this);});$('input#'+t).attr('checked','checked');}
|
17
|
+
if(radio==true){name=$('#'+t).attr('name');slide($object.siblings('label[for]'));}}};})(jQuery);
|
@@ -0,0 +1,91 @@
|
|
1
|
+
jQuery ->
|
2
|
+
if $('#new_widget #widget_type').length > 0
|
3
|
+
$('#new_widget #widget_type.template').change (event) ->
|
4
|
+
selected = $(this).val()
|
5
|
+
if selected != ''
|
6
|
+
activePart = window.parent.$('li.ui-tabs-active').attr('aria-controls')
|
7
|
+
index = window.parent.$('#template_part_index_' + activePart).attr('data-index')
|
8
|
+
data = {sub_type: selected, index: index}
|
9
|
+
url = '/<%= Refinery::Core.backend_route %>/widgets/widget_types/new_for_template'
|
10
|
+
$.ajax({url: url, data: data}).done (data) ->
|
11
|
+
target = window.parent.$("a#add_widget_" + activePart)
|
12
|
+
$(data).insertBefore(target)
|
13
|
+
window.parent.initWidgets()
|
14
|
+
window.parent.refinery_dialog_success()
|
15
|
+
$('#new_widget #widget_type.page').change (event) ->
|
16
|
+
selected = $(this).val()
|
17
|
+
if selected != ''
|
18
|
+
activePart = window.parent.$('li.ui-tabs-active').attr('aria-controls')
|
19
|
+
index = window.parent.$('#template_part_index_' + activePart).attr('data-index')
|
20
|
+
data = {sub_type: selected, index: index}
|
21
|
+
url = '/<%= Refinery::Core.backend_route %>/widgets/widget_types/new_for_page'
|
22
|
+
$.ajax({url: url, data: data}).done (data) ->
|
23
|
+
target = window.parent.$("a#add_widget_" + activePart)
|
24
|
+
$(data).insertBefore(target)
|
25
|
+
window.parent.initWidgets()
|
26
|
+
window.parent.refinery_dialog_success()
|
27
|
+
|
28
|
+
$('[data-sortable="widgets"]').each (index, value) ->
|
29
|
+
$(value).sortable({handle: '.handle', \
|
30
|
+
items: '[data-sort-item="widget"]', \
|
31
|
+
axis: 'y', \
|
32
|
+
forcePlaceholderSize: true, \
|
33
|
+
stop: =>
|
34
|
+
assessOrder()
|
35
|
+
})
|
36
|
+
|
37
|
+
window.selectExistingWidgetForTemplate = (id) ->
|
38
|
+
activePart = window.parent.$('li.ui-tabs-active').attr('aria-controls')
|
39
|
+
index = window.parent.$('#template_part_index_' + activePart).attr('data-index')
|
40
|
+
data = {sub_type: 'Refinery::Widgets::Widget', index: index, id: id}
|
41
|
+
url = '/<%= Refinery::Core.backend_route %>/widgets/widget_types/show_for_template'
|
42
|
+
$.ajax({url: url, data: data}).done (data) ->
|
43
|
+
target = window.parent.$("a#add_widget_" + activePart)
|
44
|
+
$(data).insertBefore(target)
|
45
|
+
window.parent.initWidgets()
|
46
|
+
window.parent.refinery_dialog_success()
|
47
|
+
|
48
|
+
window.selectExistingWidgetForPage = (id) ->
|
49
|
+
activePart = window.parent.$('li.ui-tabs-active').attr('aria-controls')
|
50
|
+
activePart = activePart.replace('page_part_', '')
|
51
|
+
index = window.parent.$('#template_part_index_' + activePart).attr('data-index')
|
52
|
+
data = {sub_type: 'Refinery::Widgets::Widget', index: index, id: id}
|
53
|
+
url = '/<%= Refinery::Core.backend_route %>/widgets/widget_types/show_for_page'
|
54
|
+
$.ajax({url: url, data: data}).done (data) ->
|
55
|
+
target = window.parent.$("a#add_widget_" + activePart)
|
56
|
+
$(data).insertBefore(target)
|
57
|
+
window.parent.initWidgets()
|
58
|
+
window.parent.refinery_dialog_success()
|
59
|
+
|
60
|
+
window.initWidgets = ->
|
61
|
+
WYMeditor.init()
|
62
|
+
assessOrder()
|
63
|
+
|
64
|
+
window.linkFromDialog = (linkUrl) ->
|
65
|
+
window.parent.location = linkUrl
|
66
|
+
window.parent.refinery_dialog_success()
|
67
|
+
|
68
|
+
window.removeWidget = (link) ->
|
69
|
+
widget = $(link).parents('.widget')
|
70
|
+
widget.find('input[data-meta="destroy"]').val('1')
|
71
|
+
widget.hide()
|
72
|
+
|
73
|
+
window.toggleWidget = (link) ->
|
74
|
+
widgetInner = $(link).parents('.widget').find('.inner')
|
75
|
+
widgetInner.slideToggle()
|
76
|
+
|
77
|
+
window.showWidgetEdit = (link) ->
|
78
|
+
widget = $(link).parents('.widget')
|
79
|
+
$(widget).find('.previewing').slideToggle()
|
80
|
+
$(widget).find('.editing').slideToggle()
|
81
|
+
$(link).remove()
|
82
|
+
|
83
|
+
window.assessOrder = ->
|
84
|
+
$('[data-sortable="widgets"]').each (index, value) ->
|
85
|
+
$(value).find('[data-sort-item="widget"]').each (index, value) ->
|
86
|
+
$(value).find('input[data-meta="position"]').val(index)
|
87
|
+
|
88
|
+
window.removeField = (element) ->
|
89
|
+
fieldset = $(element).closest('fieldset')
|
90
|
+
fieldset.find('.destroy').val('1')
|
91
|
+
fieldset.hide()
|
@@ -0,0 +1,94 @@
|
|
1
|
+
/* ---------------------------------------------
|
2
|
+
TOGGLE.CSS
|
3
|
+
-----------------------------------------------*/
|
4
|
+
|
5
|
+
div#itoggle{
|
6
|
+
background:#FFF;
|
7
|
+
padding:20px 20px 0;
|
8
|
+
-moz-border-radius:10px;
|
9
|
+
-webkit-border-radius:10px;
|
10
|
+
color:#333;
|
11
|
+
}
|
12
|
+
div#itoggle h3{
|
13
|
+
margin-bottom:4px;
|
14
|
+
font-size: 14px;
|
15
|
+
font-weight:bold;
|
16
|
+
}
|
17
|
+
div#itoggle p{
|
18
|
+
color:#666;
|
19
|
+
margin-bottom:10px;
|
20
|
+
}
|
21
|
+
|
22
|
+
div#console{
|
23
|
+
display:none;
|
24
|
+
position:absolute;
|
25
|
+
top:8px;
|
26
|
+
right:8px;
|
27
|
+
width:160px;
|
28
|
+
padding:6px 8px 8px 8px;
|
29
|
+
text-align:right;
|
30
|
+
background:#000;
|
31
|
+
-moz-border-radius:6px;
|
32
|
+
-webkit-border-radius:6px;
|
33
|
+
background:url(/global/images/console.gif);
|
34
|
+
}
|
35
|
+
div#console p{
|
36
|
+
margin:0;
|
37
|
+
font-size:11px;
|
38
|
+
font-family:"Courier New", Courier, monospace;
|
39
|
+
}
|
40
|
+
|
41
|
+
div#itoggle input.iT_checkbox_on{
|
42
|
+
display:block !important;
|
43
|
+
float:left;
|
44
|
+
position:relative !important;
|
45
|
+
top:-43px !important;
|
46
|
+
left:100px !important;
|
47
|
+
margin-bottom:-43px;
|
48
|
+
}
|
49
|
+
|
50
|
+
/* -----------------------------
|
51
|
+
This is the important bit
|
52
|
+
-------------------------------*/
|
53
|
+
|
54
|
+
div#itoggle label.ilabel{
|
55
|
+
display:block;
|
56
|
+
font-size:12px;
|
57
|
+
padding-bottom:10px;
|
58
|
+
cursor:pointer;
|
59
|
+
}
|
60
|
+
|
61
|
+
div#itoggle label.itoggle,
|
62
|
+
div#itoggle label.itoggle span{
|
63
|
+
display: block;
|
64
|
+
width: 93px;
|
65
|
+
height: 27px;
|
66
|
+
margin-bottom: 20px;
|
67
|
+
background: url(../images/itoggle.png) left bottom no-repeat;
|
68
|
+
cursor:pointer;
|
69
|
+
text-indent:-5000px;
|
70
|
+
}
|
71
|
+
div#itoggle label.itoggle.iToff{
|
72
|
+
background-position:right bottom;
|
73
|
+
}
|
74
|
+
div#itoggle label.itoggle span{
|
75
|
+
background-position: left top;
|
76
|
+
margin: 0;
|
77
|
+
}
|
78
|
+
div#itoggle input.iT_checkbox{
|
79
|
+
position:absolute;
|
80
|
+
top:-9999px;
|
81
|
+
left:-9999px;
|
82
|
+
}
|
83
|
+
|
84
|
+
/*
|
85
|
+
If you want the corners to be
|
86
|
+
transparent, add these two lines
|
87
|
+
to the main block above. Only
|
88
|
+
works on webkit and mozilla browsers
|
89
|
+
For more reliable results, make your
|
90
|
+
own png using the supplied .psd
|
91
|
+
|
92
|
+
-moz-border-radius:6px;
|
93
|
+
-webkit-border-radius:6px;
|
94
|
+
*/
|
@@ -0,0 +1,89 @@
|
|
1
|
+
.inline{ float:left; margin-top: 5px; margin-right: 20px; }
|
2
|
+
.tab-area{ border: 1px solid #CCC; padding: 10px; }
|
3
|
+
.reuseable-block{ border: 1px solid #CCC }
|
4
|
+
.widgets.ui-sortable {
|
5
|
+
.ui-sortable-placeholder {
|
6
|
+
background-color: #FFFF99;
|
7
|
+
border: 1px dashed #CCC;
|
8
|
+
border-radius: 5px;
|
9
|
+
-moz-border-radius: 5px;
|
10
|
+
-webkit-border-radius: 5px;
|
11
|
+
visibility: visible !important;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
.widget{
|
15
|
+
border-radius: 5px;
|
16
|
+
-moz-border-radius: 5px;
|
17
|
+
-webkit-border-radius: 5px;
|
18
|
+
background-color: #F5F5F5;
|
19
|
+
border: 1px solid #CCC;
|
20
|
+
margin: 20px 0px 10px 0px;
|
21
|
+
padding: 5px;
|
22
|
+
.left {
|
23
|
+
float: left;
|
24
|
+
}
|
25
|
+
.right {
|
26
|
+
float: right;
|
27
|
+
.icons {
|
28
|
+
img {
|
29
|
+
margin-left: 10px;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
.type {
|
34
|
+
margin-left: 20px;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
.clear {
|
38
|
+
clear: both;
|
39
|
+
}
|
40
|
+
table.existing_widgets, table.select_template {
|
41
|
+
border-collapse: collapse;
|
42
|
+
border-spacing: 0;
|
43
|
+
width: 100%;
|
44
|
+
tr {
|
45
|
+
&.dark { background-color: #EEE; }
|
46
|
+
&.light { background-color: #FFF; }
|
47
|
+
td, th {
|
48
|
+
padding-left: 10px;
|
49
|
+
border: 1px solid #CCC;
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
.sub-title { font-size: 0.9em; opacity: 0.8; }
|
54
|
+
|
55
|
+
form fieldset {
|
56
|
+
margin: 5px;
|
57
|
+
border: 1px solid #DDD;
|
58
|
+
padding-top: 0px;
|
59
|
+
}
|
60
|
+
|
61
|
+
.s-margin { margin-top: 5px; margin-bottom: 5px; }
|
62
|
+
.m-margin { margin-top: 10px; margin-bottom: 10px; }
|
63
|
+
.l-margin { margin-top: 20px; margin-bottom: 20px; }
|
64
|
+
.xl-margin { margin-top: 40px; margin-bottom: 40px; }
|
65
|
+
|
66
|
+
.row { padding-left: 15px; }
|
67
|
+
.row:before,.row:after{content:" ";display:table;}
|
68
|
+
.row:after{clear:both;}
|
69
|
+
.row:before,.row:after{content:" ";display:table;}
|
70
|
+
.row:after{clear:both;}
|
71
|
+
@media (min-width:768px){.row{margin-left:-15px;margin-right:-15px;}}.row .row{margin-left:-15px;margin-right:-15px;}
|
72
|
+
.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-left:0px;padding-right:0px; margin-left: 0px; margin-right: 0px;}
|
73
|
+
.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{float:left;}
|
74
|
+
.col-1{width:8.333333333333332% !important;}
|
75
|
+
.col-2{width:16.666666666666664% !important;}
|
76
|
+
.col-3{width:25% !important;}
|
77
|
+
.col-4{width:33.33333333333333% !important;}
|
78
|
+
.col-5{width:41.66666666666667% !important;}
|
79
|
+
.col-6{width:50% !important;}
|
80
|
+
.col-7{width:58.333333333333336% !important;}
|
81
|
+
.col-8{width:66.66666666666666% !important;}
|
82
|
+
.col-9{width:75% !important;}
|
83
|
+
.col-10{width:83.33333333333334% !important;}
|
84
|
+
.col-11{width:91.66666666666666% !important;}
|
85
|
+
.col-12{width:100% !important;}
|
86
|
+
|
87
|
+
.widget .handle {
|
88
|
+
float: left;
|
89
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Widgets
|
3
|
+
module Admin
|
4
|
+
class TemplatesController < ::Refinery::AdminController
|
5
|
+
|
6
|
+
def list
|
7
|
+
@templates = Template.order(:position)
|
8
|
+
@parent_id = params[:parent_id]
|
9
|
+
end
|
10
|
+
|
11
|
+
crudify :'refinery/widgets/template',
|
12
|
+
:title_attribute => 'name',
|
13
|
+
:xhr_paging => true
|
14
|
+
|
15
|
+
before_filter :check_for_pages!, :only => :destroy
|
16
|
+
|
17
|
+
def check_for_pages!
|
18
|
+
if Refinery::Widgets::Template.find(params[:id]).pages.any?
|
19
|
+
redirect_to refinery.widgets_admin_templates_path,
|
20
|
+
:notice => 'Please delete any pages using this template before destroying it.'
|
21
|
+
return
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Widgets
|
3
|
+
module Admin
|
4
|
+
class WidgetTypesController < ::Refinery::AdminController
|
5
|
+
|
6
|
+
layout false
|
7
|
+
|
8
|
+
def new_for_template
|
9
|
+
set_template_and_template_part_and_widget
|
10
|
+
@widget.send("#{@widget.widget_type.association_name}=", @widget.widget_type.klass.new)
|
11
|
+
end
|
12
|
+
|
13
|
+
def new_for_page
|
14
|
+
set_page_and_page_part_and_widget
|
15
|
+
@widget.send("#{@widget.widget_type.association_name}=", @widget.widget_type.klass.new)
|
16
|
+
end
|
17
|
+
|
18
|
+
def show_for_template
|
19
|
+
set_template_and_template_part_and_widget
|
20
|
+
widget = Widget.find(params[:id])
|
21
|
+
@widget.send("#{@widget.widget_type.association_name}=", widget)
|
22
|
+
@widget.locked = widget.locked
|
23
|
+
@widget.name = widget.name
|
24
|
+
end
|
25
|
+
|
26
|
+
def show_for_page
|
27
|
+
set_page_and_page_part_and_widget
|
28
|
+
widget = Widget.find(params[:id])
|
29
|
+
@widget.send("#{@widget.widget_type.association_name}=", widget)
|
30
|
+
@widget.locked = widget.locked
|
31
|
+
@widget.name = widget.name
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def set_template_and_template_part_and_widget
|
37
|
+
@template_part_index = params[:index] if params[:index].present?
|
38
|
+
@template = Template.new
|
39
|
+
@template_part = @template.template_parts.build
|
40
|
+
sub_type = params[:sub_type]
|
41
|
+
@widget = @template_part.widgets.build(sub_type: sub_type)
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_page_and_page_part_and_widget
|
45
|
+
@page_part_index = params[:index] if params[:index].present?
|
46
|
+
@page = Page.new
|
47
|
+
@page_part = @page.parts.build
|
48
|
+
sub_type = params[:sub_type]
|
49
|
+
@widget = @page_part.widgets.build(sub_type: sub_type)
|
50
|
+
end
|
51
|
+
|
52
|
+
def restrict_controller
|
53
|
+
# no restrictions
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Widgets
|
3
|
+
module Admin
|
4
|
+
class WidgetsController < ::Refinery::AdminController
|
5
|
+
|
6
|
+
crudify :'refinery/widgets/widget',
|
7
|
+
:title_attribute => 'name',
|
8
|
+
:xhr_paging => true
|
9
|
+
|
10
|
+
def template
|
11
|
+
@widgets = Refinery::Widgets::Widget.on_template.reusable
|
12
|
+
render :action => :new
|
13
|
+
end
|
14
|
+
|
15
|
+
def page
|
16
|
+
@widgets = Refinery::Widgets::Widget.on_page.reusable
|
17
|
+
render :action => :new
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def restrict_controller
|
23
|
+
super unless %w{ template page }.include? action_name
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Refinery::Admin::PagesController.class_eval do
|
2
|
+
before_filter :load_valid_templates, :only => [:edit, :new, :update, :create]
|
3
|
+
|
4
|
+
def render(*args)
|
5
|
+
if params[:action] == 'new'
|
6
|
+
if params[:template_id]
|
7
|
+
@template = Refinery::Widgets::Template.find(params[:template_id])
|
8
|
+
@page.parts = []
|
9
|
+
@template.template_parts.each_with_index do |template_part, index|
|
10
|
+
page_part = Refinery::PagePart.new(:title => template_part.name, :position => index, :locked => template_part.locked)
|
11
|
+
template_part.widgets.each do |widget|
|
12
|
+
w = widget.dup_by_ref
|
13
|
+
w.locked = true
|
14
|
+
w.layout = true
|
15
|
+
page_part.widgets << w
|
16
|
+
end
|
17
|
+
@page.parts << page_part
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|