Feature #31531 » 0001-Change-the-quote-icon-to-filled-quote-icon.patch
app/assets/images/icons.svg | ||
---|---|---|
322 | 322 |
<path d="M7 5.03v5.455"/> |
323 | 323 |
<path d="M12 8l5 -3"/> |
324 | 324 |
</symbol> |
325 |
<symbol viewBox="0 0 24 24" id="icon--quote"> |
|
326 |
<path d="M9 5a2 2 0 0 1 2 2v6c0 3.13 -1.65 5.193 -4.757 5.97a1 1 0 1 1 -.486 -1.94c2.227 -.557 3.243 -1.827 3.243 -4.03v-1h-3a2 2 0 0 1 -1.995 -1.85l-.005 -.15v-3a2 2 0 0 1 2 -2z"/> |
|
327 |
<path d="M18 5a2 2 0 0 1 2 2v6c0 3.13 -1.65 5.193 -4.757 5.97a1 1 0 1 1 -.486 -1.94c2.227 -.557 3.243 -1.827 3.243 -4.03v-1h-3a2 2 0 0 1 -1.995 -1.85l-.005 -.15v-3a2 2 0 0 1 2 -2z"/> |
|
328 |
</symbol> |
|
325 | 329 |
<symbol viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" id="icon--reload"> |
326 | 330 |
<path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4"/> |
327 | 331 |
<path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"/> |
app/assets/stylesheets/application.css | ||
---|---|---|
1789 | 1789 |
vertical-align: middle; |
1790 | 1790 |
} |
1791 | 1791 | |
1792 |
svg.icon-svg.filled { |
|
1793 |
fill: #169; |
|
1794 |
} |
|
1795 | ||
1792 | 1796 |
svg.s20 { |
1793 | 1797 |
width: 1.25rem; |
1794 | 1798 |
height: 1.25rem; |
app/helpers/icons_helper.rb | ||
---|---|---|
21 | 21 |
DEFAULT_ICON_SIZE = "18" |
22 | 22 |
DEFAULT_SPRITE = "icons" |
23 | 23 | |
24 |
def sprite_icon(icon_name, label = nil, icon_only: false, size: DEFAULT_ICON_SIZE, css_class: nil, sprite: DEFAULT_SPRITE, plugin: nil) |
|
24 |
def sprite_icon(icon_name, label = nil, icon_only: false, size: DEFAULT_ICON_SIZE, css_class: nil, sprite: DEFAULT_SPRITE, icon_style: :outline, plugin: nil)
|
|
25 | 25 |
sprite = plugin ? "plugin_assets/#{plugin}/#{sprite}.svg" : "#{sprite}.svg" |
26 | 26 | |
27 |
svg_icon = svg_sprite_icon(icon_name, size: size, css_class: css_class, sprite: sprite) |
|
27 |
svg_icon = svg_sprite_icon(icon_name, size: size, css_class: css_class, sprite: sprite, icon_style: icon_style)
|
|
28 | 28 | |
29 | 29 |
if label |
30 | 30 |
label_classes = ["icon-label"] |
... | ... | |
69 | 69 | |
70 | 70 |
private |
71 | 71 | |
72 |
def svg_sprite_icon(icon_name, size: DEFAULT_ICON_SIZE, sprite: DEFAULT_SPRITE, css_class: nil) |
|
72 |
def svg_sprite_icon(icon_name, size: DEFAULT_ICON_SIZE, sprite: DEFAULT_SPRITE, css_class: nil, icon_style: :outline)
|
|
73 | 73 |
css_classes = "s#{size} icon-svg" |
74 |
css_classes += " filled" if icon_style == :filled |
|
74 | 75 |
css_classes += " #{css_class}" unless css_class.nil? |
75 | 76 | |
76 | 77 |
content_tag( |
config/icon_source.yml | ||
---|---|---|
209 | 209 |
svg: square-rounded-plus |
210 | 210 |
- name: toggle-minus |
211 | 211 |
svg: square-rounded-minus |
212 |
- name: quote |
|
213 |
svg: quote |
|
214 |
style: filled |
lib/redmine/quote_reply.rb | ||
---|---|---|
27 | 27 |
def quote_reply(url, selector_for_content, icon_only: false) |
28 | 28 |
quote_reply_function = "quoteReply('#{j url}', '#{j selector_for_content}', '#{j Setting.text_formatting}')" |
29 | 29 | |
30 |
html_options = { class: 'icon icon-comment' }
|
|
30 |
html_options = { class: 'icon icon-quote' }
|
|
31 | 31 |
html_options[:title] = l(:button_quote) if icon_only |
32 | 32 | |
33 | 33 |
link_to_function( |
34 |
sprite_icon('comment', l(:button_quote), icon_only: icon_only),
|
|
34 |
sprite_icon('quote', l(:button_quote), icon_only: icon_only, icon_style: :filled),
|
|
35 | 35 |
quote_reply_function, |
36 | 36 |
html_options |
37 | 37 |
) |
lib/tasks/icons.rake | ||
---|---|---|
16 | 16 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
17 | 17 | |
18 | 18 |
unless Rails.env.production? |
19 |
ICON_RELEASE_VERSION = "v3.19.0"
|
|
19 |
ICON_RELEASE_VERSION = "v3.30.0"
|
|
20 | 20 |
ICON_DEFAULT_STYLE = "outline" |
21 | 21 |
SOURCE = URI.parse("https://raw.githubusercontent.com/tabler/tabler-icons/#{ICON_RELEASE_VERSION}/icons") |
22 | 22 |
test/helpers/icons_helper_test.rb | ||
---|---|---|
71 | 71 |
assert_match expected, icon |
72 | 72 |
end |
73 | 73 | |
74 |
def test_sprite_icon_should_return_svg_with_filled_class_when_icon_style_is_filled |
|
75 |
expected = %r{<svg class="s18 icon-svg filled" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--edit"></use></svg>$} |
|
76 |
icon = sprite_icon('edit', icon_style: :filled) |
|
77 | ||
78 |
assert_match expected, icon |
|
79 |
end |
|
80 | ||
74 | 81 |
def test_file_icon_should_return_folder_icon_for_directory |
75 | 82 |
entry = stub(:is_dir? => true) |
76 | 83 |
expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--folder"></use></svg><span class="icon-label">folder_name</span>} |
test/helpers/journals_helper_test.rb | ||
---|---|---|
47 | 47 |
journals = issue.visible_journals_with_index # add indice |
48 | 48 |
journal_actions = render_journal_actions(issue, journals.first, {reply_links: true}) |
49 | 49 | |
50 |
assert_select_in journal_actions, 'a[title=?][class="icon icon-comment"]', 'Quote'
|
|
50 |
assert_select_in journal_actions, 'a[title=?][class="icon icon-quote"]', 'Quote'
|
|
51 | 51 |
assert_select_in journal_actions, 'a[title=?][class="icon-only icon-edit"]', 'Edit' |
52 | 52 |
assert_select_in journal_actions, 'div[class="drdn-items"] a[class="icon icon-del"]' |
53 | 53 |
assert_select_in journal_actions, 'div[class="drdn-items"] a[class="icon icon-copy-link"]' |
test/unit/lib/redmine/quote_reply_helper_test.rb | ||
---|---|---|
29 | 29 | |
30 | 30 |
a_tag = quote_reply(url, '#issue_description_wiki') |
31 | 31 |
assert_includes a_tag, %|onclick="#{h "quoteReply('/issues/1/quoted', '#issue_description_wiki', 'common_mark'); return false;"}"| |
32 |
assert_includes a_tag, %|class="icon icon-comment"|
|
|
32 |
assert_includes a_tag, %|class="icon icon-quote"|
|
|
33 | 33 |
assert_not_includes a_tag, 'title=' |
34 | 34 | |
35 | 35 |
# When icon_only is true |