let user can select whether to show previous layer and whether to expand
the current menu
This commit is contained in:
parent
449bd8a29d
commit
3228a30279
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
en:
|
||||||
|
site_menu:
|
||||||
|
show_previous_layer: Show Previous Layer
|
||||||
|
expand_current_layer: Expand Current Layer
|
||||||
|
'yes': 'Yes'
|
||||||
|
'no': 'No'
|
|
@ -0,0 +1,6 @@
|
||||||
|
zh_tw:
|
||||||
|
site_menu:
|
||||||
|
show_previous_layer: 顯示上一層
|
||||||
|
expand_current_layer: 展開所在的那層
|
||||||
|
'yes': 是
|
||||||
|
'no': 否
|
|
@ -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
|
||||||
|
|
|
@ -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|
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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 |
Loading…
Reference in New Issue