From 590b4ccb92e786ec90137ed46f78cc4a24c4d469 Mon Sep 17 00:00:00 2001 From: "karel.picman@lbcfree.net" Date: Fri, 12 Jun 2020 13:49:06 +0200 Subject: [PATCH 1/3] Filtering fix --- CHANGELOG.md | 1 + app/views/dmsf/show.html.erb | 2 +- app/views/dmsf/trash.html.erb | 2 +- assets/stylesheets/redmine_dmsf.css | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af07982b..443d301f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Changelog for Redmine DMSF Redmine's look&feel Implementation of folders movement between projects (WebDAV) + Korean localization updated * New: #1129 - New UI: Optimize Actions Menu diff --git a/app/views/dmsf/show.html.erb b/app/views/dmsf/show.html.erb index 3ee05c53..38bbef29 100644 --- a/app/views/dmsf/show.html.erb +++ b/app/views/dmsf/show.html.erb @@ -71,7 +71,7 @@ -<%= form_tag(dmsf_folder_path(d: @project, folder_id: @folder), method: :get, id: 'dmsf_query_form') do %> +<%= form_tag(dmsf_folder_path(d: @project, folder_id: @folder), method: :get, id: 'query_form', class: 'dmsf-query-form') do %> <%= render partial: 'queries/query_form' %> <% end %> <%= render partial: 'query_list', locals: { query: @query, dmsf_pages: @dmsf_pages } %> diff --git a/app/views/dmsf/trash.html.erb b/app/views/dmsf/trash.html.erb index 676ed531..99e09aea 100644 --- a/app/views/dmsf/trash.html.erb +++ b/app/views/dmsf/trash.html.erb @@ -36,7 +36,7 @@ -<%= form_tag(trash_dmsf_path(id: @project), method: :get, id: 'dmsf_query_form') do %> +<%= form_tag(trash_dmsf_path(id: @project), method: :get, id: 'query_form', class: 'dmsf-query-form') do %> <%= render partial: 'queries/query_form' %> <% end %> <%= render partial: 'query_list', locals: { query: @query, dmsf_pages: @dmsf_pages } %> diff --git a/assets/stylesheets/redmine_dmsf.css b/assets/stylesheets/redmine_dmsf.css index f23994b1..6007ab85 100644 --- a/assets/stylesheets/redmine_dmsf.css +++ b/assets/stylesheets/redmine_dmsf.css @@ -374,6 +374,6 @@ table.dmsf a.sort.asc.icon.icon-sorted-desc { } /* EasyExtension - Query filters */ -#dmsf_query_form .collapsed#filters { +#query_form.dmsf-query-form .collapsed#filters { opacity: 1; } \ No newline at end of file From 9ead0389f8e63c72206309417fc1fed699a5328a Mon Sep 17 00:00:00 2001 From: "karel.picman@lbcfree.net" Date: Mon, 15 Jun 2020 14:44:38 +0200 Subject: [PATCH 2/3] Rows exanding xix --- app/models/dmsf_folder.rb | 4 +- app/views/dmsf/_query_rows.erb | 4 +- assets/javascripts/redmine_dmsf.js | 159 +++++++----------- assets/stylesheets/easy_extensions.css | 67 ++++++++ assets/stylesheets/redmine_dmsf.css | 62 ++----- .../hooks/views/base_view_hooks.rb | 6 +- .../patches/queries_helper_patch.rb | 2 +- 7 files changed, 151 insertions(+), 153 deletions(-) create mode 100644 assets/stylesheets/easy_extensions.css diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index 41308a51..ea98e276 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -549,10 +549,10 @@ class DmsfFolder < ActiveRecord::Base else classes << 'dmsf-tree' if type == 'folder' - classes << 'dmsf_collapsed' + classes << 'dmsf-collapsed' classes << 'dmsf-not-loaded' else - classes << 'dmsf_child' + classes << 'dmsf-child' end if title =~ /^\./ classes << 'dmsf-system' diff --git a/app/views/dmsf/_query_rows.erb b/app/views/dmsf/_query_rows.erb index 3fb2a00d..8398ce98 100644 --- a/app/views/dmsf/_query_rows.erb +++ b/app/views/dmsf/_query_rows.erb @@ -79,8 +79,8 @@ var m = handle.attr("id").match(/^(\d+)span$/); if(m){ $('.' + m[1]).remove(); - handle.removeClass("dmsf_expanded"); - handle.addClass("dmsf_collapsed dmsf-not-loaded"); + handle.removeClass("dmsf-expanded"); + handle.addClass("dmsf-collapsed dmsf-not-loaded"); } ui.draggable.remove(); } diff --git a/assets/javascripts/redmine_dmsf.js b/assets/javascripts/redmine_dmsf.js index 3e2b9b02..062f3961 100644 --- a/assets/javascripts/redmine_dmsf.js +++ b/assets/javascripts/redmine_dmsf.js @@ -20,134 +20,98 @@ */ /* Function to allow the projects to show up as a tree */ -function dmsfToggle(EL, PM, url) +function dmsfToggle(el, id, url) { - let els = document.querySelectorAll('tr.dmsf-tree'); - let elsLen = els.length; - let pattern = new RegExp("(^|\\s)" + EL + "(\\s|$)"); - let cpattern = new RegExp('span'); - let expand = new RegExp('dmsf_expanded'); - let collapse = new RegExp('dmsf_collapsed'); - let hide = new RegExp('dmsf-hidden'); - let spanid = PM; - let classid = new RegExp('junk'); + // Expand not yet loaded selected row + let selectedRow = $(el).parents('tr').first(); + let expand = $(selectedRow).hasClass('dmsf-collapsed'); + + if(selectedRow.hasClass('dmsf-child')){ + + return; + } + + if(selectedRow.hasClass('dmsf-not-loaded')){ + + dmsfExpandRows(id, selectedRow, url); + } + + if(expand) { + + $(selectedRow).switchClass('dmsf-collapsed', 'dmsf-expanded'); + } + else { + + $(selectedRow).switchClass('dmsf-expanded', 'dmsf-collapsed'); + } + + // Hide collapsed rows and reset odd/even rows background colour let oddeventoggle = 0; - // Expand not yet loaded selected row - let selectedRow = document.getElementById(PM); + $("tr.dmsf-tree").each(function(i, tr){ - if(selectedRow.className.indexOf('dmsf-not-loaded') >= 0){ + // Visiblity + if($(tr).hasClass(id)) { - dmsfExpandRows(EL, selectedRow, url); - } + if (expand) { - for(let i = 0; i < elsLen; i++) - { - if(cpattern.test(els[i].id)) - { - let tmpspanid = spanid; - let tmpclassid = classid; + // Display only children with expanded parent + m = $(tr).attr('class').match(/(\d+) idnt/); - spanid = els[i].id; - classid = spanid; - let m = classid.match(/(\w+)span/); - if(m) { - classid = m[1]; - } - classid = new RegExp(classid); + if(m){ - if(tmpclassid.test(els[i].className) && (tmpspanid.toString() !== PM.toString())) - { - if(collapse.test(document.getElementById(tmpspanid).className)) - { - spanid = tmpspanid; - classid = tmpclassid; - } - } - } + if($("#" + m[1] + "span").hasClass('dmsf-expanded')){ - if(pattern.test(els[i].className)) - { - let cnames = els[i].className; - - cnames = cnames.replace(/dmsf-hidden/g,''); - - if(expand.test(selectedRow.className)) - { - cnames += ' dmsf-hidden'; - } - else - { - if((spanid.toString() !== PM.toString()) && (classid.test(els[i].className))) - { - if(collapse.test(document.getElementById(spanid).className)) - { - cnames += ' dmsf-hidden'; + $(tr).removeClass('dmsf-hidden'); } } - } - els[i].className = cnames; + } else { + + if(!$(tr).hasClass('dmsf-hidden')) { + + $(tr).addClass('dmsf-hidden'); + } + } } - if(!(hide.test(els[i].className))) - { - let cnames = els[i].className; + // Background + $(tr).removeClass('even'); + $(tr).removeClass('odd'); - cnames = cnames.replace(/odd/g,''); - cnames = cnames.replace(/even/g,''); + if (oddeventoggle === 0) { - if(oddeventoggle === 0) - { - cnames += ' odd'; - } - else - { - cnames += ' even'; - } - - oddeventoggle ^= 1; - els[i].className = cnames; + $(tr).addClass('odd'); } - } + else { - if (collapse.test(selectedRow.className)) - { - let cnames = selectedRow.className; + $(tr).addClass('even'); + } - cnames = cnames.replace(/dmsf_collapsed/,'dmsf_expanded'); - selectedRow.className = cnames; - } - else - { - let cnames = selectedRow.className; - - cnames = cnames.replace(/dmsf_expanded/,'dmsf_collapsed'); - selectedRow.className = cnames; - } + oddeventoggle ^= 1; + }); } /* Add child rows */ -function dmsfExpandRows(EL, parentRow, url) { +function dmsfExpandRows(id, parentRow, url) { - parentRow.className = parentRow.className.replace(/dmsf-not-loaded/, ''); + $(parentRow).removeClass('dmsf-not-loaded'); let idnt = 0; - let pos = $(parentRow).find('.dmsf_position').text(); let classes = ''; - let m = parentRow.className.match(/idnt-(\d+)/); + let m = $(parentRow).attr('class').match(/idnt-(\d+)/); if(m){ idnt = m[1]; } - m = parentRow.className.match(/((\d|\s)+) idnt/); + m = $(parentRow).attr('class').match(/((\d|\s)+) idnt/); if(m){ classes = m[1] } - m = parentRow.id.match(/^(\d+)/); + m = $(parentRow).attr('id').match(/^(\d+)/); if(m){ classes = classes + ' ' + m[1] @@ -158,17 +122,16 @@ function dmsfExpandRows(EL, parentRow, url) { type: 'post', dataType: 'html', data: { - folder_id: EL, - row_id: parentRow.id, + folder_id: id, + row_id: $(parentRow).attr('id'), idnt: idnt, - pos: pos, classes: classes } }).done(function(data) { - // Hide the expanding icon if there are no childern + // Hide the expanding icon if there are no children if(data.indexOf(' ' + m[1] + ' ') < 0){ - $(parentRow).removeClass('dmsf_expanded'); - $(parentRow).addClass('dmsf_child'); + $(parentRow).removeClass('dmsf-expanded'); + $(parentRow).addClass('dmsf-child'); } else { // Add child rows diff --git a/assets/stylesheets/easy_extensions.css b/assets/stylesheets/easy_extensions.css new file mode 100644 index 00000000..1def596f --- /dev/null +++ b/assets/stylesheets/easy_extensions.css @@ -0,0 +1,67 @@ +/* +* Redmine plugin for Document Management System "Features" +* +* Copyright © 2011 Vit Jonas +* Copyright © 2011-20 Karel Pičman +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +/* Intendation in the main view's tree */ +.dmsf-tree.idnt-1 td.dmsf-title { padding-left: 2.5em; } +.dmsf-tree.idnt-2 td.dmsf-title { padding-left: 3em; } +.dmsf-tree.idnt-3 td.dmsf-title { padding-left: 3.5em; } +.dmsf-tree.idnt-4 td.dmsf-title { padding-left: 4em; } +.dmsf-tree.idnt-5 td.dmsf-title { padding-left: 4.5em; } +.dmsf-tree.idnt-6 td.dmsf-title { padding-left: 5em; } +.dmsf-tree.idnt-7 td.dmsf-title { padding-left: 5.5em; } +.dmsf-tree.idnt-8 td.dmsf-title { padding-left: 6em; } +.dmsf-tree.idnt-9 td.dmsf-title { padding-left: 6.5em; } + +/* Font icons */ +table.dmsf > tbody > tr > td a.icon-actions::before { + content: "\F1D8"; +} + +#sidebar ul > li > a.icon-only.icon-clear-query { + background-image: url(../../../images/close_hl.png); + background-repeat: no-repeat; + padding-left: 16px; + margin-left: 8px; +} + +table.dmsf a.sort { + padding-right: 16px; + background-position: 100% 50%; + background-repeat: no-repeat; +} + +table.dmsf a.sort.desc.icon.icon-sorted-asc { + background-image: url("../../../images/arrow_up.png") !important; +} + +table.dmsf a.sort.asc.icon.icon-sorted-desc { + background-image: url("../../../images/arrow_down.png") !important; +} + +/* Approval workflows */ +#tab-content-dmsf_workflow table.list ~ p .button { + margin-top: 10px; +} + +/* Query filters */ +#query_form.dmsf-query-form .collapsed#filters { + opacity: 1; +} diff --git a/assets/stylesheets/redmine_dmsf.css b/assets/stylesheets/redmine_dmsf.css index 6007ab85..3bcc7a5b 100644 --- a/assets/stylesheets/redmine_dmsf.css +++ b/assets/stylesheets/redmine_dmsf.css @@ -214,25 +214,25 @@ div[id*="revision_access_"] { /* DMSF tree view */ .dmsf-hidden { display:none; } -.dmsf-tree span.dmsf_expander { cursor: pointer; } -.dmsf-tree.dmsf_expanded td.dmsf-title span { +.dmsf-tree:not(.dmsf-child) span.dmsf_expander { cursor: pointer; } +.dmsf-tree.dmsf-expanded td.dmsf-title span { background: url(../../../images/arrow_down.png) no-repeat 0 50%; padding-left: 16px; } -.dmsf-tree.dmsf_child .dmsf-title span { padding-left: 16px; } -.dmsf-tree.dmsf_collapsed .dmsf-title span { +.dmsf-tree.dmsf-child .dmsf-title span { padding-left: 16px; } +.dmsf-tree.dmsf-collapsed .dmsf-title span { background: url(../../../images/arrow_right.png) no-repeat 0 50%; padding-left: 16px; } -.dmsf-tree.idnt-1 td.dmsf-title { padding-left: 2.5em; } -.dmsf-tree.idnt-2 td.dmsf-title { padding-left: 3em; } -.dmsf-tree.idnt-3 td.dmsf-title { padding-left: 3.5em; } -.dmsf-tree.idnt-4 td.dmsf-title { padding-left: 4em; } -.dmsf-tree.idnt-5 td.dmsf-title { padding-left: 4.5em; } -.dmsf-tree.idnt-6 td.dmsf-title { padding-left: 5em; } -.dmsf-tree.idnt-7 td.dmsf-title { padding-left: 5.5em; } -.dmsf-tree.idnt-8 td.dmsf-title { padding-left: 6em; } -.dmsf-tree.idnt-9 td.dmsf-title { padding-left: 6.5em; } +.dmsf-tree.idnt-1 td.dmsf-title { padding-left: 1.5em; } +.dmsf-tree.idnt-2 td.dmsf-title { padding-left: 2em; } +.dmsf-tree.idnt-3 td.dmsf-title { padding-left: 2.5em; } +.dmsf-tree.idnt-4 td.dmsf-title { padding-left: 3em; } +.dmsf-tree.idnt-5 td.dmsf-title { padding-left: 3.5em; } +.dmsf-tree.idnt-6 td.dmsf-title { padding-left: 4em; } +.dmsf-tree.idnt-7 td.dmsf-title { padding-left: 4.5em; } +.dmsf-tree.idnt-8 td.dmsf-title { padding-left: 5em; } +.dmsf-tree.idnt-9 td.dmsf-title { padding-left: 5.5em; } .dmsf-select-version { max-width: 50px; @@ -341,39 +341,3 @@ div[id*="revision_access_"] { width: 90%; max-width: 90%; } - -/* EasyExtensions - font icons */ -table.dmsf > tbody > tr > td a.icon-actions::before { - content: "\F1D8"; -} - -#sidebar ul > li > a.icon-only.icon-clear-query { - background-image: url(../../../images/close_hl.png); - background-repeat: no-repeat; - padding-left: 16px; - margin-left: 8px; -} - -table.dmsf a.sort { - padding-right: 16px; - background-position: 100% 50%; - background-repeat: no-repeat; -} - -table.dmsf a.sort.desc.icon.icon-sorted-asc { - background-image: url("../../../images/arrow_up.png") !important; -} - -table.dmsf a.sort.asc.icon.icon-sorted-desc { - background-image: url("../../../images/arrow_down.png") !important; -} - -/* EasyExtensions - Approval workflows */ -#tab-content-dmsf_workflow table.list ~ p .button { - margin-top: 10px; -} - -/* EasyExtension - Query filters */ -#query_form.dmsf-query-form .collapsed#filters { - opacity: 1; -} \ No newline at end of file diff --git a/lib/redmine_dmsf/hooks/views/base_view_hooks.rb b/lib/redmine_dmsf/hooks/views/base_view_hooks.rb index 6fc0ea0a..6f3aa65d 100644 --- a/lib/redmine_dmsf/hooks/views/base_view_hooks.rb +++ b/lib/redmine_dmsf/hooks/views/base_view_hooks.rb @@ -26,11 +26,15 @@ module RedmineDmsf def view_layouts_base_html_head(context={}) return unless /^(Dmsf|Projects|Issues)/.match?(context[:controller].class.name) - "\n".html_safe + stylesheet_link_tag('redmine_dmsf.css', plugin: :redmine_dmsf) + + meta = "\n".html_safe + stylesheet_link_tag('redmine_dmsf.css', plugin: :redmine_dmsf) + "\n".html_safe + stylesheet_link_tag('select2.min.css', plugin: :redmine_dmsf) + "\n".html_safe + javascript_include_tag('select2.min.js', plugin: :redmine_dmsf, defer: true) + "\n".html_safe + javascript_include_tag('redmine_dmsf.js', plugin: :redmine_dmsf, defer: true) + "\n".html_safe + javascript_include_tag('attachments_dmsf.js', plugin: :redmine_dmsf, defer: true) + if defined?(EasyExtensions) + meta = meta + "\n".html_safe + stylesheet_link_tag('easy_extensions.css', plugin: :redmine_dmsf) + end + meta end end diff --git a/lib/redmine_dmsf/patches/queries_helper_patch.rb b/lib/redmine_dmsf/patches/queries_helper_patch.rb index 21fa9e2e..2027e31b 100644 --- a/lib/redmine_dmsf/patches/queries_helper_patch.rb +++ b/lib/redmine_dmsf/patches/queries_helper_patch.rb @@ -74,7 +74,7 @@ module RedmineDmsf if item.deleted && (item.deleted > 0) tag = content_tag('span', value, class: 'icon icon-folder') else - tag = "".html_safe + + tag = "".html_safe + link_to(h(value), dmsf_folder_path(id: item.project, folder_id: item.id), class: 'icon icon-folder', From c462b72235e6b1b4aacf7363bc4529dc45d538a7 Mon Sep 17 00:00:00 2001 From: "karel.picman@lbcfree.net" Date: Mon, 15 Jun 2020 15:23:09 +0200 Subject: [PATCH 3/3] Rows expanding xix --- app/views/dmsf/_query_rows.erb | 3 ++- assets/javascripts/redmine_dmsf.js | 9 +++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/views/dmsf/_query_rows.erb b/app/views/dmsf/_query_rows.erb index 8398ce98..f1ce70b9 100644 --- a/app/views/dmsf/_query_rows.erb +++ b/app/views/dmsf/_query_rows.erb @@ -27,8 +27,9 @@ <% end %> <% query.dmsf_nodes(options).each do |node| %> <% system = node.title =~ /^\./ %> + <% id = (node.type == 'folder') ? "#{node.id}span" : "#{node.id}item" %> <% @idnt ||= 0 %> - "> + "> <%= check_box_tag('ids[]', "#{node.type}-#{node.id}", false, id: nil) unless system %> diff --git a/assets/javascripts/redmine_dmsf.js b/assets/javascripts/redmine_dmsf.js index 062f3961..a0839d33 100644 --- a/assets/javascripts/redmine_dmsf.js +++ b/assets/javascripts/redmine_dmsf.js @@ -129,9 +129,14 @@ function dmsfExpandRows(id, parentRow, url) { } }).done(function(data) { // Hide the expanding icon if there are no children - if(data.indexOf(' ' + m[1] + ' ') < 0){ + if( m && (data.indexOf(' ' + m[1] + ' ') < 0)) { + $(parentRow).removeClass('dmsf-expanded'); - $(parentRow).addClass('dmsf-child'); + + if(!$(parentRow).hasClass('dmsf-child')) { + + $(parentRow).addClass('dmsf-child'); + } } else { // Add child rows