File: app/helpers/admin/pages_helper.rb

Overview
Module Structure
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Admin
  module: PagesHelper#1
includes
  NodeHelper ( Admin )
  ReferencesHelper ( Admin )
has properties
method: class_of_page #5
method: filter #9
method: meta_errors? #13
method: default_filter_name #17
method: status_to_display #21
method: clean_page_description / 1 #26
method: page_edit_javascripts #30

Code

   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