Merge branch 'master' into 'master'

let user can select whether to show previous layer and whether to expand the current menu

the current menu

See merge request !1
This commit is contained in:
wmcheng 2020-01-19 16:30:45 +08:00
commit d4777be2cc
9 changed files with 212 additions and 48 deletions

View File

@ -1,59 +1,119 @@
class SiteMenuWidgetsController < ApplicationController class SiteMenuWidgetsController < ApplicationController
def create_json(pages)
items = []
pages.each do |page|
item = {}
item["obj"] = page
if page.child_page.size > 0
item["page_name"] = page.name
item["children"] = create_json(page.sorted_published_child_pages)
if page.page_type == "page" or page.page_type == "link"
item["url"] = (page.page_type == "link") ? "/#{locale.to_s}" + page.external_url : "/#{locale.to_s}" + page.url
item["target"] = "_self"
else
item["url"] = "/#{locale.to_s}" + page.url
item["target"] = "_blank"
end
else
item["page_name"] = page.name
item["children"] = []
if page.page_type == "page"
item["url"] = "/#{locale.to_s}" + page.url
item["target"] = "_self"
else
item["url"] = page.external_url
item["target"] = (is_internal_url?(page.external_url) ? "_self" : "_blank") rescue "_blank"
end
end
items << item
end
items
end
def create_menu_bool_object (items)
#item_all = []
items.each do |item1|
#item = []
@count += 1
if (!item1["children"].nil? && item1["children"].length!=0)
@li_index << @count
if children_is_current(item1['obj'])
@ul_index << ( @li_index.length - 1 )
end
create_menu_bool_object(item1['children'])
#item = [children_is_current(item1['obj']),item1['obj'].id==@page_id,create_menu_bool_object(item1['children'])]
else
#item = [children_is_current(item1['obj']),item1['obj'].id==@page_id]
end
#item_all << item
end
#item_all
end
def children_is_current (page)
page.sorted_published_child_pages.select{|v| v.id==@page_id}.length!=0 rescue false
end
def widget def widget
subpart = OrbitHelper.get_current_widget
params = OrbitHelper.params params = OrbitHelper.params
page = Page.where(:page_id => params[:page_id]).first page = Page.where(:page_id => params[:page_id]).first
@page_id = page.id
@expand_layer = false
if page.parent_page == Page.root if page.parent_page == Page.root
pages = page.sorted_published_child_pages @pages = page.sorted_published_child_pages
else else
pages = page.parent_page.sorted_published_child_pages @pages = page.parent_page.sorted_published_child_pages
end if subpart.methods.include? 'select_options'.to_sym
OrbitWidget.all.select{|tmp| tmp.key.to_s=='site_menu_widget'}.each do |orbit_widget|
page.page_parts.collect do |pp| @show_options = orbit_widget.show_options rescue nil
pp.sub_parts.collect do |sp| end
@title = sp.title if sp.module == "site_menu_widget" subpart.select_options.each do |select_option|
end puts ['show',@show_options]
end if !(@show_options.nil?) && select_option.field_name == @show_options.keys.first.to_s
value = YAML.load(select_option.value)
def create_json(pages) if value[I18n.locale] == t('site_menu.yes')
items = [] if page.parent_page.parent_page == Page.root
pages.each do |page| @pages = Array(page.parent_page)
item = {} else
if page.child_page.size > 0 @pages = page.parent_page.parent_page.sorted_published_child_pages
if page.page_type == "page" or page.page_type == "link" end
item["page_name"] = page.name end
item["url"] = (page.page_type == "link") ? "/#{locale.to_s}" + page.external_url : "/#{locale.to_s}" + page.url elsif !(@show_options.nil?) && select_option.field_name == @show_options.keys[1].to_s
item["children"] = create_json(page.sorted_published_child_pages) value = YAML.load(select_option.value)
item["target"] = "_self" if value[I18n.locale] == t('site_menu.yes')
else @expand_layer = true
item["page_name"] = page.name end
item["url"] = "/#{locale.to_s}" + page.url end
item["children"] = create_json(page.sorted_published_child_pages)
item["target"] = "_blank"
end
else
if page.page_type == "page"
item["page_name"] = page.name
item["url"] = "/#{locale.to_s}" + page.url
item["target"] = "_self"
item["children"] = []
else
item["page_name"] = page.name
item["url"] = page.external_url
item["target"] = (is_internal_url?(page.external_url) ? "_self" : "_blank") rescue "_blank"
item["children"] = []
end
end end
items << item
end end
items
end end
@ul_index=[]
@li_index= []
items = create_json(pages) @count = -1
title = subpart.title
items = create_json(@pages)
create_menu_bool_object(items)
if @expand_layer
temp = @ul_index.reverse.collect do |ul_index|
tp = @li_index[ul_index] + 1
"var ul_tp = $('div[data-subpart-id=#{subpart.id}]').find('ul').eq(#{tp})
ul_tp.removeClass('dropdown-menu')
$('div[data-subpart-id=#{subpart.id}]').find('li').eq(#{@li_index[ul_index]}).find('span').eq(0).remove()
"
end
if temp.length != 0
temp = temp.join(' ')
expand_script = "<script type='text/javascript'>" +
"$('div[data-subpart-id=#{subpart.id}]').ready(function(){" +
temp + '})'+
"</script>"
else
expand_script = ''
end
else
expand_script=""
end
{ {
"pages" => items, "pages" => items,
"extras" => {"widget_title" => @title} "extras" => {"widget_title" => title.to_s,"expand-script"=>expand_script}
} }
end end

6
config/locales/en.yml Normal file
View File

@ -0,0 +1,6 @@
en:
site_menu:
show_previous_layer: Show Previous Layer
expand_current_layer: Expand Current Layer
'yes': 'Yes'
'no': 'No'

6
config/locales/zh_tw.yml Normal file
View File

@ -0,0 +1,6 @@
zh_tw:
site_menu:
show_previous_layer: 顯示上一層
expand_current_layer: 展開所在的那層
'yes':
'no':

View File

@ -1,9 +1,28 @@
module SiteMenuWidget module SiteMenuWidget
class Engine < ::Rails::Engine class Engine < ::Rails::Engine
initializer "site_menu_widget" do initializer "site_menu_widget", before: :load_config_initializers do
OrbitApp.registration "SiteMenuWidget", :type => "OrbitWidget" do translate_data = Dir["#{SiteMenuWidget::Engine.root}/config/locales/*.yml"] .map{|yaml_file| YAML.load(File.read(yaml_file))}
widget_label "SiteMenu" data = {}
key1 = {}
key2 = {}
value1 = {}
value2 = {}
translate_data.each do |t_data|
key1[t_data.keys[0]] = t_data.values[0]['site_menu']['show_previous_layer']
key2[t_data.keys[0]] = t_data.values[0]['site_menu']['expand_current_layer']
value2[t_data.keys[0]] = t_data.values[0]['site_menu']['no']
value1[t_data.keys[0]] = t_data.values[0]['site_menu']['yes']
end
data[key1] = [value2,value1]
data[key2] = [value2,value1]
OrbitApp.registration "SiteMenuWidget", :type => "OrbitWidget" do
widget_label "SiteMenu"
widget_methods ["widget"] widget_methods ["widget"]
begin
show_options data
rescue => e
puts ['there_was_no_show_option_method',e]
end
end end
end end
end end

View File

@ -2,6 +2,19 @@ $:.push File.expand_path("../lib", __FILE__)
# Maintain your gem's version: # Maintain your gem's version:
require "site_menu_widget/version" require "site_menu_widget/version"
app_path = File.expand_path(__dir__)
template_path = ENV['PWD'] + '/app/templates'
all_template = Dir.glob(template_path+'/*/')
puts 'copying module'
all_template.each do |folder|
if folder.split('/')[-1] != 'mobile'
begin
system ('cp -r '+ app_path + '/widgets/ ' + folder)
rescue
puts 'error copy'
end
end
end
# Describe your gem and declare its dependencies: # Describe your gem and declare its dependencies:
Gem::Specification.new do |s| Gem::Specification.new do |s|

View File

@ -0,0 +1,20 @@
<div class="sitemenu-wrap sitemenu-horizontal no-print">
{{expand-script}}
<a id="accesskey_sitemenu" accesskey="S" href="/<%= "#{locale.to_s}" %>/accesskey" title="Sitemenu">:::</a>
<h3 class="sitemenu-title">{{widget_title}}</h3>
<ul data-list="pages" class="sitemenu-list level-1 list-unstyled" data-level="0">
<li class="sitemenu-item level-1">
<a class="sitemenu-link level-1" href="{{url}}" target="{{target}}">{{page_name}}</a>
<ul class="sitemenu-list level-2" data-list="children" data-level="1">
<li class="sitemenu-item level-2">
<a class="sitemenu-link level-2" href="{{url}}" target="{{target}}">{{page_name}}</a>
<ul class="sitemenu-list level-2" data-list="children" data-level="2">
<li class="sitemenu-item level-3">
<a class="sitemenu-link level-3" href="{{url}}" target="{{target}}">{{page_name}}</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>

View File

@ -0,0 +1,20 @@
<div class="sitemenu-wrap sitemenu-vertical no-print">
{{expand-script}}
<a id="accesskey_sitemenu" accesskey="S" href="/<%= "#{locale.to_s}" %>/accesskey" title="Sitemenu">:::</a>
<h3 class="sitemenu-title">{{widget_title}}</h3>
<ul data-list="pages" class="sitemenu-list level-1 list-unstyled" data-level="0">
<li class="sitemenu-item level-1">
<a class="sitemenu-link level-1" href="{{url}}" target="{{target}}">{{page_name}}</a>
<ul class="sitemenu-list level-2" data-list="children" data-level="1">
<li class="sitemenu-item level-2">
<a class="sitemenu-link level-2" href="{{url}}" target="{{target}}">{{page_name}}</a>
<ul class="sitemenu-list level-2" data-list="children" data-level="2">
<li class="sitemenu-item level-3">
<a class="sitemenu-link level-3" href="{{url}}" target="{{target}}">{{page_name}}</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>

View File

@ -0,0 +1,20 @@
{
"widgets" : [
{
"filename" : "site_menu_widget1",
"name" : {
"zh_tw" : "1. 橫式 ( 模組標題, 網站第二層選單, 網站第三層選單 )",
"en" : "1. Horizontal (widget-title, second level dropdown, third level dropdown)"
},
"thumbnail" : "thumb.png"
},
{
"filename" : "site_menu_widget2",
"name" : {
"zh_tw" : "1. 直式 ( 模組標題, 網站第二層選單, 網站第三層選單 )",
"en" : "1. Vertical (widget-title, second level dropdown, third level dropdown)"
},
"thumbnail" : "thumb.png"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB