From b1d29dcd050116396c42979d114161d0ed292caf Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Fri, 14 Nov 2014 11:39:25 -0300 Subject: [PATCH] virtuoso: accept stylesheet in templates --- plugins/virtuoso/Gemfile | 2 ++ plugins/virtuoso/db/migrate/20141113131439_create_custom_queries.rb | 1 + plugins/virtuoso/features/edit_template.feature | 25 +++++++++++++++++++++++++ plugins/virtuoso/features/step_definitions/virtuoso_plugin_steps.rb | 5 +++++ plugins/virtuoso/lib/virtuoso_plugin/custom_query.rb | 2 +- plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb | 14 ++++++++++++-- plugins/virtuoso/public/custom_query.js | 1 + plugins/virtuoso/test/functional/virtuoso_plugin_custom_queries_controller_test.rb | 6 +++--- plugins/virtuoso/test/unit/triples_template_test.rb | 14 +++++++++++++- plugins/virtuoso/views/cms/virtuoso_plugin/_tinymce_template_editor.html.erb | 11 +++++++++++ plugins/virtuoso/views/cms/virtuoso_plugin/_triples_template.html.erb | 9 ++++++++- plugins/virtuoso/views/virtuoso_plugin_custom_queries/_form.html.erb | 4 ++++ 12 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 plugins/virtuoso/features/edit_template.feature create mode 100644 plugins/virtuoso/features/step_definitions/virtuoso_plugin_steps.rb create mode 100644 plugins/virtuoso/views/cms/virtuoso_plugin/_tinymce_template_editor.html.erb diff --git a/plugins/virtuoso/Gemfile b/plugins/virtuoso/Gemfile index 818f3fd..28f0c0d 100644 --- a/plugins/virtuoso/Gemfile +++ b/plugins/virtuoso/Gemfile @@ -2,3 +2,5 @@ gem 'rdf' gem 'rdf-virtuoso' gem 'oai' gem 'liquid' +gem 'roadie' +gem 'roadie-rails' diff --git a/plugins/virtuoso/db/migrate/20141113131439_create_custom_queries.rb b/plugins/virtuoso/db/migrate/20141113131439_create_custom_queries.rb index 96e1f0b..dd527cf 100644 --- a/plugins/virtuoso/db/migrate/20141113131439_create_custom_queries.rb +++ b/plugins/virtuoso/db/migrate/20141113131439_create_custom_queries.rb @@ -6,6 +6,7 @@ class CreateCustomQueries < ActiveRecord::Migration t.string :name t.text :query t.text :template + t.text :stylesheet t.boolean :enabled, :default => true t.timestamps end diff --git a/plugins/virtuoso/features/edit_template.feature b/plugins/virtuoso/features/edit_template.feature new file mode 100644 index 0000000..279f487 --- /dev/null +++ b/plugins/virtuoso/features/edit_template.feature @@ -0,0 +1,25 @@ +Feature: edit template + As a noosfero user + I want to create and edit templates + + Background: + Given I am on the homepage + And plugin Virtuoso is enabled on environment + And the following users + | login | name | + | joaosilva | Joao Silva | + And I am logged in as "joaosilva" + And the following custom queries + | name | query | template | + | Default | query-1 | template-1 | + + @selenium + Scenario: + Given I am on joaosilva's control panel + And I follow "Manage Content" + And I should see "New content" + And I follow "New content" + And I should see "Triples template" within ".article-types" + When I follow "Triples template" within ".article-types" + And I follow "Copy" within ".custom-query" + Then the "SPARQL Query" field should contain "query-1" diff --git a/plugins/virtuoso/features/step_definitions/virtuoso_plugin_steps.rb b/plugins/virtuoso/features/step_definitions/virtuoso_plugin_steps.rb new file mode 100644 index 0000000..b74d108 --- /dev/null +++ b/plugins/virtuoso/features/step_definitions/virtuoso_plugin_steps.rb @@ -0,0 +1,5 @@ +Given /^the following custom queries$/ do |table| + table.hashes.map{|item| item.dup}.each do |item| + VirtuosoPlugin::CustomQuery.create!(item.merge(:environment => Environment.default)) + end +end diff --git a/plugins/virtuoso/lib/virtuoso_plugin/custom_query.rb b/plugins/virtuoso/lib/virtuoso_plugin/custom_query.rb index e86bc09..8f16d49 100644 --- a/plugins/virtuoso/lib/virtuoso_plugin/custom_query.rb +++ b/plugins/virtuoso/lib/virtuoso_plugin/custom_query.rb @@ -2,7 +2,7 @@ class VirtuosoPlugin::CustomQuery < Noosfero::Plugin::ActiveRecord belongs_to :environment - attr_accessible :enabled, :environment, :query, :template, :name + attr_accessible :enabled, :environment, :query, :template, :name, :stylesheet validates_presence_of :name diff --git a/plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb b/plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb index 637ba0f..006efed 100644 --- a/plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb +++ b/plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb @@ -10,8 +10,9 @@ class VirtuosoPlugin::TriplesTemplate < Article settings_items :query, :type => :string settings_items :template, :type => :string + settings_items :stylesheet, :type => :string - attr_accessible :query, :template + attr_accessible :query, :template, :stylesheet def to_html(options = {}) article = self @@ -28,11 +29,20 @@ class VirtuosoPlugin::TriplesTemplate < Article begin results = plugin.virtuoso_client.query(query) liquid_template = Liquid::Template.parse("{% for row in results %}#{template}{% endfor %}") - liquid_template.render('results' => results) + page = liquid_template.render('results' => results) + transform_html(page) rescue => ex logger.info ex.to_s "Failed to process the template" end end + protected + + def transform_html(html) + document = Roadie::Document.new(html) + document.add_css(stylesheet) if stylesheet.present? + document.transform + end + end diff --git a/plugins/virtuoso/public/custom_query.js b/plugins/virtuoso/public/custom_query.js index 1b0625c..10f2dd0 100644 --- a/plugins/virtuoso/public/custom_query.js +++ b/plugins/virtuoso/public/custom_query.js @@ -2,6 +2,7 @@ jQuery(document).ready(function($) { $('#copy_custom_query').on('click', function() { $.getJSON("/plugin/virtuoso/public/custom_query", {id: $('#select_custom_query').val()}, function(data) { $('#article_query').val(data.custom_query.query); + $('#article_stylesheet').val(data.custom_query.stylesheet); tinymce.get('article_template').setContent(data.custom_query.template); }); }); diff --git a/plugins/virtuoso/test/functional/virtuoso_plugin_custom_queries_controller_test.rb b/plugins/virtuoso/test/functional/virtuoso_plugin_custom_queries_controller_test.rb index d9351d5..cb8bb67 100644 --- a/plugins/virtuoso/test/functional/virtuoso_plugin_custom_queries_controller_test.rb +++ b/plugins/virtuoso/test/functional/virtuoso_plugin_custom_queries_controller_test.rb @@ -2,7 +2,7 @@ require 'test_helper' class VirtuosoPluginCustomQueriesControllerTest < ActionController::TestCase setup do - @custom_query = VirtuosoPlugin::CustomQuery.create!(:name => 'name', :query => 'query', :template => 'template', :environment => Environment.default) + @custom_query = VirtuosoPlugin::CustomQuery.create!(:name => 'name', :query => 'query', :template => 'template', :stylesheet => 'stylesheet', :environment => Environment.default) login_as(create_admin_user(Environment.default)) end @@ -19,7 +19,7 @@ class VirtuosoPluginCustomQueriesControllerTest < ActionController::TestCase should "create custom_query" do assert_difference('VirtuosoPlugin::CustomQuery.count') do - post :create, custom_query: { name: @custom_query.name, enabled: @custom_query.enabled, query: @custom_query.query, template: @custom_query.template } + post :create, custom_query: { name: @custom_query.name, enabled: @custom_query.enabled, query: @custom_query.query, template: @custom_query.template, stylesheet: @custom_query.stylesheet } end assert_redirected_to :action => :index @@ -31,7 +31,7 @@ class VirtuosoPluginCustomQueriesControllerTest < ActionController::TestCase end should "update custom_query" do - put :update, id: @custom_query, custom_query: { name: @custom_query.name, enabled: @custom_query.enabled, query: @custom_query.query, template: @custom_query.template } + put :update, id: @custom_query, custom_query: { name: @custom_query.name, enabled: @custom_query.enabled, query: @custom_query.query, template: @custom_query.template, stylesheet: @custom_query.stylesheet } assert_redirected_to :action => :index end diff --git a/plugins/virtuoso/test/unit/triples_template_test.rb b/plugins/virtuoso/test/unit/triples_template_test.rb index a77c027..138cee7 100644 --- a/plugins/virtuoso/test/unit/triples_template_test.rb +++ b/plugins/virtuoso/test/unit/triples_template_test.rb @@ -14,7 +14,7 @@ class TriplesTemplateTest < ActiveSupport::TestCase article.plugin.virtuoso_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) article.template = "{{row.var}}" - assert_equal 'Hello World', article.template_content + assert_match /Hello World/, article.template_content end should 'display error message when failed to execute the query' do @@ -26,4 +26,16 @@ class TriplesTemplateTest < ActiveSupport::TestCase assert_equal "Failed to process the template", article.template_content end + should 'transform css into inline stylesheet' do + article.stubs(:plugin).returns(mock) + article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) + article.plugin.virtuoso_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) + article.template = "

{{row.var}}

" + article.stylesheet = "p {color: red}" + + content = article.template_content + assert_match /

Hello <\/p>/, content + assert_match /

World<\/p>/, content + end + end diff --git a/plugins/virtuoso/views/cms/virtuoso_plugin/_tinymce_template_editor.html.erb b/plugins/virtuoso/views/cms/virtuoso_plugin/_tinymce_template_editor.html.erb new file mode 100644 index 0000000..b8f536d --- /dev/null +++ b/plugins/virtuoso/views/cms/virtuoso_plugin/_tinymce_template_editor.html.erb @@ -0,0 +1,11 @@ +<% extend TinymceHelper %> + +<%= tinymce_js %> + + diff --git a/plugins/virtuoso/views/cms/virtuoso_plugin/_triples_template.html.erb b/plugins/virtuoso/views/cms/virtuoso_plugin/_triples_template.html.erb index 3f846cf..ad4db02 100644 --- a/plugins/virtuoso/views/cms/virtuoso_plugin/_triples_template.html.erb +++ b/plugins/virtuoso/views/cms/virtuoso_plugin/_triples_template.html.erb @@ -1,7 +1,7 @@

<%= required_fields_message %> - <%= render :file => 'shared/tiny_mce' %> + <%= render :partial => 'cms/virtuoso_plugin/tinymce_template_editor' %> <%= required labelled_form_field(_('Title'), text_field(:article, 'name', :size => '64', :maxlength => 150)) %> @@ -20,6 +20,13 @@
+
+ <%= _('Stylesheet') %> + + <%= text_area(:article, :stylesheet, :style => 'width: 98%; height: 100px;') %> + +
+ <%= render :partial => 'shared/lead_and_body', :locals => {:tiny_mce => true} %> <%= render :partial => 'general_fields' %> diff --git a/plugins/virtuoso/views/virtuoso_plugin_custom_queries/_form.html.erb b/plugins/virtuoso/views/virtuoso_plugin_custom_queries/_form.html.erb index dc2b7fa..5524bc9 100644 --- a/plugins/virtuoso/views/virtuoso_plugin_custom_queries/_form.html.erb +++ b/plugins/virtuoso/views/virtuoso_plugin_custom_queries/_form.html.erb @@ -24,6 +24,10 @@ <%= f.text_area :template %>
+ <%= f.label :stylesheet %>
+ <%= f.text_area :stylesheet %> +
+
<%= f.label :enabled %>
<%= f.check_box :enabled %>
-- libgit2 0.21.2