Project

General

Profile

Patch #27024 » add-external-class-to-cf-link.diff

Go MAEDA, 2017-09-18 16:57

View differences:

lib/redmine/field_format.rb (working copy)
155 155
      def target_class
156 156
        nil
157 157
      end
158
 
158

  
159 159
      def possible_custom_value_options(custom_value)
160 160
        possible_values_options(custom_value.custom_field, custom_value.customized)
161 161
      end
......
248 248
            url = url_from_pattern(custom_field, single_value, customized)
249 249
            [text, url]
250 250
          end
251
          links = texts_and_urls.sort_by(&:first).map {|text, url| view.link_to_if uri_with_safe_scheme?(url), text, url}
251
          links = texts_and_urls.sort_by(&:first).map do |text, url|
252
            css_class = (url =~ /^https?:\/\//) ? 'external' : nil
253
            view.link_to_if uri_with_safe_scheme?(url), text, url, :class => css_class
254
          end
252 255
          links.join(', ').html_safe
253 256
        else
254 257
          casted
......
442 445
              url = "http://" + url
443 446
            end
444 447
          end
445
          view.link_to value.to_s.truncate(40), url
448
          css_class = (url =~ /^https?:\/\//) ? 'external' : nil
449
          view.link_to value.to_s.truncate(40), url, :class => css_class
446 450
        else
447 451
          value.to_s
448 452
        end
......
621 625
          value ||= label
622 626
          checked = (custom_value.value.is_a?(Array) && custom_value.value.include?(value)) || custom_value.value.to_s == value
623 627
          tag = view.send(tag_method, tag_name, value, checked, :id => nil)
624
          s << view.content_tag('label', tag + ' ' + label) 
628
          s << view.content_tag('label', tag + ' ' + label)
625 629
        end
626 630
        if custom_value.custom_field.multiple?
627 631
          s << view.hidden_field_tag(tag_name, '', :id => nil)
......
726 730
      def reset_target_class
727 731
        @target_class = nil
728 732
      end
729
 
733

  
730 734
      def possible_custom_value_options(custom_value)
731 735
        options = possible_values_options(custom_value.custom_field, custom_value.customized)
732 736
        missing = [custom_value.value_was].flatten.reject(&:blank?) - options.map(&:last)
......
772 776
    class EnumerationFormat < RecordList
773 777
      add 'enumeration'
774 778
      self.form_partial = 'custom_fields/formats/enumeration'
775
 
779

  
776 780
      def label
777 781
        "label_field_format_enumeration"
778 782
      end
test/unit/lib/redmine/field_format/field_format_test.rb (working copy)
72 72
    custom_value = CustomValue.new(:custom_field => field, :customized => Issue.new, :value => "bar")
73 73

  
74 74
    assert_equal "bar", field.format.formatted_custom_value(self, custom_value, false)
75
    assert_equal '<a href="http://foo/bar">bar</a>', field.format.formatted_custom_value(self, custom_value, true)
75
    assert_equal '<a class="external" href="http://foo/bar">bar</a>', field.format.formatted_custom_value(self, custom_value, true)
76 76
  end
77 77

  
78 78
  def test_text_field_with_url_pattern_and_value_containing_a_space_should_format_as_link
......
80 80
    custom_value = CustomValue.new(:custom_field => field, :customized => Issue.new, :value => "foo bar")
81 81

  
82 82
    assert_equal "foo bar", field.format.formatted_custom_value(self, custom_value, false)
83
    assert_equal '<a href="http://foo/foo%20bar">foo bar</a>', field.format.formatted_custom_value(self, custom_value, true)
83
    assert_equal '<a class="external" href="http://foo/foo%20bar">foo bar</a>', field.format.formatted_custom_value(self, custom_value, true)
84 84
  end
85 85

  
86 86
  def test_text_field_with_url_pattern_should_not_encode_url_pattern
......
88 88
    custom_value = CustomValue.new(:custom_field => field, :customized => Issue.new, :value => "1")
89 89

  
90 90
    assert_equal "1", field.format.formatted_custom_value(self, custom_value, false)
91
    assert_equal '<a href="http://foo/bar#anchor">1</a>', field.format.formatted_custom_value(self, custom_value, true)
91
    assert_equal '<a class="external" href="http://foo/bar#anchor">1</a>', field.format.formatted_custom_value(self, custom_value, true)
92 92
  end
93 93

  
94 94
  def test_text_field_with_url_pattern_should_encode_values
......
96 96
    custom_value = CustomValue.new(:custom_field => field, :customized => Issue.new, :value => "foo bar")
97 97

  
98 98
    assert_equal "foo bar", field.format.formatted_custom_value(self, custom_value, false)
99
    assert_equal '<a href="http://foo/foo%20bar#anchor">foo bar</a>', field.format.formatted_custom_value(self, custom_value, true)
99
    assert_equal '<a class="external" href="http://foo/foo%20bar#anchor">foo bar</a>', field.format.formatted_custom_value(self, custom_value, true)
100 100
  end
101 101
end
test/unit/lib/redmine/field_format/link_format_test.rb (working copy)
24 24
    custom_value = CustomValue.new(:custom_field => field, :customized => Issue.new, :value => "bar")
25 25

  
26 26
    assert_equal "bar", field.format.formatted_custom_value(self, custom_value, false)
27
    assert_equal '<a href="http://foo/bar">bar</a>', field.format.formatted_custom_value(self, custom_value, true)
27
    assert_equal '<a class="external" href="http://foo/bar">bar</a>', field.format.formatted_custom_value(self, custom_value, true)
28 28
  end
29 29

  
30 30
  def test_link_field_should_substitute_object_id_in_url
......
35 35
    custom_value = CustomValue.new(:custom_field => field, :customized => object, :value => "bar")
36 36

  
37 37
    assert_equal "bar", field.format.formatted_custom_value(self, custom_value, false)
38
    assert_equal '<a href="http://foo/10">bar</a>', field.format.formatted_custom_value(self, custom_value, true)
38
    assert_equal '<a class="external" href="http://foo/10">bar</a>', field.format.formatted_custom_value(self, custom_value, true)
39 39
  end
40 40

  
41 41
  def test_link_field_should_substitute_project_id_in_url
......
48 48
    custom_value = CustomValue.new(:custom_field => field, :customized => object, :value => "bar")
49 49

  
50 50
    assert_equal "bar", field.format.formatted_custom_value(self, custom_value, false)
51
    assert_equal '<a href="http://foo/52">bar</a>', field.format.formatted_custom_value(self, custom_value, true)
51
    assert_equal '<a class="external" href="http://foo/52">bar</a>', field.format.formatted_custom_value(self, custom_value, true)
52 52
  end
53 53

  
54 54
  def test_link_field_should_substitute_project_identifier_in_url
......
61 61
    custom_value = CustomValue.new(:custom_field => field, :customized => object, :value => "bar")
62 62

  
63 63
    assert_equal "bar", field.format.formatted_custom_value(self, custom_value, false)
64
    assert_equal '<a href="http://foo/foo_project-00">bar</a>', field.format.formatted_custom_value(self, custom_value, true)
64
    assert_equal '<a class="external" href="http://foo/foo_project-00">bar</a>', field.format.formatted_custom_value(self, custom_value, true)
65 65
  end
66 66

  
67 67
  def test_link_field_should_substitute_regexp_groups
......
69 69
    custom_value = CustomValue.new(:custom_field => field, :customized => Issue.new, :value => "56-142")
70 70

  
71 71
    assert_equal "56-142", field.format.formatted_custom_value(self, custom_value, false)
72
    assert_equal '<a href="http://foo/142/56">56-142</a>', field.format.formatted_custom_value(self, custom_value, true)
72
    assert_equal '<a class="external" href="http://foo/142/56">56-142</a>', field.format.formatted_custom_value(self, custom_value, true)
73 73
  end
74 74

  
75 75
  def test_link_field_without_url_pattern_should_link_to_value
......
77 77
    custom_value = CustomValue.new(:custom_field => field, :customized => Issue.new, :value => "http://foo/bar")
78 78

  
79 79
    assert_equal "http://foo/bar", field.format.formatted_custom_value(self, custom_value, false)
80
    assert_equal '<a href="http://foo/bar">http://foo/bar</a>', field.format.formatted_custom_value(self, custom_value, true)
80
    assert_equal '<a class="external" href="http://foo/bar">http://foo/bar</a>', field.format.formatted_custom_value(self, custom_value, true)
81 81
  end
82 82

  
83 83
  def test_link_field_without_url_pattern_should_link_to_value_with_http_by_default
......
85 85
    custom_value = CustomValue.new(:custom_field => field, :customized => Issue.new, :value => "foo.bar")
86 86

  
87 87
    assert_equal "foo.bar", field.format.formatted_custom_value(self, custom_value, false)
88
    assert_equal '<a href="http://foo.bar">foo.bar</a>', field.format.formatted_custom_value(self, custom_value, true)
88
    assert_equal '<a class="external" href="http://foo.bar">foo.bar</a>', field.format.formatted_custom_value(self, custom_value, true)
89 89
  end
90 90
end
test/unit/lib/redmine/field_format/list_format_test.rb (working copy)
131 131
  def test_field_with_url_pattern_should_link_value
132 132
    field = IssueCustomField.new(:field_format => 'list', :url_pattern => 'http://localhost/%value%')
133 133
    formatted = field.format.formatted_value(self, field, 'foo', Issue.new, true)
134
    assert_equal '<a href="http://localhost/foo">foo</a>', formatted
134
    assert_equal '<a class="external" href="http://localhost/foo">foo</a>', formatted
135 135
    assert formatted.html_safe?
136 136
  end
137 137

  
138 138
  def test_field_with_url_pattern_and_multiple_values_should_link_values
139 139
    field = IssueCustomField.new(:field_format => 'list', :url_pattern => 'http://localhost/%value%')
140 140
    formatted = field.format.formatted_value(self, field, ['foo', 'bar'], Issue.new, true)
141
    assert_equal '<a href="http://localhost/bar">bar</a>, <a href="http://localhost/foo">foo</a>', formatted
141
    assert_equal '<a class="external" href="http://localhost/bar">bar</a>, <a href="http://localhost/foo">foo</a>', formatted
142 142
    assert formatted.html_safe?
143 143
  end
144 144

  
test/unit/lib/redmine/field_format/numeric_format_test.rb (working copy)
26 26
    custom_value = CustomValue.new(:custom_field => field, :customized => Issue.new, :value => "3")
27 27

  
28 28
    assert_equal 3, field.format.formatted_custom_value(self, custom_value, false)
29
    assert_equal '<a href="http://foo/3">3</a>', field.format.formatted_custom_value(self, custom_value, true)
29
    assert_equal '<a class="external" href="http://foo/3">3</a>', field.format.formatted_custom_value(self, custom_value, true)
30 30
  end
31 31
end
(1-1/2)