mirror of
https://github.com/redmine/redmine.git
synced 2025-11-07 22:05:56 +01:00
Patch by Go MAEDA (user:maeda). git-svn-id: https://svn.redmine.org/redmine/trunk@23256 e93f8b46-1217-0410-a6f0-8f06a7374b81
143 lines
4.3 KiB
Ruby
143 lines
4.3 KiB
Ruby
# Redmine - project management software
|
|
# Copyright (C) 2006- Jean-Philippe Lang
|
|
#
|
|
# 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.
|
|
|
|
unless Rails.env.production?
|
|
ICON_RELEASE_VERSION = "v3.19.0"
|
|
ICON_DEFAULT_STYLE = "outline"
|
|
SOURCE = URI.parse("https://raw.githubusercontent.com/tabler/tabler-icons/#{ICON_RELEASE_VERSION}/icons")
|
|
|
|
namespace :icons do
|
|
|
|
desc 'Downloads default SVG icons'
|
|
task :download do
|
|
icons_mapping = YAML.load_file(Rails.root.join('config/icon_source.yml'))
|
|
destination_path = Rails.root.join("tmp", "icons", "default")
|
|
|
|
download_sgv_icons(icons_mapping, destination_path)
|
|
end
|
|
|
|
desc "Generates SVG sprite file default SVG icons"
|
|
task :sprite do
|
|
input_path = Rails.root.join("tmp", "icons", "default")
|
|
sprite_path = Rails.root.join('app', 'assets', 'images', 'icons.svg')
|
|
|
|
generate_svg_sprite(input_path, sprite_path)
|
|
end
|
|
|
|
desc 'Downloads default SVG icons and generates a SVG sprite from the icons'
|
|
task :generate do
|
|
Rake::Task["icons:download"].execute
|
|
Rake::Task["icons:sprite"].execute
|
|
end
|
|
|
|
namespace :plugin do
|
|
desc 'Downloads SVG icons for plugin'
|
|
task :download do
|
|
name = ENV['NAME']
|
|
|
|
if name.nil?
|
|
abort "The VERSION argument requires a plugin NAME."
|
|
end
|
|
|
|
icons_mapping_path = Rails.root.join('plugins', name, 'config', 'icon_source.yml')
|
|
unless File.file?(icons_mapping_path)
|
|
abort "Icon source file for #{name} plugin not found in #{icons_mapping_path}."
|
|
end
|
|
|
|
icons_mapping = YAML.load_file(icons_mapping_path)
|
|
destination_path = Rails.root.join("tmp", "icons", name)
|
|
|
|
download_sgv_icons(icons_mapping, destination_path)
|
|
end
|
|
|
|
desc "Generates SVG sprite for plugin"
|
|
task :sprite do
|
|
name = ENV['NAME']
|
|
|
|
if name.nil?
|
|
abort "The VERSION argument requires a plugin NAME."
|
|
end
|
|
|
|
input_path = Rails.root.join("tmp", "icons", name)
|
|
sprite_path = Rails.root.join('plugins', name, 'assets', 'images', 'icons.svg')
|
|
|
|
generate_svg_sprite(input_path, sprite_path)
|
|
end
|
|
|
|
desc 'Downloads SVG icons and generates sprite for plugin'
|
|
task :generate do
|
|
Rake::Task["icons:plugin:download"].execute
|
|
Rake::Task["icons:plugin:sprite"].execute
|
|
end
|
|
end
|
|
end
|
|
|
|
def download_sgv_icons(icons_mapping, destination)
|
|
http = Net::HTTP.new(SOURCE.host, SOURCE.port)
|
|
http.use_ssl = true
|
|
|
|
FileUtils.rm_rf(destination)
|
|
FileUtils.mkdir_p(destination)
|
|
|
|
icons_mapping.each do |v|
|
|
name = v['name']
|
|
svg = v['svg']
|
|
style = v['style'] || ICON_DEFAULT_STYLE
|
|
|
|
http.start do |h|
|
|
source = "#{SOURCE}/#{style}/#{svg}.svg"
|
|
|
|
puts "Downloading #{name} from #{source}..."
|
|
req = Net::HTTP::Get.new(source)
|
|
res = h.request(req)
|
|
|
|
case res
|
|
when Net::HTTPSuccess
|
|
target = File.join(destination, "#{name}.svg")
|
|
File.open(target, 'w') do |f|
|
|
f.write res.body
|
|
end
|
|
else
|
|
abort "Error when trying to download the icon for #{name}"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def generate_svg_sprite(input_path, sprite_path)
|
|
require "svg_sprite"
|
|
|
|
SvgSprite.call(
|
|
input: input_path,
|
|
name: 'icon',
|
|
css_path: File.join(input_path, 'icons.css'),
|
|
sprite_path: sprite_path,
|
|
optimize: true
|
|
)
|
|
|
|
doc = Nokogiri::XML(sprite_path)
|
|
|
|
doc.traverse do |node|
|
|
node.keys.each do |attribute|
|
|
node.delete attribute if ["fill", "stroke", "stroke-width"].include?(attribute)
|
|
end
|
|
end
|
|
|
|
File.write(sprite_path, doc.to_xml)
|
|
end
|
|
end
|