Commit 859bb0badc648c92205a7e5220e92b05fe98633d
1 parent
b18d03a7
Exists in
master
Option to display group of questions into menu
Showing
4 changed files
with
133 additions
and
13 deletions
Show diff stats
lib/pairwise_plugin/questions_group_list_block.rb
| @@ -9,8 +9,11 @@ class PairwisePlugin::QuestionsGroupListBlock < Block | @@ -9,8 +9,11 @@ class PairwisePlugin::QuestionsGroupListBlock < Block | ||
| 9 | end | 9 | end |
| 10 | 10 | ||
| 11 | settings_items :group_description, :type => String | 11 | settings_items :group_description, :type => String |
| 12 | + settings_items :view_type, :type => String, :default => 'menu' | ||
| 12 | 13 | ||
| 13 | - attr_accessible :group_description, :questions_ids, :random_sort | 14 | + attr_accessible :group_description, :questions_ids, :random_sort, :view_type |
| 15 | + | ||
| 16 | + AVAILABLE_VIEW_TYPES = [[_('Menu'), 'menu'], [_('List'), 'list']] | ||
| 14 | 17 | ||
| 15 | def content(args={}) | 18 | def content(args={}) |
| 16 | block = self | 19 | block = self |
| @@ -20,7 +23,7 @@ class PairwisePlugin::QuestionsGroupListBlock < Block | @@ -20,7 +23,7 @@ class PairwisePlugin::QuestionsGroupListBlock < Block | ||
| 20 | # content += ( question ? article_to_html(question,:gallery_view => false, :format => 'full').html_safe : _('No Question selected yet.') ) | 23 | # content += ( question ? article_to_html(question,:gallery_view => false, :format => 'full').html_safe : _('No Question selected yet.') ) |
| 21 | #end | 24 | #end |
| 22 | proc do | 25 | proc do |
| 23 | - render :file => 'blocks/questions_group_list', :locals => {:block => block} | 26 | + render :file => "blocks/questions_group_#{block.view_type}", :locals => {:block => block} |
| 24 | end | 27 | end |
| 25 | end | 28 | end |
| 26 | 29 | ||
| @@ -38,8 +41,8 @@ class PairwisePlugin::QuestionsGroupListBlock < Block | @@ -38,8 +41,8 @@ class PairwisePlugin::QuestionsGroupListBlock < Block | ||
| 38 | 41 | ||
| 39 | def contains_question?(id) | 42 | def contains_question?(id) |
| 40 | if self.settings[:questions_ids] | 43 | if self.settings[:questions_ids] |
| 41 | - self.settings[:questions_ids].include?(id.to_s) | ||
| 42 | - else | 44 | + self.settings[:questions_ids].include?(id.to_s) |
| 45 | + else | ||
| 43 | return false | 46 | return false |
| 44 | end | 47 | end |
| 45 | end | 48 | end |
| @@ -94,19 +97,19 @@ class PairwisePlugin::QuestionsGroupListBlock < Block | @@ -94,19 +97,19 @@ class PairwisePlugin::QuestionsGroupListBlock < Block | ||
| 94 | conditions = {} | 97 | conditions = {} |
| 95 | if questions_ids && !questions_ids.empty? | 98 | if questions_ids && !questions_ids.empty? |
| 96 | questions_ids.each do |id| | 99 | questions_ids.each do |id| |
| 97 | - if self.owner.kind_of?(Environment) | ||
| 98 | - question = self.owner.portal_community.questions.find(id) | 100 | + if self.owner.kind_of?(Environment) |
| 101 | + question = self.owner.portal_community.questions.find(id) | ||
| 99 | else | 102 | else |
| 100 | question = self.owner.questions.find(id) | 103 | question = self.owner.questions.find(id) |
| 101 | - end | 104 | + end |
| 102 | result << question | 105 | result << question |
| 103 | - end | 106 | + end |
| 104 | conditions = { :conditions => ['id not in (?)', questions_ids] } | 107 | conditions = { :conditions => ['id not in (?)', questions_ids] } |
| 105 | end | 108 | end |
| 106 | 109 | ||
| 107 | - if self.owner.kind_of?(Environment) | 110 | + if self.owner.kind_of?(Environment) |
| 108 | result += self.owner.portal_community.questions.find(:all, conditions) | 111 | result += self.owner.portal_community.questions.find(:all, conditions) |
| 109 | - else | 112 | + else |
| 110 | result += self.owner.questions.find(:all, conditions) | 113 | result += self.owner.questions.find(:all, conditions) |
| 111 | end | 114 | end |
| 112 | result | 115 | result |
public/style.css
| @@ -421,8 +421,8 @@ div.pairwise_group_list_container { | @@ -421,8 +421,8 @@ div.pairwise_group_list_container { | ||
| 421 | } | 421 | } |
| 422 | 422 | ||
| 423 | div.pairwise_group_list_container .row { | 423 | div.pairwise_group_list_container .row { |
| 424 | - font-size: 14px; | ||
| 425 | - height: 40px; | 424 | + font-size: 14px; |
| 425 | + height: 40px; | ||
| 426 | width:100%; | 426 | width:100%; |
| 427 | background-color: #F8C300; | 427 | background-color: #F8C300; |
| 428 | vertical-align: middle; | 428 | vertical-align: middle; |
| @@ -432,6 +432,46 @@ div.pairwise_group_list_container .row { | @@ -432,6 +432,46 @@ div.pairwise_group_list_container .row { | ||
| 432 | cursor: auto; | 432 | cursor: auto; |
| 433 | } | 433 | } |
| 434 | 434 | ||
| 435 | +div.pairwise_group_menu_container .row { | ||
| 436 | + cursor: auto; | ||
| 437 | + font-weight: bold; | ||
| 438 | +} | ||
| 439 | +div.pairwise_group_menu_container .row.secondary { | ||
| 440 | + font-weight: normal; | ||
| 441 | +} | ||
| 442 | +div.pairwise_group_menu_container .questions-menu .menu-icon { | ||
| 443 | + float: right; | ||
| 444 | + font-size: 16px; | ||
| 445 | +} | ||
| 446 | +div.pairwise_group_menu_container .questions-menu .icon-label { | ||
| 447 | + float: right; | ||
| 448 | +} | ||
| 449 | +div.pairwise_group_menu_container .questions-menu .icon-bar { | ||
| 450 | + background-color: rgb(100, 100, 100); | ||
| 451 | + display: block; | ||
| 452 | + width: 1.125em; | ||
| 453 | + height: 0.125em; | ||
| 454 | + border-radius: 1px; | ||
| 455 | + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); | ||
| 456 | + margin: 3px; | ||
| 457 | +} | ||
| 458 | +div.pairwise_group_menu_container .questions-menu .menu { | ||
| 459 | + position: absolute; | ||
| 460 | + background-color: rgb(247, 247, 247); | ||
| 461 | + width: 96%; | ||
| 462 | + z-index: 999; | ||
| 463 | + padding: 10px; | ||
| 464 | + top: 45px; | ||
| 465 | + box-shadow: -5px 7px 10px #888888; | ||
| 466 | +} | ||
| 467 | +div.pairwise_group_menu_container .questions-menu .menu .item a { | ||
| 468 | + text-decoration: none; | ||
| 469 | +} | ||
| 470 | +div.pairwise_group_menu_container .questions-menu .menu .label { | ||
| 471 | + color: rgb(175, 175, 175); | ||
| 472 | + margin-bottom: 10px; | ||
| 473 | +} | ||
| 474 | + | ||
| 435 | div.pairwise_group_list_container .row p { | 475 | div.pairwise_group_list_container .row p { |
| 436 | line-height: 30px; | 476 | line-height: 30px; |
| 437 | margin: auto; | 477 | margin: auto; |
| @@ -0,0 +1,73 @@ | @@ -0,0 +1,73 @@ | ||
| 1 | +<% extend PairwisePlugin::Helpers::ViewerHelper %> | ||
| 2 | +<% questions = block.questions_for_view || [] %> | ||
| 3 | + | ||
| 4 | +<%= block_title(block.title) %> | ||
| 5 | + | ||
| 6 | +<div id='pairwise_group_list_block_<%= block.id %>' class="pairwise_group_menu_container" data-open-prompt="0"> | ||
| 7 | + <div class="description"> | ||
| 8 | + <%= block.group_description %> | ||
| 9 | + </div> | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + <div class="questions-menu clearfix"> | ||
| 13 | + <span class="menu-icon"> | ||
| 14 | + <span class="icon-bar"></span> | ||
| 15 | + <span class="icon-bar"></span> | ||
| 16 | + <span class="icon-bar"></span> | ||
| 17 | + </span> | ||
| 18 | + <span class="icon-label"><%= _('Select theme') %></span> | ||
| 19 | + <div class="menu" style="display: none"> | ||
| 20 | + <div class="label"> | ||
| 21 | + <%= _('Select a theme:') %> | ||
| 22 | + </div> | ||
| 23 | + <div class="items"> | ||
| 24 | + <% questions.each_with_index do |pairwise_content, index| %> | ||
| 25 | + <div class="item <%= pairwise_group_row_classes(index) %>"> | ||
| 26 | + <a href="#"><%= pairwise_content.name %></a> | ||
| 27 | + </div> | ||
| 28 | + <% end %> | ||
| 29 | + </div> | ||
| 30 | + </div> | ||
| 31 | + </div> | ||
| 32 | + <div class="question container"> | ||
| 33 | + <% if block.questions.nil? || block.questions.empty? %> | ||
| 34 | + <span><%= _("Empty") %></span> | ||
| 35 | + <% else %> | ||
| 36 | + <% questions.each_with_index do |pairwise_content, index| %> | ||
| 37 | + <%= pairwise_group_content_body(index, pairwise_content) %> | ||
| 38 | + <% end %> | ||
| 39 | + <% end %> | ||
| 40 | + </div> | ||
| 41 | +</div> | ||
| 42 | + | ||
| 43 | +<script type="text/javascript"> | ||
| 44 | + jQuery(document).ready(function($){ | ||
| 45 | + $('.pairwise_group_menu_container .questions-menu .menu-icon').click(function() { | ||
| 46 | + $(this).siblings('.menu').toggle('fast'); | ||
| 47 | + }); | ||
| 48 | + $('.pairwise_group_menu_container .questions-menu .items .row').click(function() { | ||
| 49 | + $('.pairwise_group_menu_container .questions-menu .menu').hide('fast'); | ||
| 50 | + }); | ||
| 51 | + }); | ||
| 52 | + | ||
| 53 | +// FIXME move to js file | ||
| 54 | +jQuery(document).ready(function($){ | ||
| 55 | + var block_id = '#pairwise_group_list_block_<%= block.id %>'; | ||
| 56 | + var block_element = $(block_id); | ||
| 57 | + var questions_arrows = $(block_id + ' .arrow'); | ||
| 58 | + var questions_rows = $(block_id + ' .row'); | ||
| 59 | + var questions_bodies = $(block_id + ' .pairwise_inner_body'); | ||
| 60 | + questions_rows.click(function(){ | ||
| 61 | + var current_open = parseInt(block_element.attr('data-open-prompt')); | ||
| 62 | + var index_clicked = questions_rows.index(this); | ||
| 63 | + if(index_clicked != current_open){ | ||
| 64 | + block_element.attr('data-open-prompt', index_clicked); | ||
| 65 | + $(questions_bodies[current_open]).slideToggle(); | ||
| 66 | + $(questions_rows[current_open]).toggleClass("secondary"); | ||
| 67 | + | ||
| 68 | + $(questions_bodies[index_clicked]).slideToggle(); | ||
| 69 | + $(questions_rows[index_clicked]).toggleClass("secondary"); | ||
| 70 | + } | ||
| 71 | + }); | ||
| 72 | +}); | ||
| 73 | +</script> |
views/box_organizer/pairwise_plugin/_questions_group_list_block.html.erb
| @@ -11,12 +11,16 @@ | @@ -11,12 +11,16 @@ | ||
| 11 | <h3> <%= _('Description:') %> </h3> | 11 | <h3> <%= _('Description:') %> </h3> |
| 12 | <%= text_area(:block, :group_description, :rows => 6, :cols => 50) %> | 12 | <%= text_area(:block, :group_description, :rows => 6, :cols => 50) %> |
| 13 | </div> | 13 | </div> |
| 14 | + <div class="view-type"> | ||
| 15 | + <h3> <%= _('Choose a view type:') %> </h3> | ||
| 16 | + <%= select_tag "block[view_type]", options_for_select(PairwisePlugin::QuestionsGroupListBlock::AVAILABLE_VIEW_TYPES, @block.view_type) %> | ||
| 17 | + </div> | ||
| 14 | <div id="questions_content" %> | 18 | <div id="questions_content" %> |
| 15 | <h3> <%= _('Choose which attributes should be displayed and drag to reorder them:') %> </h3> | 19 | <h3> <%= _('Choose which attributes should be displayed and drag to reorder them:') %> </h3> |
| 16 | <ul id="pairwise_questions_list"> | 20 | <ul id="pairwise_questions_list"> |
| 17 | <% questions.each do |question| %> | 21 | <% questions.each do |question| %> |
| 18 | <li> | 22 | <li> |
| 19 | - <%= | 23 | + <%= |
| 20 | check_box_tag( "block[questions_ids][]", question.id, @block.settings[:questions_ids] && @block.settings[:questions_ids].include?(question.id.to_s), :id => "pairwise_question_#{question.id}" ) + | 24 | check_box_tag( "block[questions_ids][]", question.id, @block.settings[:questions_ids] && @block.settings[:questions_ids].include?(question.id.to_s), :id => "pairwise_question_#{question.id}" ) + |
| 21 | content_tag( 'label', question.name, :for => "pairwise_question_#{question.id}" ) | 25 | content_tag( 'label', question.name, :for => "pairwise_question_#{question.id}" ) |
| 22 | %> | 26 | %> |