From 5147b37a3285a231d8c938c3baf2f216a3b7f197 Mon Sep 17 00:00:00 2001 From: mr Date: Mon, 17 Oct 2011 10:04:44 +0200 Subject: model sorting for endpoints| pager for models --- application.rb | 21 ++++++++++++++--- helper.rb | 5 ++++ views/models.haml | 1 + views/models_navigation.haml | 36 ++++++++++++++++++---------- views/models_navigation_bottom.haml | 47 +++++++++++++++++++++++++++++++++++++ views/predict.haml | 5 ++++ views/style.sass | 24 ++++++++++++------- 7 files changed, 115 insertions(+), 24 deletions(-) create mode 100644 views/models_navigation_bottom.haml diff --git a/application.rb b/application.rb index c41f072..019592c 100644 --- a/application.rb +++ b/application.rb @@ -96,8 +96,22 @@ get '/models/?' do sort_by = params["sort_by"] if sort_by case sort_by - when "name", "created_at", "type" - @models = ToxCreateModel.all.sort_by(sort_by.to_sym, :order => "#{order} ALPHA") + when "created_at" + @models = ToxCreateModel.all.sort(:order => "#{order}") + when "name" + @models = ToxCreateModel.all.sort + if order == "ASC" + @models = @models.sort_by{|x| x.name.downcase} + else + @models = @models.sort{|x, y| y.name.downcase <=> x.name.downcase} + end + when "type", "endpoint" + @models = ToxCreateModel.all.sort + if order == "ASC" + @models = @models.sort_by{|x| [x.send(sort_by.to_sym),x.name.downcase]} + else + @models = @models.sort{|x,y|[y.send(sort_by.to_sym),x.name.downcase] <=> [x.send(sort_by.to_sym), y.name.downcase]} + end when "id" @models = ToxCreateModel.all.sort(:order => "#{order}") end @@ -186,8 +200,9 @@ get '/model/:id/:view/?' do end get '/predict/?' do - @models = ToxCreateModel.all.sort(:order => "DESC") + @models = ToxCreateModel.all.sort @models = @models.collect{|m| m if m.status == 'Completed'}.compact + @models = @models.sort_by{|x| [x.endpoint,x.name.downcase] } haml :predict end diff --git a/helper.rb b/helper.rb index f45e349..11f99f7 100644 --- a/helper.rb +++ b/helper.rb @@ -96,6 +96,11 @@ helpers do haml :models_navigation, :layout => false end + def models_navigation_bottom + @page = 0 unless @page + haml :models_navigation_bottom, :layout => false + end + def endpoint_option_list(max_time=3600) out = "" tmpfile = File.join(TMP_DIR, 'endpoint_option_list') diff --git a/views/models.haml b/views/models.haml index 1419e37..af11a32 100644 --- a/views/models.haml +++ b/views/models.haml @@ -26,3 +26,4 @@ = haml :model, :locals=>{:model=>model}, :layout => false -if @models.size == 0 .notice There are currently no models. You have to create a model first. += models_navigation_bottom if @models.size > 1 \ No newline at end of file diff --git a/views/models_navigation.haml b/views/models_navigation.haml index 0dc1f63..6bf05bd 100644 --- a/views/models_navigation.haml +++ b/views/models_navigation.haml @@ -1,12 +1,12 @@ .models_navigation - + - js = "" %form{:name => "nav", :action => url_for('/models'), :method => "get", :id => "nav"} %input{:type => :hidden, :name => :sort_by, :id => "sort_by", :value => params[:sort_by]} %input{:type => :hidden, :name => :order, :id => "order", :value => params[:order]} %input{:type => :hidden, :name => :page, :id => "page", :value => params[:page]} Sort by: - - ["created_at","name","type"].each do |s| + - ["created_at","name","type","endpoint"].each do |s| - idname = s == "created_at" ? "date" : s - if params[:sort_by] == s %div{:id => idname, :class => "active"} @@ -22,27 +22,37 @@ - if @models.size > 5 | Models: - = "#{@models.size}" - - unless @page.to_i == 0 - #prev - %img{:src => "arrow_left.png", :alt => 'previous', :title => 'previous'}/ - -else - %img{:src => "arrow_left_inactive.png", :alt => '', :title => ''}/ - - if @models.size < 5*@page+5 - last = @models.size - else - last = 5*@page+5 - = "(#{5*@page+1}-#{last}/#{@models.size})" + = "#{5*@page+1}-#{last} / #{@models.size}" + + | Page: + - unless @page.to_i == 0 + #prev{:class => "link"} + %img{:src => "arrow_left.png", :alt => 'previous', :title => 'previous'}/ + -else + %img{:src => "arrow_left_inactive.png", :alt => '', :title => ''}/ + + - (0..(@models.size/5).to_f.ceil-1).each do |p| + -if p != @page.to_f + %a{:href => '#', :id => "page_link_#{p}", :class => "page page_link"} #{p+1} + - js += "$('#page_link_#{p}').click(function() \{ \n " + - js += " $('#page').val('#{p}');\n " + - js += " $('#nav').submit();\n " + - js += "});\n " + -else + %span{:class => "page page_active"} #{p+1} + - unless 5*@page.to_i+5 >= @models.size - #next + #next{:class => "link"} %img{:src => "arrow_right.png", :alt => 'next', :title => 'next'}/ -else %img{:src => "arrow_right_inactive.png", :alt => '', :title => ''}/ - - js = "" - - ["created_at","name","type"].each do |s| + - ["created_at","name","type","endpoint"].each do |s| - idname = s == "created_at" ? "date" : s - js += "$('##{idname}').click(function() \{ \n " - js += " $('#sort_by').val('#{s}');\n " diff --git a/views/models_navigation_bottom.haml b/views/models_navigation_bottom.haml new file mode 100644 index 0000000..abea2d4 --- /dev/null +++ b/views/models_navigation_bottom.haml @@ -0,0 +1,47 @@ +.models_navigation + - js = "" + %form{:name => "nav_bottom", :action => url_for('/models'), :method => "get", :id => "nav"} + %input{:type => :hidden, :name => :sort_by, :id => "sort_by", :value => params[:sort_by]} + %input{:type => :hidden, :name => :order, :id => "order", :value => params[:order]} + %input{:type => :hidden, :name => :page, :id => "page", :value => params[:page]} + + - if @models.size > 5 + Models: + - if @models.size < 5*@page+5 + - last = @models.size + - else + - last = 5*@page+5 + = "#{5*@page+1}-#{last} / #{@models.size}" + | Page: + - unless @page.to_i == 0 + #prevbot{:class => "link"} + %img{:src => "arrow_left.png", :alt => 'previous', :title => 'previous'}/ + -else + %img{:src => "arrow_left_inactive.png", :alt => '', :title => ''}/ + + - (0..(@models.size/5).to_f.ceil-1).each do |p| + -if p != @page.to_f + %a{:href => '#', :id => "page_linkbot_#{p}", :class => "page page_link"} #{p+1} + - js += "$('#page_linkbot_#{p}').click(function() \{ \n" + - js += " $('#page').val('#{p}');\n" + - js += " $('#nav').submit();\n" + - js += "});\n" + -else + %span{:class => "page page_active"} #{p+1} + + - unless 5*@page.to_i+5 >= @models.size + #nextbot{:class => "link"} + %img{:src => "arrow_right.png", :alt => 'next', :title => 'next'}/ + -else + %img{:src => "arrow_right_inactive.png", :alt => '', :title => ''}/ + + :javascript + $("#prevbot").click(function() { + $("#page").val(#{@page-1}); + $("#nav").submit(); + }); + $("#nextbot").click(function() { + $("#page").val(#{@page+1}); + $("#nav").submit(); + }); + #{js} \ No newline at end of file diff --git a/views/predict.haml b/views/predict.haml index 670ca44..c6097ac 100644 --- a/views/predict.haml +++ b/views/predict.haml @@ -30,7 +30,12 @@ %legend Choose one or more prediction models %br + - endpoint = '' - @models.each do |model| + -if model.endpoint != endpoint + -endpoint = model.endpoint + %b #{endpoint}: + %br %input{:type => 'checkbox', :name => "selection[#{model.id}]", :value => true, :id => "model#{model.id}", :disabled => false} %label{:for => "model#{model.id}"} = model.name diff --git a/views/style.sass b/views/style.sass index 0c1f48c..c14f164 100644 --- a/views/style.sass +++ b/views/style.sass @@ -270,14 +270,7 @@ dl float: left .models_navigation - #prev - @extend a - display: inline - cursor: pointer - #next - @extend a - display: inline - cursor: pointer + margin-top: 4px .link @extend a display: inline @@ -288,6 +281,21 @@ dl font-weight: bold .thin font-weight: 100 + .page + border: solid 1px #999 + background-color: #FFF + padding: 0px 3px + font-size: 94% + foont-weight: normal + .page_link:hover + border-color: #000 + color: #000 + .page_active + background-color: #ccd2dc + color: #000 + font-weight: bold + border-right-color: #000 + border-bottom-color: #000 ul.endpoint list-style-type: none -- cgit v1.2.3