From 1dc7884ec0d55b52a45d574fd4fd868bfa25ea0a Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 25 Jul 2013 11:32:25 +0800 Subject: [PATCH] Changes for default index: - remove approvable and filterable - add display_option - change params Update web link and gallery index --- app/assets/javascripts/lib/file-type.js | 3 +- app/assets/stylesheets/lib/main-list.css.erb | 13 -- app/helpers/orbit_backend_helper.rb | 129 ++++++++++++------ .../back_end/bulletins/index.html.erb | 24 ++-- .../back_end/archive_files/index.html.erb | 24 ++-- .../gallery/back_end/albums/index.html.erb | 27 ++-- .../back_end/web_links/index.html.erb | 11 +- 7 files changed, 129 insertions(+), 102 deletions(-) diff --git a/app/assets/javascripts/lib/file-type.js b/app/assets/javascripts/lib/file-type.js index 9a2803e2a..2393c1f60 100644 --- a/app/assets/javascripts/lib/file-type.js +++ b/app/assets/javascripts/lib/file-type.js @@ -1,6 +1,5 @@ $(function () { - var $fileList = $('.file-list'), - $fileType = $('.file-type'), + var $fileType = $('.file-type'), $type = ['pdf', 'psd', 'ai', 'fla', 'swf', 'in', 'acc', 'do', 'xl', 'pp', 'zip', 'rar', '7z', 'txt', 'jp', 'gif', 'png', 'mp3', 'wav']; $fileType.each(function (i) { diff --git a/app/assets/stylesheets/lib/main-list.css.erb b/app/assets/stylesheets/lib/main-list.css.erb index c4ced987c..65987a255 100644 --- a/app/assets/stylesheets/lib/main-list.css.erb +++ b/app/assets/stylesheets/lib/main-list.css.erb @@ -53,27 +53,14 @@ text-overflow: ellipsis; 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 { position: relative; list-style: none; - float: left; display: inline-block; } .main-list td .file-type a { background-color: #A6A6A6; color: #FFFFFF; - margin-right: 10px; padding: 2px 5px 2px 3px; border-radius: 3px; text-decoration: none; diff --git a/app/helpers/orbit_backend_helper.rb b/app/helpers/orbit_backend_helper.rb index 4e7d783ba..33fa94447 100644 --- a/app/helpers/orbit_backend_helper.rb +++ b/app/helpers/orbit_backend_helper.rb @@ -82,48 +82,48 @@ module OrbitBackendHelper res = '' case field[:type] when 'associated' - res << object.send(field[:db_field]).send(field[:associated_value]) rescue '' - when 'date' - res << (object.send(field[:db_field]) ? display_date_time(object.send(field[:db_field])) : t(:no_date)) - 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 + sorted_objects = get_sorted_objects(object.send(field[:db_field]), field[:model_field]) rescue '' + when 'id' + sorted_objects = get_sorted_objects(field[:model].find(object.send(field[:db_field])), field[:model_field]) rescue '' when 'status' + status = [] 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 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 if object.is_hidden? - res << content_tag(:span, t(:hidden), class: "label") + ' ' + status << content_tag(:span, t(:hidden), class: "label") end if @approvable if object.is_pending? - res << content_tag(:span, t(:pending), class: "label") + ' ' + status << content_tag(:span, t(:pending), class: "label") end if object.is_checked? - res << content_tag(:span, t(:passed), class: "label") + ' ' + status << content_tag(:span, t(:passed), class: "label") end if object.is_rejected? - res << content_tag(:span, t(:rejected), class: "label") + ' ' + status << content_tag(:span, t(:rejected), class: "label") end end + res << status.join(' ') when 'tags' - object.sorted_tags.each do |tag| - res << content_tag(:span, tag.name, class: "label label-warning") - end if object.tags - res.html_safe - when 'id' - res << field[:id_model].constantize.find(object.send(field[:db_field])).name rescue '' + sorted_objects = get_sorted_objects(object.tags, 'name') rescue '' + else + sorted_values = object.send(field[:db_field]) + sorted_values = sorted_values.sort if sorted_values.is_a?(Array) + end + 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 res.html_safe end @@ -134,7 +134,7 @@ module OrbitBackendHelper (content_tag :tr, class: "sort-header" do @fields.each do |field| 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]))) else t(field[:translation]) @@ -163,12 +163,48 @@ module OrbitBackendHelper @filterable = false @index_footer = nil @quick_edit = [] - @sortable = false block.call end 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: # check "get_value" @@ -189,15 +225,22 @@ module OrbitBackendHelper # (only available for type 'field' for now) # =============================================================== def field(args={}) - if !args.blank? && args[:type] && args[:translation] && args[:db_field] + if !args.blank? && args[:translation] && args[:db_field] case args[:type] - when 'status', 'field', 'date', 'tags' - @fields << args when 'associated' - @fields << args if args[:associated_value] + @fields << args if args[:model_field] || args[:display_option] 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 + 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 @@ -209,13 +252,10 @@ module OrbitBackendHelper when 'objects' @filter_fields << args if args[:object_field] end + @filterable ||= true end end - def filterable - @filterable = true - end - # =============================================================== # args: # - paginate: default true, there'es no need to specify it @@ -258,6 +298,17 @@ module OrbitBackendHelper 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) current_or_guest_user.admin? || (!object.is_rejected? && !object.is_checked?) end @@ -274,10 +325,6 @@ module OrbitBackendHelper @objects = objects end - def sortable - @sortable = true - end - def with_link?(field, object, value) if field[:link] && @approvable if object.class.instance_methods.include?(:is_checked?) && object.is_checked? diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb index 0ba95d2f7..8cb0fc51a 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb @@ -1,7 +1,5 @@ <% set_default_index do objects @bulletins - filterable - sortable quick_edit_link type: 'edit', link: 'edit_panel_announcement_back_end_bulletin_path' quick_edit_link type: 'detail' @@ -10,42 +8,42 @@ quick_edit_link type: 'approval', link: 'panel_announcement_back_end_bulletin_approval_preview_path' quick_edit_link type: 'reject_reason' + field type: 'image', + db_field: 'image', + translation: 'preview', + hide: 'phone' field type: 'status', db_field: @statuses, translation: 'status', hide: 'phone', sort: 'status' field type: 'associated', - associated_value: 'title', db_field: 'category', + model_field: 'title', translation: 'category', hide: 'phone', sort: 'category' - field type: 'field', - db_field: 'title', + field db_field: 'title', translation: '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, header_class: 'span5' - field type: 'date', - db_field: 'postdate', + field db_field: 'postdate', translation: 'start_date', hide: 'phone', sort: 'start_date' - field type: 'date', - db_field: 'deadline', + field db_field: 'deadline', translation: 'end_date', hide: 'phone', sort: 'end_date' field type: 'tags', - db_field: 'tags', - translation: 'tags', hide: 'all', sort: 'tags' field type: 'id', - id_model: 'User', db_field: 'update_user_id', + model: User, + model_field: 'name', translation: 'last_modified', hide: 'phone', sort: 'last_modified' diff --git a/vendor/built_in_modules/archive/app/views/panel/archive/back_end/archive_files/index.html.erb b/vendor/built_in_modules/archive/app/views/panel/archive/back_end/archive_files/index.html.erb index 987d0d94b..d3395cd29 100644 --- a/vendor/built_in_modules/archive/app/views/panel/archive/back_end/archive_files/index.html.erb +++ b/vendor/built_in_modules/archive/app/views/panel/archive/back_end/archive_files/index.html.erb @@ -1,7 +1,5 @@ <% set_default_index do objects @archive_files - filterable - sortable quick_edit_link type: 'edit', link: 'edit_panel_archive_back_end_archive_file_path' quick_edit_link type: 'detail' @@ -14,23 +12,27 @@ sort: 'status', header_class: 'span2' field type: 'associated', - associated_value: 'title', db_field: 'category', + model_field: 'title', translation: 'category', hide: 'phone', sort: 'category', header_class: 'span2' - field type: 'field', - db_field: 'title', + field db_field: 'title', translation: 'title', sort: 'title', - link: 'panel_archive_front_end_archive_file_path', - quick_edit: true + display_option: 'link_to value, panel_archive_front_end_archive_file_path(object)', + quick_edit: true, + header_class: 'span5' field type: 'tags', - db_field: 'tags', - translation: 'tags', hide: 'all', 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', values: @statuses, translation: 'status' @@ -46,3 +48,7 @@ end %> <%= render 'admin/default_index/index' %> + +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/file-type" %> +<% end %> diff --git a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/albums/index.html.erb b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/albums/index.html.erb index 5627cdd3d..6aacc9001 100644 --- a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/albums/index.html.erb +++ b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/albums/index.html.erb @@ -1,29 +1,24 @@ <% set_default_index do objects @albums - filterable filter_field type: 'objects', values: @tags, translation: 'tags', object_field: 'name' + footer link: 'new_panel_gallery_back_end_album_path', + paginate: false end %> <%= render 'admin/default_index/index' %> + + -<%= stylesheet_link_tag "gallery" %> -<%#= stylesheet_link_tag "filter" %> +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "gallery" %> +<% end %> - -
- -
- - - <% content_for :page_specific_javascript do %> <%= javascript_include_tag "jquery.masonry.min.js" %> <%= javascript_include_tag "jquery.mu.image.resize.js" %> diff --git a/vendor/built_in_modules/web_resource/app/views/panel/web_resource/back_end/web_links/index.html.erb b/vendor/built_in_modules/web_resource/app/views/panel/web_resource/back_end/web_links/index.html.erb index 1d3fdc7ba..e11294f93 100644 --- a/vendor/built_in_modules/web_resource/app/views/panel/web_resource/back_end/web_links/index.html.erb +++ b/vendor/built_in_modules/web_resource/app/views/panel/web_resource/back_end/web_links/index.html.erb @@ -1,7 +1,5 @@ <% set_default_index do objects @web_links - filterable - sortable quick_edit_link type: 'edit', link: 'edit_panel_web_resource_back_end_web_link_path' quick_edit_link type: 'detail' @@ -14,22 +12,19 @@ sort: 'status', header_class: 'span2' field type: 'associated', - associated_value: 'title', db_field: 'category', + model_field: 'title', translation: 'category', hide: 'phone', sort: 'category', header_class: 'span2' - field type: 'field', - db_field: 'title', + field db_field: 'title', translation: '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, header_class: 'span5' field type: 'tags', - db_field: 'tags', - translation: 'tags', hide: 'all', sort: 'tags' filter_field type: 'array',