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 |