From 3687f08653913f1531bd6107bba9b98d196d6160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Geuken?= Date: Mon, 19 Oct 2015 15:39:37 +0200 Subject: [PATCH] [ci][webui] Fix presentation of package file names in webui We have a package helper that replaces whitespaces in package names with nbsp. We also add wbr tags to long file names. With recent OBS html sanitization this broke. This commit fixes it. --- src/api/app/helpers/webui/package_helper.rb | 16 ++++++++++++-- .../views/webui/package/_files_view.html.erb | 2 +- .../test/unit/webui/package_helper_test.rb | 22 +++++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 src/api/test/unit/webui/package_helper_test.rb diff --git a/src/api/app/helpers/webui/package_helper.rb b/src/api/app/helpers/webui/package_helper.rb index 9cbb74d49ea..5fbc0391e21 100644 --- a/src/api/app/helpers/webui/package_helper.rb +++ b/src/api/app/helpers/webui/package_helper.rb @@ -54,7 +54,19 @@ def package_bread_crumb( *args ) end def nbsp(text) - return text.gsub(' ', ' ') - end + result = "".html_safe + text.split(" ").each do |text_chunk| + result << text_chunk + result << " ".html_safe + end + result.chomp!(" ") + if result.length >= 50 + # Allow break line for very long file names + result = result.scan(/.{1,50}/).join("") + end + # We just need to make it a SafeBuffer object again, after calling chomp and join. + # But at this point we know it truly is html safe + result.html_safe + end end diff --git a/src/api/app/views/webui/package/_files_view.html.erb b/src/api/app/views/webui/package/_files_view.html.erb index 5bcebf15490..7ea9c8541b6 100644 --- a/src/api/app/views/webui/package/_files_view.html.erb +++ b/src/api/app/views/webui/package/_files_view.html.erb @@ -16,7 +16,7 @@ unless @is_current_rev link_opts[:rev] = file[:srcmd5] end %> - <%= link_to_if(file[:viewable], nbsp(file[:name]).scan(/.{1,50}/).join(""), link_opts) %> + <%= link_to_if(file[:viewable], nbsp(file[:name]), link_opts) %> <%= human_readable_fsize(file[:size]) %> diff --git a/src/api/test/unit/webui/package_helper_test.rb b/src/api/test/unit/webui/package_helper_test.rb new file mode 100644 index 00000000000..43726e10c60 --- /dev/null +++ b/src/api/test/unit/webui/package_helper_test.rb @@ -0,0 +1,22 @@ +require 'test_helper' + +class Webui::PackageHelperTest < ActiveSupport::TestCase + include Webui::PackageHelper + + def test_nbsp + assert nbsp("a").is_a?(ActiveSupport::SafeBuffer) + + sanitized_string = nbsp("unsafe") + assert_equal "<b>unsafe<b/>", sanitized_string + assert sanitized_string.is_a?(ActiveSupport::SafeBuffer) + + sanitized_string = nbsp("my file") + assert_equal "my file", sanitized_string + assert sanitized_string.is_a?(ActiveSupport::SafeBuffer) + + long_file_name = "a"*50 + "b"*50 + "c"*10 + sanitized_string = nbsp(long_file_name) + assert_equal long_file_name.scan(/.{1,50}/).join(""), sanitized_string + assert sanitized_string.is_a?(ActiveSupport::SafeBuffer) + end +end