diff --git a/app/assets/javascripts/lib/items/items.js.erb b/app/assets/javascripts/lib/items/items.js.erb index d02cf35..62cfaed 100755 --- a/app/assets/javascripts/lib/items/items.js.erb +++ b/app/assets/javascripts/lib/items/items.js.erb @@ -82,6 +82,14 @@ var Items = function(){ } }) + sidePanel.on("click","#tags_list input[type=checkbox]",function(){ + if($(this).is(":checked") && $(this).hasClass("checkbox-all")){ + $(".view-page .content #tags_list input[type=checkbox]").not($(this)).removeAttr("checked"); + }else{ + $(".view-page .content #tags_list input[type=checkbox].checkbox-all").removeAttr("checked"); + } + }) + sidePanel.on("click","#enable-menu .main-enable-parent",function(e){ if(!$(this).is(":checked")){ var parent = $(this).parent().parent(); @@ -108,10 +116,12 @@ var Items = function(){ sidePanel.on("change","select.module_select", function(){ var this_value = $(this).val(), categories_list = $("#categories_list") + tags_list = $("#tags_list"), layouts_list = $("#layouts_list"), data_count_area = $("#data_count_area"); categories_list.html(""); + tags_list.html(""); if(this_value){ $.ajax({ url : "<%= Rails.application.routes.url_helpers.pages_get_categories_path %>", @@ -120,9 +130,10 @@ var Items = function(){ dataType : "json" }).done(function(data){ var controlDiv = $("
"); + if(data.categories.length){ - categories_list.parent().find("label.control-label").text("Category List :"); - var checkbox = $(""); + categories_list.parent().find("label.control-label").text("<%= I18n.t(:category) %> :"); + var checkbox = $(""); controlDiv.append(checkbox); $.each(data.categories,function(i,category){ var checkbox = $(""); @@ -132,6 +143,21 @@ var Items = function(){ }else{ categories_list.parent().find("label.control-label").text(""); } + + var controlDiv = $("
"); + if(data.tags.length){ + tags_list.parent().find("label.control-label").text("<%= I18n.t(:tags) %> :"); + var checkbox = $(""); + controlDiv.append(checkbox); + $.each(data.tags,function(i,tag){ + var checkbox = $(""); + controlDiv.append(checkbox); + }) + tags_list.html(controlDiv); + }else{ + tags_list.parent().find("label.control-label").text(""); + } + if(data.layouts.length){ layouts_list.parent().find("label.control-label").text("Layout type:"); var controlDiv = $("
"), diff --git a/app/controllers/admin/import_controller.rb b/app/controllers/admin/import_controller.rb index e248042..288e2d0 100644 --- a/app/controllers/admin/import_controller.rb +++ b/app/controllers/admin/import_controller.rb @@ -742,10 +742,11 @@ class Admin::ImportController < OrbitAdminController a = Asset.new a.remote_data_url = link a.title_translations = {"en" => a.data.filename, "zh_tw" => a.data.filename} - a.save! - @user.assets << a - @user.save - @data = @data.sub(link, a.data.url) + if (a.save! rescue false) + @user.assets << a + @user.save + @data = @data.sub(link, a.data.url) + end end end end diff --git a/app/controllers/page_parts_controller.rb b/app/controllers/page_parts_controller.rb index 5c8df93..2b4c06f 100644 --- a/app/controllers/page_parts_controller.rb +++ b/app/controllers/page_parts_controller.rb @@ -53,6 +53,7 @@ class PagePartsController < ApplicationController app = ModuleApp.find_by_key(module_name) rescue nil app = OrbitWidget.find_by_key(module_name) if app.nil? @categories = app.categories rescue [] + @tags = app.tags rescue [] @widget_methods = app.get_registration.get_widget_methods @widget_settings = app.get_registration.get_widget_settings @data_count = nil @@ -93,6 +94,9 @@ class PagePartsController < ApplicationController if final_params['categories'].nil? final_params['categories'] = [] end + if final_params['tags'].nil? + final_params['tags'] = [] + end subpart.update_attributes(final_params) end render :json => {"success"=>true}.to_json @@ -119,6 +123,7 @@ class PagePartsController < ApplicationController app = ModuleApp.find_by_key(module_name) rescue nil app = OrbitWidget.find_by_key(module_name) if app.nil? @categories = app.categories rescue [] + @tags = app.tags rescue [] @widget_methods = app.get_registration.get_widget_methods @widget_settings = app.get_registration.get_widget_settings @data_count = nil diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 25d09fc..3bd483d 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -79,6 +79,7 @@ class PagesController < ApplicationController OrbitHelper.set_site_locale locale OrbitHelper.set_this_module_app module_app.singularize OrbitHelper.set_page_categories page.categories || [] + OrbitHelper.set_page_tags page.tags || [] OrbitHelper.set_page_data_count page.data_count if params[:layout].kind_of?(String) layout = to_bool(params[:layout]) @@ -146,7 +147,7 @@ class PagesController < ApplicationController } end else - @categories = module_app.categories.collect do |cat| + @categories = module_app.categories.collect do |cat| { "title" => cat.title, "id" => cat.id.to_s @@ -155,9 +156,9 @@ class PagesController < ApplicationController end if module_app.data_count.nil? - render :json => {"categories" => @categories,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>false}}.to_json + render :json => {"categories" => @categories, "tags" => module_app.tags,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>false}}.to_json else - render :json => {"categories" => @categories,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>true,"start"=>module_app.data_count.begin, "end" => module_app.data_count.end}}.to_json + render :json => {"categories" => @categories, "tags" => module_app.tags,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>true,"start"=>module_app.data_count.begin, "end" => module_app.data_count.end}}.to_json end end @@ -175,6 +176,7 @@ class PagesController < ApplicationController @modules = ModuleApp.all.frontend_enabled @module_app = ModuleApp.find_by_key(@page.module) rescue nil @categories = @module_app.categories rescue [] + @tags = @module_app.tags rescue [] if @module_app.key.eql?("member") @status = @module_app.role_status rescue [] else @@ -235,6 +237,8 @@ class PagesController < ApplicationController OrbitHelper.set_widget_module_app subpart.module OrbitHelper.set_widget_item_url subpart OrbitHelper.set_widget_title subpart.title + OrbitHelper.set_widget_categories subpart.categories || [] + OrbitHelper.set_widget_tags subpart.tags || [] custom_value = subpart.custom_string_field || subpart.custom_array_field rescue nil if !custom_value.nil? OrbitHelper.set_widget_custom_value custom_value @@ -302,13 +306,13 @@ class PagesController < ApplicationController page = Page.find(params[:page][:parent_page]) page.url = page.url == "/" ? "" : page.url @url = page.url + "/#{params[:page][:page_id]}" - p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, enabled_for_sitemap: [], enabled_for: [], menu_enabled_for: [], categories: [], name_translations: [:en, :zh_tw],external_url_translations: [:en, :zh_tw]) + p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, enabled_for_sitemap: [], enabled_for: [], menu_enabled_for: [], categories: [], tags: [], name_translations: [:en, :zh_tw],external_url_translations: [:en, :zh_tw]) p["url"] = @url p end def page_update_params - p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], name_translations: [:en, :zh_tw], external_url_translations: [:en, :zh_tw]) + p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], tags: [], name_translations: [:en, :zh_tw], external_url_translations: [:en, :zh_tw]) p["enabled_for"] = p["enabled_for"] || [] p["menu_enabled_for"] = p["menu_enabled_for"] || [] p["enabled_for_mobile"] = p["enabled_for_mobile"] || 0 diff --git a/app/helpers/orbit_helper.rb b/app/helpers/orbit_helper.rb index 68cbbe5..e4b973b 100644 --- a/app/helpers/orbit_helper.rb +++ b/app/helpers/orbit_helper.rb @@ -7,6 +7,10 @@ module OrbitHelper @categories = categories; end + def self.set_page_tags(tags) + @tags = tags; + end + def self.set_page_data_count(data_count) @data_count = data_count end @@ -30,6 +34,36 @@ module OrbitHelper @categories end + def self.page_tags + @tags + end + + def self.page_for_tag(tag) + page_for_tag = nil + pages = Page.where(:module => @module_app.key) + + pages.each do |page| + if page.tags.count ==1 + if page.tags.include?(tag) + page_for_tag = page + end + end + break if !page_for_tag.nil? + end + + if page_for_tag.nil? + pages.each do |page| + if page.tags.include?(tag) + page_for_tag = page + end + break if !page_for_tag.nil? + end + end + + page_for_tag = pages.first if page_for_tag.nil? + '/'+I18n.locale.to_s+page_for_tag.url+'?tags[]='+tag.id.to_s + end + def self.this_module_app @module_app end @@ -62,6 +96,14 @@ module OrbitHelper @widget_title end + def self.set_widget_tags(tags) + @tags = tags; + end + + def self.widget_tags + @tags + end + def self.params @params end diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb index a72e942..85d0c5e 100644 --- a/app/helpers/pages_helper.rb +++ b/app/helpers/pages_helper.rb @@ -63,20 +63,17 @@ module PagesHelper controller = "#{controller_name.capitalize.pluralize}_controller".classify.constantize.new OrbitHelper.set_current_widget_module controller_name data = controller.send("#{widget_method}") - keys = data.keys wrap_elements = doc.css("*[data-list][data-level='0']") htmls = parsing_repeats_again(wrap_elements,data,1) html = doc.to_s htmls[0].each_with_index do |h,i| html = html.gsub(h,htmls[1][i]) end - if keys[1] - extras = (data[keys[1]].kind_of?(Array) ? data[keys[0]] : data[keys[1]]) - extras["widget-title"] = OrbitHelper.widget_title - extras.each do |key,value| - html = html.gsub("{{#{key}}}",value.to_s.html_safe) - html = html.gsub("%7B%7B#{key}%7D%7D",value.to_s) - end + extras = data['extras'] || {} + extras["widget-title"] = OrbitHelper.widget_title + extras.each do |key,value| + html = html.gsub("{{#{key}}}",value.to_s.html_safe) + html = html.gsub("%7B%7B#{key}%7D%7D",value.to_s) end html.html_safe end diff --git a/app/models/page.rb b/app/models/page.rb index 71caeda..d577749 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -16,6 +16,7 @@ class Page field :enabled_for_mobile, :type => Boolean, :default => true field :menu_enabled_for, type: Array, default: [] field :categories, type: Array, :default => [] + field :tags, type: Array, :default => [] field :enabled_for_sitemap, type: Array, :default => [] field :rss2_id, type: String diff --git a/app/models/sub_part.rb b/app/models/sub_part.rb index f69e4c8..fb2c1e4 100644 --- a/app/models/sub_part.rb +++ b/app/models/sub_part.rb @@ -10,6 +10,7 @@ class SubPart field :content, localize: true field :data_count, type: Integer, default: 10 field :categories, type: Array, :default => [] + field :tags, type: Array, :default => [] field :custom_string_field, type: String field :custom_array_field, type: Array, :default => [] diff --git a/app/templates/orbit_bootstrap/modules/announcement/show.html.erb b/app/templates/orbit_bootstrap/modules/announcement/show.html.erb index 5886ebb..6fa9d9d 100644 --- a/app/templates/orbit_bootstrap/modules/announcement/show.html.erb +++ b/app/templates/orbit_bootstrap/modules/announcement/show.html.erb @@ -14,7 +14,7 @@
  • - {{tag}} + {{tag}}
  • diff --git a/app/views/page_parts/_form.html.erb b/app/views/page_parts/_form.html.erb index 06ae2a4..2d3207d 100644 --- a/app/views/page_parts/_form.html.erb +++ b/app/views/page_parts/_form.html.erb @@ -50,7 +50,7 @@
    "> <% I18n.available_locales.each do |locale| %>
    - +
    diff --git a/app/views/page_parts/_widget_form.html.erb b/app/views/page_parts/_widget_form.html.erb index 0f3f368..fd9dbbb 100644 --- a/app/views/page_parts/_widget_form.html.erb +++ b/app/views/page_parts/_widget_form.html.erb @@ -1,5 +1,5 @@
    - +
    <%= select_tag("page_part[sub_parts_attributes][#{@select_number}][widget_type]",options_for_select(@widget_types, (@subpart.widget_type rescue nil))) %>
    @@ -13,7 +13,7 @@ <% if @widget_settings['override_category_with'].nil? %> <% if !@categories.blank? %>
    - +
    <% @categories.each do |category| %>
    <% end %> + <% if !@tags.blank? %> +
    + +
    + + <% @tags.each do |tag| %> + + <% end %> +
    +
    + <% end %> <% else %> <% if @multiselect %>
    diff --git a/app/views/pages/_form.html.erb b/app/views/pages/_form.html.erb index c0c33ec..3de7e8a 100644 --- a/app/views/pages/_form.html.erb +++ b/app/views/pages/_form.html.erb @@ -18,22 +18,22 @@ <%= f.text_field :page_id %>
    <% end %> - +
    - <%= f.select(:module, @modules.map{|m| [m.title,m.key]},{:include_blank => true},:class=>"module_select") %> + <%= f.select(:module, @modules.map{|m| [t(OrbitApp::Module::Registration.find_by_key(m.key).module_label),m.key]},{:include_blank => true},:class=>"module_select") %> <%= f.hidden_field :parent_page, value: (params[:parent_page] || @page.parent_page_id) %> <%= f.hidden_field :page_type, value: "page" %>
    - +
    <% if params[:action] == "edit" %>
    <% if !@categories.blank? %> <% end %> <% @categories.each do |category| %> @@ -46,6 +46,29 @@ <% end %>
    + +
    + +
    + <% if params[:action] == "edit" %> +
    + <% if !@tags.blank? %> + + <% end %> + <% @tags.each do |tag| %> + + <% end %> +
    + <% end %> +
    +
    +
    @@ -54,7 +77,7 @@ <% if !@status.blank? %> <% end %> <% @status.each do |status| %> @@ -68,7 +91,7 @@
    - +
    <% if params[:action] == "edit" && !@layout_types.blank? %>
    @@ -101,7 +124,7 @@
    - + <% I18n.available_locales.each do |locale| %>