201 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| module OrbitApp
 | |
|     module Module
 | |
|       module WidgetUtility
 | |
|           Version = "0.2"
 | |
| 
 | |
|           module ClassMethods
 | |
|             @@widgets = {}
 | |
| 
 | |
|           def add(name,default_widget,customize_widget)
 | |
|             @@widgets[name] =  {:default_widget=>default_widget,:customize_widget=>customize_widget}
 | |
|             Hash[@@widgets.sort]
 | |
|           end
 | |
| 
 | |
|           def all
 | |
|             return @@widgets
 | |
|           end
 | |
|         end
 | |
|       
 | |
|         extend ClassMethods
 | |
|         def self.included( other )
 | |
|           other.extend( ClassMethods )
 | |
|         end
 | |
| 
 | |
|         class WidgetSet
 | |
|           attr_reader :widgets,:categories_query,:tags_query
 | |
|           def initialize(name,key,&block)
 | |
|             @widgets = []
 | |
|             @default_widget = nil
 | |
|             @categories_query = ''
 | |
|             @tags_query = ''
 | |
|             block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
 | |
|             OrbitApp::Module::WidgetUtility.add(key,@default_widget,@widgets)
 | |
|           end
 | |
| 
 | |
|           %w{categories_query tags_query}.each  do |field|
 | |
|               define_method(field){|var| instance_variable_set( "@" + field, var)}
 | |
|           end
 | |
| 
 | |
|           # def data_count(var)
 | |
|           #   @data_count = var
 | |
|           # end
 | |
| 
 | |
|           def find_by_path(path)
 | |
|             @widgets.each do |widget|
 | |
|               return widget if widget.name == path
 | |
|             end
 | |
|           end
 | |
| 
 | |
|           def get_categories
 | |
|              eval(@categories_query) rescue nil
 | |
|           end
 | |
| 
 | |
|           def get_tags
 | |
|             eval(@tags_query) rescue nil
 | |
|           end
 | |
| 
 | |
|           def default_widget_setting
 | |
|             @default_widget
 | |
|           end
 | |
| 
 | |
|           def default_widget(&block)
 | |
|             @default_widget  = DefaultWidget.new(&block)
 | |
|             # OrbitApp::Module::FrontendUtility.add()
 | |
|           end
 | |
| 
 | |
|           def customize_widget(name,&block)
 | |
|             @widgets << Widget.new(name,&block)
 | |
|           end 
 | |
| 
 | |
|           # def customize_widget(name,label,options ={})
 | |
|           #   @widgets << Widget.new(name,label,options)
 | |
|           # end
 | |
| 
 | |
|           # def customize_widget_options_fields_i18n(settings)
 | |
|           #   @customize_widget_options_fields_i18n = settings
 | |
|           # end
 | |
| 
 | |
|           def to_module_app_format
 | |
|             hash = {}
 | |
|             @widgets.collect{|t|  hash[t.name] = t.to_hash}
 | |
|             hash["default_widget"]= DefaultWidget.get_interface_args unless @default_widget.blank?
 | |
|             hash
 | |
|           end
 | |
| 
 | |
|           def get_fields
 | |
|             get_default_widget.get_fields
 | |
|           end
 | |
| 
 | |
|           def get_link_methods
 | |
|             get_default_widget.get_link_methods
 | |
|           end
 | |
| 
 | |
|           def get_default_widget
 | |
|             return @default_widget
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         class DefaultWidget
 | |
|           include DefaultWidgetTagHelper
 | |
|           STYLE = ["typeA","typeB_style2","typeB_style3","typeB_style4","typeC"]
 | |
| 
 | |
|           def  initialize(&block)
 | |
|             @query = nil
 | |
|             @image = nil
 | |
|             @more_link = {}
 | |
|             @fields = []
 | |
|             @enabled_styles = STYLE
 | |
|              block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
 | |
|           end
 | |
| 
 | |
|           def enable(args)
 | |
|             @enabled_styles = args
 | |
|           end
 | |
| 
 | |
|           def link_to_more(*args)
 | |
|             @more_link[:label_i18n] = (args[1] ?  args[1][:title_i18n] : 'default_widget.default_link_to_more' )
 | |
|             @more_link[:path_method] = args[0]
 | |
|           end
 | |
| 
 | |
|           def self.get_interface_args
 | |
|             {:name=>"default_widget",:field=>@fields,:style=>@enabled_styles,:i18n=>'default_widget.default_widget'}
 | |
|           end
 | |
| 
 | |
|           def to_module_app_format
 | |
|             {"query"=>@query,"image"=>@image,"more_link"=>@more_link,"enabled_styles"=>@enabled_styles} rescue nil
 | |
|           end
 | |
| 
 | |
|           def link_field(field_name,setting)
 | |
|             @fields << [field_name,setting,:link]
 | |
|           end
 | |
| 
 | |
|           def field(field_name)
 | |
|             @fields << [field_name,nil,:field]
 | |
|           end
 | |
| 
 | |
|           def get_fields
 | |
|             @fields
 | |
|           end
 | |
| 
 | |
|           def get_link_methods
 | |
|             return flatten_hashes(@fields.select{|t| t[2]==:link}.map{|t| Hash[t[0].to_sym,t[1]] })
 | |
|           end
 | |
| 
 | |
|           def query(var)
 | |
|             @query = var
 | |
|           end
 | |
| 
 | |
|           def image(var)
 | |
|             @image = var
 | |
|           end
 | |
| 
 | |
|           def flatten_hashes(ary)
 | |
|             Hash[*ary.map(&:to_a).flatten]
 | |
|           end
 | |
| 
 | |
|         end
 | |
| 
 | |
|         class Widget
 | |
|           attr_reader :name,:default_template,:fields
 | |
| 
 | |
|           def initialize(name,&block)
 | |
|             @name = name
 | |
|             @options  = {}
 | |
|             block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
 | |
|             
 | |
|             # @fields = options[:fields] 
 | |
|             # @label = label
 | |
|             # @style= options[:style]
 | |
|           end
 | |
|           
 | |
|           def widget_i18n(str) # "gallery.widget.widget1"
 | |
|             @widget_i18n = str
 | |
|           end          
 | |
| 
 | |
|           def style(ary)# []
 | |
|             @style = ary
 | |
|           end
 | |
|           
 | |
|           def get_options
 | |
|             @options
 | |
|           end
 | |
| 
 | |
|           def options(opt_name,*options) # "vertical",
 | |
|             option = options[0]
 | |
|             @options[opt_name] = {:label_i18n=>option[:i18n] , :opts=>option[:options_item]}
 | |
|             # options =>   :i18n => "gallery.widget_option.vertical",:options_item=>[1, 2]
 | |
|             #                        :i18n =>"gallery.album",:options_item => {"query"=>"GalleryAlbum.all", "value"=>:id, "label"=>:name}
 | |
|           end
 | |
| 
 | |
| 
 | |
|           def to_hash
 | |
|               {:name => @name,:fields=>@fields,:style=>@style,:i18n=>@widget_i18n}
 | |
|           end
 | |
| 
 | |
|           protected
 | |
|           
 | |
|         end# of widget
 | |
|     end # of WidgetRegisition
 | |
|   end # of Module
 | |
| end # of OrbitApp
 |