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:
commit
d4777be2cc
|
@ -1,59 +1,119 @@
|
|||
class SiteMenuWidgetsController < ApplicationController
|
||||
|
||||
def widget
|
||||
params = OrbitHelper.params
|
||||
page = Page.where(:page_id => params[:page_id]).first
|
||||
if page.parent_page == Page.root
|
||||
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 = {}
|
||||
item["obj"] = page
|
||||
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)
|
||||
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["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["children"] = []
|
||||
if page.page_type == "page"
|
||||
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
|
||||
items << item
|
||||
end
|
||||
items
|
||||
end
|
||||
|
||||
|
||||
items = create_json(pages)
|
||||
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
|
||||
else
|
||||
@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
|
||||
end
|
||||
end
|
||||
@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
|
||||
|
|
|
@ -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
|
||||
class Engine < ::Rails::Engine
|
||||
initializer "site_menu_widget" do
|
||||
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
|
||||
|
|
|
@ -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|
|
||||
|
|
|
@ -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