Add two widget with files links.
Add update templates when bundle update.
This commit is contained in:
parent
ff1b6eddc9
commit
9622b14eda
|
@ -283,7 +283,7 @@ class ArchivesController < ApplicationController
|
|||
"archive-title" => archive.title,
|
||||
"description" => archive.description,
|
||||
"archive-url" => archive.url,
|
||||
"archive_url" => OrbitHelper.widget_more_url
|
||||
"archive_url" => archive.get_archive_url(locale, OrbitHelper.widget_more_url)
|
||||
}
|
||||
|
||||
if t.count > 1
|
||||
|
@ -322,12 +322,13 @@ class ArchivesController < ApplicationController
|
|||
def get_archives_count(cats_with_archives)
|
||||
cats_with_archives.map{|h| (h["archives"].count rescue 0)}.sum
|
||||
end
|
||||
def get_anncs_for_pack_data(categories,tags)
|
||||
def get_archives_for_pack_data(categories,tags)
|
||||
page_data_count = OrbitHelper.widget_data_count
|
||||
sort_order = (ArchiveSortOrder.first['sort_order'] rescue false) ? 1 : -1 #Order with ascending
|
||||
subpart = OrbitHelper.get_current_widget
|
||||
filter_cache_parent_id = subpart.id.to_s + categories.to_s + tags.to_s + page_data_count.to_s
|
||||
archive_cache = ArchiveCache.where(parent_id: filter_cache_parent_id,locale: I18n.locale.to_s)
|
||||
locale = I18n.locale.to_s
|
||||
archive_cache = ArchiveCache.where(parent_id: filter_cache_parent_id,locale: locale)
|
||||
count = archive_cache.count
|
||||
if count > 1
|
||||
archive_cache.limit(count-1).destroy
|
||||
|
@ -359,14 +360,10 @@ class ArchivesController < ApplicationController
|
|||
end
|
||||
cats_with_archives = @categories.collect do |cat|
|
||||
archives_sorted = ArchiveFile.can_display.where(:category_id => cat["id"]).filter_by_tags(tags).sorted
|
||||
archives = archives_sorted.collect do |archive|
|
||||
archive_url = archive.get_archive_url(locale, OrbitHelper.widget_more_url)
|
||||
{
|
||||
"archive-title" => archive.title,
|
||||
"description" => archive.description,
|
||||
"archive-url" => archive.url,
|
||||
"archive_url" => archive_url
|
||||
}
|
||||
serial_number = 0
|
||||
archives = archives_sorted.to_a.map.with_index do |archive,idx|
|
||||
data, serial_number, idx = archive.get_widget_data(locale, serial_number, idx)
|
||||
data
|
||||
end
|
||||
{
|
||||
"category-title" => cat["title"],
|
||||
|
@ -375,7 +372,7 @@ class ArchivesController < ApplicationController
|
|||
}
|
||||
end
|
||||
cats_with_archives = cats_with_archives.select{|h| h["archives"].count != 0}
|
||||
ArchiveCache.create(parent_id: filter_cache_parent_id,locale: I18n.locale.to_s,filter_result: cats_with_archives)
|
||||
ArchiveCache.create(parent_id: filter_cache_parent_id,locale: locale,filter_result: cats_with_archives)
|
||||
else
|
||||
c = archive_cache.first
|
||||
cats_with_archives = c.filter_result
|
||||
|
@ -387,7 +384,7 @@ class ArchivesController < ApplicationController
|
|||
page_data_count = OrbitHelper.widget_data_count
|
||||
categories = OrbitHelper.widget_categories #data are categories' ids or 'all'
|
||||
tags = OrbitHelper.widget_tags
|
||||
cats_with_archives = get_anncs_for_pack_data(categories, tags)
|
||||
cats_with_archives = get_archives_for_pack_data(categories, tags)
|
||||
{
|
||||
"categories" => cats_with_archives,
|
||||
"extras" => {"more_url" => (OrbitHelper.widget_more_url + '?data_count=' + page_data_count.to_s)}
|
||||
|
|
|
@ -314,6 +314,37 @@ class ArchiveFile
|
|||
end
|
||||
[files, serial_number]
|
||||
end
|
||||
def get_widget_data(locale=nil, serial_number=0, idx=0, show_tags=false, more_url=nil)
|
||||
created_at_int = self.created_at.strftime('%Y%m%d').to_i
|
||||
statuses = self.statuses_with_classname.collect do |status|
|
||||
{
|
||||
"status" => status["name"] || "",
|
||||
"status-class" => "status-#{status['classname']}"
|
||||
}
|
||||
end
|
||||
files, serial_number = self.get_files(locale, serial_number)
|
||||
if more_url.nil?
|
||||
more_url = OrbitHelper.widget_more_url
|
||||
end
|
||||
archive_url = self.get_archive_url(locale, more_url)
|
||||
data = {
|
||||
"archive-file-url" => (files.count != 0 ? files[0]["file-url"] : "javascript:void"),
|
||||
"archive-title" => self.title,
|
||||
"description" => self.description,
|
||||
"created_at" => created_at_int,
|
||||
"archive-url" => self.url,
|
||||
"archive_url" => archive_url,
|
||||
"statuses" => statuses,
|
||||
"files" => files,
|
||||
"idx" => (idx + 1)
|
||||
}
|
||||
if show_tags
|
||||
data["tags"] = self.tags.map do |tag|
|
||||
{"name"=>tag.name, "url"=>more_url.to_s + "?tags[]=#{tag.id}"}
|
||||
end
|
||||
end
|
||||
return [data, serial_number, idx]
|
||||
end
|
||||
def get_frontend_data(locale=nil, serial_number=0, idx=0, show_tags=false, more_url=nil)
|
||||
created_at_int = self.created_at.strftime('%Y%m%d').to_i
|
||||
statuses = self.statuses_with_classname.collect do |status|
|
||||
|
@ -331,8 +362,6 @@ class ArchiveFile
|
|||
"archive-url" => self.url,
|
||||
"url" => self.url,
|
||||
"statuses" => statuses,
|
||||
"sort_number" => self.sort_number,
|
||||
"is_top" => (self.is_top ? 1 : 0),
|
||||
"files" => files,
|
||||
"idx" => (idx + 1)
|
||||
}
|
||||
|
|
180
archive.gemspec
180
archive.gemspec
|
@ -23,129 +23,79 @@ if bundle_update_flag
|
|||
app_path = File.expand_path(__dir__)
|
||||
template_path = env_pwd + '/app/templates'
|
||||
all_template = Dir.glob(template_path+'/*/')
|
||||
module_name = 'archive'
|
||||
default_module_info = JSON.parse(File.read("#{app_path}/modules/#{module_name}/info.json")).map{|k,v| [k, v.sort_by{|h| h["filename"].to_i}]}.to_h rescue []
|
||||
all_template.each do |folder|
|
||||
if !folder.include?('mobile')
|
||||
begin
|
||||
next unless File.exist?("#{folder}modules/archive/info.json")
|
||||
info_json_file = "#{folder}modules/archive/info.json"
|
||||
info_json = JSON.parse(File.read(info_json_file))
|
||||
check_files = ["archive_index7.html.erb","archive_index8.html.erb","archive_index9.html.erb","archive_index10.html.erb","archive_index11.html.erb","archive_index12.html.erb","archive_index13.html.erb"]
|
||||
old_file_infos = [
|
||||
{
|
||||
"filename" => "archive_index7",
|
||||
"name" => {
|
||||
"zh_tw" => "7. 表格列表 ( 模組標題, 類別標題, 檔案名稱, 檔案簡介, 下載連結 )",
|
||||
"en" => "7. Table list (widget-title, category, filename, download link)"
|
||||
},
|
||||
"thumbnail" => "ar5.png"
|
||||
},
|
||||
{
|
||||
"filename" => "archive_index8",
|
||||
"name" => {
|
||||
"zh_tw" => "8. 表格列表 ( 模組標題, 檔案名稱, 檔案簡介, 下載連結 )",
|
||||
"en" => "8. Table list (widget-title, filename, download link)"
|
||||
},
|
||||
"thumbnail" => "ar5.png"
|
||||
}
|
||||
]
|
||||
new_file_infos = [
|
||||
{
|
||||
"filename" => "archive_index7",
|
||||
"name" => {
|
||||
"zh_tw" => "7. 表格列表 ( 模組標題, 類別標題, 上傳日期, 檔案名稱, 檔案簡介, 下載連結 )",
|
||||
"en" => "7. Table list (widget-title, category, Updated At, filename, download link)"
|
||||
},
|
||||
"thumbnail" => "ar5.png"
|
||||
},
|
||||
{
|
||||
"filename" => "archive_index8",
|
||||
"name" => {
|
||||
"zh_tw" => "8. 表格列表 ( 模組標題, 上傳日期, 檔案名稱, 檔案簡介, 下載連結 )",
|
||||
"en" => "8. Table list (widget-title, Updated At, filename, download link)"
|
||||
},
|
||||
"thumbnail" => "ar5.png"
|
||||
},
|
||||
{
|
||||
"filename" => "archive_index9",
|
||||
"name" => {
|
||||
"zh_tw" => "9. 表格列表 - 簡約 ( 模組標題, 檔案名稱, 下載連結 )",
|
||||
"en" => "9. Table list - Simple (widget-title, download link)"
|
||||
},
|
||||
"thumbnail" => "ar9.png"
|
||||
},
|
||||
{
|
||||
"filename" => "archive_index10",
|
||||
"name" => {
|
||||
"zh_tw" => "10. 表格列表 ( 模組標題, 類別標題, 編號, 檔案名稱, 下載連結 )",
|
||||
"en" => "10. Table list (widget-title, category, Serial Number, filename, download link)"
|
||||
},
|
||||
"thumbnail" => "ar5.png"
|
||||
},
|
||||
{
|
||||
"filename" => "archive_index11",
|
||||
"name" => {
|
||||
"zh_tw" => "11. 表格列表 - 簡約 - 展開檔案 ( 模組標題, 類別標題, 編號, 檔案名稱, 下載連結 )",
|
||||
"en" => "11. Table list - Simple - Unfold Files (widget-title, category, Serial Number, filename, download link)"
|
||||
},
|
||||
"thumbnail" => "ar9.png"
|
||||
},
|
||||
{
|
||||
"filename" => "archive_index12",
|
||||
"name" => {
|
||||
"zh_tw" => "12. 手風琴式列表 - 有下拉 ( 模組標題, 類別標題, 檔案名稱, 下載連結 )",
|
||||
"en" => "12. Accordion list - with drop down (widget-title, category, filename, download link)"
|
||||
},
|
||||
"thumbnail" => "ar2.png"
|
||||
},
|
||||
{
|
||||
"filename" => "archive_index13",
|
||||
"name" => {
|
||||
"zh_tw" => "13. 頁籤式 ( 模組標題, 類別標題, 標題, 檔案名稱, 下載連結, 描述 )",
|
||||
"en" => "13. Tab list (widget-title, category, title, filename, download link, description)"
|
||||
},
|
||||
"thumbnail" => "ar-tab1.png"
|
||||
}
|
||||
]
|
||||
flags = []
|
||||
all_frontend_names = info_json["frontend"].map{|h| h["name"]}
|
||||
check_files.each_with_index do |check_file,i|
|
||||
flag = (info_json["frontend"].select{|h| h["filename"] == check_file.split(".").first}.count == 0 rescue false)
|
||||
info_json_file = "#{folder}modules/#{module_name}/info.json"
|
||||
if File.exist?(info_json_file)
|
||||
begin
|
||||
file_text = File.read(info_json_file) rescue ""
|
||||
encode_file_text = file_text.encode("UTF-8", "UTF-8", invalid: :replace, replace: "???")
|
||||
next if (encode_file_text.include?("???") rescue true)
|
||||
info = JSON.parse(encode_file_text) rescue {}
|
||||
flag = (info.count != 0 rescue false)
|
||||
if flag
|
||||
info_json["frontend"].push(new_file_infos[i])
|
||||
end
|
||||
if !flag
|
||||
old_file_info = old_file_infos[i]
|
||||
if old_file_info
|
||||
idx = all_frontend_names.index(old_file_info["name"])
|
||||
if idx && idx != -1
|
||||
info_json["frontend"][idx] = new_file_infos[i]
|
||||
flag = true
|
||||
idx_regex = /^(\d+[\. \t]*)|[ \t]+$/
|
||||
update_flags = []
|
||||
puts "Checking #{module_name} templates"
|
||||
default_module_info.each do |info_type, default_sub_info|
|
||||
update_flag = false
|
||||
file_prefix = (info_type == 'widgets' ? '_' : '')
|
||||
sub_info = info[info_type].sort_by{|h| h["filename"].to_i} rescue []
|
||||
last_index = sub_info.collect{|v| v["filename"].to_s.scan(/\d+/).collect{|v1| v1.to_i}}.flatten.sort[-1] rescue nil
|
||||
if last_index.nil?
|
||||
next
|
||||
end
|
||||
default_sub_info.each do |h|
|
||||
name_without_index = h["name"]["zh_tw"].gsub(idx_regex,'')
|
||||
sub_info_index = (sub_info.index{|hh| hh["name"]["zh_tw"].gsub(idx_regex,'') == name_without_index}||-1 rescue -1)
|
||||
force_cover = (h["force_cover"] == "true")
|
||||
if sub_info_index == -1 && h["old_name"] #check with old name
|
||||
name_without_index = h["old_name"]["zh_tw"].gsub(idx_regex,'')
|
||||
sub_info_index = (sub_info.index{|hh| hh["name"]["zh_tw"].gsub(idx_regex,'') == name_without_index}||-1 rescue -1)
|
||||
if sub_info_index != -1
|
||||
update_flag = true
|
||||
force_cover = true
|
||||
sub_info[sub_info_index][sub_info_index]["name"] = h["name"]
|
||||
end
|
||||
end
|
||||
if sub_info_index == -1
|
||||
update_flag = true
|
||||
copy_h = h.dup
|
||||
h.delete("force_cover")
|
||||
h.delete("old_name")
|
||||
last_index = last_index + 1
|
||||
copy_h["filename"] = copy_h["filename"].sub(/\d+/){|ff| last_index.to_s}
|
||||
copy_h["name"].keys.each do |locale|
|
||||
copy_h["name"][locale] = copy_h["name"][locale].sub(/\d+/){|ff| last_index.to_s}
|
||||
end
|
||||
sub_info << copy_h
|
||||
bundler_with_clean_env{%x[cp -f #{app_path}/modules/#{module_name}/#{file_prefix}#{h["filename"]}.html.erb #{folder}modules/#{module_name}/#{file_prefix}#{copy_h["filename"]}.html.erb]}
|
||||
elsif force_cover
|
||||
bundler_with_clean_env{%x[cp -f #{app_path}/modules/#{module_name}/#{file_prefix}#{h["filename"]}.html.erb #{folder}modules/#{module_name}/#{file_prefix}#{sub_info[sub_info_index]["filename"]}.html.erb]}
|
||||
end
|
||||
end
|
||||
if update_flag
|
||||
info[info_type] = sub_info
|
||||
end
|
||||
update_flags << update_flag
|
||||
end
|
||||
end
|
||||
flags << flag
|
||||
end
|
||||
force_update_files = ["archive_index1.html.erb","archive_index3.html.erb","archive_index12.html.erb","archive_index13.html.erb"]
|
||||
puts "updating archive index page"
|
||||
if flags.select{|flag| flag }.count != 0
|
||||
flags.each_with_index do |flag,i|
|
||||
if flag
|
||||
bundler_with_clean_env{%x[cp -f #{app_path}/modules/archive/#{check_files[i]} #{folder}modules/archive/#{check_files[i]}]}
|
||||
if update_flags.select{|flag| flag}.count != 0
|
||||
puts "Writing json in #{info_json_file}"
|
||||
begin
|
||||
info_json = JSON.pretty_generate(info).gsub(":[",":[\n").gsub(":{",":{\n")
|
||||
rescue
|
||||
info_json = info.to_s.gsub("=>",": \n")
|
||||
end
|
||||
File.open(info_json_file,"w+"){|f| f.write(info_json)}
|
||||
end
|
||||
bundler_with_clean_env{%x[cp -rn #{app_path}/modules/#{module_name}/thumbs/* #{folder}modules/#{module_name}/thumbs/.]}
|
||||
end
|
||||
begin
|
||||
info_json = JSON.pretty_generate(info_json).gsub(":[",":[\n").gsub(":{",":{\n")
|
||||
rescue
|
||||
info_json = info_json.to_s.gsub("=>",": \n")
|
||||
end
|
||||
File.open(info_json_file,"w+"){|f| f.write(info_json)}
|
||||
rescue => e
|
||||
puts e
|
||||
puts "There has some error when checking #{module_name} templates"
|
||||
end
|
||||
force_update_files.each do |update_file|
|
||||
bundler_with_clean_env{%x[cp -f #{app_path}/modules/archive/#{update_file} #{folder}modules/archive/#{update_file}]}
|
||||
end
|
||||
bundler_with_clean_env{%x[cp -rn #{app_path}/modules/archive/thumbs/* #{folder}modules/archive/thumbs/.]}
|
||||
rescue
|
||||
puts "There has some error when updating archive index page."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
<div class="w-archive widget-archive-1 widget-archive-3" module="archive" data-ps="">
|
||||
<h3 class="w-archive__widget-title">{{widget-title}}</h3>
|
||||
<ul class="w-archive__list level-1 list-unstyled" data-list="categories" data-level="0">
|
||||
<li class="w-archive__item level-1">
|
||||
<h4 class="w-archive__item-heading">{{category-title}}</h4>
|
||||
<li class="w-archive__item level-2">
|
||||
<ul class="w-archive__list level-3" data-list="archives" data-level="1">
|
||||
<li class="w-archive__item level-3">
|
||||
<span class="w-archive__title" href="{{archive_url}}">{{archive-title}}</span>
|
||||
<ul class="w-archive__list level-4" data-list="files" data-level="2">
|
||||
<li class="w-archive__item level-4">
|
||||
<a href="{{file-url}}" class="widget-archive-files-item w-archive__link" target="_blank" title="{{file-name}}">{{file-name}}</a>
|
||||
<span class="label label-primary {{file-type}}">{{file-type}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="more">
|
||||
<a class="btn btn-sm btn-primary" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多資訊" : "More" %></a>
|
||||
</p>
|
||||
<style>
|
||||
.widget-archive-3 .w-archive__item-heading {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
</style>
|
||||
</div>
|
|
@ -0,0 +1,51 @@
|
|||
<div class="w-archive widget-archive-2 widget-archive-4">
|
||||
<h3 class="widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<div class="panel-group" id="widget-archive-group" data-list="categories" data-level="0">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" style="padding: 0.625em 0.9375em;">
|
||||
<h4 class="panel-title">
|
||||
<i class="fa fa-file-text" aria-hidden="true"></i>
|
||||
<a data-toggle="collapse" data-parent="#widget-archive-group" href="#collapse" class="collapsed" style="padding: 0;display: inline-block;">
|
||||
{{category-title}}
|
||||
<i class="fa fa-chevron-down" aria-hidden="true"></i>
|
||||
</a>
|
||||
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse" class="panel-collapse collapse {{in_class}}">
|
||||
<div class="panel-body">
|
||||
<dl class="dl-horizontal widget-archive-item-group" data-list="archives" data-level="1">
|
||||
<dt class="widget-archive-item-list">
|
||||
<sapn class="widget-archive-item-title">{{archive-title}}</span>
|
||||
<span data-list="statuses" data-level="2">
|
||||
<span class="label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
</dt>
|
||||
<dl class="widget-archive-files-list" data-list="files" data-level="2">
|
||||
<dd>
|
||||
<a href="{{file-url}}" class="widget-archive-files-item" target="_blank" title="{{file-name}}">{{file-name}}</a>
|
||||
<span class="label label-primary {{file-type}}">{{file-type}}</span>
|
||||
</dd>
|
||||
</dl>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{link_to_edit}}
|
||||
</div>
|
||||
<p class="more">
|
||||
<a class="btn btn-sm btn-primary" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多資訊" : "More" %></a>
|
||||
</p>
|
||||
<style>
|
||||
.widget-archive-4 dt.widget-archive-item-list {
|
||||
float: none;
|
||||
width: auto;
|
||||
text-align: left;
|
||||
}
|
||||
.widget-archive-4 .widget-archive-files-list dd {
|
||||
margin-left: 0;
|
||||
}
|
||||
</style>
|
||||
</div>
|
|
@ -5,7 +5,8 @@
|
|||
"name" : {
|
||||
"zh_tw" : "1. 列表 ( 模組標題, 類別標題, 檔案名稱, 下載連結 )",
|
||||
"en" : "1. List (widget-title, category, filename, download link)"
|
||||
},
|
||||
},
|
||||
"force_cover": "true",
|
||||
"thumbnail" : "ar1.png"
|
||||
},
|
||||
{
|
||||
|
@ -13,7 +14,7 @@
|
|||
"name" : {
|
||||
"zh_tw" : "2. 手風琴式列表 ( 模組標題, 類別標題, 檔案名稱, 下載連結 )",
|
||||
"en" : "2. Accordion list (widget-title, category, filename, download link)"
|
||||
},
|
||||
},
|
||||
"thumbnail" : "ar2.png"
|
||||
},
|
||||
{
|
||||
|
@ -21,7 +22,8 @@
|
|||
"name" : {
|
||||
"zh_tw" : "3. 列表( 無檔案名稱 ) ( 模組標題, 類別標題, 下載連結 )",
|
||||
"en" : "3. List(no filename) (widget-title, category, download link)"
|
||||
},
|
||||
},
|
||||
"force_cover": "true",
|
||||
"thumbnail" : "ar3.png"
|
||||
},
|
||||
{
|
||||
|
@ -29,7 +31,7 @@
|
|||
"name" : {
|
||||
"zh_tw" : "4. 手風琴式列表( 無檔案名稱 ( 模組標題, 類別標題, 下載連結 )",
|
||||
"en" : "4. Accordion list(no filename) (widget-title, category, download link)"
|
||||
},
|
||||
},
|
||||
"thumbnail" : "ar4.png"
|
||||
},
|
||||
{
|
||||
|
@ -37,7 +39,7 @@
|
|||
"name" : {
|
||||
"zh_tw" : "5. 表格列表 ( 模組標題, 類別標題, 檔案名稱, 下載連結 )",
|
||||
"en" : "5. Table list (widget-title, category, filename, download link)"
|
||||
},
|
||||
},
|
||||
"thumbnail" : "ar5.png"
|
||||
},
|
||||
{
|
||||
|
@ -45,7 +47,7 @@
|
|||
"name" : {
|
||||
"zh_tw" : "6. 表格列表 ( 模組標題, 檔案名稱, 下載連結 )",
|
||||
"en" : "6. Table list (widget-title, filename, download link)"
|
||||
},
|
||||
},
|
||||
"thumbnail" : "ar5.png"
|
||||
},
|
||||
{
|
||||
|
@ -53,7 +55,11 @@
|
|||
"name" : {
|
||||
"zh_tw" : "7. 表格列表 ( 模組標題, 類別標題, 上傳日期, 檔案名稱, 檔案簡介, 下載連結 )",
|
||||
"en" : "7. Table list (widget-title, category, Updated At, filename, download link)"
|
||||
},
|
||||
},
|
||||
"old_name" : {
|
||||
"zh_tw" : "7. 表格列表 ( 模組標題, 類別標題, 檔案名稱, 檔案簡介, 下載連結 )",
|
||||
"en" : "7. Table list (widget-title, category, filename, download link)"
|
||||
},
|
||||
"thumbnail" : "ar5.png"
|
||||
},
|
||||
{
|
||||
|
@ -61,7 +67,11 @@
|
|||
"name" : {
|
||||
"zh_tw" : "8. 表格列表 ( 模組標題, 上傳日期, 檔案名稱, 檔案簡介, 下載連結 )",
|
||||
"en" : "8. Table list (widget-title, Updated At, filename, download link)"
|
||||
},
|
||||
},
|
||||
"old_name" : {
|
||||
"zh_tw" : "8. 表格列表 ( 模組標題, 檔案名稱, 檔案簡介, 下載連結 )",
|
||||
"en" : "8. Table list (widget-title, filename, download link)"
|
||||
},
|
||||
"thumbnail" : "ar5.png"
|
||||
},
|
||||
{
|
||||
|
@ -69,7 +79,7 @@
|
|||
"name" : {
|
||||
"zh_tw" : "9. 表格列表 - 簡約 ( 模組標題, 檔案名稱, 下載連結 )",
|
||||
"en" : "9. Table list - Simple (widget-title, filename, download link)"
|
||||
},
|
||||
},
|
||||
"thumbnail" : "ar9.png"
|
||||
},
|
||||
{
|
||||
|
@ -77,7 +87,7 @@
|
|||
"name" : {
|
||||
"zh_tw" : "10. 表格列表 ( 模組標題, 類別標題, 編號, 檔案名稱, 下載連結 )",
|
||||
"en" : "10. Table list (widget-title, category, Serial Number, filename, download link)"
|
||||
},
|
||||
},
|
||||
"thumbnail" : "ar5.png"
|
||||
},
|
||||
{
|
||||
|
@ -85,7 +95,7 @@
|
|||
"name" : {
|
||||
"zh_tw" : "11. 表格列表 - 簡約 - 展開檔案 ( 模組標題, 類別標題, 編號, 檔案名稱, 下載連結 )",
|
||||
"en" : "11. Table list - Simple - Unfold Files (widget-title, category, Serial Number, filename, download link)"
|
||||
},
|
||||
},
|
||||
"thumbnail" : "ar9.png"
|
||||
},
|
||||
{
|
||||
|
@ -93,7 +103,8 @@
|
|||
"name" : {
|
||||
"zh_tw" : "12. 手風琴式列表 - 有下拉 ( 模組標題, 類別標題, 檔案名稱, 下載連結 )",
|
||||
"en" : "12. Accordion list - with drop down (widget-title, category, filename, download link)"
|
||||
},
|
||||
},
|
||||
"force_cover": "true",
|
||||
"thumbnail" : "ar2.png"
|
||||
},
|
||||
{
|
||||
|
@ -101,7 +112,8 @@
|
|||
"name": {
|
||||
"zh_tw": "13. 頁籤式 ( 模組標題, 類別標題, 標題, 檔案名稱, 下載連結, 描述 )",
|
||||
"en": "13. Tab list (widget-title, category, title, filename, download link, description)"
|
||||
},
|
||||
},
|
||||
"force_cover": "true",
|
||||
"thumbnail": "ar-tab1.png"
|
||||
}
|
||||
],
|
||||
|
@ -111,7 +123,7 @@
|
|||
"name" : {
|
||||
"zh_tw" : "1. 列表 ( 模組標題, 類別標題, 檔案名稱, 下載頁面連結 )",
|
||||
"en" : "1. List (widget-title, category, link of download page)"
|
||||
},
|
||||
},
|
||||
"thumbnail" : "thumb.png"
|
||||
},
|
||||
{
|
||||
|
@ -121,6 +133,24 @@
|
|||
"en" : "2. Accordion list (widget-title, category, link of download page)"
|
||||
},
|
||||
"thumbnail" : "thumb.png"
|
||||
},
|
||||
{
|
||||
"filename" : "archive_widget3",
|
||||
"name" : {
|
||||
"zh_tw" : "3. 列表 ( 模組標題, 類別標題, 檔案名稱, 包含檔案 )",
|
||||
"en" : "3. List (widget-title, category, and files)"
|
||||
},
|
||||
"force_cover": "true",
|
||||
"thumbnail" : "thumb.png"
|
||||
},
|
||||
{
|
||||
"filename" : "archive_widget4",
|
||||
"name" : {
|
||||
"zh_tw" : "4. 手風琴式列表 - 有下拉 ( 模組標題, 類別標題, 包含檔案 )",
|
||||
"en" : "4. Accordion list - with drop down (widget-title, category, and files)"
|
||||
},
|
||||
"force_cover": "true",
|
||||
"thumbnail" : "thumb.png"
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue