Changes for default index:

- remove approvable and filterable
 - add display_option
 - change params
Update web link and gallery index
This commit is contained in:
chris 2013-07-25 11:32:25 +08:00
parent af0ab9f0d3
commit 1dc7884ec0
7 changed files with 129 additions and 102 deletions

View File

@ -1,6 +1,5 @@
$(function () { $(function () {
var $fileList = $('.file-list'), var $fileType = $('.file-type'),
$fileType = $('.file-type'),
$type = ['pdf', 'psd', 'ai', 'fla', 'swf', 'in', 'acc', 'do', 'xl', 'pp', 'zip', 'rar', '7z', 'txt', 'jp', 'gif', 'png', 'mp3', 'wav']; $type = ['pdf', 'psd', 'ai', 'fla', 'swf', 'in', 'acc', 'do', 'xl', 'pp', 'zip', 'rar', '7z', 'txt', 'jp', 'gif', 'png', 'mp3', 'wav'];
$fileType.each(function (i) { $fileType.each(function (i) {

View File

@ -53,27 +53,14 @@
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
} }
.main-list td .file-list {
display: inline-block;
margin: 0 0 -6px;
}
.main-list td .file-list:after {
content: "";
clear: both;
display: block;
height: 0;
visibility: hidden;
}
.main-list td .file-type { .main-list td .file-type {
position: relative; position: relative;
list-style: none; list-style: none;
float: left;
display: inline-block; display: inline-block;
} }
.main-list td .file-type a { .main-list td .file-type a {
background-color: #A6A6A6; background-color: #A6A6A6;
color: #FFFFFF; color: #FFFFFF;
margin-right: 10px;
padding: 2px 5px 2px 3px; padding: 2px 5px 2px 3px;
border-radius: 3px; border-radius: 3px;
text-decoration: none; text-decoration: none;

View File

@ -82,48 +82,48 @@ module OrbitBackendHelper
res = '' res = ''
case field[:type] case field[:type]
when 'associated' when 'associated'
res << object.send(field[:db_field]).send(field[:associated_value]) rescue '' sorted_objects = get_sorted_objects(object.send(field[:db_field]), field[:model_field]) rescue ''
when 'date' when 'id'
res << (object.send(field[:db_field]) ? display_date_time(object.send(field[:db_field])) : t(:no_date)) sorted_objects = get_sorted_objects(field[:model].find(object.send(field[:db_field])), field[:model_field]) rescue ''
when 'field'
res << with_link?(field, object, object.send(field[:db_field]))
if field[:quick_edit]
res << (content_tag :div, class: "quick-edit" do
content_tag :ul, class: "nav nav-pills" do
@quick_edit.each do |quick|
concat get_quick_link(quick, object, authorization, approvable)
end
end
end)
end
when 'status' when 'status'
status = []
if object.is_top? if object.is_top?
res << content_tag(:span, t(:top), class: "label label-success") + ' ' status << content_tag(:span, t(:top), class: "label label-success")
end end
if object.is_hot? if object.is_hot?
res << content_tag(:span, t(:hot), class: "label label-important") + ' ' status << content_tag(:span, t(:hot), class: "label label-important")
end end
if object.is_hidden? if object.is_hidden?
res << content_tag(:span, t(:hidden), class: "label") + ' ' status << content_tag(:span, t(:hidden), class: "label")
end end
if @approvable if @approvable
if object.is_pending? if object.is_pending?
res << content_tag(:span, t(:pending), class: "label") + ' ' status << content_tag(:span, t(:pending), class: "label")
end end
if object.is_checked? if object.is_checked?
res << content_tag(:span, t(:passed), class: "label") + ' ' status << content_tag(:span, t(:passed), class: "label")
end end
if object.is_rejected? if object.is_rejected?
res << content_tag(:span, t(:rejected), class: "label") + ' ' status << content_tag(:span, t(:rejected), class: "label")
end end
end end
res << status.join(' ')
when 'tags' when 'tags'
object.sorted_tags.each do |tag| sorted_objects = get_sorted_objects(object.tags, 'name') rescue ''
res << content_tag(:span, tag.name, class: "label label-warning") else
end if object.tags sorted_values = object.send(field[:db_field])
res.html_safe sorted_values = sorted_values.sort if sorted_values.is_a?(Array)
when 'id' end
res << field[:id_model].constantize.find(object.send(field[:db_field])).name rescue '' res << display_value_from_object(object, sorted_values, field[:display_option]) if sorted_values
res << display_value_from_objects(sorted_objects, field[:model_field], field[:display_option]) if sorted_objects
if field[:quick_edit]
res << (content_tag :div, class: "quick-edit" do
content_tag :ul, class: "nav nav-pills" do
@quick_edit.each do |quick|
concat get_quick_link(quick, object, authorization, approvable)
end
end
end)
end end
res.html_safe res.html_safe
end end
@ -134,7 +134,7 @@ module OrbitBackendHelper
(content_tag :tr, class: "sort-header" do (content_tag :tr, class: "sort-header" do
@fields.each do |field| @fields.each do |field|
concat (content_tag :th, "data-hide" => field[:hide], class: "#{field[:header_class]} #{'active' if params[:sort].eql?(field[:sort])}" do concat (content_tag :th, "data-hide" => field[:hide], class: "#{field[:header_class]} #{'active' if params[:sort].eql?(field[:sort])}" do
if @sortable && field[:sort] if field[:sort]
link_to is_sort_active?(field), url_for({:filter => @filter}.merge(sortable_options(field[:sort]).merge(:sort_options => field[:db_field]))) link_to is_sort_active?(field), url_for({:filter => @filter}.merge(sortable_options(field[:sort]).merge(:sort_options => field[:db_field])))
else else
t(field[:translation]) t(field[:translation])
@ -163,12 +163,48 @@ module OrbitBackendHelper
@filterable = false @filterable = false
@index_footer = nil @index_footer = nil
@quick_edit = [] @quick_edit = []
@sortable = false
block.call block.call
end end
protected protected
def display_value(value)
case value.class.name
when 'DateTime'
display_date_time(value)
when 'Date'
display_date(value)
when 'Time'
display_time(value)
when /Uploader/
image_tag(value.url)
else
value
end
end
def display_value_from_object(object, value, display_option)
if display_option
eval(display_option)
else
display_value(value)
end
end
def display_value_from_objects(objects, field, display_option)
if display_option
objects = Array(objects).map do |object|
eval(display_option)
end
objects.join(' ')
else
objects = Array(objects).map do |object|
display_value(object.send(field))
end
objects.join(', ')
end
end
# =============================================================== # ===============================================================
# type: # type:
# check "get_value" # check "get_value"
@ -189,15 +225,22 @@ module OrbitBackendHelper
# (only available for type 'field' for now) # (only available for type 'field' for now)
# =============================================================== # ===============================================================
def field(args={}) def field(args={})
if !args.blank? && args[:type] && args[:translation] && args[:db_field] if !args.blank? && args[:translation] && args[:db_field]
case args[:type] case args[:type]
when 'status', 'field', 'date', 'tags'
@fields << args
when 'associated' when 'associated'
@fields << args if args[:associated_value] @fields << args if args[:model_field] || args[:display_option]
when 'id' when 'id'
@fields << args if args[:id_model] @fields << args if args[:model] && (args[:model_field] || args[:display_option])
when 'image'
args[:header_class] ||= 'span2'
@fields << args
else
@fields << args
end end
elsif !args.blank? && args[:type].eql?('tags')
args[:translation] ||= 'tags'
args[:display_option] ||= "content_tag(:span, object.name, class: 'label label-warning')"
@fields << args
end end
end end
@ -209,13 +252,10 @@ module OrbitBackendHelper
when 'objects' when 'objects'
@filter_fields << args if args[:object_field] @filter_fields << args if args[:object_field]
end end
@filterable ||= true
end end
end end
def filterable
@filterable = true
end
# =============================================================== # ===============================================================
# args: # args:
# - paginate: default true, there'es no need to specify it # - paginate: default true, there'es no need to specify it
@ -258,6 +298,17 @@ module OrbitBackendHelper
end end
end end
def get_sorted_objects(objects, field)
if field
objects_array = Array(objects).inject([]){ |result, value|
result << [value.send(field), value]
}
objects_array.sort.map{|d| d[1]}
else
objects
end
end
def is_approvable(object) def is_approvable(object)
current_or_guest_user.admin? || (!object.is_rejected? && !object.is_checked?) current_or_guest_user.admin? || (!object.is_rejected? && !object.is_checked?)
end end
@ -274,10 +325,6 @@ module OrbitBackendHelper
@objects = objects @objects = objects
end end
def sortable
@sortable = true
end
def with_link?(field, object, value) def with_link?(field, object, value)
if field[:link] && @approvable if field[:link] && @approvable
if object.class.instance_methods.include?(:is_checked?) && object.is_checked? if object.class.instance_methods.include?(:is_checked?) && object.is_checked?

View File

@ -1,7 +1,5 @@
<% set_default_index do <% set_default_index do
objects @bulletins objects @bulletins
filterable
sortable
quick_edit_link type: 'edit', quick_edit_link type: 'edit',
link: 'edit_panel_announcement_back_end_bulletin_path' link: 'edit_panel_announcement_back_end_bulletin_path'
quick_edit_link type: 'detail' quick_edit_link type: 'detail'
@ -10,42 +8,42 @@
quick_edit_link type: 'approval', quick_edit_link type: 'approval',
link: 'panel_announcement_back_end_bulletin_approval_preview_path' link: 'panel_announcement_back_end_bulletin_approval_preview_path'
quick_edit_link type: 'reject_reason' quick_edit_link type: 'reject_reason'
field type: 'image',
db_field: 'image',
translation: 'preview',
hide: 'phone'
field type: 'status', field type: 'status',
db_field: @statuses, db_field: @statuses,
translation: 'status', translation: 'status',
hide: 'phone', hide: 'phone',
sort: 'status' sort: 'status'
field type: 'associated', field type: 'associated',
associated_value: 'title',
db_field: 'category', db_field: 'category',
model_field: 'title',
translation: 'category', translation: 'category',
hide: 'phone', hide: 'phone',
sort: 'category' sort: 'category'
field type: 'field', field db_field: 'title',
db_field: 'title',
translation: 'title', translation: 'title',
sort: 'title', sort: 'title',
link: 'panel_announcement_front_end_bulletin_path', display_option: 'link_to value, panel_announcement_front_end_bulletin_path(object)',
quick_edit: true, quick_edit: true,
header_class: 'span5' header_class: 'span5'
field type: 'date', field db_field: 'postdate',
db_field: 'postdate',
translation: 'start_date', translation: 'start_date',
hide: 'phone', hide: 'phone',
sort: 'start_date' sort: 'start_date'
field type: 'date', field db_field: 'deadline',
db_field: 'deadline',
translation: 'end_date', translation: 'end_date',
hide: 'phone', hide: 'phone',
sort: 'end_date' sort: 'end_date'
field type: 'tags', field type: 'tags',
db_field: 'tags',
translation: 'tags',
hide: 'all', hide: 'all',
sort: 'tags' sort: 'tags'
field type: 'id', field type: 'id',
id_model: 'User',
db_field: 'update_user_id', db_field: 'update_user_id',
model: User,
model_field: 'name',
translation: 'last_modified', translation: 'last_modified',
hide: 'phone', hide: 'phone',
sort: 'last_modified' sort: 'last_modified'

View File

@ -1,7 +1,5 @@
<% set_default_index do <% set_default_index do
objects @archive_files objects @archive_files
filterable
sortable
quick_edit_link type: 'edit', quick_edit_link type: 'edit',
link: 'edit_panel_archive_back_end_archive_file_path' link: 'edit_panel_archive_back_end_archive_file_path'
quick_edit_link type: 'detail' quick_edit_link type: 'detail'
@ -14,23 +12,27 @@
sort: 'status', sort: 'status',
header_class: 'span2' header_class: 'span2'
field type: 'associated', field type: 'associated',
associated_value: 'title',
db_field: 'category', db_field: 'category',
model_field: 'title',
translation: 'category', translation: 'category',
hide: 'phone', hide: 'phone',
sort: 'category', sort: 'category',
header_class: 'span2' header_class: 'span2'
field type: 'field', field db_field: 'title',
db_field: 'title',
translation: 'title', translation: 'title',
sort: 'title', sort: 'title',
link: 'panel_archive_front_end_archive_file_path', display_option: 'link_to value, panel_archive_front_end_archive_file_path(object)',
quick_edit: true quick_edit: true,
header_class: 'span5'
field type: 'tags', field type: 'tags',
db_field: 'tags',
translation: 'tags',
hide: 'all', hide: 'all',
sort: 'tags' sort: 'tags'
field type: 'associated',
db_field: 'archive_file_multiples',
translation: 'file_',
display_option: "content_tag(:span, link_to(content_tag(:i) + object.file_identifier, object.file.url, target: '_blank'), class: 'file-type') unless object.file.blank?",
hide: 'all',
header_class: 'span2'
filter_field type: 'array', filter_field type: 'array',
values: @statuses, values: @statuses,
translation: 'status' translation: 'status'
@ -46,3 +48,7 @@
end %> end %>
<%= render 'admin/default_index/index' %> <%= render 'admin/default_index/index' %>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "lib/file-type" %>
<% end %>

View File

@ -1,29 +1,24 @@
<% set_default_index do <% set_default_index do
objects @albums objects @albums
filterable
filter_field type: 'objects', filter_field type: 'objects',
values: @tags, values: @tags,
translation: 'tags', translation: 'tags',
object_field: 'name' object_field: 'name'
footer link: 'new_panel_gallery_back_end_album_path',
paginate: false
end %> end %>
<%= render 'admin/default_index/index' %> <%= render 'admin/default_index/index' %>
<ul id="orbit_gallery" class="gallery" data-gallery-id="gallery">
<% @albums.each do |album| %>
<%= render :partial => "album", :object => album %>
<% end %>
</ul>
<%= stylesheet_link_tag "gallery" %> <% content_for :page_specific_css do %>
<%#= stylesheet_link_tag "filter" %> <%= stylesheet_link_tag "gallery" %>
<% end %>
<!-- Bottom Nav -->
<div class="bottomnav clearfix">
<div class="action pull-right">
<a href="<%= new_panel_gallery_back_end_album_path %>" class="btn btn-primary"><i class="icons-plus"></i> Add New</a>
</div>
</div>
</div>
<ul id="orbit_gallery" class="gallery" data-gallery-id="gallery">
<% @albums.each do |album| %>
<%= render :partial => "album", :object => album %>
<% end %>
</ul>
<% content_for :page_specific_javascript do %> <% content_for :page_specific_javascript do %>
<%= javascript_include_tag "jquery.masonry.min.js" %> <%= javascript_include_tag "jquery.masonry.min.js" %>
<%= javascript_include_tag "jquery.mu.image.resize.js" %> <%= javascript_include_tag "jquery.mu.image.resize.js" %>

View File

@ -1,7 +1,5 @@
<% set_default_index do <% set_default_index do
objects @web_links objects @web_links
filterable
sortable
quick_edit_link type: 'edit', quick_edit_link type: 'edit',
link: 'edit_panel_web_resource_back_end_web_link_path' link: 'edit_panel_web_resource_back_end_web_link_path'
quick_edit_link type: 'detail' quick_edit_link type: 'detail'
@ -14,22 +12,19 @@
sort: 'status', sort: 'status',
header_class: 'span2' header_class: 'span2'
field type: 'associated', field type: 'associated',
associated_value: 'title',
db_field: 'category', db_field: 'category',
model_field: 'title',
translation: 'category', translation: 'category',
hide: 'phone', hide: 'phone',
sort: 'category', sort: 'category',
header_class: 'span2' header_class: 'span2'
field type: 'field', field db_field: 'title',
db_field: 'title',
translation: 'title', translation: 'title',
sort: 'title', sort: 'title',
link: 'panel_web_resource_front_end_web_link_path', display_option: 'link_to value, panel_web_resource_front_end_web_link_path(object)',
quick_edit: true, quick_edit: true,
header_class: 'span5' header_class: 'span5'
field type: 'tags', field type: 'tags',
db_field: 'tags',
translation: 'tags',
hide: 'all', hide: 'all',
sort: 'tags' sort: 'tags'
filter_field type: 'array', filter_field type: 'array',