From 2cfcba0ceb53c4e96cba0db9e5c5d689d0a683cc Mon Sep 17 00:00:00 2001 From: Mojca Lorber Date: Tue, 13 Dec 2016 10:39:18 +0100 Subject: [PATCH] add protocol preview modal --- app/assets/javascripts/protocols/index.js | 35 +++++++++++++++++++ app/controllers/protocols_controller.rb | 16 +++++++++ app/datatables/protocols_datatable.rb | 10 +++++- app/views/protocols/index.html.erb | 1 + .../index/_protocol_preview_modal.html.erb | 15 ++++++++ .../_protocol_preview_modal_body.html.erb | 0 config/locales/en.yml | 2 ++ config/routes.rb | 1 + 8 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 app/views/protocols/index/_protocol_preview_modal.html.erb create mode 100644 app/views/protocols/index/_protocol_preview_modal_body.html.erb diff --git a/app/assets/javascripts/protocols/index.js b/app/assets/javascripts/protocols/index.js index 844f9bb75..d8aa44818 100644 --- a/app/assets/javascripts/protocols/index.js +++ b/app/assets/javascripts/protocols/index.js @@ -16,6 +16,7 @@ function init() { initProtocolsTable(); initRowSelection(); initKeywordFiltering(); + initProtocolPreviewModal(); initLinkedChildrenModal(); initCreateNewModal(); initModals(); @@ -187,6 +188,33 @@ function initKeywordFiltering() { }); } +function initProtocolPreviewModal() { + // Only do this if the repository is public/private + if (repositoryType !== "archive") { + protocolsTableEl.on("click", "a[data-action='protocol-preview']", function(e) { + var link = $(this); + $.ajax({ + url: link.attr("data-url"), + type: "GET", + dataType: "json", + success: function (data) { + var modal = $("#protocol-preview-modal"); + var modalTitle = modal.find(".modal-title"); + var modalBody = modal.find(".modal-body"); + modalTitle.html(data.title); + modalBody.html(data.html); + modal.modal("show"); + }, + error: function (error) { + // TODO + } + }); + e.preventDefault(); + return false; + }); + } +} + function initLinkedChildrenModal() { // Only do this if the repository is public/private if (repositoryType !== "archive") { @@ -343,6 +371,13 @@ function initModals() { $(this).find(".modal-body #linked-children-table").DataTable().destroy(); $(this).find(".modal-body").html(""); }); + + // Protocol preview modal close action + $("#protocol-preview-modal").on("hidden.bs.modal", function(e) { + $(this).find(".modal-title").html(""); + // Destroy the embedded data + $(this).find(".modal-body").html(""); + }); } function updateDataTableSelectAllCheckbox() { diff --git a/app/controllers/protocols_controller.rb b/app/controllers/protocols_controller.rb index 7778d5c08..385ae2e1d 100644 --- a/app/controllers/protocols_controller.rb +++ b/app/controllers/protocols_controller.rb @@ -11,6 +11,7 @@ class ProtocolsController < ApplicationController before_action :check_view_permissions, only: [ :protocol_status_bar, :updated_at_label, + :preview, :linked_children, :linked_children_datatable ] @@ -80,6 +81,21 @@ class ProtocolsController < ApplicationController end end + def preview + respond_to do |format| + format.json do + render json: { + title: I18n.t('protocols.index.preview.title', + protocol: @protocol.name), + html: render_to_string( + partial: 'protocols/index/protocol_preview_modal_body.html.erb', + locals: { protocol: @protocol } + ) + } + end + end + end + def linked_children respond_to do |format| format.json { diff --git a/app/datatables/protocols_datatable.rb b/app/datatables/protocols_datatable.rb index 59abf56ac..328936063 100644 --- a/app/datatables/protocols_datatable.rb +++ b/app/datatables/protocols_datatable.rb @@ -12,6 +12,7 @@ class ProtocolsDatatable < AjaxDatatablesRails::Base def_delegator :@view, :can_restore_protocol def_delegator :@view, :can_export_protocol def_delegator :@view, :linked_children_protocol_path + def_delegator :@view, :preview_protocol_path def initialize(view, organization, type, user) super(view) @@ -94,7 +95,7 @@ class ProtocolsDatatable < AjaxDatatablesRails::Base "DT_CanArchive": can_archive_protocol(protocol), "DT_CanRestore": can_restore_protocol(protocol), "DT_CanExport": can_export_protocol(protocol), - "1": record.name, + "1": name_html(record), "2": keywords_html(record), "3": modules_html(record), "4": record.full_username_str, @@ -164,6 +165,13 @@ class ProtocolsDatatable < AjaxDatatablesRails::Base end end + def name_html(record) + "" + + "#{record.name}" + + "" + end + def keywords_html(record) if !record.protocol_keywords_str || record.protocol_keywords_str.empty? "#{I18n.t("protocols.no_keywords")}" diff --git a/app/views/protocols/index.html.erb b/app/views/protocols/index.html.erb index 02a22d0e6..12af69280 100644 --- a/app/views/protocols/index.html.erb +++ b/app/views/protocols/index.html.erb @@ -130,6 +130,7 @@ <%= render partial: "protocols/index/restore_results_modal.html.erb" %> <%= render partial: "protocols/index/import_results_modal.html.erb" %> <%= render partial: "protocols/index/linked_children_modal.html.erb" %> +<%= render partial: "protocols/index/protocol_preview_modal.html.erb" %> <%= render partial: "protocols/import_export/import_elements.html.erb" %> diff --git a/app/views/protocols/index/_protocol_preview_modal.html.erb b/app/views/protocols/index/_protocol_preview_modal.html.erb new file mode 100644 index 000000000..dd0c46182 --- /dev/null +++ b/app/views/protocols/index/_protocol_preview_modal.html.erb @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/app/views/protocols/index/_protocol_preview_modal_body.html.erb b/app/views/protocols/index/_protocol_preview_modal_body.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/config/locales/en.yml b/config/locales/en.yml index 28e8ee98c..afd667ea1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1201,6 +1201,8 @@ en: thead_created_at: "Created at" thead_archived_on: "Archived at" thead_updated_at: "Last modified at" + preview: + title: "Protocol preview" linked_children: title: "Tasks linked to protocol %{protocol}" used_in: "Number of tasks linked to this protocol: %{nr}" diff --git a/config/routes.rb b/config/routes.rb index a2f8e2447..e6aa20a0a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -240,6 +240,7 @@ Rails.application.routes.draw do member do get "linked_children", to: "protocols#linked_children" post "linked_children_datatable", to: "protocols#linked_children_datatable" + get "preview", to: "protocols#preview" patch "metadata", to: "protocols#update_metadata" patch "keywords", to: "protocols#update_keywords" post "clone", to: "protocols#clone"