orbit4-5/lib/orbit_app/module/side_bar.rb

101 lines
2.4 KiB
Ruby

module OrbitApp
module Module
module SideBarRegistration
Version = "0.5"
module ClassMethods
#initiate a blank array for generating the side bar
cattr_accessor :side_bars
self.side_bars = []
def add(var)
self.side_bars << var
end
def find_by_key(key)
self.side_bars.each{|t|
return t if t.name.eql?(key)
}
return nil
end
def render_all(request,params,user,current_module_app)
self.side_bars.collect{|t| t.render(request,params,user,current_module_app)}.join.html_safe
end
def all
return self.side_bars
end
def all_get_ordered!
self.side_bars.sort! {|x,y| x.get_sidebar_order! <=> y.get_sidebar_order! }
end
end
extend ClassMethods
def self.included(other)
other.extend(ClassMethods)
end
class SideBar
include SideBarRenderer
def initialize(name = '',key,get_module_app,&block)
@head_label = name
@head_link = ""
@app_base_path = ''
@active_for_controllers = []
@module_app_key = key
@get_module_app = get_module_app
@sidebar_order = 0
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
SideBarRegistration.add(self)
SideBarRegistration.all_get_ordered!
end
def get_sidebar_order!
@sidebar_order = (get_module_app.sidebar_order rescue 0)
end
def get_icon_class
@icon_class
end
def get_module_app
@get_module_app.call
end
def get_module_app_key
@module_app_key
end
def head_label_i18n(var,options ={})
@head_label = var
@icon_class = options[:icon_class]
end
def head_link_path(var)
@head_link = var
end
def active_for_controllers(var)
@active_for_controllers = var
end
protected
def set_controllers_scope
var = @active_for_controllers
@active_for_controllers = []
var[:private].each do |controller|
@active_for_controllers << "admin/"+controller
end unless var[:private].nil?
var[:public].each do |controller|
@active_for_controllers << controller
end unless var[:public].nil?
end
end
end
end
end