diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 10f108e7b..01e74400a 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -50,8 +50,7 @@ //= require markdown_editor //= require cocoon //= require allegations -//= require legislation_debate -//= require legislation_questions +//= require legislation //= require custom var initialize_modules = function() { @@ -76,8 +75,7 @@ var initialize_modules = function() { App.SocialShare.initialize(); App.MarkdownEditor.initialize(); App.Allegations.initialize(); - App.LegislationDebate.initialize(); - App.LegislationQuestions.initialize(); + App.Legislation.initialize(); }; $(function(){ diff --git a/app/assets/javascripts/legislation.js.coffee b/app/assets/javascripts/legislation.js.coffee new file mode 100644 index 000000000..8ed109482 --- /dev/null +++ b/app/assets/javascripts/legislation.js.coffee @@ -0,0 +1,16 @@ +App.Legislation = + + initialize: -> + $('#js-toggle-debate').on + click: -> + $('#debate-info').toggle() + + $('form#new_legislation_answer input.button').hide() + $('form#new_legislation_answer input[type=radio]').on + click: -> + $('form#new_legislation_answer').submit() + + $('form#draft_version_go_to_version input.button').hide() + $('form#draft_version_go_to_version select').on + change: -> + $('form#draft_version_go_to_version').submit() diff --git a/app/assets/javascripts/legislation_debate.js.coffee b/app/assets/javascripts/legislation_debate.js.coffee deleted file mode 100644 index 17091e946..000000000 --- a/app/assets/javascripts/legislation_debate.js.coffee +++ /dev/null @@ -1,6 +0,0 @@ -App.LegislationDebate = - - initialize: -> - $('#js-toggle-debate').on - click: -> - $('#debate-info').toggle() diff --git a/app/assets/javascripts/legislation_questions.js.coffee b/app/assets/javascripts/legislation_questions.js.coffee deleted file mode 100644 index f8bea46f3..000000000 --- a/app/assets/javascripts/legislation_questions.js.coffee +++ /dev/null @@ -1,8 +0,0 @@ -App.LegislationQuestions = - - initialize: -> - $('form#new_legislation_answer input.button').hide() - $('form#new_legislation_answer input[type=radio]').on - click: -> - $('form#new_legislation_answer').submit() - diff --git a/app/assets/javascripts/markdown_editor.js.coffee b/app/assets/javascripts/markdown_editor.js.coffee index 9065717fc..121f74ce4 100644 --- a/app/assets/javascripts/markdown_editor.js.coffee +++ b/app/assets/javascripts/markdown_editor.js.coffee @@ -4,7 +4,6 @@ App.MarkdownEditor = textarea_content = element.find('textarea').val() result = md.render(textarea_content) element.find('#markdown-preview').html(result) - element.find('#markdown-result input').val(result) initialize: -> $('.markdown-editor').each -> diff --git a/app/controllers/legislation/draft_versions_controller.rb b/app/controllers/legislation/draft_versions_controller.rb index 6956f11b6..bf455fa5a 100644 --- a/app/controllers/legislation/draft_versions_controller.rb +++ b/app/controllers/legislation/draft_versions_controller.rb @@ -11,4 +11,14 @@ class Legislation::DraftVersionsController < Legislation::BaseController def changes @draft_version = @process.draft_versions.find(params[:draft_version_id]) end + + def go_to_version + version = @process.draft_versions.find(params[:draft_version_id]) + + if params[:redirect_action] == 'changes' + redirect_to legislation_process_draft_version_changes_path(@process, version) + else + redirect_to legislation_process_draft_version_path(@process, version) + end + end end diff --git a/app/models/legislation/draft_version.rb b/app/models/legislation/draft_version.rb index 562e48cea..b68903b5e 100644 --- a/app/models/legislation/draft_version.rb +++ b/app/models/legislation/draft_version.rb @@ -10,13 +10,13 @@ class Legislation::DraftVersion < ActiveRecord::Base validates :body, presence: true validates :status, presence: true, inclusion: { in: VALID_STATUSES } - def body_in_html + before_save :render_html + + def render_html renderer = Redcarpet::Render::HTML.new(with_toc_data: true) toc_renderer = Redcarpet::Render::HTML_TOC.new(with_toc_data: true) - body_html = Redcarpet::Markdown.new(renderer).render(body) - toc = Redcarpet::Markdown.new(toc_renderer).render(body) - - return toc, body_html + self.body_html = Redcarpet::Markdown.new(renderer).render(body) + self.toc_html = Redcarpet::Markdown.new(toc_renderer).render(body) end end diff --git a/app/views/admin/legislation/draft_versions/_form.html.erb b/app/views/admin/legislation/draft_versions/_form.html.erb index a217580d6..4969d992a 100644 --- a/app/views/admin/legislation/draft_versions/_form.html.erb +++ b/app/views/admin/legislation/draft_versions/_form.html.erb @@ -82,9 +82,6 @@
-
- <%= f.hidden_field :body_html, label: false %> -
diff --git a/app/views/legislation/draft_versions/_process_header.html.erb b/app/views/legislation/draft_versions/_process_header.html.erb new file mode 100644 index 000000000..3c0c94d3f --- /dev/null +++ b/app/views/legislation/draft_versions/_process_header.html.erb @@ -0,0 +1,19 @@ +
+
+
+

<%= process.title %>

+
+ +
+ +
+ + + +
+
diff --git a/app/views/legislation/draft_versions/changes.html.erb b/app/views/legislation/draft_versions/changes.html.erb index 8b97de7f4..a14a2e700 100644 --- a/app/views/legislation/draft_versions/changes.html.erb +++ b/app/views/legislation/draft_versions/changes.html.erb @@ -1,14 +1,32 @@ <% provide :title do %><%= "#{@draft_version.title} - #{t('.title')} - #{@process.title}" %><% end %> -
-

<%= @process.title %>

-

<%= @draft_version.title %>

+<%= render 'process_header', process: @process %> -
- <%= link_to t('.see_text'), legislation_process_draft_version_path(@process, @draft_version) %> -
+
+ <%= render 'legislation/processes/key_dates', process: @process, phase: :allegations %> -
- <%= markdown @draft_version.changelog %> +
+
+
+

<%= t('.seeing_changelog_version') %>

+
+ <%= form_tag go_to_version_legislation_process_draft_versions_path(@process), method: :get, id: "draft_version_go_to_version" do %> + <%= select_tag "draft_version_id", options_from_collection_for_select(@process.draft_versions, 'id', 'title', @draft_version.id), "aria-label": t('legislation.draft_versions.show.select_draft_version') %> + <%= hidden_field_tag "redirect_action", "changes" %> + <%= submit_tag t('legislation.draft_versions.show.select_version_submit'), class: "button" %> + <% end %> +
+ <%= t('legislation.draft_versions.show.updated_at', date: format_date(@draft_version.updated_at)) %> +
+
+ <%= link_to t('.see_text'), legislation_process_draft_version_path(@process, @draft_version), title: t('.see_text'), class: "button strong" %> +
+
+ +
+
+ <%= markdown @draft_version.changelog %> +
+
diff --git a/app/views/legislation/draft_versions/show.html.erb b/app/views/legislation/draft_versions/show.html.erb index 0c220c03b..32554cf28 100644 --- a/app/views/legislation/draft_versions/show.html.erb +++ b/app/views/legislation/draft_versions/show.html.erb @@ -1,27 +1,69 @@ <% provide :title do %><%= "#{@draft_version.title} - #{@process.title}" %><% end %> -
-

<%= link_to @process.title, @process %>

-

<%= @draft_version.title %>

+<%= render 'process_header', process: @process %> -
- <%= link_to t('.see_changes'), legislation_process_draft_version_changes_path(@process, @draft_version) %> -
+
+ <%= render 'legislation/processes/key_dates', process: @process, phase: :allegations %> - <% toc, body = @draft_version.body_in_html %> - -
- <%= toc.html_safe %> -
- -
-
- -
- <%= body.html_safe %> +
+
+
+

<%= t('.seeing_version') %>

+
+ <%= form_tag go_to_version_legislation_process_draft_versions_path(@process), method: :get, id: "draft_version_go_to_version" do %> + <%= select_tag "draft_version_id", options_from_collection_for_select(@process.draft_versions, 'id', 'title', @draft_version.id), "aria-label": t('.select_draft_version') %> + <%= submit_tag t('.select_version_submit'), class: "button" %> + <% end %> + <%= link_to t('.see_changes'), legislation_process_draft_version_changes_path(@process, @draft_version) %> +
+ <%= t('.updated_at', date: format_date(@draft_version.updated_at)) %>
-
+
+ <%= link_to t('.see_comments'), legislation_process_draft_version_annotations_path(@process, @draft_version), title: t('.see_comments'), class: "button strong" %> +
+
+ +
+
+
+
+ <%= t('.text_index') %> +
+
+ +
+ <%= t('.text_index') %> +
+ +
+ <%= @draft_version.toc_html.html_safe %> +
+
+
+
+
<%= t('.text_body') %>
+
+
+ <%= @draft_version.body_html.html_safe %> +
+
+ +
+
+
+ <%= t('.text_comments') %> +
+
+ +
+ <%= t('.text_comments') %> +
+ +
+
+ +
+
diff --git a/config/locales/en.yml b/config/locales/en.yml index c3a60ff67..6328a2e20 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -226,9 +226,18 @@ en: draft_versions: changes: title: Changes - see_text: See text + seeing_changelog_version: Revision changes summary + see_text: See text draft show: - see_changes: See changes + seeing_version: You're seeing draft version + select_draft_version: Select draft + select_version_submit: see + updated_at: updated at %{date} + see_changes: see changes summary + see_comments: See all comments + text_index: Index + text_body: Text + text_comments: Comments processes: debate: empty_questions: There aren't any questions diff --git a/config/locales/es.yml b/config/locales/es.yml index 6c8a99e1d..8427146cc 100755 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -226,9 +226,18 @@ es: draft_versions: changes: title: Cambios - see_text: Ver texto + seeing_changelog_version: Resumen de cambios de la revisión + see_text: Ver borrador del texto show: - see_changes: Ver cambios + seeing_version: Estás viendo la revisión + select_draft_version: Seleccionar borrador + select_version_submit: ver + updated_at: actualizada el %{date} + see_changes: ver resumen de cambios + see_comments: Ver todos los comentarios + text_index: Índice + text_body: Texto + text_comments: Comentarios processes: debate: empty_questions: No hay preguntas diff --git a/config/routes.rb b/config/routes.rb index 5b2fcf9d6..0ef0187f6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -99,6 +99,7 @@ Rails.application.routes.draw do resources :answers, only: [:create] end resources :draft_versions, only: [:show] do + get :go_to_version, on: :collection get :changes resources :annotations end diff --git a/db/migrate/20161229213217_add_toc_html_to_draft_versions.rb b/db/migrate/20161229213217_add_toc_html_to_draft_versions.rb new file mode 100644 index 000000000..f71070e52 --- /dev/null +++ b/db/migrate/20161229213217_add_toc_html_to_draft_versions.rb @@ -0,0 +1,5 @@ +class AddTocHtmlToDraftVersions < ActiveRecord::Migration + def change + add_column :legislation_draft_versions, :toc_html, :text + end +end diff --git a/db/schema.rb b/db/schema.rb index 5a23f5839..d949dbb3a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161229110336) do +ActiveRecord::Schema.define(version: 20161229213217) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -123,10 +123,10 @@ ActiveRecord::Schema.define(version: 20161229110336) do t.string "visit_id" t.datetime "hidden_at" t.integer "flags_count", default: 0 - t.datetime "ignored_flag_at" t.integer "cached_votes_total", default: 0 t.integer "cached_votes_up", default: 0 t.integer "cached_votes_down", default: 0 + t.datetime "ignored_flag_at" t.integer "comments_count", default: 0 t.datetime "confirmed_hide_at" t.integer "cached_anonymous_votes_total", default: 0 @@ -145,6 +145,7 @@ ActiveRecord::Schema.define(version: 20161229110336) do add_index "debates", ["cached_votes_total"], name: "index_debates_on_cached_votes_total", using: :btree add_index "debates", ["cached_votes_up"], name: "index_debates_on_cached_votes_up", using: :btree add_index "debates", ["confidence_score"], name: "index_debates_on_confidence_score", using: :btree + add_index "debates", ["description"], name: "index_debates_on_description", using: :btree add_index "debates", ["geozone_id"], name: "index_debates_on_geozone_id", using: :btree add_index "debates", ["hidden_at"], name: "index_debates_on_hidden_at", using: :btree add_index "debates", ["hot_score"], name: "index_debates_on_hot_score", using: :btree @@ -252,6 +253,7 @@ ActiveRecord::Schema.define(version: 20161229110336) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "body_html" + t.text "toc_html" end add_index "legislation_draft_versions", ["hidden_at"], name: "index_legislation_draft_versions_on_hidden_at", using: :btree @@ -394,6 +396,7 @@ ActiveRecord::Schema.define(version: 20161229110336) do add_index "proposals", ["author_id"], name: "index_proposals_on_author_id", using: :btree add_index "proposals", ["cached_votes_up"], name: "index_proposals_on_cached_votes_up", using: :btree add_index "proposals", ["confidence_score"], name: "index_proposals_on_confidence_score", using: :btree + add_index "proposals", ["description"], name: "index_proposals_on_description", using: :btree add_index "proposals", ["geozone_id"], name: "index_proposals_on_geozone_id", using: :btree add_index "proposals", ["hidden_at"], name: "index_proposals_on_hidden_at", using: :btree add_index "proposals", ["hot_score"], name: "index_proposals_on_hot_score", using: :btree @@ -566,7 +569,7 @@ ActiveRecord::Schema.define(version: 20161229110336) do t.boolean "email_digest", default: true t.boolean "email_on_direct_message", default: true t.boolean "official_position_badge", default: false - t.datetime "password_changed_at", default: '2016-12-21 17:55:08', null: false + t.datetime "password_changed_at", default: '2016-11-02 13:51:14', null: false t.boolean "created_from_signature", default: false end diff --git a/spec/features/admin/legislation/draft_versions_spec.rb b/spec/features/admin/legislation/draft_versions_spec.rb index 0a61f5d97..e1088f24f 100644 --- a/spec/features/admin/legislation/draft_versions_spec.rb +++ b/spec/features/admin/legislation/draft_versions_spec.rb @@ -87,12 +87,11 @@ feature 'Admin legislation draft versions' do click_link 'Version 1' fill_in 'legislation_draft_version_title', with: 'Version 1b' - fill_in 'legislation_draft_version_body', with: '# Version 1 body\r\nParagraph\r\n>Quote' + fill_in 'legislation_draft_version_body', with: '# Version 1 body\r\n\r\nParagraph\r\n\r\n>Quote' click_button 'Save changes' expect(page).to have_content 'Version 1b' - expect(draft_version.reload.body_html).to eq("

Version 1 body\\r\\nParagraph\\r\\n>Quote

\r\n") end end end diff --git a/spec/models/legislation/draft_version_spec.rb b/spec/models/legislation/draft_version_spec.rb index a6709110a..384fc4513 100644 --- a/spec/models/legislation/draft_version_spec.rb +++ b/spec/models/legislation/draft_version_spec.rb @@ -6,4 +6,75 @@ RSpec.describe Legislation::DraftVersion, type: :model do it "should be valid" do expect(legislation_draft_version).to be_valid end + + it "renders and saves the html from the markdown body field" do + legislation_draft_version.body = body_markdown + + legislation_draft_version.save! + + expect(legislation_draft_version.body_html).to eq(body_html) + expect(legislation_draft_version.toc_html).to eq(toc_html) + end + + def body_markdown +<<-BODY_MARKDOWN +# Title 1 + +Some paragraph. + +A list: + +- item 1 +- item 2 + +## Subtitle + +Another paragraph. + +# Title 2 + +Something about this. +BODY_MARKDOWN + end + + def body_html +<<-BODY_HTML +

Title 1

+ +

Some paragraph.

+ +

A list:

+ + + +

Subtitle

+ +

Another paragraph.

+ +

Title 2

+ +

Something about this.

+BODY_HTML + end + + def toc_html +<<-TOC_HTML + +TOC_HTML + end end