1 module Admin::PagesHelper
2 include Admin::NodeHelper
3 include Admin::ReferencesHelper
4
5 def class_of_page
6 @page.class
7 end
8
9 def filter
10 @page.parts.empty? ? nil : @page.parts.first.filter
11 end
12
13 def meta_errors?
14 !!(@page.errors[:slug] or @page.errors[:breadcrumb])
15 end
16
17 def default_filter_name
18 @page.parts.empty? ? "" : @page.parts[0].filter_id
19 end
20
21 def status_to_display
22 @page.status_id = 100 if @page.status_id == 90
23 @display_status = Status.selectable.map{ |s| [I18n.translate(s.name.downcase), s.id] }
24 end
25
26 def clean_page_description(page)
27 page.description.to_s.strip.gsub(/\t/,'').gsub(/\s+/,' ')
28 end
29
30 def page_edit_javascripts
31 <<-CODE
32 function addPart(form) {
33 if (validPartName()) {
34 new Ajax.Updater(
35 $('tab_control').down('.pages'),
36 '#{admin_page_parts_path}',
37 {
38 asynchronous: true,
39 evalScripts: true,
40 insertion: 'bottom',
41 onComplete: function(request){ partAdded() },
42 onLoading: function(request){ partLoading() },
43 parameters: Form.serialize(form)
44 }
45 );
46 }
47 }
48 function removePart() {
49 if(confirm('Remove the current part?')) {
50 TabControls['tab_control'].removeSelected();
51 }
52 }
53 function partAdded() {
54 var tabControl = TabControls['tab_control'];
55 $('add_part_busy').hide();
56 $('add_part_button').disabled = false;
57 $('add_part_popup').closePopup();
58 $('part_name_field').value = '';
59 tabControl.updateTabs();
60 tabControl.select(tabControl.tabs.last());
61 }
62 function partLoading() {
63 $('add_part_button').disabled = true;
64 $('add_part_busy').appear();
65 }
66 function validPartName() {
67 var partNameField = $('part_name_field');
68 var name = partNameField.value.downcase();
69 if (name.blank()) {
70 alert('Part name cannot be empty.');
71 return false;
72 }
73 if (TabControls['tab_control'].findTabByCaption(name)) {
74 alert('Part name must be unique.');
75 return false;
76 }
77 return true;
78 }
79
80 var lastPageType = '#{@page.class.name}';
81 var tagReferenceWindows = {};
82 function loadTagReference(part) {
83 var pageType = $F('page_class_name');
84 if (!tagReferenceWindows[pageType])
85 tagReferenceWindows[pageType] = new Popup.AjaxWindow("#{admin_reference_path('tags')}?class_name=" + encodeURIComponent(pageType), {reload: false});
86 var window = tagReferenceWindows[pageType];
87 if(lastPageType != pageType) {
88 $('tag_reference_link_' + part).highlight();
89 window.show();
90 } else {
91 window.toggle();
92 }
93 lastPageType = pageType;
94 return false;
95 }
96
97 var lastFilter = '#{default_filter_name}';
98 var filterWindows = {};
99 function loadFilterReference(part) {
100 var filter = $F("part_" + part + "_filter_id");
101 if (filter != "") {
102 if (!filterWindows[filter]) filterWindows[filter] = new Popup.AjaxWindow("#{admin_reference_path('filters')}?filter_name="+encodeURIComponent(filter), {reload: false});
103 var window = filterWindows[filter];
104 if(lastFilter != filter) {
105 window.show();
106 } else {
107 window.toggle();
108 }
109 lastFilter = filter;
110 } else {
111 alert('No documentation for filter.');
112 }
113 return false;
114 }
115 CODE
116 end
117 end