add global thumb_process_option setting and thumb version for index

This commit is contained in:
邱博亞 2023-02-18 21:28:40 +08:00
parent 46df77f0e0
commit 16ff105bc7
10 changed files with 126 additions and 32 deletions

View File

@ -36,26 +36,62 @@ class GalleriesController < ApplicationController
end end
def index def index
page = OrbitHelper.page
@album_setting = AlbumSetting.first @album_setting = AlbumSetting.first
page_no = OrbitHelper.page_number page_no = OrbitHelper.page_number
data_count = OrbitHelper.page_data_count data_count = OrbitHelper.page_data_count
albums = Album.filter_by_categories.filter_by_tags.asc(:order).page(page_no).per(data_count) albums = Album.filter_by_categories.filter_by_tags.asc(:order).page(page_no).per(data_count)
album_color_map = AlbumColor.where(:album_id.in=> albums.pluck(:id)).pluck(:album_id,:color,:album_card_background_color,:album_card_text_color).map{|v| [v[0],v[1..-1]]}.to_h album_color_map = AlbumColor.where(:album_id.in=> albums.pluck(:id)).pluck(:album_id,:color,:album_card_background_color,:album_card_text_color).map{|v| [v[0],v[1..-1]]}.to_h
@image_version = 'thumb'
ModuleApp.all.select{|tmp| tmp.key.to_s=='gallery'}.each do |modile_app|
@show_option_items = modile_app.show_option_items rescue nil
end
if !(@show_option_items.nil?)
I18n.with_locale(:en) do
page.select_option_items.each do |select_option_item|
case select_option_item.field_name
when @show_option_items.keys[1].to_s
value = YAML.load(select_option_item.value)
tmp = value[:en]
if tmp == t('gallery.small_size')
@image_version = 'thumb'
elsif tmp == t('gallery.medium_size')
@image_version = 'thumb_large'
elsif tmp == t('gallery.large_size')
@image_version = 'mobile'
end
end
end
end
end
galleries = albums.collect do |a| galleries = albums.collect do |a|
doc = Nokogiri::HTML(a.description.to_s) doc = Nokogiri::HTML(a.description.to_s)
alt_text = doc.text.empty? ? 'gallery image' : doc.text alt_text = doc.text.empty? ? 'gallery image' : doc.text
colors = album_color_map[a.id] || [] colors = album_color_map[a.id] || []
thumb_src = a.cover_path || "/assets/gallery/default.jpg" thumb_src = a.cover_path(@image_version)
if thumb_src
thumb_srcs = thumb_src.split('/')
thumb_srcs[-1] = thumb_srcs[-1].sub(/^\w+_/,"")
thumb_path = thumb_srcs[0..-2].join('/')
thumb_path_name = thumb_srcs[-1]
src = "#{thumb_path}/#{thumb_path_name}"
thumb_large_src = "#{thumb_path}/thumb_large_#{thumb_path_name}"
mobile_src = "#{thumb_path}/mobile_#{thumb_path_name}"
theater_src = "#{thumb_path}/theater_#{thumb_path_name}"
else
src = thumb_src = thumb_large_src = mobile_src = theater_src = "/assets/gallery/default.jpg"
end
{ {
"album-name" => a.name, "album-name" => a.name,
"album-description" => a.description, "album-description" => a.description,
"alt_title" => alt_text, "alt_title" => alt_text,
"link_to_show" => OrbitHelper.url_to_show(a.to_param), "link_to_show" => OrbitHelper.url_to_show(a.to_param),
"thumb-src" => thumb_src, "thumb-src" => thumb_src,
"src" => thumb_src.sub('thumb_','') , "src" => src,
"thumb-large-src" => thumb_src.sub("thumb_","thumb_large_"), "thumb-large-src" => thumb_large_src,
"mobile-src" => thumb_src.sub("thumb_","mobile_"), "mobile-src" => mobile_src,
"theater-src" => thumb_src.sub("thumb_","theater_"), "theater-src" => theater_src,
"album_color" => iterate_data(colors[1],colors[0],@album_setting.album_card_background_color,'transparent'), "album_color" => iterate_data(colors[1],colors[0],@album_setting.album_card_background_color,'transparent'),
"album_card_text_color" => iterate_data(colors[2],@album_setting.album_card_text_color) "album_card_text_color" => iterate_data(colors[2],@album_setting.album_card_text_color)
} }

View File

@ -61,7 +61,7 @@ class Album
Position object at bottom-right of region Position object at bottom-right of region
""" """
tmp = self[:resize_gravity] tmp = self[:resize_gravity]
(tmp.blank? ? (AlbumSetting.first.resize_gravity.blank? ? "Center" : AlbumSetting.first.resize_gravity) : tmp) rescue 'Center' tmp.blank? ? OrbitHelper::SharedHash['gallery'][:resize_gravity] : tmp
end end
def self.find_by_param(input) def self.find_by_param(input)
self.find_by(uid: input.to_s) self.find_by(uid: input.to_s)
@ -98,10 +98,17 @@ class Album
end end
tmp tmp
end end
def cover_path def cover_path(thumb_version='thumb')
tmp = self['cover_path'] tmp = self['cover_path']
if tmp.nil? if tmp.nil? && self.album_images.first
tmp = (self.album_images.first.file.thumb.url rescue nil) case thumb_version
when 'thumb'
tmp = self.album_images.first.file.thumb.url
when 'thumb_large'
tmp = self.album_images.first.file.thumb_large.url
when 'mobile'
tmp = self.album_images.first.file.mobile.url
end
end end
tmp tmp
end end

View File

@ -2,9 +2,17 @@ class AlbumSetting
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
field :limit field :limit
field :resize_gravity, type: String, default: 'center' field :resize_gravity, type: String, default: 'Center'
ResizeGravities = %w[Center NorthWest North NorthEast West East SouthWest South SouthEast] ResizeGravities = %w[Center NorthWest North NorthEast West East SouthWest South SouthEast]
field :album_card_background_color, default: '' field :album_card_background_color, default: ''
field :album_card_text_color, default: '#000000' field :album_card_text_color, default: '#000000'
field :min_order, type: Integer, default: -1 field :min_order, type: Integer, default: -1
field :thumb_process_option, type: Integer, default: 1
before_save do
if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash
OrbitHelper::SharedHash['gallery'][:thumb_process_option] = self.thumb_process_option
OrbitHelper::SharedHash['gallery'][:resize_gravity] = self.resize_gravity
end
end
end end

View File

@ -177,12 +177,16 @@ class GalleryUploader < CarrierWave::Uploader::Base
end end
def thumb_process(w,h) def thumb_process(w,h)
now_album = model.album now_album = model.album
case now_album.thumb_process_option thumb_process_option = now_album.thumb_process_option
when 0 if thumb_process_option == 0
resize_and_pad(w, h, (transparent? ? :transparent : now_album.album_colors.first['color']), (now_album.resize_gravity rescue 'Center')) thumb_process_option = OrbitHelper::SharedHash['gallery'][:thumb_process_option]
end
case thumb_process_option
when 1 when 1
limit_process(w, h) resize_and_pad(w, h, (transparent? ? :transparent : now_album.album_colors.first['color']), (now_album.resize_gravity rescue 'Center'))
when 2 when 2
limit_process(w, h)
when 3
resize_to_fill(w, h) resize_to_fill(w, h)
end end
end end

View File

@ -122,7 +122,7 @@ input.minicolors-input{
<%= f.fields_for :album_colors do |album_color_form| %> <%= f.fields_for :album_colors do |album_color_form| %>
<!-- Frame Color --> <!-- Frame Color -->
<div class="control-group thumb_process_option 0" style='display: flex;'> <div class="control-group thumb_process_option 0 1" style='display: flex;'>
<label class="control-label muted"><%= t('gallery.frame_color') %></label> <label class="control-label muted"><%= t('gallery.frame_color') %></label>
<%= album_color_form.text_field :color , :class => 'input-block-level minicolors-input' %> <%= album_color_form.text_field :color , :class => 'input-block-level minicolors-input' %>
<span style='font-size: 20px;display: flex;align-items: center;'> <span style='font-size: 20px;display: flex;align-items: center;'>
@ -130,7 +130,7 @@ input.minicolors-input{
<%= t('gallery.transparent') %> <%= t('gallery.transparent') %>
</span> </span>
</div> </div>
<div class="control-group thumb_process_option 0"> <div class="control-group thumb_process_option 0 1">
<label class="control-label muted"> <label class="control-label muted">
<%= t('gallery.thumb_resize_reference') %> <%= t('gallery.thumb_resize_reference') %>
</label> </label>

View File

@ -53,6 +53,12 @@
<label class="control-label muted"><%= t('gallery.album_limit_for_one_page') %></label> <label class="control-label muted"><%= t('gallery.album_limit_for_one_page') %></label>
<%= f.text_field :limit,:placeholder => t('gallery.blank_for_nil') %> <%= f.text_field :limit,:placeholder => t('gallery.blank_for_nil') %>
</div> </div>
<div class="control-group" style='display: flex;'>
<label class="control-label muted"><%= t('gallery.thumb_process_option_trans') %></label>
<div class="controls">
<%= f.select :thumb_process_option, t('gallery.thumb_process_option').to_enum.with_index.collect{|v, i| [v, i]}[1..-1] %>
</div>
</div>
<div class="control-group" style='display: flex;'> <div class="control-group" style='display: flex;'>
<label class="control-label muted"><%= t('gallery.thumb_resize_reference') %></label> <label class="control-label muted"><%= t('gallery.thumb_resize_reference') %></label>
<%= f.select :resize_gravity, [["---#{t("default")}: #{t("gallery.gravity.#{AlbumSetting::ResizeGravities[0]}")}---",nil]]+AlbumSetting::ResizeGravities.collect{|v| [t("gallery.gravity.#{v}"),v]} %> <%= f.select :resize_gravity, [["---#{t("default")}: #{t("gallery.gravity.#{AlbumSetting::ResizeGravities[0]}")}---",nil]]+AlbumSetting::ResizeGravities.collect{|v| [t("gallery.gravity.#{v}"),v]} %>

View File

@ -1,10 +1,15 @@
en: en:
gallery: gallery:
picture_thumb_size: Picture Showing Size
small_size: Small Size
medium_size: Medium Size
large_size: 16:9 Large Size
setting: Gallery Setting setting: Gallery Setting
advanced_setting: Advanced Setting advanced_setting: Advanced Setting
thumb_process_option_trans: Thumb Process Option thumb_process_option_trans: Thumb Process Option
thumb_process_option: thumb_process_option:
- default
- resize and padding - resize and padding
- resize only - resize only
- resize and crop - resize and crop
@ -16,15 +21,15 @@ en:
album_card_text_color: Text Color for album card album_card_text_color: Text Color for album card
thumb_resize_reference: Resize reference for thumb thumb_resize_reference: Resize reference for thumb
gravity: gravity:
Center: center Center: center
NorthWest: top-left NorthWest: top-left
North: top-center North: top-center
NorthEast: top-right NorthEast: top-right
West: left-center West: left-center
East: right-center East: right-center
SouthWest: left-bottom SouthWest: left-bottom
South: bottom-center South: bottom-center
SouthEast: bottom-right SouthEast: bottom-right
short-description: Short Description short-description: Short Description
album_limit_for_one_page: Amount of limit for album in one page album_limit_for_one_page: Amount of limit for album in one page
blank_for_nil: blank present no limit blank_for_nil: blank present no limit

View File

@ -1,10 +1,16 @@
zh_tw: zh_tw:
gallery: gallery:
picture_thumb_size: 圖片縮圖大小
small_size: 小張縮圖
medium_size: 中等縮圖
large_size: 16:9大縮圖
setting: 相簿設定 setting: 相簿設定
advanced_setting: 進階設定 advanced_setting: 進階設定
thumb_process_option_trans: 縮圖處理選項 thumb_process_option_trans: 縮圖處理選項
thumb_process_option: thumb_process_option:
- 預設
- 縮放並填充 - 縮放並填充
- 僅縮放 - 僅縮放
- 縮放並裁切 - 縮放並裁切

View File

@ -90,6 +90,10 @@ Gem::Specification.new do |s|
s.summary = "Campus Gallery." s.summary = "Campus Gallery."
s.description = "Campus Galllery" s.description = "Campus Galllery"
s.license = "MIT" s.license = "MIT"
s.metadata = {
"_require" => "#{File.expand_path("../app/models/album_setting", __FILE__)}",
"global_hash" => "{resize_gravity: (AlbumSetting.first.resize_gravity rescue 'Center'), thumb_process_option: (AlbumSetting.first.thumb_process_option rescue 1)}"
}
s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"] s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]
s.test_files = Dir["test/**/*"] s.test_files = Dir["test/**/*"]

View File

@ -5,18 +5,36 @@ module Gallery
translate_data = Dir["#{Gallery::Engine.root}/config/locales/*.yml"] .map{|yaml_file| YAML.load(File.read(yaml_file))} translate_data = Dir["#{Gallery::Engine.root}/config/locales/*.yml"] .map{|yaml_file| YAML.load(File.read(yaml_file))}
data = {} data = {}
key1 = {} key1 = {}
value1 = {} key1_options = ['grid_style','card_style','slideshow_style']
value2 = {} key1_attrs = []
value3 = {} key1_options.each_with_index do |v, i|
key1_attrs[i] = {}
end
key2 = {}
key2_options = ['small_size','medium_size','large_size']
key2_attrs = []
key2_options.each_with_index do |v, i|
key2_attrs[i] = {}
end
translate_data.each do |t_data| translate_data.each do |t_data|
v = t_data.values v = t_data.values
k = t_data.keys[0] k = t_data.keys[0]
key1[k] = v[0]['gallery']['inner_page_layout'] key1[k] = v[0]['gallery']['inner_page_layout']
value1[k] = v[0]['gallery']['grid_style'] key1_options.each_with_index do |kk, i|
value2[k] = v[0]['gallery']['card_style'] key1_attrs[i][k] = v[0]['gallery'][kk]
value3[k] = v[0]['gallery']['slideshow_style'] end
key2[k] = v[0]['gallery']['picture_thumb_size']
key2_options.each_with_index do |kk, i|
key2_attrs[i][k] = v[0]['gallery'][kk]
end
end end
data[key1] = [value1,value2,value3]
data[key1] = key1_attrs
data[key2] = key2_attrs
rescue => e rescue => e
puts ['error in gallery',e] puts ['error in gallery',e]
end end