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
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
subpart = OrbitHelper.get_current_widget
params = OrbitHelper.params
page = Page.where(:page_id => params[:page_id]).first
@page_id = page.id
@expand_layer = false
if page.parent_page == Page.root
pages = page.sorted_published_child_pages
@pages = page.sorted_published_child_pages
else
pages = page.parent_page.sorted_published_child_pages
end
page.page_parts.collect do |pp|
pp.sub_parts.collect do |sp|
@title = sp.title if sp.module == "site_menu_widget"
end
end
def create_json(pages)
items = []
pages.each do |page|
item = {}
if page.child_page.size > 0
if page.page_type == "page" or page.page_type == "link"
item["page_name"] = page.name
item["url"] = (page.page_type == "link") ? "/#{locale.to_s}" + page.external_url : "/#{locale.to_s}" + page.url
item["children"] = create_json(page.sorted_published_child_pages)
item["target"] = "_self"
else
item["page_name"] = page.name
item["url"] = "/#{locale.to_s}" + page.url
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
@pages = page.parent_page.sorted_published_child_pages
if subpart.methods.include? 'select_options'.to_sym
OrbitWidget.all.select{|tmp| tmp.key.to_s=='site_menu_widget'}.each do |orbit_widget|
@show_options = orbit_widget.show_options rescue nil
end
subpart.select_options.each do |select_option|
puts ['show',@show_options]
if !(@show_options.nil?) && select_option.field_name == @show_options.keys.first.to_s
value = YAML.load(select_option.value)
if value[I18n.locale] == t('site_menu.yes')
if page.parent_page.parent_page == Page.root
@pages = Array(page.parent_page)
else
@pages = page.parent_page.parent_page.sorted_published_child_pages
end
end
elsif !(@show_options.nil?) && select_option.field_name == @show_options.keys[1].to_s
value = YAML.load(select_option.value)
if value[I18n.locale] == t('site_menu.yes')
@expand_layer = true
end
end
end
items << item
end
items
end
items = create_json(pages)
@ul_index=[]
@li_index= []
@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,
"extras" => {"widget_title" => @title}
"extras" => {"widget_title" => title.to_s,"expand-script"=>expand_script}
}
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
class Engine < ::Rails::Engine
initializer "site_menu_widget" do
OrbitApp.registration "SiteMenuWidget", :type => "OrbitWidget" do
widget_label "SiteMenu"
initializer "site_menu_widget", before: :load_config_initializers do
translate_data = Dir["#{SiteMenuWidget::Engine.root}/config/locales/*.yml"] .map{|yaml_file| YAML.load(File.read(yaml_file))}
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"]
begin
show_options data
rescue => e
puts ['there_was_no_show_option_method',e]
end
end
end
end

View File

@ -2,6 +2,19 @@ $:.push File.expand_path("../lib", __FILE__)
# Maintain your gem's 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:
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