Skip to content

Commit

Permalink
new filters in data page. issue #377
Browse files Browse the repository at this point in the history
  • Loading branch information
manxingxing committed Aug 17, 2014
1 parent c719146 commit 868a9b9
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 103 deletions.
24 changes: 24 additions & 0 deletions app/assets/stylesheets/datasets.css.scss
Original file line number Diff line number Diff line change
Expand Up @@ -426,3 +426,27 @@ ul#downloaders {
.license-control {margin-top: 5px;}
input[type=radio] {float:left;margin-left: -25px;margin-top:5px;}
}


#filters {
border:1px solid #4aa94e;
margin-bottom:1em;
padding:0px 5px;
ul.nav {
margin:0;
padding:0;
& > li {
float:left;
margin:0;
&:hover {
.js-modal-container {display:block;}
}
}
}
#sorting-select-menu {
float:right;
line-height:13px;
span{margin:10px 5px 10px 0px;float:left;}
select {margin:3px 0px;float:left;}
}
}
2 changes: 1 addition & 1 deletion app/assets/stylesheets/style.css.scss
Original file line number Diff line number Diff line change
Expand Up @@ -664,7 +664,7 @@ div#sidebar {
margin-left: -24px;
}

div#actions ~ div#info,div#filters{
div#actions ~ div#info{
margin-top: 10px;
border-top: 1px solid #cdcdcd;
padding-top: 14px;
Expand Down
8 changes: 6 additions & 2 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,12 @@ def current_cart
end
end

def validate_sort_params(options = {})
return unless options[:collection] and options[:default]
# specify a collection of sorted-by options, and one of them is the default
# eg: validate_sort_params(collection: ['a', 'b'], default: 'a')
def validate_sort_params(*options)
options = options.extract_options!
raise 'A collection of allowed sorting options should be specified!' unless options[:collection].present?
options[:default] ||= options[:collection].first
params[:sort] = options[:default] unless options[:collection].include?(params[:sort])
params[:direction] = 'asc' unless ["desc", "asc"].include?(params[:direction])
end
Expand Down
34 changes: 14 additions & 20 deletions app/controllers/pages_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,22 @@ def imprint
# This method is the dashboard method of our Portal
# This provide a first look to our metadata and give a hint about our data
def data
validate_sort_params
validate_sort_params(collection: ['title', 'last_update', 'id'], default: 'title')
@tags = DatasetTag.tag_counts

@datasets = params[:access_code] ? Dataset.access(params[:access_code]) : Dataset.scoped
@datasets = @datasets.joins_datafile_and_freeformats(params[:workbook],params[:attachment]).select("datasets.id, title,
datasets.updated_at as last_update")
.order("#{validate_sort_params}")
@datasets = Dataset.scoped
@filter_params = BefParam.new(params[:q], :checkbox => :access_code, :radio => :f)

@datasets = @datasets.where(access_code: @filter_params[:access_code]) if @filter_params.has_param? :access_code

@datasets = @datasets.where(['datafiles_count > 0']) if @filter_params.has_param?(:f, 'w')
@datasets = @datasets.where(['freeformats_count > 0']) if @filter_params.has_param?(:f, 'a')
@datasets = @datasets.where(['freeformats_count = 0 and datafiles_count = 0']) if @filter_params.has_param?(:f, 'n')
@datasets = @datasets.where(['datafiles_count > 0 or freeformats_count > 0']) if @filter_params.has_param?(:f, %w{a w})

@datasets = @datasets.select("id, title, updated_at as last_update")
.order("#{params[:sort]} #{params[:direction]}")
.paginate(page: params[:page], per_page: 50)
end

def search
Expand All @@ -58,19 +67,4 @@ def search
@datasets = Dataset.search(params[:q]) | Datacolumn.includes(:dataset).search(params[:q]).uniq_by(&:dataset_id).map(&:dataset)
end
end

private
def validate_sort_params
if sort = params[:sort]
sort = CGI.unescape sort
sort =
if ['title asc', 'id desc', 'last_update desc'].include?(sort)
sort
else
''
end
else
''
end
end
end
27 changes: 0 additions & 27 deletions app/models/dataset.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ class Dataset < ActiveRecord::Base

before_destroy :check_for_paperproposals
before_save :set_include_license, :check_author
scope :access, ->(codes) { where(access_code: codes.map{|code| ACCESS_CODES[code.to_sym]})}
pg_search_scope :search, against: {
title: 'A',
abstract: 'B',
Expand Down Expand Up @@ -212,32 +211,6 @@ def find_related_datasets
return(datasets)
end

def self.joins_datafile_and_freeformats(workbook = nil, attachment = nil)

rel = self.joins("
left join freeformats on freeformats.freeformattable_id = datasets.id AND freeformats.freeformattable_type='Dataset'
").group('datasets.id')
rel =
case workbook
when true, 'true', ['true']
rel.where('datafiles_count > 0')
when false, 'false', ['false']
rel.where('datafiles_count = 0 or datafiles_count is null')
else
rel
end
rel =
case attachment
when true, 'true', ['true']
rel.where('freeformats_count > 0')
when false, 'false', ['false']
rel.where('freeformats_count = 0 or freeformats_count is null')
else
rel
end
rel
end

# acl9 role related staff: different kinds of user
def owners
get_user_with_role(:owner)
Expand Down
93 changes: 40 additions & 53 deletions app/views/pages/data.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,6 @@
= image_tag "list-ordered.png"
List Datagroups

- content_for :filters do
= form_tag("/data",method: "get") do
%h3 Filter datasets:
.dataset-filter
%select{multiple: "", name: "access_code[]"}
%option{value: "private"} private
%option{value: "free_within_projects"} open within projects
%option{value: "free_for_members"} open for members
%option{value: "free_for_public"} open for public
%select{multiple: "", name: "workbook[]"}
%option{value: "true"} with workbook
%option{value: "false"} without workbook
%select{multiple: "", name: "attachment[]"}
%option{value: "true"} with attachment
%option{value: "false"} without attachment
Sort #{@datasets.length} of #{Dataset.count} datasets by
%select{name: "sort"}
%option{value: "id+desc"} Newest
%option{value: "title+asc"} Title
%option{value: "last_update+desc"} Recently Updated
%input#filter-button{type: "submit", value: "Apply filter"}

- content_for :info do
%h3
= link_to "Keywords", keywords_path
Expand All @@ -39,6 +17,39 @@
= " "

%h2 Data sets

#filters.clearfix
#sorting-select-menu.right
%span
Sort
- if params[:q].present?
#{@datasets.count} of
#{Dataset.count} datasets by
= select_tag :name, dropdown_list_to_sort_datasets, class: 'js-select-menu'
%ul.left.nav
%li.dropdown
%span.dropdown-toggle Access Right
.js-modal-container
.js-modal
.modal-header
%h4 Access Right
.modal-body
%ul.js-select
- Dataset::ACCESS_CODES.stringify_keys.each do |access, value|
= content_tag :li, class: @filter_params.has_param?(:access_code, value.to_s) ? 'selected' : nil do
= link_to access.humanize, data_path(params.merge(q: @filter_params.toggle_param(:access_code, value.to_s)))
%li.dropdown
%span.dropdown-toggle Data Files
.js-modal-container
.js-modal
.modal-header
%h4 Data Files
.modal-body
%ul.js-select
- {'With Workbook' => 'w', 'With Attachment Files' => 'a', 'Workbook + Attachment Files' => ['w', 'a'], 'Metadata Only' => 'n'}.each do |text, code|
= content_tag :li, class: @filter_params.has_param?(:f, code) ? 'selected' : nil do
= link_to text, data_path(params.merge(q: @filter_params.toggle_param(:f, code)))

- if @datasets.empty?
%i No Datasets Found.

Expand All @@ -47,36 +58,12 @@
%li.dataset
= render :partial => ds, :locals => {:with_cart => true, :with_comment => false}

= will_paginate(@datasets)

:javascript
$(function(){
$(".dataset-filter select").each(
function(index,elem){
$(elem).select2({"width": "element" });
}
);
(function(){
var qs = window.location.search.split("&").map(function(s){return decodeURIComponent(s);});
qs = qs.slice(1,qs.length);
var kv = {};
qs.forEach(function(q){
var arr = q.split('=');
var k = 'select[name="'+arr[0]+'"]';
var v = arr[1];
var elem = $(k);
if(arr[0] == 'sort'){
elem.val(v);
}
else{
if(elem != null)
{
kv[k] ? kv[k].push(v) : (kv[k] = [v]);
}
}
});
for (var k in kv) {
if (kv.hasOwnProperty(k)) {
$(k).select2('val',kv[k]);
}
}
})();// fill in filter selects according to params
});
$(".js-select-menu").change(function(){
var value = $(this).val();
window.location.href = value;
});
})

0 comments on commit 868a9b9

Please sign in to comment.