diff --git a/plugins/site_tour/lib/site_tour_plugin.rb b/plugins/site_tour/lib/site_tour_plugin.rb index 2710951..3b55db8 100644 --- a/plugins/site_tour/lib/site_tour_plugin.rb +++ b/plugins/site_tour/lib/site_tour_plugin.rb @@ -33,4 +33,8 @@ class SiteTourPlugin < Noosfero::Plugin end end + def self.extra_blocks + { SiteTourPlugin::TourBlock => {} } + end + end diff --git a/plugins/site_tour/lib/site_tour_plugin/tour_block.rb b/plugins/site_tour/lib/site_tour_plugin/tour_block.rb new file mode 100644 index 0000000..b2af771 --- /dev/null +++ b/plugins/site_tour/lib/site_tour_plugin/tour_block.rb @@ -0,0 +1,27 @@ +class SiteTourPlugin::TourBlock < Block + + settings_items :actions, :type => Array, :default => [{:group_name => 'tour_plugin', :selector => '.site-tour-plugin_tour-block .tour-button', :description => _('Click to start tour!')}] + settings_items :display_button, :type => :boolean, :default => true + + attr_accessible :actions, :display_button + + before_save do |block| + block.actions.reject! {|i| i[:group_name].blank? && i[:selector].blank? && i[:description].blank?} + end + + def self.description + _('Site Tour Block') + end + + def help + _('Configure a step-by-step tour.') + end + + def content(args={}) + block = self + proc do + render :file => 'blocks/tour', :locals => {:block => block} + end + end + +end diff --git a/plugins/site_tour/public/edit_tour_block.css b/plugins/site_tour/public/edit_tour_block.css new file mode 100644 index 0000000..579c854 --- /dev/null +++ b/plugins/site_tour/public/edit_tour_block.css @@ -0,0 +1,64 @@ + +#edit-tour-block #droppable-tour-actions { + padding-left: 23px; + margin-top: -12px; +} + +#edit-tour-block #droppable-tour-actions li { + list-style-type: none; +} + +#edit-tour-block .action-row { + line-height: 25px; + margin-bottom: 5px; + padding: 10px 1px 10px 10px; + cursor: pointer; + width: 97%; +} + +#edit-tour-block .action-row:hover { + background: #ddd url(../images/drag-and-drop.png) no-repeat; + background-position: 98% 15px; +} + +#edit-tour-block .action-row li { + list-style-type: none; + display: inline; + margin-left: 5px; +} + +#edit-tour-block { + width: 620px; + position: relative; + left: -24px; +} + +#edit-tour-block #new-template { + display: none; +} + +#edit-tour-block .list-header { + width: 98%; + height: 25px; + padding: 10px 1px 10px 10px; + margin-bottom: 5px; + cursor: pointer; +} + +#edit-tour-block .list-header li { + list-style-type: none; + display: inline; + font-weight: bold; + font-size: 14px; + text-align: center; +} + +#edit-tour-block .list-header .list-name { + margin-left: 50px; +} +#edit-tour-block .list-header .list-selector { + margin-left: 63px; +} +#edit-tour-block .list-header .list-description { + margin-left: 68px; +} diff --git a/plugins/site_tour/public/edit_tour_block.js b/plugins/site_tour/public/edit_tour_block.js new file mode 100644 index 0000000..70e38dd --- /dev/null +++ b/plugins/site_tour/public/edit_tour_block.js @@ -0,0 +1,17 @@ +function add_new_action() { + var new_action = jQuery('#edit-tour-block #new-template>li').clone(); + new_action.show(); + jQuery('#droppable-tour-actions').append(new_action); +} + +jQuery(document).ready(function(){ + jQuery('#edit-tour-block').on('click', '.delete-tour-action-row', function() { + jQuery(this).parent().parent().remove(); + return false; + }); + + jQuery("#droppable-tour-actions").sortable({ + revert: true, + axis: "y" + }); +}); diff --git a/plugins/site_tour/test/unit/tour_block_test.rb b/plugins/site_tour/test/unit/tour_block_test.rb new file mode 100644 index 0000000..46e9dbb --- /dev/null +++ b/plugins/site_tour/test/unit/tour_block_test.rb @@ -0,0 +1,41 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class TrackListBlockTest < ActionView::TestCase + + ActionView::Base.send :include, ApplicationHelper + + def setup + @block = fast_create(SiteTourPlugin::TourBlock) + end + + attr_accessor :block + + should 'do not save empty actions' do + block.actions = [{:group_name => '', :selector => nil, :description => ' '}] + block.save! + assert_equal [], block.actions + end + + should 'render script tag in visualization mode' do + controller.expects(:boxes_editor?).returns(false) + assert_tag_in_string instance_eval(&block.content), :tag => 'script' + end + + should 'do not render script tag when editing' do + controller.expects(:boxes_editor?).returns(true) + controller.expects(:uses_design_blocks?).returns(true) + assert_no_tag_in_string instance_eval(&block.content), :tag => 'script' + end + + should 'display help button' do + controller.expects(:boxes_editor?).returns(false) + assert_tag_in_string instance_eval(&block.content), :tag => 'a', :attributes => {:class => 'button icon-help with-text tour-button'} + end + + should 'do not display help button when display_button is false' do + block.display_button = false + controller.expects(:boxes_editor?).returns(false) + assert_no_tag_in_string instance_eval(&block.content), :tag => 'a', :attributes => {:class => 'button icon-help with-text tour-button'} + end + +end diff --git a/plugins/site_tour/views/blocks/tour.html.erb b/plugins/site_tour/views/blocks/tour.html.erb new file mode 100644 index 0000000..d8e35da --- /dev/null +++ b/plugins/site_tour/views/blocks/tour.html.erb @@ -0,0 +1,17 @@ +<%= block_title(block.title) %> + +<% if block.display_button %> + <%= button :help, _('Help'), '#', :class => 'tour-button', :onclick => 'siteTourPlugin.force();' %> +<% end %> + +<% edit_mode = controller.send(:boxes_editor?) && controller.send(:uses_design_blocks?) %> + +<% unless edit_mode %> + +<% end %> diff --git a/plugins/site_tour/views/box_organizer/site_tour_plugin/_tour_block.html.erb b/plugins/site_tour/views/box_organizer/site_tour_plugin/_tour_block.html.erb new file mode 100644 index 0000000..99207c6 --- /dev/null +++ b/plugins/site_tour/views/box_organizer/site_tour_plugin/_tour_block.html.erb @@ -0,0 +1,25 @@ +<%= javascript_include_tag '/plugins/site_tour/edit_tour_block.js' %> +<%= stylesheet_link_tag '/plugins/site_tour/edit_tour_block.css' %> + +<%= labelled_form_field check_box(:block, :display_button) + _('Display help button'), '' %> + +<%= _('Actions') %> +
+ + + +
+ <% template_action = {} %> + <%= render :partial => 'box_organizer/site_tour_plugin/tour_block_item', :locals => {:action => template_action} %> +
+
+ +<%= link_to_function(_('New'), 'add_new_action();', :class => 'button icon-add with-text') %> diff --git a/plugins/site_tour/views/box_organizer/site_tour_plugin/_tour_block_item.html.erb b/plugins/site_tour/views/box_organizer/site_tour_plugin/_tour_block_item.html.erb new file mode 100644 index 0000000..beaf59e --- /dev/null +++ b/plugins/site_tour/views/box_organizer/site_tour_plugin/_tour_block_item.html.erb @@ -0,0 +1,16 @@ +
  • + +
  • diff --git a/plugins/site_tour/views/environment_design/site_tour_plugin b/plugins/site_tour/views/environment_design/site_tour_plugin new file mode 120000 index 0000000..5dcaba9 --- /dev/null +++ b/plugins/site_tour/views/environment_design/site_tour_plugin @@ -0,0 +1 @@ +../box_organizer/site_tour_plugin \ No newline at end of file diff --git a/plugins/site_tour/views/profile_design/site_tour_plugin b/plugins/site_tour/views/profile_design/site_tour_plugin new file mode 120000 index 0000000..5dcaba9 --- /dev/null +++ b/plugins/site_tour/views/profile_design/site_tour_plugin @@ -0,0 +1 @@ +../box_organizer/site_tour_plugin \ No newline at end of file -- libgit2 0.21.2