put module app json into init,making orbit app work with module app.
This commit is contained in:
		
							parent
							
								
									3d573680b2
								
							
						
					
					
						commit
						f9bcb27efc
					
				|  | @ -31,9 +31,9 @@ class Admin::PagePartsController < ApplicationController | ||||||
| 	 | 	 | ||||||
| 	@widget_path = @part.widget_path ? @part.widget_path : @module_app.widgets.keys[0] | 	@widget_path = @part.widget_path ? @part.widget_path : @module_app.widgets.keys[0] | ||||||
| 	 | 	 | ||||||
| 	if @module_app.widgets.any?{|b| b.class == Array} | 	# if @module_app.widgets.any?{|b| b.class == Array} | ||||||
|       @widget_style =  @module_app.widgets[@widget_path] if !@widget_path.blank? && !@module_app.widgets.blank? |  #      @widget_style =  @module_app.widgets[@widget_path] if !@widget_path.blank? && !@module_app.widgets.blank? | ||||||
| 	end | 	# end | ||||||
| 	 | 	 | ||||||
|       case @module_app.key |       case @module_app.key | ||||||
|         when 'announcement' |         when 'announcement' | ||||||
|  | @ -119,7 +119,6 @@ class Admin::PagePartsController < ApplicationController | ||||||
|    |    | ||||||
|   def reload_widget_styles |   def reload_widget_styles | ||||||
|     @module_app = ModuleApp.find(params[:module_app_id]) |     @module_app = ModuleApp.find(params[:module_app_id]) | ||||||
| 	 |  | ||||||
|     @widget_style =  @module_app.widgets[params[:id]] |     @widget_style =  @module_app.widgets[params[:id]] | ||||||
|      |      | ||||||
|     respond_to do |format| |     respond_to do |format| | ||||||
|  |  | ||||||
|  | @ -4,7 +4,8 @@ class Item | ||||||
|   include Mongoid::Timestamps |   include Mongoid::Timestamps | ||||||
|   include Mongoid::Tree |   include Mongoid::Tree | ||||||
|   include Mongoid::Tree::Ordering |   include Mongoid::Tree::Ordering | ||||||
|    |   LIST = YAML.load(File.read('config/list.yml')) | ||||||
|  | 
 | ||||||
|   field :name |   field :name | ||||||
|   field :path |   field :path | ||||||
|   field :is_published, :type => Boolean, :default => false |   field :is_published, :type => Boolean, :default => false | ||||||
|  | @ -15,7 +16,7 @@ class Item | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|   validates_format_of :name, :with => /^[0-9a-zA-Z\-_]+$/ |   validates_format_of :name, :with => /^[0-9a-zA-Z\-_]+$/ | ||||||
|   validates :name, :exclusion => { :in => LIST[:forbidden_item_names] } |   # validates :name, :exclusion => { :in => LIST[:forbidden_item_names] } | ||||||
|   validates_uniqueness_of :name, :scope => :parent_id |   validates_uniqueness_of :name, :scope => :parent_id | ||||||
|   validates_presence_of :name |   validates_presence_of :name | ||||||
|   validates_associated :parent, :children |   validates_associated :parent, :children | ||||||
|  |  | ||||||
|  | @ -5,30 +5,45 @@ class ModuleApp | ||||||
| 
 | 
 | ||||||
|   field :key |   field :key | ||||||
|   field :title |   field :title | ||||||
|   field :version | 
 | ||||||
|   field :organization |  | ||||||
|   field :author |  | ||||||
|   field :intro |  | ||||||
|   field :update_info |  | ||||||
|   field :create_date |  | ||||||
|   field :enable_frontend, type: Boolean, :default => true |  | ||||||
|    |  | ||||||
|   field :app_pages ,type: Array |  | ||||||
|   # field :widgets ,type: Array |  | ||||||
|   field :widgets ,type: Hash |  | ||||||
|   field :widget_fields ,type: Array |  | ||||||
|      |  | ||||||
|   has_many :managers,as: :managing_app ,:class_name => "AppManager" ,:dependent => :destroy#,:foreign_key => "managing_app_id",:inverse_of => :managing_app |   has_many :managers,as: :managing_app ,:class_name => "AppManager" ,:dependent => :destroy#,:foreign_key => "managing_app_id",:inverse_of => :managing_app | ||||||
|   has_many :sub_managers,as: :sub_managing_app ,:class_name => "AppManager", :dependent => :destroy#,:foreign_key => "sub_managing_app_id",:inverse_of => :sub_managing_app |   has_many :sub_managers,as: :sub_managing_app ,:class_name => "AppManager", :dependent => :destroy#,:foreign_key => "sub_managing_app_id",:inverse_of => :sub_managing_app | ||||||
|    |    | ||||||
|   has_many :tags |   # has_many :tags | ||||||
|   has_many :page_parts |   has_many :page_parts | ||||||
|   has_many :pages |   has_many :pages | ||||||
|    |    | ||||||
|   has_one :app_auth,dependent: :delete |   has_one :app_auth,dependent: :delete | ||||||
|    | 
 | ||||||
|   before_save :set_key |   before_save :set_key | ||||||
|    | 
 | ||||||
|  |   def get_registration | ||||||
|  |     OrbitApp::Module::Registration.find_by_key(key) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   # %w{label_i18n }.each  do |field| | ||||||
|  |   #     define_method(field){|var| get_registration.send("get_#{m}") } | ||||||
|  |   # end | ||||||
|  | 
 | ||||||
|  |   def label_i18n | ||||||
|  |     reg = get_registration | ||||||
|  |     reg.nil? ?  'Init is not defined completely' : get_registration.get_label_i18n | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   # def method_missing(m, *args, &block)   | ||||||
|  |   #   # get_registration.send("get_#{m}") | ||||||
|  |   # end   | ||||||
|  | 
 | ||||||
|  |   def using_default_widget? | ||||||
|  |     !get_registration.get_default_widget.blank? | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def get_widget_for_select | ||||||
|  |     widgets = get_registration.get_widgets | ||||||
|  |     ary = widgets.collect{|k,v| [I18n.t(v["label"]),k]} | ||||||
|  |     ary << [I18n.t('widget.default_widget'),'default_widget']if using_default_widget? | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   def is_manager?(user) |   def is_manager?(user) | ||||||
|     managing_users.include?(user) |     managing_users.include?(user) | ||||||
|   end |   end | ||||||
|  | @ -79,6 +94,10 @@ class ModuleApp | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|    |    | ||||||
|  |   def label | ||||||
|  |     I18n.t(label_i18n) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   protected |   protected | ||||||
|    |    | ||||||
|   def set_key |   def set_key | ||||||
|  |  | ||||||
|  | @ -10,12 +10,12 @@ | ||||||
| </div> | </div> | ||||||
| 
 | 
 | ||||||
| <span id='module_app_list'> | <span id='module_app_list'> | ||||||
| 	<%= f.select :module_app, options_from_collection_for_select(@module_apps, :id, :title, :selected => @module_app.id), {}, {:rel => admin_page_parts_path} %> | 	<%= f.select :module_app, options_from_collection_for_select(@module_apps, :id, :label, :selected => @module_app.id), {}, {:rel => admin_page_parts_path} %> | ||||||
| </span> | </span> | ||||||
| 
 | 
 | ||||||
| <span id='widget_list'> | <span id='widget_list'> | ||||||
| 	<%#= f.select :widget_path, @module_app.widgets.collect{|widget| [widget.humanize, widget]}, :selected => @part.widget_path %> | 	<%#= f.select :widget_path, @module_app.widgets.collect{|widget| [widget.humanize, widget]}, :selected => @part.widget_path %> | ||||||
| 	<%= f.select :widget_path, @module_app.widgets.collect{|k,v| [k.humanize, k]}, {}, { :selected => @part.widget_path, :rel => admin_page_parts_path } %> | 	<%= f.select :widget_path, @module_app.get_widget_for_select, {}, { :selected => @part.widget_path, :rel => admin_page_parts_path } %> | ||||||
| </span> | </span> | ||||||
| 
 | 
 | ||||||
| <span id='widget_style_list'> | <span id='widget_style_list'> | ||||||
|  | @ -34,18 +34,10 @@ | ||||||
| </span> | </span> | ||||||
| 
 | 
 | ||||||
| <span id='widget_field'> | <span id='widget_field'> | ||||||
| 	 |  | ||||||
| 	<%= render 'widget_fields' %> | 	<%= render 'widget_fields' %> | ||||||
| 					 |  | ||||||
| 	<%#= f.label :widget_field %> |  | ||||||
| 	<%# @module_app.widget_fields.each_with_index do |widget_field, i| %> |  | ||||||
| 		<%#= i+1 %> |  | ||||||
| 		<%#= select_tag "page_part[widget_field][]", options_for_select(@module_app.widget_fields.collect{|widget_field| [widget_field.humanize, widget_field]}, (@part.widget_field ? @part.widget_field[i] : nil) ), :include_blank => true %> <br /> |  | ||||||
| 	<%# end %>	 |  | ||||||
| 	 |  | ||||||
| 	<%#= select_tag "page_part[widget_field][]", options_for_select(@module_app.widget_fields.collect{|widget_field| [widget_field.humanize, widget_field]}, @part.widget_field.collect{|widget_field| widget_field}), {:multiple => :multiple, :size => 6} %> |  | ||||||
| </span> | </span> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| <div id="widget_data_count"> | <div id="widget_data_count"> | ||||||
| <%= f.label :widget_data_count %> | <%= f.label :widget_data_count %> | ||||||
| <%= f.text_field :widget_data_count %> | <%= f.text_field :widget_data_count %> | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| $('#widget_list select').html("<%= j options_for_select(@module_app.widgets.collect{|k,v| k}) %>"); | $('#widget_list select').html("<%= j options_for_select(@module_app.get_widget_for_select) %>"); | ||||||
| $('#widget_style_list').html("<%= escape_javascript(select 'page_part', 'widget_style', @module_app.widgets[@widget_path]) if !@widget_path.blank? %>"); | $('#widget_style_list').html("<%= escape_javascript(select 'page_part', 'widget_style', @module_app.widgets[@widget_path]) if !@widget_path.blank? %>"); | ||||||
| $('#widget_field').html("<%= j render 'widget_fields' %>"); | $('#widget_field').html("<%= j render 'widget_fields' %>"); | ||||||
| $('#widget_category').html("<%= j render 'widget_categories' %>"); | $('#widget_category').html("<%= j render 'widget_categories' %>"); | ||||||
|  |  | ||||||
|  | @ -70,3 +70,10 @@ widget_field_type: | ||||||
|   - tag |   - tag | ||||||
|   - viewcount |   - viewcount | ||||||
|   - poster |   - poster | ||||||
|  | 
 | ||||||
|  | default_widget_style: | ||||||
|  |   - style1 | ||||||
|  |   - style2 | ||||||
|  |   - style3 | ||||||
|  |   - style4 | ||||||
|  |   - style5 | ||||||
|  | @ -864,7 +864,14 @@ zh_tw: | ||||||
|           one: "有 1 個錯誤發生使得「%{model}」無法被儲存。" |           one: "有 1 個錯誤發生使得「%{model}」無法被儲存。" | ||||||
|           other: "有 %{count} 個錯誤發生使得「%{model}」無法被儲存。" |           other: "有 %{count} 個錯誤發生使得「%{model}」無法被儲存。" | ||||||
|         body: "以下欄位發生問題:" |         body: "以下欄位發生問題:" | ||||||
| 
 |   widget: | ||||||
|  |     default_widget: 系統預設Widget | ||||||
|  |     _default_widget: | ||||||
|  |       style1: 表格列表 | ||||||
|  |       style2: 單行列佐圖(同邊) | ||||||
|  |       style3: 多行列佐圖(同邊) | ||||||
|  |       style4: 多行列佐圖(異邊) | ||||||
|  |       style5:  單行列佐單圖(同邊) | ||||||
| # : <<<<<<< HEAD | # : <<<<<<< HEAD | ||||||
|   mongoid: |   mongoid: | ||||||
|     models: |     models: | ||||||
|  |  | ||||||
|  | @ -4,6 +4,8 @@ require  "orbit_app/helper/renderer" | ||||||
| require  "orbit_app/helper/side_bar_renderer" | require  "orbit_app/helper/side_bar_renderer" | ||||||
| require  "orbit_app/helper/context_link_renderer" | require  "orbit_app/helper/context_link_renderer" | ||||||
| require  "orbit_app/module/side_bar" | require  "orbit_app/module/side_bar" | ||||||
|  | require  "orbit_app/module/widget" | ||||||
|  | require  "orbit_app/module/front_end" | ||||||
| require  "orbit_app/plugin/summary" | require  "orbit_app/plugin/summary" | ||||||
| require  "orbit_app/plugin/registration" | require  "orbit_app/plugin/registration" | ||||||
| require  "orbit_app/module/summary" | require  "orbit_app/module/summary" | ||||||
|  |  | ||||||
|  | @ -0,0 +1,56 @@ | ||||||
|  | module OrbitApp | ||||||
|  |     module Module | ||||||
|  |       module FrontendUtility | ||||||
|  |           Version = "0.1" | ||||||
|  | 
 | ||||||
|  |           module ClassMethods | ||||||
|  |             @@frontend_pages = [] | ||||||
|  | 
 | ||||||
|  |           def add(var) | ||||||
|  |             @@frontend_pages << var | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def all | ||||||
|  |             return @@frontend_pages | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |         end | ||||||
|  |        | ||||||
|  |         extend ClassMethods | ||||||
|  |         def self.included( other ) | ||||||
|  |           other.extend( ClassMethods ) | ||||||
|  |         end | ||||||
|  | 
 | ||||||
|  |         class AppPageSet | ||||||
|  |           def initialize(&block) | ||||||
|  |             @frontend_pages = [] | ||||||
|  |             block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def app_page(name,options ={}) | ||||||
|  |             @frontend_pages << AppPage.new(name,options) | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def to_module_app_format | ||||||
|  |             @frontend_pages.collect{|t| t.name} | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |         end | ||||||
|  | 
 | ||||||
|  |         class AppPage | ||||||
|  |           attr_reader :name | ||||||
|  | 
 | ||||||
|  |           def initialize(name,options ={}) | ||||||
|  |             @name = name | ||||||
|  |           end | ||||||
|  |            | ||||||
|  |           def finalize! | ||||||
|  | 
 | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           protected | ||||||
|  |            | ||||||
|  |         end# of AppPage | ||||||
|  |     end # of FrontendUtility | ||||||
|  |   end # of Module | ||||||
|  | end # of OrbitApp | ||||||
|  | @ -12,7 +12,7 @@ module OrbitApp | ||||||
| 
 | 
 | ||||||
|           def find_by_key(key) |           def find_by_key(key) | ||||||
|             @@registrations.each{|t| |             @@registrations.each{|t| | ||||||
|               return t if t.name == key |               return t if t.key == key | ||||||
|             } |             } | ||||||
|             return nil |             return nil | ||||||
|           end |           end | ||||||
|  | @ -28,20 +28,69 @@ module OrbitApp | ||||||
|         end |         end | ||||||
| 
 | 
 | ||||||
|         class DataSheet |         class DataSheet | ||||||
|           attr_reader :name |           attr_reader :name,:key,:base_path,:module_label | ||||||
|           attr_reader :base_path |  | ||||||
| 
 | 
 | ||||||
|           def initialize(name, &block) |           def initialize(name, &block) | ||||||
|             @name = name |             @name = name | ||||||
|  |             @key = name.underscore.singularize | ||||||
|             @side_bar = nil |             @side_bar = nil | ||||||
|  |             @front_end_app_pages = nil | ||||||
|             block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? |             block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? | ||||||
|  |             setup_module_app | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def setup_module_app | ||||||
|  |             module_app = ModuleApp.first(conditions: {:key=>@key,:title=>name}) | ||||||
|  |             module_app = ModuleApp.new(:key=>@key,:title=>name) if module_app.nil? | ||||||
|  | 
 | ||||||
|  |             begin | ||||||
|  |               module_app.save(:validate=>false) | ||||||
|  |             rescue | ||||||
|  |               retry | ||||||
|  |             end | ||||||
|  | 
 | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def get_label_i18n | ||||||
|  |             @module_label  | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def get_default_widget | ||||||
|  |             if @widget_set.nil? # Init not defining widget | ||||||
|  |               return {} | ||||||
|  |             elsif @widget_set.get_default_widget.nil? # Init had defining widget,but say nothing about default_widget | ||||||
|  |               return {} | ||||||
|  |               else | ||||||
|  |                 @widget_set.get_default_widget.to_module_app_format | ||||||
|  |             end | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def get_enable_frontend | ||||||
|  |             (@front_end_app_pages.nil? ? false : true) | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def get_app_pages | ||||||
|  |             @front_end_app_pages.nil? ? [] : @front_end_app_pages.to_module_app_format | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def get_widgets | ||||||
|  |             @widget_set.nil? ? {} : @widget_set.to_module_app_format | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def get_categories | ||||||
|  |             eval(@widget_set.categories_query) rescue nil | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def  get_tags | ||||||
|  |             eval(@widget_set.tags_query) rescue nil | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def front_end(&block) | ||||||
|  |             @front_end_app_pages = FrontendUtility::AppPageSet.new(&block) | ||||||
|           end |           end | ||||||
| 
 | 
 | ||||||
|           def side_bar(&block) |           def side_bar(&block) | ||||||
|             @side_bar = SideBarRegisition::SideBar.new(&block) |             @side_bar = SideBarRegisition::SideBar.new(@name,@key,&block) | ||||||
|             @side_bar.module_app_key = @name |  | ||||||
|             @side_bar.finalize! |  | ||||||
|             OrbitApp::Module::SideBarRegisition.add(@side_bar) |  | ||||||
|           end |           end | ||||||
| 
 | 
 | ||||||
|           def personal_plugin(params) |           def personal_plugin(params) | ||||||
|  | @ -49,10 +98,20 @@ module OrbitApp | ||||||
|             Plugin::Registration.new_from_module_app(@name,@base_path,params) |             Plugin::Registration.new_from_module_app(@name,@base_path,params) | ||||||
|           end     |           end     | ||||||
| 
 | 
 | ||||||
|           def base_url(var) |           def widgets(&block) | ||||||
|             @base_path = var |             # @widgets = WidgetRegisition::WidgetSet.new(&block) | ||||||
|  |             @widget_set = WidgetUtility::WidgetSet.new(&block) | ||||||
|  | 
 | ||||||
|  |             # @widgets = widget_set.widgets | ||||||
|  |             # @default_widget = widget_set.default_widget | ||||||
|           end |           end | ||||||
|       end | 
 | ||||||
|  |           %w{module_label category base_url version organization author intro update_info}.each  do |field| | ||||||
|  |               define_method(field){|var| instance_variable_set( "@" + field, var)} | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |         end # of class DataSheet | ||||||
|  | 
 | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  | @ -37,8 +37,7 @@ module OrbitApp | ||||||
|           # def is_manager? |           # def is_manager? | ||||||
|           #   binding.pry |           #   binding.pry | ||||||
|           # end |           # end | ||||||
|           def initialize( &block)             |           def initialize(name = '',key,&block)             | ||||||
|             name = '' |  | ||||||
|             @head_label = name |             @head_label = name | ||||||
|             @context_links = [] |             @context_links = [] | ||||||
|             @available_for = [] |             @available_for = [] | ||||||
|  | @ -48,18 +47,16 @@ module OrbitApp | ||||||
|             @head_link = "" |             @head_link = "" | ||||||
|             @app_base_path = '' |             @app_base_path = '' | ||||||
|             block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? |             block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? | ||||||
|  |             # setup_module_app(module_app_key) | ||||||
|  |             @module_app_key = key | ||||||
|  |             finalize! | ||||||
|  |             SideBarRegisition.add(self) | ||||||
|           end |           end | ||||||
|            |            | ||||||
| 
 | 
 | ||||||
|           def module_app_key=(var) |           def head_label_i18n(var,options ={}) | ||||||
|             @module_app_title = var |  | ||||||
|             @module_app = ModuleApp.where(:title=>var).desc(:create_date).first |  | ||||||
|             @module_app_key = @module_app.key |  | ||||||
|           end |  | ||||||
| 
 |  | ||||||
|           def head_label_i18n(var,optoins =nil) |  | ||||||
|             @head_label = var |             @head_label = var | ||||||
|             @icon_class = optoins[:icon_class] |             @icon_class = options[:icon_class] | ||||||
|           end |           end | ||||||
| 
 | 
 | ||||||
|           def available_for(var) |           def available_for(var) | ||||||
|  | @ -85,17 +82,23 @@ module OrbitApp | ||||||
| 
 | 
 | ||||||
|           def finalize! |           def finalize! | ||||||
|             set_controllers_scope |             set_controllers_scope | ||||||
|             set_default_active_app_auth |             # set_default_active_app_auth | ||||||
|             @context_links.each do |t|  |             @context_links.each do |t|  | ||||||
|               t.set_module_app = @module_app |               # t.set_module_app = @module_app | ||||||
|               t.finalize! |               t.finalize! | ||||||
|             end |             end | ||||||
|           end |           end | ||||||
| 
 | 
 | ||||||
|           protected |           protected | ||||||
|           def set_default_active_app_auth |           # def setup_module_app(var) | ||||||
|             @active_for_app_auth = @module_app.title |           #   @module_app_title = var | ||||||
|           end |           #   @module_app = ModuleApp.where(:key=>var).desc(:create_date).first | ||||||
|  |           #   @module_app_key = @module_app.key | ||||||
|  |           # end | ||||||
|  | 
 | ||||||
|  |           # def set_default_active_app_auth | ||||||
|  |           #   @active_for_app_auth = @module_app.title | ||||||
|  |           # end | ||||||
| 
 | 
 | ||||||
|           def set_controllers_scope |           def set_controllers_scope | ||||||
|             var = @active_for_controllers |             var = @active_for_controllers | ||||||
|  | @ -131,10 +134,10 @@ module OrbitApp | ||||||
|             @active_for_action[controller] == action |             @active_for_action[controller] == action | ||||||
|           end |           end | ||||||
| 
 | 
 | ||||||
|           def set_module_app=(var) |           # def set_module_app=(var) | ||||||
|             @module_app = var |           #   @module_app = var | ||||||
|             @module_app_key = var.key |           #   @module_app_key = var.key | ||||||
|           end |           # end | ||||||
| 
 | 
 | ||||||
|           def finalize! |           def finalize! | ||||||
|             set_active_actions |             set_active_actions | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require  "orbit_app/summary" | ||||||
| 
 | 
 | ||||||
| module OrbitApp  | module OrbitApp  | ||||||
|   module Module |   module Module | ||||||
|     module Summary   |     module Summary | ||||||
|       include OrbitApp::Summary |       include OrbitApp::Summary | ||||||
|        |        | ||||||
|       class Item |       class Item | ||||||
|  |  | ||||||
|  | @ -0,0 +1,108 @@ | ||||||
|  | module OrbitApp | ||||||
|  |     module Module | ||||||
|  |       module WidgetUtility | ||||||
|  |           Version = "0.1" | ||||||
|  | 
 | ||||||
|  |           module ClassMethods | ||||||
|  |             @@widgets = [] | ||||||
|  | 
 | ||||||
|  |           def add(var) | ||||||
|  |             @@widgets << var | ||||||
|  |           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(&block) | ||||||
|  |             @widgets = [] | ||||||
|  |             @default_widget = nil | ||||||
|  |             @categories_query = '' | ||||||
|  |             @tags_query = '' | ||||||
|  |             block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           %w{categories_query tags_query}.each  do |field| | ||||||
|  |               define_method(field){|var| instance_variable_set( "@" + field, var)} | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def get_categories | ||||||
|  |             @categories_query | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def  get_tags | ||||||
|  |             @tags_query | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def default_widget(&block) | ||||||
|  |             @default_widget  = DefaultWidget.new(&block) | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def customize_widget(name,label,options ={}) | ||||||
|  |             @widgets << Widget.new(name,label,options) | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def to_module_app_format             | ||||||
|  |             hash = {} | ||||||
|  |             @widgets.collect{|t|  hash[t.name] = t.to_hash} | ||||||
|  |             hash | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def get_default_widget | ||||||
|  |             return @default_widget | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |         end | ||||||
|  | 
 | ||||||
|  |         class DefaultWidget | ||||||
|  |           def  initialize(&block) | ||||||
|  |             @query = nil | ||||||
|  |             @image = nil | ||||||
|  |              block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def to_module_app_format | ||||||
|  |             {:query=>@query,:image=>@image} rescue nil | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def query(var) | ||||||
|  |             @query = var | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def image(var) | ||||||
|  |             @image = var | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |         end | ||||||
|  | 
 | ||||||
|  |         class Widget | ||||||
|  |           attr_reader :name,:default_template,:fields | ||||||
|  | 
 | ||||||
|  |           def initialize(name,label,options ={}) | ||||||
|  |             @name = name | ||||||
|  |             @fields = options[:fields]  | ||||||
|  |             @label = label | ||||||
|  |           end | ||||||
|  |            | ||||||
|  |           def to_hash | ||||||
|  |               {:name => @name,:fields=>@fields,:label=>@label} | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           def finalize! | ||||||
|  | 
 | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           protected | ||||||
|  |            | ||||||
|  |         end# of widget | ||||||
|  |     end # of WidgetRegisition | ||||||
|  |   end # of Module | ||||||
|  | end # of OrbitApp | ||||||
|  | @ -15,3 +15,6 @@ zh_tw: | ||||||
|     search: 搜尋公告 |     search: 搜尋公告 | ||||||
|     update_bulletin_success: 公告已成功更新 |     update_bulletin_success: 公告已成功更新 | ||||||
|     update_bulletin_category_success: 公告類別已成功更新 |     update_bulletin_category_success: 公告類別已成功更新 | ||||||
|  |     widget: | ||||||
|  |         index: 目錄Widget | ||||||
|  |         bulletins_and_web_links: 公告與連結並排Widget | ||||||
|  | @ -1,9 +1,36 @@ | ||||||
| module Announcement | module Announcement | ||||||
|   OrbitApp.registration "Announcement",:type=> 'ModuleApp' do |   OrbitApp.registration "Announcement",:type=> 'ModuleApp' do | ||||||
| 
 |     module_label 'announcement.announcement' | ||||||
|     base_url File.expand_path File.dirname(__FILE__)     |     base_url File.expand_path File.dirname(__FILE__)     | ||||||
|     personal_plugin :enable => true,:path=>"panel/announcement/plugin/profile",:i18n=>'admin.announcement' |     personal_plugin :enable => true,:path=>"panel/announcement/plugin/profile",:i18n=>'admin.announcement' | ||||||
|      |      | ||||||
|  |     version "0.1" | ||||||
|  |     organization "Rulingcom" | ||||||
|  |     author "RD dep" | ||||||
|  |     intro "I am intro" | ||||||
|  |     update_info 'some update_info' | ||||||
|  | 
 | ||||||
|  |     front_end do | ||||||
|  |       app_page 'bulletins' | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     category ["BulletinCategory"] | ||||||
|  | 
 | ||||||
|  |     widgets do | ||||||
|  |       default_widget do | ||||||
|  |         query 'Bulletin.all' | ||||||
|  |         image :image | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       categories_query 'BulletinCategory.all' | ||||||
|  |       tags_query 'AnnouncementTag.all' | ||||||
|  | 
 | ||||||
|  |       customize_widget "index","announcement.widget.index",:fields=>["title","category","postdate"] | ||||||
|  |       customize_widget "bulletins_and_web_links","announcement.widget.bulletins_and_web_links" | ||||||
|  |       # item "index","announcement.widget.index",:default_template=>true,:fields=>["title","category","postdate"] | ||||||
|  |       # item "bulletins_and_web_links","announcement.widget.bulletins_and_web_links" | ||||||
|  |     end | ||||||
|  |      | ||||||
|     side_bar do |     side_bar do | ||||||
|       head_label_i18n  'admin.announcement',:icon_class=>"icons-announcement" |       head_label_i18n  'admin.announcement',:icon_class=>"icons-announcement" | ||||||
|       available_for [:admin,:guest,:manager,:sub_manager] |       available_for [:admin,:guest,:manager,:sub_manager] | ||||||
|  |  | ||||||
		Reference in New Issue