From 9b958354c28a3ff042e23b757fad7f1c3ba06974 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Thu, 26 Jun 2014 19:14:46 +0800 Subject: [PATCH] added widget support for orbit.. now have the ability to install widgets from store --- app/controllers/admin/import_controller.rb | 25 +++--- app/controllers/page_parts_controller.rb | 28 +++++-- app/helpers/pages_helper.rb | 7 +- app/models/orbit_widget.rb | 15 ++++ .../widgets/site_menu_widget/_widget.html.erb | 18 +++++ app/views/admin/import/index.html.erb | 2 +- app/views/page_parts/_form.html.erb | 4 +- app/views/page_parts/_widget_form.html.erb | 24 +++--- built_in_extensions.rb | 5 +- lib/orbit_app/register_module.rb | 4 +- lib/orbit_app/widget/registration.rb | 81 +++++++++++++++++++ 11 files changed, 177 insertions(+), 36 deletions(-) create mode 100644 app/models/orbit_widget.rb create mode 100644 app/templates/orbit_bootstrap/widgets/site_menu_widget/_widget.html.erb create mode 100644 lib/orbit_app/widget/registration.rb diff --git a/app/controllers/admin/import_controller.rb b/app/controllers/admin/import_controller.rb index d0c15a6..dd5a91d 100644 --- a/app/controllers/admin/import_controller.rb +++ b/app/controllers/admin/import_controller.rb @@ -287,15 +287,14 @@ class Admin::ImportController < OrbitAdminController end end when "gallery" - if @@thread.alive? - render :json => {"success" => true, "total_images" => @@import_stats["total_images"], "current_status" => @@import_stats["current_status"], "current_album_id" => @@import_stats["current_album_id"], "current_album_name" => @@import_stats["current_album_name"]} - else - if @@import_stats["current_status"] == @@import_stats["total_images"] - render :json => {"success" => true, "total_images" => @@import_stats["total_images"], "current_status" => @@import_stats["current_status"], "current_album_id" => @@import_stats["current_album_id"], "current_album_name" => @@import_stats["current_album_name"]} - else - render :json => {"success" => false, "current_album_id" => @@import_stats["current_album_id"], "current_album_name" => @@import_stats["current_album_name"]} - end - end + # if @@import_stats["current_status"] <= (@@import_stats["total_images"] + 1) + # render :json => {"success" => true, "total_images" => @@import_stats["total_images"], "current_status" => @@import_stats["current_status"], "current_album_id" => @@import_stats["current_album_id"], "current_album_name" => @@import_stats["current_album_name"]} + # elsif @@import_stats["current_status"] == @@import_stats["total_images"] + # render :json => {"success" => true, "total_images" => @@import_stats["total_images"], "current_status" => @@import_stats["current_status"], "current_album_id" => @@import_stats["current_album_id"], "current_album_name" => @@import_stats["current_album_name"]} + # else + # render :json => {"success" => false, "current_album_id" => @@import_stats["current_album_id"], "current_album_name" => @@import_stats["current_album_name"]} + # end + render :json => @@import_stats.to_json when "links" if @@thread.alive? render :json => {"success" => true, "current_import" => @@import_stats["current_import"], "total_links" => @@import_stats["total_links"], "current_status" => @@import_stats["current_status"], "current_link_id" => @@import_stats["current_link_id"], "current_link_name" => @@import_stats["current_album_name"]} @@ -311,7 +310,7 @@ class Admin::ImportController < OrbitAdminController def rss2_galleries uri = URI.parse(params['url']) - @@thread = Thread.new do + # @@thread = Thread.new do http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) @@ -352,9 +351,9 @@ class Admin::ImportController < OrbitAdminController end end end - end - @@thread.join - @@thread.abort_on_exception = true + # end + # @@thread.join + # @@thread.abort_on_exception = true render :json => {"success" => true}.to_json end diff --git a/app/controllers/page_parts_controller.rb b/app/controllers/page_parts_controller.rb index 0270ca6..5c8df93 100644 --- a/app/controllers/page_parts_controller.rb +++ b/app/controllers/page_parts_controller.rb @@ -6,6 +6,7 @@ class PagePartsController < ApplicationController @part_number = params[:part] @page_id = params[:page_id] @modules = ModuleApp.widget_enabled + @modules = @modules.concat(OrbitWidget.all) @no_orbit_bar = @no_side_bar = true @select_number = 0 @html_class = "page-parts" @@ -21,6 +22,7 @@ class PagePartsController < ApplicationController @part_number = params[:id] @select_number = @part.sub_parts.count @modules = ModuleApp.widget_enabled + @modules = @modules.concat(OrbitWidget.all) @no_orbit_bar = @no_side_bar = true @html_class = "page-parts" render :layout => "structure" @@ -32,6 +34,7 @@ class PagePartsController < ApplicationController @select_number = @part.sub_parts.index(@subpart) @kind = @subpart.kind @modules = ModuleApp.widget_enabled + @modules = @modules.concat(OrbitWidget.all) if @kind == "module_widget" @widget_types = [] module_name = @subpart.module @@ -41,9 +44,15 @@ class PagePartsController < ApplicationController w = File.basename(w, ".*") @widget_types << w.gsub("_","") if w != "index" && w != "show" end - - app = ModuleApp.find_by_key(module_name) - @categories = app.categories + Dir.glob("#{Rails.root}/app/templates/#{@key}/widgets/#{module_name.downcase}/*").each do |w| + next if File.ftype(w).eql?("directory") + w = File.basename(w, ".*") + w = File.basename(w, ".*") + @widget_types << w.gsub("_","") if w != "index" && w != "show" + end + app = ModuleApp.find_by_key(module_name) rescue nil + app = OrbitWidget.find_by_key(module_name) if app.nil? + @categories = app.categories rescue [] @widget_methods = app.get_registration.get_widget_methods @widget_settings = app.get_registration.get_widget_settings @data_count = nil @@ -100,9 +109,16 @@ class PagePartsController < ApplicationController w = File.basename(w, ".*") @widget_types << w.gsub("_","") if w != "index" && w != "show" end - module_name = module_name.downcase.singularize - app = ModuleApp.find_by_key(module_name) - @categories = app.categories + Dir.glob("#{Rails.root}/app/templates/#{@key}/widgets/#{module_name.downcase}/*").each do |w| + next if File.ftype(w).eql?("directory") + w = File.basename(w, ".*") + w = File.basename(w, ".*") + @widget_types << w.gsub("_","") if w != "index" && w != "show" + end + module_name = module_name.downcase.singularize + app = ModuleApp.find_by_key(module_name) rescue nil + app = OrbitWidget.find_by_key(module_name) if app.nil? + @categories = app.categories rescue [] @widget_methods = app.get_registration.get_widget_methods @widget_settings = app.get_registration.get_widget_settings @data_count = nil diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb index 87457a1..b40044e 100644 --- a/app/helpers/pages_helper.rb +++ b/app/helpers/pages_helper.rb @@ -48,7 +48,12 @@ module PagesHelper controller_name = controller_name.downcase.singularize f = File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', "#{controller_name}", "_#{widget_file}.html.erb"); if !File.exists?f - f = File.join('../templates', "#{@key}", 'modules', "#{controller_name}", "_widget.html.erb"); + f = File.join(Rails.root, 'app', 'templates', "#{@key}", 'widgets', "#{controller_name}", "_#{widget_file}.html.erb"); + if !File.exists?f + f = File.join('../templates', "#{@key}", 'modules', "#{controller_name}", "_widget.html.erb"); + else + f = File.join('../templates', "#{@key}", 'widgets', "#{controller_name}", "_#{widget_file}.html.erb"); + end else f = File.join('../templates', "#{@key}", 'modules', "#{controller_name}", "_#{widget_file}.html.erb"); end diff --git a/app/models/orbit_widget.rb b/app/models/orbit_widget.rb new file mode 100644 index 0000000..ba61c7e --- /dev/null +++ b/app/models/orbit_widget.rb @@ -0,0 +1,15 @@ +class OrbitWidget + include Mongoid::Document + include Mongoid::Timestamps + + field :title, type: String + field :key, type: String + + def get_registration + OrbitApp::Widget::Registration.find_by_key(key) + end + + def self.find_by_key(key) + self.find_by(:key => key) + end +end \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/widgets/site_menu_widget/_widget.html.erb b/app/templates/orbit_bootstrap/widgets/site_menu_widget/_widget.html.erb new file mode 100644 index 0000000..e1853b7 --- /dev/null +++ b/app/templates/orbit_bootstrap/widgets/site_menu_widget/_widget.html.erb @@ -0,0 +1,18 @@ +
+

{{widget_title}}

+ +
diff --git a/app/views/admin/import/index.html.erb b/app/views/admin/import/index.html.erb index 312e380..2d7809c 100644 --- a/app/views/admin/import/index.html.erb +++ b/app/views/admin/import/index.html.erb @@ -256,7 +256,7 @@ $("#alert-msg").text("There was an unknown error"); $(".alert-danger").removeClass("hide").show(); }) - startCheckingGalleryImportStatus(); + setTimeout("startCheckingGalleryImportStatus()",700); } var startCheckinglinksImportStatus = function(){ diff --git a/app/views/page_parts/_form.html.erb b/app/views/page_parts/_form.html.erb index 7477d01..06ae2a4 100644 --- a/app/views/page_parts/_form.html.erb +++ b/app/views/page_parts/_form.html.erb @@ -1,5 +1,5 @@
-
-
"><%= t(:select_one_function) %>
+
"><%= t(:select_one_function) %>
">
-<% if @widget_settings['override_category_with'].nil? %> -
- -
- <% @categories.each do |category| %> - - <% end %> +<% if @widget_settings['override_category_with'].nil? %> + <% if !@categories.blank? %> +
+ +
+ <% @categories.each do |category| %> + + <% end %> +
-
+ <% end %> <% else %> <% if @multiselect %>
diff --git a/built_in_extensions.rb b/built_in_extensions.rb index 0874e83..33f40b8 100644 --- a/built_in_extensions.rb +++ b/built_in_extensions.rb @@ -6,4 +6,7 @@ gem 'links', git: 'git@gitlab.tp.rulingcom.com:saurabh/links.git' gem 'page_content', git: 'git@gitlab.tp.rulingcom.com:saurabh/pagecontent.git' gem 'faq', git: 'git@gitlab.tp.rulingcom.com:saurabh/faq.git' #Personal Plugins -gem 'personal_journal', git: 'git@gitlab.tp.rulingcom.com:saurabh/personal-journal.git' \ No newline at end of file +gem 'personal_journal', git: 'git@gitlab.tp.rulingcom.com:saurabh/personal-journal.git' + +#widgets +gem "site_menu_widget", git: 'git@gitlab.tp.rulingcom.com:saurabh/site-menu-widget.git' \ No newline at end of file diff --git a/lib/orbit_app/register_module.rb b/lib/orbit_app/register_module.rb index 6f3a5cf..3d40222 100644 --- a/lib/orbit_app/register_module.rb +++ b/lib/orbit_app/register_module.rb @@ -5,7 +5,9 @@ module OrbitApp if type[:type].eql?("ModuleApp") Module::Registration.new(name,&block) elsif type[:type] == "PersonalPlugin" - Plugin::Registration.new(name,&block) + Plugin::Registration.new(name,&block) + elsif type[:type] == "OrbitWidget" + Widget::Registration.new(name,&block) end end end diff --git a/lib/orbit_app/widget/registration.rb b/lib/orbit_app/widget/registration.rb new file mode 100644 index 0000000..93bc918 --- /dev/null +++ b/lib/orbit_app/widget/registration.rb @@ -0,0 +1,81 @@ +#This is a core class of Orbit Kernel. This class will register a module and set the properties defined in the module's initializer +#file. +module OrbitApp + module Widget + module Registration + module ClassMethods + + #initiate a blank array for registration + cattr_accessor :registrations + self.registrations = [] + + def new(name,&block) + self.registrations << RegisteredWidget.new(name,&block) + end + + def find_by_key(key) + self.registrations.each{|t| + return t if t.key.eql?(key) + } + return nil + end + + def all + return self.registrations + end + end + + extend ClassMethods + def self.included(other) + other.extend( ClassMethods ) + end + + class RegisteredWidget + attr_reader :name,:key,:widget_label, :widget_methods, :widget_settings + + def initialize(name,&block) + @name = name + @key = @name.underscore.singularize + @widget_label = @name + @widget_methods = [] + @widget_settings = {} + + block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? + setup_module_app + end + + def get_orbit_widget + OrbitWidget.find_by(key: @key, title: name) rescue nil + end + + def setup_module_app + orbit_widget = get_orbit_widget + orbit_widget = OrbitWidget.new(:key=>@key,:title=>name) if orbit_widget.nil? + # orbit_widget.refetch_setting!(self) + orbit_widget.save(:validate=>false) + end + + %w{widget_label version organization author intro update_info}.each do |field| + define_method(field){|var| instance_variable_set( "@" + field, var)} + end + + def widget_methods(widgets) + @widget_methods = widgets + end + + def get_widget_methods + @widget_methods + end + + def widget_settings(settings) + @widget_settings = settings.first + end + + def get_widget_settings + @widget_settings + end + + end + end + end +end \ No newline at end of file